I'm not sure if it is known, but there is a way to limit the range of bows and other ranged weapons.
For all who don't know, the bows in the game have a range entry, but it doesn't seem to do anything. However, if you use certain special abilities, like Double Strike for example, the attack range of bows suddenly get limited to the amount in the entry. That is happening, because those abilities have a line of code that forces the game to use the weapon's range. The same line can be used with the standard bow-attack, too. I tested it in the game, and it works.
All you need to do is to open up CoreSpells.xml, go to the BowAttack_* entries, and add <UseWeaponRange>1</UseWeaponRange> to each one. It should look like this:
Code: xml
- <SpellDef InternalName="BowAttack_Basic">
- <DisplayName>Bow Attack</DisplayName>
- <Description>Attack a unit from a distance with a single arrow from your bow.</Description>
- <Image>Action_BowArrow.png</Image>
- <IconFG>Action_BowArrow.png</IconFG>
- <IconBG>Action_BowArrow.png</IconBG>
- <IconColor>255,255,255</IconColor>
- <SpellBookSortCategory>Unit</SpellBookSortCategory>
- <SpellBookSortSubCategory>UnitDamage</SpellBookSortSubCategory>
- <SpellType>Tactical</SpellType>
- <SpellClass>Offensive</SpellClass>
- <SpellSubClass>Damage</SpellSubClass>
- <SpellTargetType>EnemyUnit</SpellTargetType>
- <HideInHiergamenon>1</HideInHiergamenon>
- <IsCastable>0</IsCastable>
- <IsRangedAttack>1</IsRangedAttack>
- <UseWeaponRange>1</UseWeaponRange>
- <GameModifier>
- <ModType>Unit</ModType>
- <Attribute>DefendableDamage</Attribute>
- </GameModifier>
- <AIData AIPersonality="AI_General">
- <AIPriority>5</AIPriority>
- </AIData>
- <HitSoundFX>Hit_Arrow1</HitSoundFX>
- <HitSoundFX>Hit_Arrow2</HitSoundFX>
- <MissSoundFX>Miss_Swing2</MissSoundFX>
- <SpellCastSoundFX>Spell_BowAttack_BasicCast_01</SpellCastSoundFX>
- <SpellCastEffectName>Arrow</SpellCastEffectName>
- <SpellCastEffectScale>0.5</SpellCastEffectScale>
- <SpellCastProjectile>1</SpellCastProjectile>
- <SpellCastProjectileSpeed>1100</SpellCastProjectileSpeed>
- </SpellDef>
However, there are two problems with this. The first is, that the ranged mage staves use the same attack 'spell' as the bows, but they don't have a range entry. This has the effect, that the staves no longer work at range. This can be solved by adding <TacticalRange>-1</TacticalRange> to their entries in the CoreWeapons.xml. The -1 makes the range unlimited. It should look like this:
Code: xml
- <GameItemType InternalName="Staff_Freezing">
- <DisplayName>Hailstone Staff</DisplayName>
- ...
- <IsAvailableForSovereignCustomization>0</IsAvailableForSovereignCustomization>
- <Likelihood>100</Likelihood>
- <TacticalRange>-1</TacticalRange>
- <RarityDisplay>Rare</RarityDisplay>
- ...
- </GameItemType>
The biggest problem, however, is the AI. It can't cope with the change. If your units are within range, there is no problem. However, if they are without range, the AI keeps trying to attack, but can't, effectively halting the combat. The only way out is to auto-resolve, if that happens. The AI just doesn't understand, that it needs to move closer to be able to attack. You could increase the weapon range, to try and solve this, but the only range, that is guaranteed to not pose any problems for the AI (and therefore lock the combat), is unlimited. This makes the whole change pretty much pointless, but at least it is possible.