From The Great Pendragon Campaign, (5th ed I believe):
Battle of Camlann
The unique nature of this battle warrants this special table for the Gamemaster...
To start, roll 1d6 to find the foe for the first round. Each round thereafter, roll 1d6 and go that many points down the list to find the next foe.
When at the bottom of the list, go back to the top, counting each number. Since many of the troops are unique, scratch them off if they were devastated and go on to the next one.
Example: First round, the Gamemaster rolls a 4. The knights fight against Castle Guards. Next round, the Gamemaster rolls a 2, so the player knights fight against British Peasants.
Camlann Random Enemy Table
1 Arab Saracens (use Arab warrior stats)
2 Atecotti savages* (use Saxon chieftain stats)
3 British bandits (use bandit stats)...
and 45 more results after that, roughly growing in strength--"Personal Enemy" appears near the end there.
Possible hacks for this format of mass battle table:
-First, the obvious: Add more results--100 or more
-Need to pad out the chart? Several results could just be "goblin with 4 hp + number just rolled on die" or "# of goblins = # just rolled on die"
-Some results could just be: "enemy wizard casts Earthquake or Nassim's Skull Ocean, deal".
-Some results could just be "now you're fighting uphill, -1 to hit and damage for a number of fights = d4 minus your dex mod"
-Battle ends when PCs die or get to end of the table
-PCs fight enemy leader or other strategic objective once they battle through the whole table (like get past those orcs to knock down the multi-tusk elephant)
-Rather than rolling d6 to move up the table, PCs roll d4 and add either their worst dex modifier or highest fighter level to the result. If they are mounted, add the weakest mount's HD.
-Any single PC may make a wisdom check or fighter level check (roll under level on a d20) to re-roll an undesired result
These tables can also be hacked so they don't just apply to PCs trying to make their way through a big battle, but for running a whole battle, with the PCs acting as generals.
-For a short mass battle, use shorter tables (10-30 results). PCs pick a kind of troop they'd like to "lead" with. That troop type (represented by one guy of that type) starts rolling on the enemy table and fighting until s/he dies. At that point, the PCs pick another unit. Whoever has the most victories by the end of the table wins. Or, whoever wins the last battle wins (this is tactically complex: if you lead with your strongest unit, they might get worn out before the end of the table--where the enemies' strongest troops lie. But if you lead with your weaker troops, they might roll high and end up facing a foe that outmatches them.) To get real complicated, it's whoever wins the most fights plus the last battle is worth 4 fights.
Casualty figures of losing units = % casualties of losing unit = 10% x # of rounds they lasted x.
So like if they lasted 4 rounds, they took 40% casualties.
Casualty figures of winning units = 10% x number of total fights they got in before losing.
Casualty figures of units not "zoomed in" on during the battle: the winner rolling d100% -5 per "leading" fight won and the loser rolling d100% +5 per lost fight.
-If both armies are equally detailed, you could do head to head tables: two sides each have a table. Winner of each fight rolls on enemy table, first one to end of other side's table wins. When you lose, you cross that troop type off the list and your table just shrank.
-Campaign idea: by running around the sandbox and making deals with local bigwigs, fancies, and muckamucks, make your table as long as you can in preparation for upcoming mass battle. When the battle comes, PCs get to play themselves running thru the enemy table PLUS all the foes the enemy rolls as s/he attempts to slog thru the PCs' table. (For this one, the two tables could be shorter than d100, so there's time for both sides.)
-You could "recruit" terrain results onto your side's table (like the 4th result above) by choosing terrain carefully.
-A PC casting a spell with a large area of effect or large # of foes affected could turn a number of results in the enemy's next coming roll into "deal with this spell" effects according to some scaling rule like for every 20 square feet or 20 troops affected that's 1 result on the enemy's next roll. If they survive, they re-rolling on the table from where they left off.
So if you cast a rock-to-mud and it affected a 40 square foot area that'd mean the enemy rolling a 1 or a 2 would result in the unit they're leading with having to deal with how the ground is now made of mud.
-(This is kinda like building a Magic:TG deck isn't it?)
-Recruitment scaling rules for the campaign idea: every 100 troops = 1 result so a 100-result table ( would require recruiting 10,000 troops. Which seems reasonable to me, assuming the PC fighters'll be pretty high level by the time they get to the battle. Special troops (centipedetaurs, giant landsquids) could be presumed to be recruited at a level of like 1 unit of whatever size (4 giant eagles? ok) is just worth 1 result due to how mobile or powerful they are. Cavalry could be like 5-to-1, so 25 cavalry are worth one result.
-Alternate scheme: attacker is always the one rolling, defender is the one who builds the table. Depends on whether you want the game to be about building the army and choosing the terrain, etc. or PCs' experience during the battle.