1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

The Firebow

Discussion in 'Fall Further' started by readercolin, Aug 8, 2009.

  1. readercolin

    readercolin King

    Joined:
    May 7, 2009
    Messages:
    604
    In regular FFH, the firebow is given strength of 5/4, can use bronze and iron, and starts with fire 1 and channeling 2. This prevents him from learning any teir 1 magic spells except those that govornnan teaches them, other than fireball. However, it was given defensive strength of 4 as opposed to most longbow's 6 because of its ability to learn stoneskin.

    FF changed this. In FF, the firebow lost channeling 2 and gained an ability called ignite. Ignite allows the firebow to summon a fireball. However, its strength was kept at 5/4. This means that the firebow can no longer learn spells like stoneskin, hope, summon specter, etc. Govornnan can still teach level 1 spells, but aside from being able to cast fireball, the firebow is essentially a wimpy excuse for a longbowman, and no longer the special purpose arcane defender that he was designed to be in regular FFH (an the only real special unit that the amurites have - Govornnan doesn't count, and wizards are... well... is spellstaff really THAT useful on all wizards?)

    So I ask - why was the firebow denied channeling 2? Is it because it gives an xp limit that it can train to? This is a simple problem to solve - channeling 2 doesn't allow free xp unless the unit also has either channeling 1 or divine, or make channeling 2 only allow xp to arcane or divine units. Is it because having units with channeling 2 other than mages are OP? I find this not likely, look at vampires if you want a reason why... Or is it because they felt that allowing a firebow to learn force 2 would make it far to OP? If this is the case, I would like to remind everyone that any level 2 spells taken are at the expense of another promotion. And while getting force 2 and archery 3 would give the firebow ranged attack distance of 2 with a strength of 14, it still cannot kill from range (tested it, damage limit is 95%), AND it requires that the firebow get force 2, drill 3, and archery 3, for a total of 7 promotions, and its still squishy in regular combat (and trust me, you would still DEFINATELY want to take stoneskin).

    Is there any real reason why the firebow got changed? Is it really considered that OP a unit compared to vampires, fireballing golem armies, or the bannors great crusade that they had to be nerfed? And this for a race that is generally considered so gimped that more people try to buff them than the dovollio? What gives?

    -Colin
     
  2. Iceciro

    Iceciro Special Ability: Decimate

    Joined:
    Jul 12, 2006
    Messages:
    1,944
    Location:
    in ur empire, takin ur cities
    Have you played with the new Amurites anytime recently, sir? The ability for their entire army to learn random spells is freakin' awesome, and while Wizards are just a bit cheaper than standard mages and get Spellstaff, Battlemages ROCK YOUR SOCKS OFF.
     
  3. WarKirby

    WarKirby Arty person

    Joined:
    Jul 13, 2006
    Messages:
    5,317
    Location:
    Glasgow, Scotland
    I've always found the firebow odd in general. I didn't think there was anything wrong with them being able to get magic, but I found it odd that ONLY them could really get second level magic. It always seemed strange.

    I'm thinking, they should be given Earth I, and II, and Enchantment II as free promotions. And keep the low defensive strength. But No channeling promotions. Having them able to summon spectres and fireballs, etc, does make them a bit too powerful, I think. As does learning Force II. Force II is supposed to represent a "magic missile" type spell, and doesn't make logical sense to stack with an existing ranged attack. It's only meant to be taken by units which have no ranged attack to begin with (mages)

    If they don't already have it, a higher :hammers: cost would be appropriate too


    Related, I think Enchantment II needs some looking at, in general. I'd votre to remove the defensive buff, and instead have it increase ranged attack strength. It'd be nice if it could have a chance to create smoke/fire in tiles that you attack, too. Would probably need a bit of python
     
  4. Breez

    Breez King

    Joined:
    Oct 17, 2008
    Messages:
    924
    Agree

    In no world can I see that as "nice" the last thing I want is my defenders burning down my forests.

    I see the "realism" angle but I think the people you are shooting at would also try to put that out so they were not standing in a forest fire.
     
  5. readercolin

    readercolin King

    Joined:
    May 7, 2009
    Messages:
    604
    Enchantment 2 is fire arrow - not only is it a defensive bonus, but it is an offensive one as well. As for force 2 - wouldn't it make sense that someone who has some knowledge of magic could put magical force behind his arrow? Personally, I see the force 2 spell more as kind of a jedi kind of thing - pick up something with magic and chuck it at your opponent. Magic missile would be more something that I would put into the metamagic sphere rather than the force sphere, as I feel that a magic missile is a consolidation of pure magic which is then flung at the target. It isn't a powerful spell, or anything, because I would see it more as a very low level spell. Heck - I would rather magic missile be a level 1 metamagic spell than a level 2 force spell. It would at least make metamagic useful... (floating eye, easily replaced by hawks, is a rather worthless spell imo). Force 2 being a throwing something, or accelerating something in the area at the opponent, that makes more sense than magic missile as to what the spell actually is. So putting force 2 as pushing the arrow and imparting extra energy on that makes perfect sense to me.

    As for the whole army knowing random spells - that is one of the most worthless mechanics that I've come across in a long time. Even with having 8 mana nodes, each of a different type, more than half my army didn't learn any spells. And those that did... well... most of them were rather worthless for the unit that they were on. On top of all that - the ability to learn a random level 1 spell is absolutely useless for the amurites. Look at the amurite strategy thread and see what was stated in one of the posts - Strength of Will 20 turns after getting sorcery. Arcane lore a few turns after getting sorcery (1 great sage bulbs most of it). And this was on epic speed. This means that within 50 turns of getting knowledge of the ether (basically, the time required to tech sorcery, as divination gets bulbed by another GS, and then you just need a city to build govornnan), you have govornnan. Who then teaches every level 1 spell that he learns. Now, they gave a chance of giving a random level 2 and a chance of learning a random level 3 spell, that would actually be useful. But govornnan makes random lvl 1's pointless. The only other thing that would be useful would be to vastly buff the chance to get a random spell to where you actually see them, or get a chance to get multiple.

    Now, as for battlemages. Don't get me started. If you REALLY think that giving them a special teir 4 limited quantity unit gives them power to make up for being rather useless in most other ways, you need to get your head examined. Rather than giving them a "special" t4, limited quantity unit, why don't you give them a way to be competitive BEFORE that. You know... when it still actually matters. Before you get steamrolled. Instead of giving them random spells, special t4 units, and other useless things like that, give them something that makes them special and actually VALUE magic, like they're supposed to. Give them more units with channeling 2 than the firebow. Let them have battlemages, AND archmages (4 of each), or remove the national unit cap. Heck - if you find that too powerful make the amurites require being level 7 to upgrade. Being able to have unlimited archmages would make it worth it.

    Now, if you find the ability for much of an army to be wizards with weapons OP, then you can find other ways to limit them. However the Amurites are a race of magic users where a citizens standing depends upon their magical ability, and most Amurites know some spells. It makes more sense to me to give them more magic users amongst them, and most of their units spend more time learning magic than weapons. And the chance for a random spell that they know is... useless. Edit: Also, a wizard is one man who knows magic. A firebow (or any other unit) is a unit of troops who know how to use their weapons, lead by their captain. As they are a unit, and a spell is cast by one man, everyone in the unit doesn't need to know the spell, just one, or just the captain. And with the amurites standing depending upon magical ability, it would make sense for the captains of troops to have more ability than the troops, and therefore knowing more spells. The difference between the troops and the wizards is the troops can know combat abilities, but don't gain XP passively, while the wizard gains troops passively, but doesn't know any combat abilities other than combat.

    -Colin
     
  6. WarKirby

    WarKirby Arty person

    Joined:
    Jul 13, 2006
    Messages:
    5,317
    Location:
    Glasgow, Scotland
    They can try, but a massive volley of arrows makes a lot of little fires. trying to put it out aint going to do much.

    Consider. What if flaming arrows was a 1 turn effect. Giving a pretty significant boost to ranged damage, and setting smoke/fire in the target tile. It would be a gamble as to whether or not to use it on the defense, but you wouldn't have to, thanks to it wearing off after one turn. On the attack, it would be excellent for both shooting enemies and pillaging at the same time.
     
  7. WarKirby

    WarKirby Arty person

    Joined:
    Jul 13, 2006
    Messages:
    5,317
    Location:
    Glasgow, Scotland
    Vehem called it "Force Bolt" in a recent changelog. It is a bolt of magic energy. seriously, that's the intended use here. It's not designed to stack with archers.

    Calm down a bit.. jeez.

    Some spells aren't incredible, but Courage is useful for keeping your army on the move. Enchanted blade is truly exceptional if you use melee units. Haste is similarly good. The point of random lv1 spells is to give them a bit of usefulness before you get govannon. Arcane Lore is a long way. Sure you can beeline it. Enjoy getting beaten to every religion and early wonder along the way

    More archmages might be a nice idea. But an archmage is an extremely powerful unit. I think an unlimited amount of them might be a bit much..
     
  8. Darksaber1

    Darksaber1 Secret Emperor

    Joined:
    Jun 5, 2008
    Messages:
    2,220
    Location:
    Where you least expect me
    Perhaps sometihng like 6-8 of them? Or allowing more National Units (Like Phalanx) to learn more spells, peharps even lvl 3?
    That is one of the thing I like in Orbis-Amurite "Champions" can learn lvl 2 spells, and use specialized mages for siege.
     
  9. Merddyn

    Merddyn Scholar of the Arcane

    Joined:
    Oct 23, 2008
    Messages:
    175
    Location:
    Somewhere Far Beyond Your Reality
    Personally, I've always thought that the Amurites should A: have a unique unit adept/mage with more strength, preferably magical but perhaps physical, than the normal. or B: (The option I prefer, myself) have a unique unit adept/mage that's the same as what they already have (ie an adept and wizard essentially) but have them able to upgrade to any tier 2 or higher unit (except maybe the disciple line, as that seems counter-intuitive to me) and still maintain their spell promotions and such. That way, the Amurites could have basically every unit in their army able to cast and learn tier 1/2 spells, but they have to work at it, especially since adepts take notably longer to build than other units of the same tier. I SUPPOSE you could try and abuse the system and use that so you can get passive experience gain and whatnot to get your units to combat 5, though. -_-; But, at least it'd cost both gold and hammers to do.

    Another option is to make it so their mages could attach to units like the old commanders and impart their magical promotions to the unit; that way you could have your units have tier 2 spells, but at the expense of having had to build two units for it, AND being unable to give them combat 5.

    Alternatively, we could use the current commander system to make it so your arcane units can command other units, and impart their spell-casting ability on their minions, at the expense of their casting ability while leading. That way, you could make it so more of your units have casting ability, at the expense of it being weaker than if the mage himself had cast it.

    Personally, I prefer options B through D, because it gives casting ability to their other units, while still requiring them to go down the arcane line for magic and maintaining the usefulness of other units. Give me some more time, and I may be able to come up with some other ideas. (Though I think someone else came up with most of these originally. I do a lot of lurking and forgetting here.)

    Edit: I will say one thing though, I kind of have to agree on the semi-uselessness of getting the random tier 1 spells. I mean, yes, it is kind of useful, even AFTER getting Govannon (just build a ton of mana nodes of the types he can't teach), but overall, it's too unreliable. I actually get only somewhere between 10-15% of my units to actually learn anything out of it, (and I have the Catacomb so not actually having the wizard's hall is kinda unlikely). I think that for it to be really useful the likelyhood should be increased a fair bit more... Perhaps a 10% chance of learning any spell per mana source you have? (So from the start you have a 30% chance of any unit learning something, from palace mana, 10 mana sources (even of same type, I'd think) is 100%... And perhaps you could make it so in the unlikely event of say, 15 sources you get a 100% chance of 1 and 50% chance of a second?)

    (Also, random note: Darksaber, I somehow doubt you live in Easter Standard time; might want to throw that n in there)
     
  10. xienwolf

    xienwolf Deity

    Joined:
    Oct 4, 2007
    Messages:
    10,589
    Location:
    Location! Location!
    He just always thinks of chocolate bunnies...


    It wouldn't be too hard to make it so that Amurite Arcane units all have a command capability and they impart upon their followers whatever spells they personally have access to. Then have their own casting turned off, and give their followers a chance to miscast and a negative modifier to resistance (easier for opponent to resist their spell attacks), as well as some penalty promotion granted to their summoned units which makes them weaker. Don't think you can do anything other than the miscast chance to make the spell buffs weaker from the minions, but you don't really NEED to weaken absolutely everyhing, that is what the miscast chance is there for.
     
  11. WarKirby

    WarKirby Arty person

    Joined:
    Jul 13, 2006
    Messages:
    5,317
    Location:
    Glasgow, Scotland
    Mentioned this a few times before in the team forum, but I should reiterate.

    I really think we're in need of an iTargetsLimit for stack/area effect spells. Both positive and negative. I find the lack of this severely limits what we can do with magic. Would be good to have such a thing apply to positive spells, too. For example, I've always found it a bit odd that one single adept can enchant the swords of hundreds of thousands of troops, in a single turn. Having limits on the number of affectable targets, would make it much more worthwhile to have multiple casters, and thusly would give the amurites an edge. As is, the free lv1 spells for units aren't too helpful because once you've got one, you can mostly just cast it on all your units at once.

    Having target limits would make a lot more offensive spells possible, too.

    The ability to pass on spells to one's minions, wouldn't really have a lot of utility that I can see under the current system, except for attack spells like fireballs. With a target limit, minions could have a smaller possible range of targets they can hit at once. But there would still be great utiulity in teaching an army of swordsmen to enchant their own blades, rather than relying on one adept to do it.

    It would also give an area for greater distinction between mage levels: Higher channeling promotions could provide global increases to your target limit. So perhaps an adept could only enchant 3 blades per cast,, a mage could do 5, and an archmage 8 or so.
     
  12. Kjara

    Kjara Warlord

    Joined:
    Aug 24, 2008
    Messages:
    164
    How would the above work with the current spell maintenance system? Currently once you cast for example dance of blades, your adept can maintain it on the entire army while hes in the tile. Would you instead somehow want to tie that adept to the 3 dance of blades he cast(and if we did this, we could make it so that he doesn't have to stay in the same stack as them--we would need a way for him to cancel those so that he could add it to new units if he wanted though).

    Not sure how feasible this would be, but besides making things way more complicated than they should be I'd love to see a magical energy system for spellcasters-- Depending on their promotions/level, they would have a certain power pool. Spells would cost x power/target, as would maintaining the more temporary spells. Say a level 1 adept has a magic rating of 2, this could be enough to maintain/cast 4 temporary level 1 spells(i.e. dance of blades), or enough to cast 2 permanent level 1 spells(i.e enchanted blade), could increase by .5 per level or something, as well as increasing by 2 for channeling 2 and 4 or 5 for channeling 3.

    Edit: could even add promotions if you wanted to focus on having more spells rather than just taking combat for more powerful spells. This would also make it possible to have high level archmages have the option to summon more than one level 2 summon rather than always just using the level 3 summons.

    Edit2: of course this would add overhead in tracking "creators" of promotions like we currently do for summons
     
  13. readercolin

    readercolin King

    Joined:
    May 7, 2009
    Messages:
    604
    Sorry if I came off a bit too strong. But the Amurites, the inheritors of the power of the magic of patria, should be a bit more... magical. As it is they really don't have anything that really shows off that they are powerful magicians aside from all its leaders having the arcane trait (note, it isn't specific to the amurites though... on the other hand, what about giving the amurite civilization the arcane trait and the leaders a different second trait? After all... non arcane amurites aren't realy amurites). I've been trying to figure out some way to buff them without making them OP and still stick to their lore. At the moment, I feel they are only slightly better than the dovollio. I would like to bring them up to the same level as the elves or the vampires though (trying to get them to that level without making them seriously OP is tough though - part of the difficulty though is in the current nature of magic. If its magic, everyone can use it, and some civs that are magic heavy like the balsferas under keyleen are already strong enough that they don't need a buff. Also, the numerous other enhancements to other parts of the game make magic proportionately weaker which in turn makes the amurites proportionately weaker.)

    As for force 2... i guess we have different visions of it (that being said though... it is a bit wimpy... if it could be combined with archery units I can see where it might become very strong but the only reason to take it at the moment is because it still comes like archery and allows the mage to use it and cast a spell in the same turn - though atm the mage can still cast and attack in the same turn).

    Archmage limit. Unlimited might be a bit too much. But remember that after 20 xp all further xp has to come from combat, and they require level 6 (26 xp). If you were to change it to level 7, required, then it would be alot easier to say that unlimited archmages wouldn't be OP, as you have to get every unit up to 36 xp (or was it 37?). That or just allow them to have a higher national limit, or the regular national limit of 4 for archmages and a national limit of 4-8 for battlemages, and allow them to upgrade to either.

    Lastly, for the target limits, that would make the amurites magical mastery alot more powerful, as no one else really spams mages the same way they do. Another thing for the enchanted blade and stuff, you could instead make enchanted blade a 1 time only cast, but it summons up a permanent magical weapon (or maybe allow a few more casts, but not many) that can be picked up by other units. Maybe make an enchanted bronze sword or something that gives +1 strength and +20% strength, but dissappears once the unit gains iron weapons (but allow units with enchanted weapons the option to NOT upgrade their metal).

    -Colin
     
  14. Valkrionn

    Valkrionn The Hamster King

    Joined:
    May 23, 2008
    Messages:
    14,450
    Location:
    Crestview FL
    You do know that after you build the Cave of Trials, the Amurites can gain random tier 2 spells in addition to tier 1? Makes the whole setup quite a bit more useful, especially after Govannon.
     
  15. readercolin

    readercolin King

    Joined:
    May 7, 2009
    Messages:
    604
    Yes, but it is random teir 2. And random teir 2 generally means that I get poison blade or enchantment 2 on my axman/champion, if I get anything at all. Again, I've played through and even with half the mana (1 source of each) on the list, I end up with about 1/4 of my army getting a spell, and most of them not useful.

    -Colin
     
  16. Breez

    Breez King

    Joined:
    Oct 17, 2008
    Messages:
    924
    but it is a massive number of people still running around helping the wounded...

    I think a one shot spell could be interesting, but I would rather see both. A passive ranged buff as well as a single turn buff that can wreak havoc.
     
  17. WarKirby

    WarKirby Arty person

    Joined:
    Jul 13, 2006
    Messages:
    5,317
    Location:
    Glasgow, Scotland
    Looking at the python:

    It appears to roll a random number up to 100 as a base, then compares to see if that number is lower than:

    10+ (totalnumberofmana * 5) (for a wizard's hall)

    So theoretically, if you have 18 total mana resources, every new unit you build will get a free spell. Do you think this needs adjusting?


    When you have a cave of ancestors AND a wizard's hall, it adds second level spells to the list, and gives you a base of 20 instead of 10. so you'd only need 16 mana to reach 100% chance.

    As far as I can interpret it though, it seems each unit can only ever recieve one spell on creation. Maybe I'm reading it wrong. My python knowledge is kind of slim.

    Can anyone clarify this ?

    The code:

    Spoiler :
    Code:
    if city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_WIZARDS_HALL')) > 0 and not city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_CAVE_OF_ANCESTORS')) > 0:
    			if (unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_MELEE') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_ARCHER') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_MOUNTED') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_RECON') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_ADEPT') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_DISCIPLE')):
    				lPromoList = []
    				iAirNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_AIR'))
    				if iAirNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_AIR1']
    				iBodyNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_BODY'))
    				if iBodyNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_BODY1']
    				iChaosNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_CHAOS'))
    				if iChaosNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_CHAOS1']
    				iDeathNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_DEATH'))
    				if iDeathNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_DEATH1']
    				iEarthNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_EARTH'))
    				if iEarthNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_EARTH1']
    				iEncNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ENCHANTMENT'))
    				if iEncNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_ENCHANTMENT1']
    				iEntNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ENTROPY'))
    				if iEntNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_ENTROPY1']
    				iFirNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_FIRE'))
    				if iFirNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_FIRE1']
    				iIceNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ICE'))
    				if iIceNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_ICE1']
    				iLawNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_LAW'))
    				if iLawNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_LAW1']
    				iLifNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_LIFE'))
    				if iLifNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_LIFE1']
    				iMetNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_METAMAGIC'))
    				if iMetNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_METAMAGIC1']
    				iMinNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_MIND'))
    				if iMinNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_MIND1']
    				iNatNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_NATURE'))
    				if iNatNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_NATURE1']
    				iShaNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SHADOW'))
    				if iShaNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_SHADOW1']
    				iSpiNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SPIRIT'))
    				if iSpiNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_SPIRIT1']
    				iSunNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SUN'))
    				if iSunNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_SUN1']
    				iWatNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_WATER'))
    				if iWatNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_WATER1']
    				iDimNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_DIMENSIONAL'))
    				if iDimNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_DIMENSIONAL1']
    				iCreNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_CREATION'))
    				if iCreNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_CREATION1']
    				iForNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_FORCE'))
    				if iForNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_FORCE1']
    				sPromo = lPromoList[CyGame().getSorenRandNum(len(lPromoList), "Pick Promotion")-1]
    				if CyGame().getSorenRandNum(100, "Spell Gain Check") < 10+((iAirNum + iBodyNum + iChaosNum + iDeathNum + iEarthNum + iEncNum + iEntNum + iFirNum + iIceNum + iLawNum + iLifNum + iMetNum + iMinNum + iNatNum + iShaNum + iSpiNum + iSunNum + iWatNum + iDimNum + iCreNum + iForNum)*5):
    					unit.setHasPromotion(gc.getInfoTypeForString(sPromo), True)
    		elif city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_WIZARDS_HALL')) > 0 and city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_CAVE_OF_ANCESTORS')) > 0:
    			if (unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_MELEE') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_ARCHER') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_MOUNTED') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_RECON') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_ADEPT') or unit.getUnitCombatType() == gc.getInfoTypeForString('UNITCOMBAT_DISCIPLE')):
    				lPromoList = []
    				iAirNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_AIR'))
    				if iAirNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_AIR1', 'PROMOTION_AIR2']
    				iBodyNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_BODY'))
    				if iBodyNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_BODY1', 'PROMOTION_BODY2']
    				iChaosNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_CHAOS'))
    				if iChaosNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_CHAOS1', 'PROMOTION_CHAOS2']
    				iDeathNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_DEATH'))
    				if iDeathNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_DEATH1', 'PROMOTION_DEATH2']
    				iEarthNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_EARTH'))
    				if iEarthNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_EARTH1', 'PROMOTION_EARTH2']
    				iEncNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ENCHANTMENT'))
    				if iEncNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_ENCHANTMENT1', 'PROMOTION_ENCHANTMENT2']
    				iEntNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ENTROPY'))
    				if iEntNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_ENTROPY1', 'PROMOTION_ENTROPY2']
    				iFirNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_FIRE'))
    				if iFirNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_FIRE1', 'PROMOTION_FIRE2']
    				iIceNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_ICE'))
    				if iIceNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_ICE1', 'PROMOTION_ICE2']
    				iLawNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_LAW'))
    				if iLawNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_LAW1', 'PROMOTION_LAW2']
    				iLifNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_LIFE'))
    				if iLifNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_LIFE1', 'PROMOTION_LIFE2']
    				iMetNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_METAMAGIC'))
    				if iMetNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_METAMAGIC1', 'PROMOTION_METAMAGIC2']
    				iMinNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_MIND'))
    				if iMinNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_MIND1', 'PROMOTION_MIND2']
    				iNatNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_NATURE'))
    				if iNatNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_NATURE1', 'PROMOTION_NATURE2']
    				iShaNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SHADOW'))
    				if iShaNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_SHADOW1', 'PROMOTION_SHADOW2']
    				iSpiNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SPIRIT'))
    				if iSpiNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_SPIRIT1', 'PROMOTION_SPIRIT2']
    				iSunNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_SUN'))
    				if iSunNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_SUN1', 'PROMOTION_SUN2']
    				iWatNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_WATER'))
    				if iWatNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_WATER1', 'PROMOTION_WATER2']
    				iDimNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_DIMENSIONAL'))
    				if iDimNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_CREATION1', 'PROMOTION_CREATION2']
    				iCreNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_CREATION'))
    				if iCreNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_FORCE1', 'PROMOTION_FORCE2']
    				iForNum = pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MANA_FORCE'))
    				if iForNum > 0:
    					lPromoList = lPromoList + ['PROMOTION_DIMENSIONAL1', 'PROMOTION_DIMENSIONAL2']
    				sPromo = lPromoList[CyGame().getSorenRandNum(len(lPromoList), "Pick Promotion")-1]
    				if CyGame().getSorenRandNum(100, "Spell Gain Check") < 20+((iAirNum + iBodyNum + iChaosNum + iDeathNum + iEarthNum + iEncNum + iEntNum + iFirNum + iIceNum + iLawNum + iLifNum + iMetNum + iMinNum + iNatNum + iShaNum + iSpiNum + iSunNum + iWatNum + iDimNum + iCreNum + iForNum)*5):
    					unit.setHasPromotion(gc.getInfoTypeForString(sPromo), True)
     
  18. readercolin

    readercolin King

    Joined:
    May 7, 2009
    Messages:
    604
    This is correct. You can only get 1 promotion of level 1 if you have a wizards hall, or 1 level 1 or level 2 promotion if you have a wizards hall AND a cave of the ansestors (but none if you have only the cave of the ansestors). This means that upon creation a unit can only get 1 spell, period, end of story. And if you have a wizards hall, you can only get 1 level 1 or level 2 promotion. If you change it from being
    Code:
    if(gc.getInfoTypeForString('BUILDING_WIZARDS_HALL')) > 0 and not city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_CAVE_OF_ANCESTORS')) > 0:
    
    and then 
    elif city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_WIZARDS_HALL')) > 0 and city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_CAVE_OF_ANCESTORS')) > 0:
    
    to making it two seperate if statements
    Code:
    if(gc.getInfoTypeForString('BUILDING_WIZARDS_HALL')) > 0 and not city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_CAVE_OF_ANCESTORS')) > 0:
    
    and 
    if city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_WIZARDS_HALL')) > 0 and city.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_CAVE_OF_ANCESTORS')) > 0:
    
    you would get one chance to gain a tier 1 spell and one chance to gain a tier 1 or a tier 2 spell. If you were to modify the second set to not add level 1 promotions to the list, you would have 1 chance to gain a tier 1 spell and one chance to gain a tier 2 spell. Note - the code I gave is an example, you may need to modify it slightly to get it to work.

    Another problem (only apparent with adepts) is that if you have say 2 fire nodes, the adept would automatically start out with fire 1. But when this check goes through, it doesn't see whether or not the adept would already have that promotion, and if you would it doesn't then decide to give you a different spell, it just gives you that spell that you already had and then you don't see that you got a random spell, instead it shows as a faliure (making building adepts to get free spells useless if you double up on mana nodes to guarantee getting a level 1 spell. You then have a 50% chance of getting a level 2 spell or getting a level 1 spell you would get anyways, if the check passes in the first place).

    The only question I have is if 'Bonus_Air_Mana' counts "do you have the bonus? if yes, 1" or does it say "How many air mana do you have? if yes, iAirNum += number of air mana sources". If its the first case, you need 18 different sources of mana in order to guarantee getting a level 1 spell, or 16 different sources of mana in order to guarantee getting a level 1 or level 2 spell. If its the second case, you need 18 sources of mana to guarantee getting a level 1 spell, or 16 to guarantee getting a level 1 or level 2 spell.

    Having every unit get a chance to get 1 spell of each level isn't really that strong. If instead a check were run for the mana sources individually (say give it 20+number of mana nodes*10, per spell - numbers subject to modification of course) and you would then have the chance to get no spells at all, or fire 2, earth 2, and force 2 on a firebow, as well as a few level 1 spells, that might make the whole effort worth it. It would also bonus you if you if you were stacking a specific kind of mana, so if you were stacking death and had 4 death nodes, it would be significantly more likely that your army knows how to cast death spells, or if you were stacking law mana because of a giant empire, and had say 6 law mana, your units would have an 80% chance to be able to summon a host of that E thingy, and most would be able to cast loyalty as well. On the other hand, having a higher base chance means that if you were trying to get 1 of every kind of mana node, your units would end up with several promotions from several mana types, with some getting many promotions and some getting none. It would also scale much better with having fewer mana sources - an area that the amurites really need help with.

    Another option would be to run the check multiple times. The first time, it would give the unit say 30+10*mana nodes, the second time 20+5*mana nodes, the third time 10+2*mana nodes, and a fourth time of 1*mana nodes. This would vastly improve the chance that the unit would get at least 1 spell (as with just starting mana, it would have a 60% chance to get a spell), but significantly reduce the chance that it would get a second (you would need 16 mana nodes to guarantee a second spell), a very slim chance to get a 3rd spell (you would need 45 mana nodes to guarantee a spell - not likely), and an almost non-existant, but still possible chance of getting a fourth spell (you would need 100 mana nodes to guarantee a spell - err... haven't you already won the game by this point?). If you made it so that it ran each check, even if it failed the one before, you would also get 4 chances to get a spell, vastly increasing the chance that you will get at least 1, maybe 2 spells.

    As the cave of the ansestors still gives out bonus xp depending upon how many different sources of mana the player has, it would still be to the players advantage to get many different kinds of mana. However, under either system if it counted the total number of mana nodes and not just whether you have at least 1, it would also reward the player for stacking mana, making either method of playing viable (with the second option being rather discouraged, despite its uses, under the current system).

    As to any worries about increasing the nubmer of python checks, because it only runs once per unit built, the maximum number of times the first can run is 21*the number of amurite cities in existance. The maximum number of times the second can run is 4*the number of amurite cities in existance. And rarely do the amurites have many cities all cranking out a unit a turn when they have both wizards hall and cave of the ansestors.

    A final option that would make random spells useful is add in a check to see if it has both cave of the ansestors and wizards hall, and then if the unit being built is an arcane unit and give it a 1*number of mana nodes (or 1/2*number of mana nodes - just make sure in this case its a double not an int), chance to gain 1 level 3 spell. This would make it very rare, but possible, that a newly built adept after sorcery would be able to get a level 3 spell, but have it be a much higher chance if the amurites control alot of mana nodes.

    -Colin

    Edit: Several edits made to clarify what I ment in reference to the code.
     
  19. WarKirby

    WarKirby Arty person

    Joined:
    Jul 13, 2006
    Messages:
    5,317
    Location:
    Glasgow, Scotland
    Some thoughts then:

    Rather than running all those checks, which seems like an inefficient solution, how about just adding mana to the list multiple times. ie, Law I and II would be added to the list once for every law mana you have. So if you have one fire and 2 law mana, the list would be

    FireI
    Fire II
    Law I
    Law II
    Law I
    Law II

    thus significantly increasing the probability of getting spells from spheres where you have more mana.

    Obviously, one spell only isn't much use either, so some method of giving more than one spell is needed. I'm thinking perhaps, run one check for every two mana you have (total).

    The next problem, is being given promotions you already have. I'm trying to think of an elegant solution to this.. Considering it would be in a loop, the simple solution seems to be adding 1 to the index, and then doing nothing. thus ensuring that the loop is run once more. This would in essence, try again every time you get something you already have. But it could lead to bad luck situations where you're stuck recieving something you already have, repeatedly, and the turn could take ages to complete.

    Perhaps the solution is to give the unit a predefined number of possible chances. Say... 5. Meaning a unit could theoretically learn up to 5 spells on creation, but possibly end up with none.

    Key design objectives for the spell, as I see

    1. Give amurite units the ability to learn a variable number of free spells on creation.
    2. Incorporate multiples of single mana types somehow, to give players influence over what spells they get.
    3. Avoid "wasting" free spells, by giving something the unit starts with naturally.
    4. Avoid situations where an infinite loop, or even just a Really Long Loop, could possibly occur
    5. Possibly: make lv1 spells more common than lv2. And maybe even add lv3 spells as an uncommon/rare result.
     
  20. readercolin

    readercolin King

    Joined:
    May 7, 2009
    Messages:
    604
    about the wasting spells - to make sure that you don't waste it, we need to check to see if it recieves the bonus spell from having multiple mana types before or after this check is run. Putting this after, makes it easy to check.
    Code:
    To do this, you need two counts. 
    count 1 is the list with the promotions available.
    count 2 is added to whenever the unit already has that promotion.
    so lPromoList = lPromoList + ['PROMOTION_AIR1']
    unless the unit already has air1, then
    promoAlreadyHas += number of air mana's had.
    lPromoList will just need a check to add ['PROMOTION_AIR1'] for as many times as you have mana nodes for
    
    -Colin
     

Share This Page