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

Ranged siege tutorial

Discussion in 'Civ4 - Modding Tutorials & Reference' started by Mumin, Jan 17, 2006.

  1. Mumin

    Mumin Warlord

    Joined:
    Nov 18, 2005
    Messages:
    107
    Location:
    Sweden
    (Code based on Kael's "Fall from Heaven" mod. Thanks Kael!)
    Rather than fighting themselves, siege units can now create a barrage if they have at least one move left
    and are on land. The barrage works like a non-interceptable aircraft which will remain for the turn only
    and may be used to bombard the enemy.

    Pros (in my opinion):
    Siege cannot kill units outright or capture cities.
    Siege won't get killed when bombarding.
    Feels much more like actual artillery.

    Cons:
    The AI won't use air units far away from cities. (Why??)
    The attack explosion often appears over another tile than the one attacked.
    Siege may fire and then move. (The AI will otherwise not be able to move its siege units at all.)
    Bombardment is now a two-step process, making it a little more awkward.
    Siege may not gain levels.


    The following files (place in CustomAssets or Assets for your mod) are needed:

    python/CvEventManager.py

    xml/art/CIV4ArtDefines_Unit.xml

    xml/units/CIV4UnitClassInfos.xml

    xml/units/CIV4UnitInfos.xml

    xml/units/CIV4PromotionInfos.xml



    First make a barrage unit:


    Add in xml/units/CIV4UnitClassInfos.xml:

    Code:
    	        <UnitClassInfo>
    			<Type>UNITCLASS_CATAPULT_BARRAGE</Type>
    			<Description>Catapult Barrage</Description>
    			<iMaxGlobalInstances>-1</iMaxGlobalInstances>
    			<iMaxTeamInstances>-1</iMaxTeamInstances>
    			<iMaxPlayerInstances>-1</iMaxPlayerInstances>
    			<DefaultUnit>UNIT_CATAPULT_BARRAGE</DefaultUnit>
    		</UnitClassInfo>
    
    
    Add in xml/units/CIV4UnitInfos.xml:
    Code:
    		<UnitInfo>
    			<Class>UNITCLASS_CATAPULT_BARRAGE</Class>
    			<Type>UNIT_CATAPULT_BARRAGE</Type>
    			<UniqueNames/>
    			<Special>NONE</Special>
    			<Capture>NONE</Capture>
    			<Combat>NONE</Combat>
    			<Domain>DOMAIN_AIR</Domain>
    			<DefaultUnitAI>UNITAI_ATTACK_AIR</DefaultUnitAI>
    			<Invisible>NONE</Invisible>
    			<SeeInvisible>NONE</SeeInvisible>
    			<Description>Catapult Barrage</Description>
    			<Civilopedia/>
    			<Strategy/>
    			<Advisor>ADVISOR_MILITARY</Advisor>
    			<bAnimal>0</bAnimal>
    			<bFood>0</bFood>
    			<bNoBadGoodies>0</bNoBadGoodies>
    			<bOnlyDefensive>0</bOnlyDefensive>
    			<bNoCapture>0</bNoCapture>
    			<bRivalTerritory>0</bRivalTerritory>
    			<bMilitaryHappiness>0</bMilitaryHappiness>
    			<bMilitarySupport>0</bMilitarySupport>
    			<bMilitaryProduction>1</bMilitaryProduction>
    			<bPillage>0</bPillage>
    			<bSabotage>0</bSabotage>
    			<bDestroy>0</bDestroy>
    			<bStealPlans>0</bStealPlans>
    			<bInvestigate>0</bInvestigate>
    			<bCounterSpy>0</bCounterSpy>
    			<bFound>0</bFound>
    			<bGoldenAge>0</bGoldenAge>
    			<bInvisible>0</bInvisible>
    			<bFirstStrikeImmune>0</bFirstStrikeImmune>
    			<bNoDefensiveBonus>0</bNoDefensiveBonus>
    			<bIgnoreBuildingDefense>0</bIgnoreBuildingDefense>
    			<bCanMoveImpassable>0</bCanMoveImpassable>
    			<bFlatMovementCost>0</bFlatMovementCost>
    			<bIgnoreTerrainCost>0</bIgnoreTerrainCost>
    			<bNukeImmune>0</bNukeImmune>
    			<bPrereqBonuses>0</bPrereqBonuses>
    			<bPrereqReligion>0</bPrereqReligion>
    			<bMechanized>1</bMechanized>
    			<UnitClassUpgrades/>
    			<UnitAIs>
    				<UnitAI>
    					<UnitAIType>UNITAI_ATTACK_AIR</UnitAIType>
    					<bUnitAI>1</bUnitAI>
    				</UnitAI>
    			</UnitAIs>
    			<NotUnitAIs/>
    			<Builds/>
    			<ReligionSpreads/>
    			<GreatPeoples/>
    			<Buildings/>
    			<ForceBuildings/>
    			<HolyCity>NONE</HolyCity>
    			<ReligionType>NONE</ReligionType>
    			<StateReligion>NONE</StateReligion>
    			<PrereqReligion>NONE</PrereqReligion>
    			<PrereqBuilding>NONE</PrereqBuilding>
    			<PrereqTech>NONE</PrereqTech>
    			<TechTypes/>
    			<BonusType>NONE</BonusType>
    			<PrereqBonuses/>
    			<ProductionTraits/>
    			<Flavors/>
    			<iAIWeight>0</iAIWeight>
    			<iCost>-1</iCost>
    			<iHurryCostModifier>0</iHurryCostModifier>
    			<iMinAreaSize>-1</iMinAreaSize>
    			<iMoves>1</iMoves>
    			<iAirRange>1</iAirRange>
    			<iNukeRange>-1</iNukeRange>
    			<iWorkRate>0</iWorkRate>
    			<iBaseDiscover>0</iBaseDiscover>
    			<iDiscoverMultiplier>0</iDiscoverMultiplier>
    			<iBaseHurry>0</iBaseHurry>
    			<iHurryMultiplier>0</iHurryMultiplier>
    			<iBaseTrade>0</iBaseTrade>
    			<iTradeMultiplier>0</iTradeMultiplier>
    			<iGreatWorkCulture>0</iGreatWorkCulture>
    			<TerrainImpassables/>
    			<FeatureImpassables/>
    			<iCombat>0</iCombat>
    			<iAirCombat>2</iAirCombat>
    			<iAirCombatLimit>50</iAirCombatLimit>
    			<iXPValueAttack>0</iXPValueAttack>
    			<iXPValueDefense>0</iXPValueDefense>
    			<iFirstStrikes>0</iFirstStrikes>
    			<iChanceFirstStrikes>0</iChanceFirstStrikes>
    			<iInterceptionProbability>0</iInterceptionProbability>
    			<iEvasionProbability>100</iEvasionProbability>
    			<iWithdrawalProb>0</iWithdrawalProb>
    			<iCollateralDamage>100</iCollateralDamage>
    			<iCollateralDamageLimit>50</iCollateralDamageLimit>
    			<iCollateralDamageMaxUnits>6</iCollateralDamageMaxUnits>
    			<iCityAttack>100</iCityAttack>
    			<iCityDefense>0</iCityDefense>
    			<iAnimalCombat>0</iAnimalCombat>
    			<iHillsDefense>0</iHillsDefense>
    			<TerrainNatives/>
    			<FeatureNatives/>
    			<TerrainDefenses/>
    			<FeatureDefenses/>
    			<UnitClassAttackMods/>
    			<UnitClassDefenseMods/>
    			<UnitCombatMods/>
    			<DomainMods/>
    			<BonusProductionModifiers/>
    			<iBombRate>10</iBombRate>
    			<iBombardRate>0</iBombardRate>
    			<SpecialCargo>NONE</SpecialCargo>
    			<DomainCargo>NONE</DomainCargo>
    			<iCargo>0</iCargo>
    			<iConscription>0</iConscription>
    			<iCultureGarrison>0</iCultureGarrison>
    			<iExtraCost>0</iExtraCost>
    			<iAsset>0</iAsset>
    			<iPower>0</iPower>
    			<UnitMeshGroups>
    				<iGroupSize>1</iGroupSize>
    				<fMaxSpeed>10.0</fMaxSpeed>
    				<iMeleeWaveSize>1</iMeleeWaveSize>
    				<iRangedWaveSize>1</iRangedWaveSize>
    				<UnitMeshGroup>
    					<iRequired>2</iRequired>
    					<EarlyArtDefineTag>ART_DEF_UNIT_CATAPULT_BARRAGE</EarlyArtDefineTag>
    				</UnitMeshGroup>
    			</UnitMeshGroups>
    			<Button>Art/Interface/Buttons/Units/Catapult.dds</Button>
    			<HotKey/>
    			<bAltDown>0</bAltDown>
    			<bShiftDown>0</bShiftDown>
    			<bCtrlDown>0</bCtrlDown>
    			<iHotKeyPriority>0</iHotKeyPriority>
    			<FreePromotions/>
    		</UnitInfo>
    
    And define appropriate art in xml/art/CIV4ArtDefines_Unit.xml:

    Code:
    		<UnitArtInfo>
    			<Type>ART_DEF_UNIT_CATAPULT_BARRAGE</Type>
    			<fScale>0.02</fScale>
    			<fInterfaceScale>0.68</fInterfaceScale>
    			<NIF>Art/Units/ICBM/ICBM.nif</NIF>
    			<KFM>Art/Units/ICBM/ICBM.kfm</KFM>
    			<ShadowDef>
    				<ShadowNIF>Art/Units/01_UnitShadows/UnitShadow.nif</ShadowNIF>
    				<ShadowAttachNode>BIP Pelvis</ShadowAttachNode>
    				<fShadowScale>0.01</fShadowScale>
    			</ShadowDef>
    			<fBattleDistance>0</fBattleDistance>
    			<fRangedDeathTime>0.31</fRangedDeathTime>
    			<bSmoothMove>1</bSmoothMove>
    			<bActAsRanged>0</bActAsRanged>
    			<TrainSound>AS2D_UNIT_BUILD_UNIT</TrainSound>
    			<AudioRunSounds>
    				<AudioRunTypeLoop/>
    				<AudioRunTypeEnd/>
    			</AudioRunSounds>
    			<SelectionSound>AS3D_UN_ICBM_SELECT</SelectionSound>
    			<ActionSound>AS3D_UN_ICBM_SELECT</ActionSound>
    		</UnitArtInfo>
    
    
    Go to xml/units/CIV4PromotionInfos.xml and remove UNITCOMBAT_SIEGE from all promotions. Then add the following

    promotions:

    Code:
    		<PromotionInfo>
    			<Type>PROMOTION_FIRE</Type>
    			<Description>Fire</Description>
    			<Sound>NONE</Sound>
    			<PromotionPrereqOr1>NONE</PromotionPrereqOr1>
    			<PromotionPrereqOr2>NONE</PromotionPrereqOr2>
    			<TechPrereq>NONE</TechPrereq>
    			<bBlitz>0</bBlitz>
    			<bAmphib>0</bAmphib>
    			<bRiver>0</bRiver>
    			<bEnemyRoute>0</bEnemyRoute>
    			<bAlwaysHeal>0</bAlwaysHeal>
    			<bHillsDoubleMove>0</bHillsDoubleMove>
    			<bImmuneToFirstStrikes>0</bImmuneToFirstStrikes>
    			<iVisibilityChange>0</iVisibilityChange>
    			<iMovesChange>0</iMovesChange>
    			<iMoveDiscountChange>0</iMoveDiscountChange>
    			<iWithdrawalChange>0</iWithdrawalChange>
    			<iCollateralDamageChange>0</iCollateralDamageChange>
    			<iBombardRateChange>0</iBombardRateChange>
    			<iFirstStrikesChange>0</iFirstStrikesChange>
    			<iChanceFirstStrikesChange>0</iChanceFirstStrikesChange>
    			<iEnemyHealChange>0</iEnemyHealChange>
    			<iNeutralHealChange>0</iNeutralHealChange>
    			<iFriendlyHealChange>0</iFriendlyHealChange>
    			<iSameTileHealChange>0</iSameTileHealChange>
    			<iAdjacentTileHealChange>0</iAdjacentTileHealChange>
    			<iCombatPercent>100</iCombatPercent>
    			<iCityAttack>0</iCityAttack>
    			<iCityDefense>0</iCityDefense>
    			<iHillsDefense>0</iHillsDefense>
    			<TerrainDefenses/>
    			<FeatureDefenses/>
    			<UnitCombatMods/>
    			<DomainMods/>
    			<TerrainDoubleMoves/>
    			<FeatureDoubleMoves/>
    			<UnitCombats>
    				<UnitCombat>
    					<UnitCombatType>UNITCOMBAT_SIEGE</UnitCombatType>
    					<bUnitCombat>1</bUnitCombat>
    				</UnitCombat>
    			</UnitCombats>
    			<HotKey/>
    			<bAltDown>0</bAltDown>
    			<bShiftDown>0</bShiftDown>
    			<bCtrlDown>0</bCtrlDown>
    			<iHotKeyPriority>0</iHotKeyPriority>
    			<Button>Art/Interface/Buttons/promotions/accuracy.dds</Button>
    		</PromotionInfo>
    
    		<PromotionInfo>
    			<Type>PROMOTION_ORDNANCE</Type>
    			<Description>Ordnance</Description>
    			<Sound>AS2D_IF_LEVELUP</Sound>
    			<PromotionPrereqOr1>NONE</PromotionPrereqOr1>
    			<PromotionPrereqOr2>NONE</PromotionPrereqOr2>
    			<TechPrereq>NONE</TechPrereq>
    			<bBlitz>0</bBlitz>
    			<bAmphib>0</bAmphib>
    			<bRiver>0</bRiver>
    			<bEnemyRoute>0</bEnemyRoute>
    			<bAlwaysHeal>0</bAlwaysHeal>
    			<bHillsDoubleMove>0</bHillsDoubleMove>
    			<bImmuneToFirstStrikes>0</bImmuneToFirstStrikes>
    			<iVisibilityChange>0</iVisibilityChange>
    			<iMovesChange>0</iMovesChange>
    			<iMoveDiscountChange>0</iMoveDiscountChange>
    			<iWithdrawalChange>0</iWithdrawalChange>
    			<iCollateralDamageChange>0</iCollateralDamageChange>
    			<iBombardRateChange>0</iBombardRateChange>
    			<iFirstStrikesChange>0</iFirstStrikesChange>
    			<iChanceFirstStrikesChange>0</iChanceFirstStrikesChange>
    			<iEnemyHealChange>0</iEnemyHealChange>
    			<iNeutralHealChange>0</iNeutralHealChange>
    			<iFriendlyHealChange>0</iFriendlyHealChange>
    			<iSameTileHealChange>0</iSameTileHealChange>
    			<iAdjacentTileHealChange>0</iAdjacentTileHealChange>
    			<iCombatPercent>0</iCombatPercent>
    			<iCityAttack>0</iCityAttack>
    			<iCityDefense>0</iCityDefense>
    			<iHillsDefense>0</iHillsDefense>
    			<TerrainDefenses/>
    			<FeatureDefenses/>
    			<UnitCombatMods/>
    			<DomainMods/>
    			<TerrainDoubleMoves/>
    			<FeatureDoubleMoves/>
    			<UnitCombats/>
    			<HotKey/>
    			<bAltDown>0</bAltDown>
    			<bShiftDown>0</bShiftDown>
    			<bCtrlDown>0</bCtrlDown>
    			<iHotKeyPriority>0</iHotKeyPriority>
    			<Button>Art/Interface/Buttons/Promotions/accuracy.dds</Button>
    		</PromotionInfo>
    
    
    Now for some Python Code in python/CvEventManager.py:

    Find:

    Code:
    	def onUnitCreated(self, argsList):
    		'Unit Completed'
    		unit = argsList[0]
    		player = PyPlayer(unit.getOwner())
    		if (not self.__LOG_UNITBUILD):
    			return
    
    
    And replace it with: (Will provide 10 and lvl 3 to new siege units)

    Code:
    	def onUnitCreated(self, argsList):
    		'Unit Completed'
    		unit = argsList[0]
    		player = PyPlayer(unit.getOwner())
    
    		if unit.getUnitCombatType() == gc.getInfoTypeForString("UNITCOMBAT_SIEGE"):
    			unit.setLevel(3)
    			unit.setExperience(10,10)
    		
    		if (not self.__LOG_UNITBUILD):
    			return
    
    
    Then find:

    Code:
    def onUnitPromoted(self, argsList):
    		'Unit Promoted'
    		pUnit, iPromotion = argsList
    		player = PyPlayer(pUnit.getOwner())
    		if (not self.__LOG_UNITPROMOTED):
    			return
    		CvUtil.pyPrint('Unit Promotion Event: %s - %s' %(player.getCivilizationName(), pUnit.getName(),))
    	
    
    And replace with: (Creates a barrage by using the Fire promotion.)

    Code:
    	def onUnitPromoted(self, argsList):
    		'Modded: Unit Promoted'
    		pUnit, iPromotion = argsList
    		player = pUnit.getOwner()
                    pPlayer = gc.getPlayer(player)
    		iX = pUnit.getX()
    		iY = pUnit.getY()
    
    		if pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_FIRE')) and (pUnit.getUnitType() == gc.getInfoTypeForString('UNIT_CATAPULT')) :
                            if (pUnit.movesLeft() == 60) and (not pUnit.area().isWater()):
                                newUnit = pPlayer.initUnit(gc.getInfoTypeForString('UNIT_CATAPULT_ROCKS'), pUnit.getX(), pUnit.getY(), UnitAITypes.NO_UNITAI)
                                newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_ORDNANCE'), True)
    			pUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_FIRE'), False)
    			pUnit.setLevel(3)
    			pUnit.setExperience(10, -1)
    
    		if (not self.__LOG_UNITPROMOTED):
    			return
    
    
    Then find:
    Code:
    	def onEndPlayerTurn(self, argsList):
    		'Called at the end of a players turn'
    		iGameTurn, iPlayer = argsList
    		
    		if (gc.getGame().getElapsedGameTurns() == 1):
    			if (gc.getPlayer(iPlayer).isHuman()):
    				if (gc.getPlayer(iPlayer).canRevolution(0)):
    					popupInfo = CyPopupInfo()
    					popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_CHANGECIVIC)
    					popupInfo.addPopup(iPlayer)
    		
    		CvAdvisorUtils.resetAdvisorNags()
    		CvAdvisorUtils.endTurnFeats(iPlayer)
    
    
    And replace with: (Will remove barrage on end turn.)
    Code:
    	def onEndPlayerTurn(self, argsList):
    		'Called at the end of a players turn'
    		iGameTurn, iPlayer = argsList
    		pPlayer = gc.getPlayer(iPlayer)
    
    		for i in range(pPlayer.getNumUnits(), 0, -1):
    			pUnit = pPlayer.getUnit(i)
    			if pUnit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ORDNANCE')):
    				pUnit.kill(False,0)
    
    		if (gc.getGame().getElapsedGameTurns() == 1):
    			if (gc.getPlayer(iPlayer).isHuman()):
    				if (gc.getPlayer(iPlayer).canRevolution(0)):
    					popupInfo = CyPopupInfo()
    					popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_CHANGECIVIC)
    					popupInfo.addPopup(iPlayer)
    		
    		CvAdvisorUtils.resetAdvisorNags()
    		CvAdvisorUtils.endTurnFeats(iPlayer)
    
    
    Finally, remove the ability of your siege to fight itself. E.g. like this in xml/units/CIV4UnitInfos.xml:

    Code:
    		<UnitInfo>
    			<Class>UNITCLASS_CATAPULT</Class>
    			<Type>UNIT_CATAPULT</Type>
    			<UniqueNames/>
    			<Special>NONE</Special>
    			<Capture>NONE</Capture>
    			<Combat>UNITCOMBAT_SIEGE</Combat>
    			<Domain>DOMAIN_LAND</Domain>
    			<DefaultUnitAI>UNITAI_ATTACK_CITY</DefaultUnitAI>
    			<Invisible>NONE</Invisible>
    			<SeeInvisible>NONE</SeeInvisible>
    			<Description>TXT_KEY_UNIT_CATAPULT</Description>
    			<Civilopedia>TXT_KEY_UNIT_CATAPULT_PEDIA</Civilopedia>
    			<Strategy>TXT_KEY_UNIT_CATAPULT_STRATEGY</Strategy>
    			<Advisor>ADVISOR_MILITARY</Advisor>
    			<bAnimal>0</bAnimal>
    			<bFood>0</bFood>
    			<bNoBadGoodies>0</bNoBadGoodies>
    			<bOnlyDefensive>1</bOnlyDefensive>
    			<bNoCapture>1</bNoCapture>
    			<bRivalTerritory>0</bRivalTerritory>
    			<bMilitaryHappiness>1</bMilitaryHappiness>
    			<bMilitarySupport>1</bMilitarySupport>
    			<bMilitaryProduction>1</bMilitaryProduction>
    			<bPillage>0</bPillage>
    			<bSabotage>0</bSabotage>
    			<bDestroy>0</bDestroy>
    			<bStealPlans>0</bStealPlans>
    			<bInvestigate>0</bInvestigate>
    			<bCounterSpy>0</bCounterSpy>
    			<bFound>0</bFound>
    			<bGoldenAge>0</bGoldenAge>
    			<bInvisible>0</bInvisible>
    			<bFirstStrikeImmune>0</bFirstStrikeImmune>
    			<bNoDefensiveBonus>1</bNoDefensiveBonus>
    			<bIgnoreBuildingDefense>0</bIgnoreBuildingDefense>
    			<bCanMoveImpassable>0</bCanMoveImpassable>
    			<bFlatMovementCost>0</bFlatMovementCost>
    			<bIgnoreTerrainCost>0</bIgnoreTerrainCost>
    			<bNukeImmune>0</bNukeImmune>
    			<bPrereqBonuses>0</bPrereqBonuses>
    			<bPrereqReligion>0</bPrereqReligion>
    			<bMechanized>1</bMechanized>
    			<UnitClassUpgrades>
    				<UnitClassUpgrade>
    					<UnitClassUpgradeType>UNITCLASS_CANNON</UnitClassUpgradeType>
    					<bUnitClassUpgrade>1</bUnitClassUpgrade>
    				</UnitClassUpgrade>
    			</UnitClassUpgrades>
    			<UnitAIs>
    				<UnitAI>
    					<UnitAIType>UNITAI_ATTACK_CITY</UnitAIType>
    					<bUnitAI>1</bUnitAI>
    				</UnitAI>
    				<UnitAI>
    					<UnitAIType>UNITAI_COLLATERAL</UnitAIType>
    					<bUnitAI>1</bUnitAI>
    				</UnitAI>
    			</UnitAIs>
    			<NotUnitAIs/>
    			<Builds/>
    			<ReligionSpreads/>
    			<GreatPeoples/>
    			<Buildings/>
    			<ForceBuildings/>
    			<HolyCity>NONE</HolyCity>
    			<ReligionType>NONE</ReligionType>
    			<StateReligion>NONE</StateReligion>
    			<PrereqReligion>NONE</PrereqReligion>
    			<PrereqBuilding>NONE</PrereqBuilding>
    			<PrereqTech>TECH_MATHEMATICS</PrereqTech>
    			<TechTypes/>
    			<BonusType>NONE</BonusType>
    			<PrereqBonuses/>
    			<ProductionTraits/>
    			<Flavors/>
    			<iAIWeight>0</iAIWeight>
    			<iCost>40</iCost>
    			<iHurryCostModifier>0</iHurryCostModifier>
    			<iMinAreaSize>-1</iMinAreaSize>
    			<iMoves>1</iMoves>
    			<iAirRange>0</iAirRange>
    			<iNukeRange>-1</iNukeRange>
    			<iWorkRate>0</iWorkRate>
    			<iBaseDiscover>0</iBaseDiscover>
    			<iDiscoverMultiplier>0</iDiscoverMultiplier>
    			<iBaseHurry>0</iBaseHurry>
    			<iHurryMultiplier>0</iHurryMultiplier>
    			<iBaseTrade>0</iBaseTrade>
    			<iTradeMultiplier>0</iTradeMultiplier>
    			<iGreatWorkCulture>0</iGreatWorkCulture>
    			<TerrainImpassables/>
    			<FeatureImpassables/>
    			<iCombat>2</iCombat>
    			<iAirCombat>0</iAirCombat>
    			<iAirCombatLimit>0</iAirCombatLimit>
    			<iXPValueAttack>4</iXPValueAttack>
    			<iXPValueDefense>2</iXPValueDefense>
    			<iFirstStrikes>0</iFirstStrikes>
    			<iChanceFirstStrikes>0</iChanceFirstStrikes>
    			<iInterceptionProbability>0</iInterceptionProbability>
    			<iEvasionProbability>0</iEvasionProbability>
    			<iWithdrawalProb>0</iWithdrawalProb>
    			<iCollateralDamage>0</iCollateralDamage>
    			<iCollateralDamageLimit>0</iCollateralDamageLimit>
    			<iCollateralDamageMaxUnits>0</iCollateralDamageMaxUnits>
    			<iCityAttack>0</iCityAttack>
    			<iCityDefense>0</iCityDefense>
    			<iAnimalCombat>0</iAnimalCombat>
    			<iHillsDefense>0</iHillsDefense>
    			<TerrainNatives/>
    			<FeatureNatives/>
    			<TerrainDefenses/>
    			<FeatureDefenses/>
    			<UnitClassAttackMods/>
    			<UnitClassDefenseMods/>
    			<UnitCombatMods/>
    			<DomainMods/>
    			<BonusProductionModifiers/>
    			<iBombRate>0</iBombRate>
    			<iBombardRate>0</iBombardRate>
    			<SpecialCargo>NONE</SpecialCargo>
    			<DomainCargo>NONE</DomainCargo>
    			<iCargo>0</iCargo>
    			<iConscription>0</iConscription>
    			<iCultureGarrison>4</iCultureGarrison>
    			<iExtraCost>0</iExtraCost>
    			<iAsset>2</iAsset>
    			<iPower>3</iPower>
    			<UnitMeshGroups>
    				<iGroupSize>2</iGroupSize>
    				<fMaxSpeed>1.25</fMaxSpeed>
    				<iMeleeWaveSize>2</iMeleeWaveSize>
    				<iRangedWaveSize>2</iRangedWaveSize>
    				<UnitMeshGroup>
    					<iRequired>2</iRequired>
    					<EarlyArtDefineTag>ART_DEF_UNIT_CATAPULT</EarlyArtDefineTag>
    				</UnitMeshGroup>
    			</UnitMeshGroups>
    			<Button>,Art/Interface/Buttons/Units/Catapult.dds,Art/Interface/Buttons/Unit_Resource_Atlas.dds,7,8</Button>
    
    			<HotKey/>
    			<bAltDown>0</bAltDown>
    			<bShiftDown>0</bShiftDown>
    			<bCtrlDown>0</bCtrlDown>
    			<iHotKeyPriority>0</iHotKeyPriority>
    			<FreePromotions/>
    		</UnitInfo>
    
    
    Test and, if you like it, implement for the rest of the siege units.
    I think that was all (Phew! I hope I got it all right! :crazyeye: ). Thoughts?
     
  2. RED DIAMOND

    RED DIAMOND Prince

    Joined:
    Dec 24, 2005
    Messages:
    380
    Worked the first time, but has locked up at the end of every turn since???:cry: :sad:
     
  3. Martock

    Martock Warlord

    Joined:
    Jun 19, 2003
    Messages:
    254
    Location:
    South Carolina, USA
    Nice! I have to ask though, are we merely adding to the units that exist the ability to bombard land units OR are we creating all new units? I ask cuz of how this all starts off...'First make a barrage unit'...
     
  4. Exavier

    Exavier Destroyer of Worlds

    Joined:
    Nov 14, 2005
    Messages:
    906
    Location:
    Phoenix, Arizona, USA
    If i understand it correctly it looks like you make a Barrage Unit that is a temporary unit taking the place of the actual Shot (think Cruise Misse or Fireball) and that is what you actually end up attacking with while the unit that spawned it sits back and watches.

    If i am wrong let me know (haven't had time to play with it)
     
  5. Déja

    Déja Beyond the Mod

    Joined:
    Dec 19, 2005
    Messages:
    353
    I'm currently working on a different method for ranged bombardments (something that acts a little more like the Bombard mission for bombers, but doesn't create new units to accomplish it).

    I will post a little how-to guide on what I did, once I have a few more things ironed out, but because of the extensive changes it will likely require, it won't be quite as in-depth as this.

    Good work, by the way.
     
  6. Déja

    Déja Beyond the Mod

    Joined:
    Dec 19, 2005
    Messages:
    353
    actually, I don't think I'm going to post a how-to.... really you're better off looking at the ranged spell targeting demo, because I'm really just refining and expanding upon that basic idea
     
  7. RED DIAMOND

    RED DIAMOND Prince

    Joined:
    Dec 24, 2005
    Messages:
    380
    Anyone get thi s to work consistently without lockups at the end of the turn?
     
  8. Mumin

    Mumin Warlord

    Joined:
    Nov 18, 2005
    Messages:
    107
    Location:
    Sweden
    Is the indentation in the Python code correct? Is anyone else having this problem?
     
  9. Mumin

    Mumin Warlord

    Joined:
    Nov 18, 2005
    Messages:
    107
    Location:
    Sweden
    Were is that post? It would certainly be less of a hassle if no unit needs to be created.
     
  10. Déja

    Déja Beyond the Mod

    Joined:
    Dec 19, 2005
    Messages:
    353

Share This Page