Usually when a siege is in place, the invading army either climbs the wall with stairs, siege towers, knock the gates down with a machine, and in recent history with cannons or some other artillery like plague bodies or trebuchet. But what I want to know is if there are other methods beside the traditional?
The most effective means of bringing down walls in the Middle Ages was to mine them. Teams of engineers would dig a tunnel under the walls and gradually remove the soil from under the foundation, replacing it with heavy wooden props to keep the walls upright while the work was being done.
At the end, the space of the mine was filled with barrels of pitch or oil, and the props set on fire. As they burned through, the wall would lose its foundations and tumble down, creating a breach for the infantry to swarm through.
Of course, the defenders would be alert to the possibility, even to the point of having listening posts underground on the friendly side of the wall to listen for the activity of the miners, and if possible, digging a countermine to send an assault force through to stop the miners. There is a semi legendary battle that took place under the walls where the mine and countermines were large enough for mounted soldiers to fight on horseback...
Mining continued to be useful for long periods after. The Battle of the Crater during the American Civil War was the result of using a massive gunpowder mine to breach a Confederate position, and during the Great War of 1914-1918, the British used mines with literally tons of high explosives to destroy large sections of German trenches. These mines were not very successful in the long run, since the deep craters prevented soldiers from rapidly crossing them and exploiting the breach.
The most common approach was to do nothing. Stand outside and wait for the people inside to slowly starve to death.
- Cut off or poison the water supply.
- Subterfuge: sneak someone inside who will open the gates for you.
- Subterfuge: sneak your whole army inside (aka Trojan horse). Perhaps they don't know you plan to invade and think your army is marching elsewhere.
- Lure the enemy army to your side with promises of better treatment, or lure the peasants to your side.
- Set it on fire! Use fire arrows launched inside if they were foolish enough to have poor defenses against fire.
- Assassinate the king/queen/lord with trickery or treachery: false parley followed by murder, etc.
- Hold the peasants outside the castle hostage and threaten to hurt them if the lord doesn't give in to demands, though most lords cared little about those peasants.
Building a ramp OVER the wall was used by the Romans. They would use local captives to minimize the chance of the beseiged city fighting back.
Then there's the offensive reverse moat, used historically by an Assyrian father-son pair of kings when beseiging large cities. They dug a large (20 ft deep) trench entirely surrounding the city that was too deep to jump into and too wide to cross. Starved them into submission.
You also forgot poisoning the water supply and choking them out by judging the winds and setting fire so the smoke blows over the castle.
Saying magic is acceptable really opens up almost too many options... You may want to at least limit what you could with magic, since here are just a few thing a sorcerer can do:
- Simply melt their stone walls, causing liquid rock (not even necessarily molten, merely liquid) to flood the city.
- Teleport all the soldiers in the city, miles away, and simply walk in.
- Teleport the entire attacking army into the city, and then kill the guards.
- Simply fly over the walls.
- Summon all sorts of nasty things to wreak havoc within the city walls.
- Summon a plague to wipe out the castle.
- Even move the entire castle somewhere else.
The issue with magic, is that it does everything by magic. There is rarely any real explanation to its mechanics or limitations, so when besieging (or storming) a city the possibilities really are limited merely by your imagination.
Without magic, you do have some things that are also really easy to do, but these would work more like a siege then just storming the city.
- Block all trade to the city, starving everyone out (you could easily just offer to pay more to the merchants if they don't sell to this city, no soldiers lost, but may be even more expensive then a siege
- Send some of your really sick citizens (think bubonic plague or yellow fever sick) to them, a medieval form of germ warfare.
- Poison their water supply.
- If you are liberating from a tyrant, you just need to encourage the citizens, and help them stage a coup. (DANGER: May result in another enemy that uses your own money against you!)
Historically, the most creative ones I have ever heard from are the ones that @Isaac as mentioned, building a bridge using the citizens of the city to prevent casualties; and a reverse moat, making trade impossible.
One method not already mentions is the screw drill. Think of a rolling structure that would normally carry a battering ram but instead of swinging back and forth, the log with the metal tip was shoved into a gap between stones and rotated, prying the stones apart.
While this was used historically, I don't think it was used for very long because it was very slow.