diff --git a/android/Images/UnitPromotionIcons/Air_Repair_(Civ5).png b/android/Images/UnitPromotionIcons/Air_Repair_(Civ5).png new file mode 100644 index 0000000000..583af55649 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Air_Repair_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Ambush_II_(Civ5).png b/android/Images/UnitPromotionIcons/Ambush_II_(Civ5).png new file mode 100644 index 0000000000..503af86bef Binary files /dev/null and b/android/Images/UnitPromotionIcons/Ambush_II_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Ambush_I_(Civ5).png b/android/Images/UnitPromotionIcons/Ambush_I_(Civ5).png new file mode 100644 index 0000000000..19a854dd03 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Ambush_I_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Evasion_(Civ5).png b/android/Images/UnitPromotionIcons/Evasion_(Civ5).png new file mode 100644 index 0000000000..5e786b07a4 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Evasion_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Interception_III_(Civ5).png b/android/Images/UnitPromotionIcons/Interception_III_(Civ5).png new file mode 100644 index 0000000000..1b5121edf7 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Interception_III_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Interception_II_(Civ5).png b/android/Images/UnitPromotionIcons/Interception_II_(Civ5).png new file mode 100644 index 0000000000..9e6163ce6c Binary files /dev/null and b/android/Images/UnitPromotionIcons/Interception_II_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Interception_I_(Civ5).png b/android/Images/UnitPromotionIcons/Interception_I_(Civ5).png new file mode 100644 index 0000000000..c134c0f36e Binary files /dev/null and b/android/Images/UnitPromotionIcons/Interception_I_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Operational_Range_(Civ5).png b/android/Images/UnitPromotionIcons/Operational_Range_(Civ5).png new file mode 100644 index 0000000000..e6c26e7a97 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Operational_Range_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Siege_III_(Civ5).png b/android/Images/UnitPromotionIcons/Siege_III_(Civ5).png new file mode 100644 index 0000000000..1a6491bd16 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Siege_III_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Siege_II_(Civ5).png b/android/Images/UnitPromotionIcons/Siege_II_(Civ5).png new file mode 100644 index 0000000000..d28af7ae02 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Siege_II_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Siege_I_(Civ5).png b/android/Images/UnitPromotionIcons/Siege_I_(Civ5).png new file mode 100644 index 0000000000..20641a6871 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Siege_I_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Sortie_(Civ5).png b/android/Images/UnitPromotionIcons/Sortie_(Civ5).png new file mode 100644 index 0000000000..e4eed1c331 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Sortie_(Civ5).png differ diff --git a/android/Images/UnitPromotionIcons/Targeting_I_(air)_(Civ5).png b/android/Images/UnitPromotionIcons/Targeting_I_(air)_(Civ5).png new file mode 100644 index 0000000000..6ea68d7b28 Binary files /dev/null and b/android/Images/UnitPromotionIcons/Targeting_I_(air)_(Civ5).png differ diff --git a/android/assets/game.atlas b/android/assets/game.atlas index c70034a164..896382a750 100644 --- a/android/assets/game.atlas +++ b/android/assets/game.atlas @@ -3014,318 +3014,409 @@ UnitPromotionIcons/Accuracy_I_(Civ5) orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Barrage_III_(Civ5) +UnitPromotionIcons/Air_Repair_(Civ5) rotate: false xy: 182, 153 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Barrage_II_(Civ5) +UnitPromotionIcons/Ambush_II_(Civ5) rotate: false xy: 312, 95 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Barrage_I_(Civ5) +UnitPromotionIcons/Ambush_I_(Civ5) rotate: false xy: 1142, 1229 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Blitz_(Civ5) +UnitPromotionIcons/Barrage_III_(Civ5) rotate: false xy: 438, 447 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Boarding_Party_III_(Civ5) +UnitPromotionIcons/Barrage_II_(Civ5) rotate: false xy: 1164, 1229 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Boarding_Party_II_(Civ5) +UnitPromotionIcons/Barrage_I_(Civ5) rotate: false xy: 312, 73 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Boarding_Party_I_(Civ5) +UnitPromotionIcons/Blitz_(Civ5) rotate: false xy: 2459, 422 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Bombardment_III_(Civ5) +UnitPromotionIcons/Boarding_Party_III_(Civ5) rotate: false xy: 281, 1665 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Bombardment_II_(Civ5) +UnitPromotionIcons/Boarding_Party_II_(Civ5) rotate: false xy: 379, 1281 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Bombardment_I_(Civ5) +UnitPromotionIcons/Boarding_Party_I_(Civ5) rotate: false xy: 2442, 55 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Charge_(Civ5) +UnitPromotionIcons/Bombardment_III_(Civ5) rotate: false xy: 2338, 3 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Coastal_Raider_III_(Civ5) +UnitPromotionIcons/Bombardment_II_(Civ5) rotate: false xy: 458, 669 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Coastal_Raider_II_(Civ5) +UnitPromotionIcons/Bombardment_I_(Civ5) rotate: false xy: 2440, 33 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Coastal_Raider_I_(Civ5) +UnitPromotionIcons/Charge_(Civ5) rotate: false xy: 538, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Cover_II_(Civ5) +UnitPromotionIcons/Coastal_Raider_III_(Civ5) rotate: false xy: 1172, 1281 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Cover_I_(Civ5) +UnitPromotionIcons/Coastal_Raider_II_(Civ5) rotate: false xy: 312, 51 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Drill_III_(Civ5) +UnitPromotionIcons/Coastal_Raider_I_(Civ5) rotate: false xy: 334, 71 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Drill_II_(Civ5) +UnitPromotionIcons/Cover_II_(Civ5) rotate: false xy: 281, 1643 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Drill_I_(Civ5) +UnitPromotionIcons/Cover_I_(Civ5) rotate: false xy: 379, 1259 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Formation_II_(Civ5) +UnitPromotionIcons/Drill_III_(Civ5) rotate: false xy: 2360, 3 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Formation_I_(Civ5) +UnitPromotionIcons/Drill_II_(Civ5) rotate: false xy: 458, 647 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Heal_Instantly_(Civ5) +UnitPromotionIcons/Drill_I_(Civ5) rotate: false xy: 560, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Indirect_Fire_(Civ5) +UnitPromotionIcons/Evasion_(Civ5) rotate: false xy: 1172, 1259 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Logistics_(Civ5) +UnitPromotionIcons/Formation_II_(Civ5) rotate: false xy: 312, 29 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/March_(Civ5) +UnitPromotionIcons/Formation_I_(Civ5) rotate: false xy: 334, 49 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Medic_(Civ5) +UnitPromotionIcons/Heal_Instantly_(Civ5) rotate: false xy: 356, 71 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Medic_II_(Civ5) - rotate: false - xy: 356, 71 - size: 20, 20 - orig: 20, 20 - offset: 0, 0 - index: -1 -UnitPromotionIcons/Mobility_(Civ5) +UnitPromotionIcons/Indirect_Fire_(Civ5) rotate: false xy: 281, 1621 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Range_(Civ5) +UnitPromotionIcons/Interception_III_(Civ5) rotate: false xy: 379, 1237 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Scouting_III_(Civ5) +UnitPromotionIcons/Interception_II_(Civ5) rotate: false xy: 2382, 3 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Scouting_II_(Civ5) +UnitPromotionIcons/Interception_I_(Civ5) rotate: false xy: 582, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Scouting_I_(Civ5) +UnitPromotionIcons/Logistics_(Civ5) rotate: false xy: 356, 49 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Sentry_(Civ5) +UnitPromotionIcons/March_(Civ5) rotate: false xy: 378, 71 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Shock_III_(Civ5) +UnitPromotionIcons/Medic_(Civ5) rotate: false xy: 379, 1215 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Shock_II_(Civ5) +UnitPromotionIcons/Medic_II_(Civ5) + rotate: false + xy: 379, 1215 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Mobility_(Civ5) rotate: false xy: 2404, 3 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Shock_I_(Civ5) +UnitPromotionIcons/Operational_Range_(Civ5) rotate: false xy: 604, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Siege_(Civ5) +UnitPromotionIcons/Range_(Civ5) + rotate: false + xy: 604, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Scouting_III_(Civ5) rotate: false xy: 378, 49 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Targeting_III_(Civ5) +UnitPromotionIcons/Scouting_II_(Civ5) rotate: false xy: 400, 71 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Targeting_II_(Civ5) +UnitPromotionIcons/Scouting_I_(Civ5) rotate: false xy: 626, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Targeting_I_(Civ5) +UnitPromotionIcons/Sentry_(Civ5) rotate: false xy: 400, 49 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Volley_(Civ5) +UnitPromotionIcons/Shock_III_(Civ5) rotate: false xy: 648, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Wolfpack_III_(Civ5) +UnitPromotionIcons/Shock_II_(Civ5) rotate: false xy: 670, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Wolfpack_II_(Civ5) +UnitPromotionIcons/Shock_I_(Civ5) rotate: false xy: 692, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Wolfpack_I_(Civ5) +UnitPromotionIcons/Siege_(Civ5) rotate: false xy: 714, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 -UnitPromotionIcons/Woodsman_(Civ5) +UnitPromotionIcons/Siege_I_(Civ5) + rotate: false + xy: 714, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Siege_III_(Civ5) rotate: false xy: 736, 5 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 +UnitPromotionIcons/Siege_II_(Civ5) + rotate: false + xy: 758, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Sortie_(Civ5) + rotate: false + xy: 780, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Targeting_III_(Civ5) + rotate: false + xy: 802, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Targeting_II_(Civ5) + rotate: false + xy: 824, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Targeting_I_(Civ5) + rotate: false + xy: 846, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Targeting_I_(air)_(Civ5) + rotate: false + xy: 846, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Volley_(Civ5) + rotate: false + xy: 868, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Wolfpack_III_(Civ5) + rotate: false + xy: 890, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Wolfpack_II_(Civ5) + rotate: false + xy: 912, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Wolfpack_I_(Civ5) + rotate: false + xy: 934, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 +UnitPromotionIcons/Woodsman_(Civ5) + rotate: false + xy: 956, 5 + size: 20, 20 + orig: 20, 20 + offset: 0, 0 + index: -1 diff --git a/android/assets/game.png b/android/assets/game.png index b7321cc46d..a8a30d9fcf 100644 Binary files a/android/assets/game.png and b/android/assets/game.png differ diff --git a/android/assets/jsons/UnitPromotions.json b/android/assets/jsons/UnitPromotions.json index 29187da4c0..73099deb5c 100644 --- a/android/assets/jsons/UnitPromotions.json +++ b/android/assets/jsons/UnitPromotions.json @@ -5,6 +5,8 @@ effect:"Heal this Unit by 50 HP; Doing so will consume this opportunity to choose a Promotion", unitTypes:["Melee","Mounted","Scout","Siege","Ranged","Armor","WaterMelee","WaterRanged","WaterSubmarine"] } + + // Ranged+Siege { name:"Accuracy I", effect:"Bonus vs units in open terrain 15%", @@ -40,7 +42,26 @@ effect:"Bonus vs units in rough terrain 15%", unitTypes:["Siege","Ranged"] } + { + name:"Volley", + prerequisites:["Accuracy I","Barrage I"], + effect:"Bonus vs City 50%", + unitTypes:["Ranged","Siege"] + } + { + name:"Range", + prerequisites:["Accuracy III","Barrage III","Targeting II","Bombardment II", "Wolfpack II"], + effect:"+1 Range", + unitTypes:["Ranged","Siege","WaterRanged","WaterSubmarine"] + } + { + name:"Indirect Fire", + prerequisites:["Accuracy III","Barrage III"], + effect:"Ranged attacks may be performed over obstacles", + unitTypes:["Ranged","Siege"] + } + // Melee, Mounted+Armor { name:"Shock I", effect:"Bonus vs units in open terrain 15%", @@ -76,94 +97,18 @@ effect:"Bonus vs units in rough terrain 15%", unitTypes:["Melee","Mounted","Armor"] } - - { - name:"Scouting I", - effect:"+1 Visibility Range", - unitTypes:["Scout"] - } - { - name:"Scouting II", - prerequisites:["Scouting I"], - effect:"+1 Movement", - unitTypes:["Scout"] - } - { - name:"Scouting III", - prerequisites:["Scouting II"], - effect:"+1 Visibility Range", - unitTypes:["Scout"] - } - - { - name:"Cover I", - effect:"+25% Defence against ranged attacks", - unitTypes:["Melee","Ranged","Siege"] - } - { - name:"Cover II", - prerequisites:["Cover I"], - effect:"+25% Defence against ranged attacks", - unitTypes:["Melee","Ranged","Siege"] - } - - { - name:"March", - prerequisites:["Accuracy II","Barrage II","Shock III","Drill III"], - effect:"Unit will heal every turn, even if it performs an action", - unitTypes:["Melee","Ranged","Siege","Mounted"] - } - { name:"Charge", prerequisites:["Shock II","Drill II"], effect:"Bonus vs wounded units 33%", unitTypes:["Mounted","Armor"] } - - { - name:"Mobility", - prerequisites:["Shock II","Drill II","Targeting I", - "Bombardment I","Boarding Party I", "Coastal Raider I", "Wolfpack I"], - effect:"+1 Movement", - unitTypes:["Mounted","WaterMelee","WaterRanged","Armor","WaterSubmarine"] - } - { name:"Siege", prerequisites:["Shock II","Drill II"], effect:"Bonus vs City 50%", unitTypes:["Melee"] } - - { - name:"Volley", - prerequisites:["Accuracy I","Barrage I"], - effect:"Bonus vs City 50%", - unitTypes:["Ranged","Siege"] - } - - { - name:"Sentry", - prerequisites:["Accuracy I","Barrage I","Shock II","Drill II","Bombardment I","Targeting I","Boarding Party I","Coastal Raider I"], - effect:"+1 Visibility Range", - unitTypes:["Melee","Mounted","WaterRanged","Armor","WaterMelee"] - } - - { - name:"Range", - prerequisites:["Accuracy III","Barrage III","Targeting II","Bombardment II", "Wolfpack II"], - effect:"+1 Range", - unitTypes:["Ranged","Siege","WaterRanged","WaterSubmarine"] - } - - { - name:"Indirect Fire", - prerequisites:["Accuracy III","Barrage III"], - effect:"Ranged attacks may be performed over obstacles", - unitTypes:["Ranged","Siege"] - } - { name:"Formation I", prerequisites:["Shock II","Drill II"], @@ -183,33 +128,46 @@ effect:"1 additional attack per turn", unitTypes:["Melee","Mounted","Armor"] } - { - name:"Logistics", - prerequisites:["Accuracy III","Barrage III","Targeting III", "Wolfpack III", - "Bombardment III", "Coastal Raider III","Boarding Party III"], - effect:"1 additional attack per turn", - unitTypes:["Ranged","Siege","WaterMelee","WaterRanged","WaterSubmarine"] + name:"Woodsman", + prerequisites:["Shock III","Drill III"], + effect:"Double movement rate through Forest and Jungle", + unitTypes:["Melee"] + } + { + name:"Medic", + prerequisites:["Shock I", "Drill I", "Scouting II"], + effect:"This unit and all others in adjacent tiles heal 5 additional HP per turn", + unitTypes:["Melee","Mounted","Scout"] + } + { + name:"Medic II", + prerequisites:["Medic"], + effect:"This unit and all others in adjacent tiles heal 5 additional HP. This unit heals 5 additional HP outside of friendly territory.", + unitTypes:["Melee","Mounted","Scout"] } + // Scout { - name:"Bombardment I", - effect:"Bonus vs land units 33%", - unitTypes:["WaterRanged"] + name:"Scouting I", + effect:"+1 Visibility Range", + unitTypes:["Scout"] } { - name:"Bombardment II", - prerequisites:["Bombardment I"], - effect:"Bonus vs land units 33%", - unitTypes:["WaterRanged"] + name:"Scouting II", + prerequisites:["Scouting I"], + effect:"+1 Movement", + unitTypes:["Scout"] } { - name:"Bombardment III", - prerequisites:["Bombardment II"], - effect:"Bonus vs land units 34%", - unitTypes:["WaterRanged"] + name:"Scouting III", + prerequisites:["Scouting II"], + effect:"+1 Visibility Range", + unitTypes:["Scout"] } + + // Water melee { name:"Boarding Party I", effect:"Bonus vs water units 15%", @@ -245,23 +203,8 @@ effect:"Bonus vs City 15%", unitTypes:["WaterMelee"] } - { - name:"Targeting I", - effect:"Bonus vs City 15%", - unitTypes:["WaterRanged"] - } - { - name:"Targeting II", - prerequisites:["Targeting I"], - effect:"Bonus vs water units 15%", - unitTypes:["WaterRanged"] - } - { - name:"Targeting III", - prerequisites:["Targeting II"], - effect:"Bonus vs water units 15%", - unitTypes:["WaterRanged"] - } + + // Submarine { name:"Wolfpack I", effect:"Bonus as Attacker [25]%", @@ -279,22 +222,184 @@ effect:"Bonus as Attacker [25]%", unitTypes:["WaterSubmarine"] } + + // Bomber { - name:"Woodsman", - prerequisites:["Shock III","Drill III"], - effect:"Double movement rate through Forest and Jungle", - unitTypes:["Melee"] + name:"Siege I", + effect:"Bonus vs City 33%", + unitTypes:["Bomber"] } { - name:"Medic", - prerequisites:["Shock I", "Drill I", "Scouting II"], - effect:"This unit and all others in adjacent tiles heal 5 additional HP per turn", - unitTypes:["Melee","Mounted","Scout"] + name:"Siege II", + prerequisites:["Siege I"], + effect:"Bonus vs City 33%", + unitTypes:["Bomber"] } { - name:"Medic II", - prerequisites:["Medic"], - effect:"This unit and all others in adjacent tiles heal 5 additional HP. This unit heals 5 additional HP outside of friendly territory.", - unitTypes:["Melee","Mounted","Scout"] + name:"Siege III", + prerequisites:["Siege II"], + effect:"Bonus vs City 34%", + unitTypes:["Bomber"] } -] + { + name:"Evasion", + prerequisites:["Siege II", "Bombardment II"] + effect:"Reduces damage taken from interception by 50%", + unitTypes:["Bomber"] + } + + // Fighter + { + name:"Interception I", + effect:"Bonus when intercepting [33]%", + unitTypes:["Fighter"] + } + { + name:"Interception II", + prerequisites:["Interception I"], + effect:"Bonus when intercepting [33]%", + unitTypes:["Fighter"] + } + { + name:"Interception III", + prerequisites:["Interception II"], + effect:"Bonus when intercepting [34]%", + unitTypes:["Fighter"] + } + /* + { + name:"Dogfighting I", + effect:"Bonus when performing air sweep [33]%", // todo + unitTypes:["Fighter"] + } + { + name:"Dogfighting II", + prerequisites:["Dogfighting I"], + effect:"Bonus when performing air sweep [33]%", + unitTypes:["Fighter"] + } + { + name:"Dogfighting III", + prerequisites:["Dogfighting II"], + effect:"Bonus when performing air sweep [34]%", + unitTypes:["Fighter"] + } + */ + + { + name:"Sortie", + prerequisites:["Interception II", "Dogfighting II"] + effect:"1 extra Interception may be made per turn", + unitTypes:["Fighter"] + } + + { + name:"Operational Range", + prerequisites:["Interception I", /*"Dogfighting I",*/ "Siege I", "Bombardment I"], + effect:"+2 Range", + unitTypes:["Fighter","Bomber"] + } + { + name:"Air Repair", + prerequisites:["Interception II", /*"Dogfighting II",*/ "Siege II", "Bombardment II"], + effect:"Unit will heal every turn, even if it performs an action", + unitTypes:["Fighter","Bomber"] + } + + // Mixed + { + name:"Cover I", + effect:"+25% Defence against ranged attacks", + unitTypes:["Melee","Ranged","Siege"] + } + { + name:"Cover II", + prerequisites:["Cover I"], + effect:"+25% Defence against ranged attacks", + unitTypes:["Melee","Ranged","Siege"] + } + + { + name:"March", + prerequisites:["Accuracy II","Barrage II","Shock III","Drill III"], + effect:"Unit will heal every turn, even if it performs an action", + unitTypes:["Melee","Ranged","Siege","Mounted"] + } + { + name:"Mobility", + prerequisites:["Shock II","Drill II","Targeting I", + "Bombardment I","Boarding Party I", "Coastal Raider I", "Wolfpack I"], + effect:"+1 Movement", + unitTypes:["Mounted","WaterMelee","WaterRanged","Armor","WaterSubmarine"] + } + { + name:"Sentry", + prerequisites:["Accuracy I","Barrage I","Shock II","Drill II","Bombardment I","Targeting I","Boarding Party I","Coastal Raider I"], + effect:"+1 Visibility Range", + unitTypes:["Melee","Mounted","WaterRanged","Armor","WaterMelee"] + } + { + name:"Logistics", + prerequisites:["Accuracy III","Barrage III","Targeting III", "Wolfpack III", + "Bombardment III", "Coastal Raider III","Boarding Party III","Siege III","Bombardment III"], + effect:"1 additional attack per turn", + unitTypes:["Ranged","Siege","WaterMelee","WaterRanged","WaterSubmarine","Fighter","Bomber"] + } + + { + name:"Ambush I", + effect:"Bonus vs Armor 25%", + unitTypes:["Melee","Fighter","Bomber"] + } + { + name:"Ambush II", + prerequisites:["Ambush I"], + effect:"Bonus vs Armor 25%", + unitTypes:["Melee","Fighter","Bomber"] + } + + + // Water ranged and air units + { + name:"Bombardment I", + effect:"Bonus vs land units 33%", + unitTypes:["WaterRanged","Fighter","Bomber"] + } + { + name:"Bombardment II", + prerequisites:["Bombardment I"], + effect:"Bonus vs land units 33%", + unitTypes:["WaterRanged","Fighter","Bomber"] + } + { + name:"Bombardment III", + prerequisites:["Bombardment II"], + effect:"Bonus vs land units 34%", + unitTypes:["WaterRanged","Fighter","Bomber"] + } + + // Targeting I has different requirements for air and waterranged units, this was the cleanest way to do so + { + name:"Targeting I", + effect:"Bonus vs water units 15%", + unitTypes:["WaterRanged"] + } + { + name:"Targeting I (air)", + prerequisites:["Interception I","Dogfighting I", "Siege I","Bombardment I"] + effect:"Bonus vs water units 15%", + unitTypes:["Fighter","Bomber"] + } + { + name:"Targeting II", + prerequisites:["Targeting I","Targeting I (air)"], + effect:"Bonus vs water units 15%", + unitTypes:["WaterRanged","Fighter","Bomber"] + } + { + name:"Targeting III", + prerequisites:["Targeting II"], + effect:"Bonus vs water units 15%", + unitTypes:["WaterRanged"] + } +] \ No newline at end of file diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 19831d16da..8f43751dbd 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -295,25 +295,30 @@ class Battle(val gameInfo:GameInfo) { fun intercept(attacker:MapUnitCombatant, defender: ICombatant){ val attackedTile = defender.getTile() - for(unit in defender.getCivInfo().getCivUnits().filter { it.canIntercept(attackedTile) }){ - if(Random().nextFloat() > 100f/unit.interceptChance()) continue - val damage = BattleDamage().calculateDamageToDefender(MapUnitCombatant(unit),attacker) + for(interceptor in defender.getCivInfo().getCivUnits().filter { it.canIntercept(attackedTile) }){ + if(Random().nextFloat() > 100f/interceptor.interceptChance()) continue + + var damage = BattleDamage().calculateDamageToDefender(MapUnitCombatant(interceptor),attacker) + damage += damage*interceptor.interceptDamagePercentBonus()/100 + if(attacker.unit.hasUnique("Reduces damage taken from interception by 50%")) damage/=2 + attacker.takeDamage(damage) + interceptor.attacksThisTurn++ val attackerName = attacker.getName() - val interceptorName = unit.name + val interceptorName = interceptor.name if(attacker.isDefeated()){ attacker.getCivInfo().addNotification("Our [$attackerName] was destroyed by an intercepting [$interceptorName]", Color.RED) defender.getCivInfo().addNotification("Our [$interceptorName] intercepted and destroyed an enemy [$attackerName]", - unit.currentTile.position, Color.RED) + interceptor.currentTile.position, Color.RED) } else{ attacker.getCivInfo().addNotification("Our [$attackerName] was attacked by an intercepting [$interceptorName]", Color.RED) defender.getCivInfo().addNotification("Our [$interceptorName] intercepted and attacked an enemy [$attackerName]", - unit.currentTile.position, Color.RED) + interceptor.currentTile.position, Color.RED) } return } diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 6b825a4e73..8db9a9c2d6 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -180,6 +180,7 @@ class MapUnit { if(type.isMelee()) return 1 var range = baseUnit().range if(hasUnique("+1 Range")) range++ + if(hasUnique("+2 Range")) range+=2 return range } @@ -475,7 +476,8 @@ class MapUnit { } fun canIntercept(attackedTile: TileInfo): Boolean { - return interceptChance()!=0 && attacksThisTurn==0 + return interceptChance()!=0 + && (attacksThisTurn==0 || hasUnique("1 extra Interception may be made per turn") && attacksThisTurn<2) && currentTile.arialDistanceTo(attackedTile) <= getRange() } @@ -483,8 +485,17 @@ class MapUnit { val interceptUnique = getUniques() .firstOrNull { it.endsWith(" chance to intercept air attacks") } if(interceptUnique==null) return 0 - val percent = Regex("\\d+").find(interceptUnique)!!.value - return percent.toInt() + val percent = Regex("\\d+").find(interceptUnique)!!.value.toInt() + return percent + } + + fun interceptDamagePercentBonus():Int{ + var sum=0 + for(unique in getUniques().filter { it.startsWith("Bonus when intercepting") }){ + val percent = Regex("\\d+").find(unique)!!.value.toInt() + sum += percent + } + return sum } //endregion