The new plan I am leaning towards is this:
Arcane units no longer get free spell spheres based on the number of mana sources you control.
They can still purchase any of the spell spheres upon leveling up, assuming they have the prerequisite promotions and at least one source of the prerequisite mana, exactly the same way they could before.
(Edit: Actually, I just thought of one very thematic change. I may make it so that Creation spell spheres (at least the first level, if not 1,2, and 3) cannot be purchased through experience. It would only be available to those who were born with Affinity for the sphere. You could encourage the birth of Creation mages, however, because I would allow Creation Nodes to be constructed on Raw Mana just like the other Mana Node types. You would no longer have to rely on a lucky map placement or getting the Empyrean holy city in order to acquire the mana you need for the Towers of Divination and Mastery.)
They can also still gain free promotion picks from risking their lives in the Cave Trials in an Amurite Cave of Ancestors, which will become more valuable.
The cost of Adepts will be reduced.
Adepts will be given one first level spell for free, determined at random based on the mana sources you control, or those nearby, and based on religion.
Mages and Archmages will be randomly assigned affinity for one sphere of magic. (A quarter of them may be assigned affinity for a second sphere.) They get all of the available spells in those spheres for free. (e.g., a Wizard with Fire and Ice affinity would start with Fire 1, Fire 2, Ice 1, and Ice2, while an Archmage with Force affinity would start with Force 1, Force 2, and Force 3.)
I would remove the restriction from Govannon's Ethics so that he is able to teach magic to other Arcane units, at least at the lower tiers. Arcane Guards and Archmages would still be excluded, as they represent the restrictive Mage Guild bureaucratic hierarchies that he despises.
The Unholy Taint promotion would still make a unit a mage-equivalent for the fallen spheres. It may grant affinity for one random evil sphere of magic, if you have access to it. (An AV mage taking this promotion might supplement his original affinity with a second or third sphere, becoming a Petrarch or Decliarch through the infusion of demonic power.) This affinity would still come with free spells in that sphere. The promotion would not grant free promotions in any other sphere, but would still allow them to be purchased.
Vampirism would never grant affinity.
A Vampire who acquired his dark gift from a Governor's Manor gets no free spell promotions.
The promotion would still allow the purchase of Death, Body, Mind, and Shadow promotions when you level up while controlling the proper mana source. (It also still lets AV Vampires purchase Unholy Taint, and get an evil affinity that way.)
Those who acquire Vampirism as a gift from an older vampire learn all of the Death, Body, Mind, and Shadow magic that its Sire knows, but only if it qualifies to learn such magic anyway. (e.g., a Vampire Lord with the 3rd level in all 4 spheres could teach all of that magic with an Archmage, given a steady supply of all 4 mana types, but a Vampire Moroi could never learn the top tier spells from him.)
A Vampire Spawn would be bound to his Sire, using the same mechanic with which I bind an extra-planar Summon is bound to its Summoner. (I just realized that would make Rings of Warding effective against Vampire Spawn, which at first I thought was a problem but now I think nicely echoes the legends of how vampires cannot enter houses without permission.) I might amend the spawns name to say "Spawn of [insert Sire's name]" to help you keep track of this without worldbuilder.
(I'd have to test it to see how it works with the new Vampirism mechanic, but I believe there is a weird quirk that could proove interesting. I have noticed in the past that a summon from a Djinni seems to be treated as a summon of the Djinni's summoner instead of of the Djinni itself. That might mean that the Spawn's summons get perks from the Sire's promotions, or that the xp they earn would go to the Sire if the Sire knows Dimensional magic.)
Whenever a Vampire Spawn is slain, while his Sire lives, the Sire feeds on his soul as if he were a mere Bloodpet. This could enable a Vampire Lord to stay safe and secure in the capital while sending out waves of Moroi-Vampire Vassals on suicide missions in order to milk them for the experience needed to become the world's most powerful Lich.
The Tower of Mastery would grant a new "Mastery" promotion to Arcane units in the city. It would increase the strength of spells and allow non-heroes to access Twincast, Summoner, and Arcane. It also allows units to purchase any of the new Affinity promotions, if they already have the 3rd level promotion in that sphere and a source of mana.
Instead of Metamagic Mana, I might make the Tower of Mastery provide a source of Reagents, in case you cannot find the resource needed to upgrade Mages and Ritualists to Archmages or Profanes.
The Tower would thus not allow limitless Archmage-equivalents anymore, but would make it easier to get Archmages and would enable the 4 Archmages (and 1 Lich) that you are permitted to eventually gain Kylorin-level powers.
I changed the Enchantment 3 spell from "Enchant Spellstaff" to "Enchant Spellstaffs," causing it to grant that piece of equipment not only to the caster but to every Arcane unit in your stack.
I made all of the spell sphere promotions whose spells are simple buffs (like Blur, Haste, Shadowwalk, Regeneration, and Spellstaff) grant those buffs at random to the unit itself. This should reduce a bit of micromanagement and stop you from wasting a spell on only one unit.
I'm still trying to think of how to make the Affinity promotions boost magical strength itself. For spells that just add promotions or create buildings it just seems impossible. For direct damage spells it is difficult. I could make the promotion boost the direct damage somewhat, but it would have to apply to all spheres of magic equally, which I do not want.
The most feasible option seems to be boosting Summons by having each Affinity promotion pass itself along as a Summon Perk. Letting those most gifted in their sphere summon Einherjar with law affinity, Fireballs with fire affinity, or Water Elementals with extra water affinity seems nice. I would not want to allow any Air Elementals with Earth affinity though. I suppose the way out of this would be to use use python, even if it is not as efficient as I would like.
The model I'd have to follow is that which I use to make any Angels summoned by units with Unholy Taint become demons instead. I have Unholy Taint grant Demon Possessed as a Summon perk, and give Demon Possessed a PyPerTurn effect. (I was thinking I used def onUnitPromoted, but after looking at the code I think I recall that it does not get called for summon perks, at least not at the right point. PyPerTurn triggers when a promotion is first added, and again every turn if it is not removed.)
(Now that I am thinking about it, I may modify def effectPossessed(pCaster): for Gosea in particular, so that her mana affinity and spells shift around at random as she is taken over by different spirits.)
I was planning on applying the free spell spheres based on affinity using def onUnitPromoted, which gets called every time a unit purchases a promotion and can be forced at other times such as when a unit it first created. If I instead use <PyPerTurn>effectAffinity(pCaster) <PyPerTurn> the code will be called whenever the promotion is first applied, and then again once per turn. That could have the benefit of making sure that an archmage gets the top tier spell sphere from the dominion he mastered as a mage, and could let mages regain their favored magic after losing it to a Runewyn. The main benefit though is that the code bit of code could remove the promotion from units that I deem ineligible. That would probably mean anyone without Channeling I (or Unholy Taint, for some spheres) that does not have the associated mana as a prereq. (I was thinking of giving all of the summons a mana prereq in xml anyway, just to make them easier to find in the pedia.) I considered making it so that a caster loses its Affinity promotion if it ever losses access to the associated mana, but that might be too big a nerf.
I cannot be sure but suspect these changes might actually make magic easier for the AI to understand. The AI can use most spells just fine, but is bad at picking promotions based on what spells will be useful in the future. It is also not good at deciding which of several possible spells would be the most useful in a given moment. Giving the AI fewer possible options to consider it probably a good idea if we want it to actually use the stronger spells effectively.
I think if the goal is to reduce the outsized power of magic, then the simple solution is that no spell cast can affect more than 6 total units. As is, a maelstrom can damage a stack of 100, or a haste can move one, or a heal can heal all damaged units in it. This makes those who use magic well able to punch far above their weight class.
The goal is not to reduce the power of magic. As always, it is to try to be as close to the lore as I can while also making the game more fun.
You suggestion is not a simple solution. It is the sort of thing that would require a major rewrite of the DLL, which is beyond my skillset, or else switching those spells to sing some really ugly and slow python code instead of C++.
A few other thoughts from my current and recent games:
Blood of the Phoenix has a problem in that it doesn't just apply to units killed, it applies to units sacrificed. So I build an Alter, and my Great Prophet reappears to build a second one. I build a dancing bear, and get a new bear, I join commander, and get another commander.
Kael said he does not mind it, and neither do I.
Vampires can be made into werewolves. Seems should be one or the other.
I don't see any reason why they must be incompatible in FfH lore.
Heroes can be made into werewolves, and that goes around the can't be captured. But at the same time, it kills them. So a hero can be made into a werewolf, and the resurrected as a hero, and both be alive at the same time. But a werewolf unit isn't actually dead. So shouldn't be resurrecable.
I believe I fixed the issue of resurrecting werewolves a long time ago, but might not have released it.You should not be able to resurrect a Lycantropic hero until its wolf-form has been slain. I guess I'll need to test this.
Speaking of Resurrection, you can resurrect Duin, even if you didn't build him the first time. You can also do that with the religious heroes, if that's your state religion, and the hero was killed while on another team. But you can't resurrect a Adventurer that was on your own team. I've lost 2 Adventurers this game, and am late enough to have Life III and those aren't an option.
Keeping track of who first built a unit is difficult if not impossible. I don't personally see a problem with resurrecting hero who served another player in his previous life.
There is (now, and I thought in previous version also) a spell that should let you resurrect an Adventurer,. Limitations in game mechanics make it impossible to select which of potentially numerous Adventurers will be brought back each time Resurrect Adventurer is cast, however.
As for heroes, random thought, but I was wondering about a non-hero unit that kills a hero unit gets the hero promotion? Some reward like that seems like it'd be cool.
I don't think that should happen all of the time, or even most of the time. I would not want that to be an automatic bonus that people come to rely upon. However, as a random reward that happens perhaps one in seven such victories it could be quite fun. I think I'll try it out.
Another thought, the AI does too much attacking when the combat odds are just too low. The AI threw stack after stack at Acheron, until Acheron was over 200xp, and just kept doing it until I'd leveled up a Beastmaster enough to do the job. And that really used up the AI's resources to no gain. So now I have a level 19 dragon that isn't rebellious, so I don't have to worry about losing him.
The AI also doesn't mine the unique features, ruins, ect, as much as the player does. And so misses out on the value that can be gained from those.
Another thought, goody huts and the other features shouldn't gift a technology over the second column. Maybe cap it at 1500 research points or something like that. Finding a hut on an island and getting a 10,000 point tech out of it seems off. And a greater probability of a negative outcome from Explore Lair would nerf that a bit too.
There is not much I can do about those.
I like the idea of making arcane units unable to get all the spheres (it is a bit ridiculous having an Adept with 10-15 spheres as Amurite) but having little to no ability to influence their starting spheres seem counterintuitive. I always make a 'city mage' with Creation (once i get the Wonder for it), Earth, Spirit, and then slap on additional spheres as fitting (Law for cities producing units, Fire for border cities to support w. fireballs et cetera) but without any choice in what spheres an adept begins with i fear i may start sacrificing them right off the bat if their random spheres make a horrible composition.
I suspect it is not possible, but the optimal would be if one could only choose say 3 adept-level spheres (for example Fire, Body & Law). While you would be able to advance in the chosen spheres afterwards (as Mage and then Archmage) you would be unable to gain any additional spheres.
However, it sounds like this might not be possible, so if a semi-random selection of spheres is the only method of restricting the number and breadth of spells, i would prefer the spells to be nerfed (preferably with Cutlass' idea of a limited amount of targets for spells) and mages be made much cheaper than they are, encouraging you to have a noteable contingent of arcane units accompanying your army.
In current games, as Amurites i either create an army of mages trained in 6-10 schools or create a more traditional army with 2-4 mages supporting them (via Life, Spirit, Body, et cetera).
Yeah, those ideas are not really possible (and not as cool as the proposals I suggested above).