Added Medieval era units

Techs now display imformation baed on what's dependant on them
Buildings uniques now in humanspeak
This commit is contained in:
Yair Morgenstern
2018-05-18 17:18:47 +03:00
parent 017d1f3f89
commit 398b612d8c
18 changed files with 199 additions and 154 deletions

View File

@ -62,7 +62,7 @@
baseDescription: "Adds 1 science for each 2 population in the city.",
hurryCostModifier:25,
maintenance:1,
unique:"SciencePer2Pop",
unique:"Science Per 2 Population",
requiredTech:"Writing"
},
{
@ -79,7 +79,7 @@
culture:1,
greatPersonPoints:{production:1},
isWonder:true,
unique:"WorkerConstruction",
unique:"Worker construction increased 25%, provides 2 free workers",
requiredTech:"Mathematics"
},
{
@ -117,7 +117,7 @@
culture:1,
greatPersonPoints:{production:1},
isWonder:true,
unique:"GoldenAgeLengthIncrease",
unique:"Golden Age length increases +50%",
requiredTech:"Civil Service"
},
{
@ -188,7 +188,7 @@
culture:1,
greatPersonPoints:{culture:1},
isWonder:true,
unique:"GreatPersonGenerationIncrease",
unique:"+33% great person generation in all cities",
requiredTech:"Theology"
},
{
@ -207,7 +207,7 @@
greatPersonPoints:{gold:1},
culture:1,
isWonder:true,
unique:"TradeRouteGoldIncrease",
unique:"Gold from all trade routes +25%",
requiredTech:"Currency"
},
{
@ -215,7 +215,7 @@
baseDescription: "40% of food is carried over after a new citizen is born",
maintenance:1,
hurryCostModifier:25,
unique:"FoodCarriesOver"
unique:"40% of food is carried over after a new citizen is born"
requiredTech:"Engineering"
},
{
@ -245,7 +245,7 @@
percentStatBonus:{science:33},
specialistSlots:{science:2},
requiredBuilding:"Library",
unique:"JunglesProvideScience",
unique:"Jungles provide +2 science",
requiredTech:"Education"
},
{
@ -261,11 +261,11 @@
},
{
name:"Angkor Wat",
baseDescription: "Cost of aquiring new tiles reduced by 25%",
baseDescription: "Cost of acquiring new tiles reduced by 25%",
culture:1,
greatPersonPoints:{production:1},
isWonder:true,
unique:"NewTileCostReduction",
unique:"Cost of acquiring new tiles reduced by 25%",
requiredTech:"Chivalry"
},
{
@ -310,7 +310,7 @@
baseDescription: "Culture in all cities increased by 25%",
culture:1,
isWonder:true,
unique:"CultureIncrease",
unique:"Culture in all cities increased by 25%",
requiredTech:"Acoustics"
},
{
@ -328,7 +328,7 @@
baseDescription: "Unhappiness from population decreased by 10%",
culture:1,
isWonder:true,
unique:"CitizenUnhappinessDecreased",
unique:"Unhappiness from population decreased by 10%",
requiredTech:"Banking"
},
{
@ -346,7 +346,7 @@
culture:1,
happiness:4,
isWonder:true,
unique:"EmpireEntersGoldenAge",
unique:"Empire enters golden age",
requiredTech:"Acoustics"
},
{
@ -395,7 +395,7 @@
requiredBuilding:"University",
maintenance:3,
hurryCostModifier:0,
unique:"SciencePer2Pop",
unique:"Science Per 2 Population",
requiredTech:"Scientific Theory"
},
{
@ -434,7 +434,7 @@
baseDescription: "Culture cost of adopting new Policies reduced by 10%",
culture:5,
isWonder:true,
unique:"PolicyCostReduction",
unique:"Culture cost of adopting new Policies reduced by 10%",
requiredTech:"Flight"
},
{
@ -452,7 +452,7 @@
culture:1,
happiness:5
isWonder:true,
unique:"HappinessPerSocialPolicy",
unique:"Provides 1 happiness per social policy",
requiredTech:"Radio"
},
{
@ -496,14 +496,14 @@
maintenance:3,
cannotBeBuiltWith:"Nuclear Plant",
requiredTech:"Ecology",
unique:"MustBeNextToDesert"
unique:"Must be next to desert"
},
{
name:"Apollo Program",
baseDescription: "Allows the building of spaceship parts",
cost:1500,
isWonder:true,
unique:"ApolloProgram",
unique:"Enables construction of Spaceship parts",
requiredTech:"Rocketry"
},
{
@ -523,7 +523,7 @@
production:3,
requiredResource:"Aluminum",
cost:360,
unique:"SpaceshipPartProductionBoost"
unique:"Increases production of spaceship parts by 50%"
requiredTech:"Robotics"
},
{
@ -531,27 +531,27 @@
baseDescription: "Spaceship part",
requiredResource:"Aluminum",
requiredTech:"Robotics",
unique:"SpaceshipPart"
unique:"Spaceship part"
},
{
name:"SS Cockpit",
baseDescription: "Spaceship part",
requiredResource:"Aluminum",
requiredTech:"Satellites",
unique:"SpaceshipPart"
unique:"Spaceship part"
},
{
name:"SS Engine",
baseDescription: "Spaceship part",
requiredResource:"Aluminum",
requiredTech:"Particle Physics",
unique:"SpaceshipPart"
unique:"Spaceship part"
},
{
name:"SS Statis Chamber",
baseDescription: "Spaceship part",
requiredResource:"Aluminum",
requiredTech:"Nanotechnology",
unique:"SpaceshipPart"
unique:"Spaceship part"
}
]

View File

@ -8,17 +8,14 @@
{
name:"Pottery",
row:2,
description:"Allows your cities to construct a granary, which provides food."
},
{
name:"Animal Husbandry",
row:5,
description:"Reveals horses, and allows workers to build pastures, which improve various animal resources."
row:5
},
{
name:"Mining",
row:9,
description:"Allows workers to build mines, which grant access to several strategic and luxury resources and increases production. Also allows workers to clear forests."
row:9
}
]
@ -34,43 +31,37 @@
name:"Sailing",
row:1,
prerequisites:["Pottery"],
description:"Does nothing since we have no sea tiles - In theory, Allows access to sea resources by building work boats"
baseDescription:"Does nothing since we have no sea tiles - In theory, Allows access to sea resources by building work boats"
},*/
{
name:"Calendar",
row:2,
prerequisites:["Pottery"],
description:"Allows your workers to build Plantations, which grant access to several luxury resources, and the Stonehenge wonder, providing culture"
prerequisites:["Pottery"]
},
{
name:"Writing",
row:3,
prerequisites:["Pottery"],
description:"Allows your cities to construct libraries, which increases science produced. Also enables construction of the Great Library wonder."
prerequisites:["Pottery"]
},
{
name:"Trapping",
row:5,
prerequisites:["Animal Husbandry"],
description:"Allows your workers to build Camps, increasing gold and granting access to several luxury resources. Also enables construction of Circuses, providing happiness."
prerequisites:["Animal Husbandry"]
},
{
name:"The Wheel",
row:6,
prerequisites:["Animal Husbandry"],
description:"Allows construction of roads, speeding movement and providing gold from trade. ALSO WATERWHEELS-TODO"
prerequisites:["Animal Husbandry"]
},
{
name:"Masonry",
row:9,
prerequisites:["Mining"],
description:"Allows workers to build quarries, granting access to stone and marble resources."
prerequisites:["Mining"]
},
{
name:"Bronze Working",
row:10,
prerequisites:["Mining"],
description:"Allows workers to remove jungles and clear marshes"
prerequisites:["Mining"]
}
]
},
@ -86,25 +77,22 @@
cost:95,
row:1,
prerequisites:["Sailing"],
description:"Does nothing since we have no sea tiles - In theory, Allows construction of lighthouses, providing more food for sea tiles"
baseDescription:"Does nothing since we have no sea tiles - In theory, Allows construction of lighthouses, providing more food for sea tiles"
},*/
{
name:"Horseback Riding",
row:5,
prerequisites:["Trapping","The Wheel"],
description:"Allows construction of stables, which increase production on cattle, sheep and horses, and the Circus Maximus wonder"
prerequisites:["Trapping","The Wheel"]
},
{
name:"Mathematics",
row:7,
prerequisites:["The Wheel"],
description: "Enables construction of the Hanging Gardens wonder. Also enables construction of the Pyramids wonder."
prerequisites:["The Wheel"]
},
{
name:"Construction",
row:9,
prerequisites:["Masonry"],
description:"Allows construction of colosseums, which generate happiness, and building lumber mills on forests, providing production"
prerequisites:["Masonry"]
}
]
},
@ -118,26 +106,23 @@
{
name:"Philosophy",
row:3,
prerequisites:["Writing","Calendar"],
description:"Allows construction of temples, which generate culture, and the Oracle wonder"
prerequisites:["Writing","Calendar"]
},
{
name:"Currency",
row:7,
prerequisites:["Mathematics"],
description:"Enables construction of Markets and Mints, which increase gold, and conversion of city production to gold. Also enables the Machu Pichu wonder."
baseDescription:"Enables conversion of city production to gold"
},
{
name:"Engineering",
row:8,
prerequisites:["Mathematics","Construction"],
description:"Enables construction of aqueducts, which speed up city growth"
prerequisites:["Mathematics","Construction"]
},
{
name:"Iron Working",
row:10,
prerequisites:["Bronze Working"],
description:"Reveals Iron on map"
prerequisites:["Bronze Working"]
}
]
},
@ -151,26 +136,22 @@
{
name:"Theology",
row:2,
prerequisites:["Philosophy"],
description:"Enables construction of Monasteries, providing culture, and the Hagia Sophia, increasing Great Person generation"
prerequisites:["Philosophy"]
},
{
name:"Civil Service",
row:4,
prerequisites:["Horseback Riding","Philosophy"],
description:"Enables the Chichen Itza wonder, which increases the length of golden ages, and the National College, increasing science"
prerequisites:["Horseback Riding","Philosophy"]
},
{
name:"Physics",
row:8,
prerequisites:["Engineering"],
description:"Enables construction of the Porcelain Tower, increasing production to science production"
prerequisites:["Engineering"]
},
{
name:"Metal Casting",
row:10,
prerequisites:["Construction","Iron Working"],
description:"Enables construction of Forges and Workshops, increasing production, and the Notre Dame wonder, providing happiness,"
prerequisites:["Construction","Iron Working"]
}
]
},
@ -186,25 +167,24 @@
row:1,
cost:415,
prerequisites:["Optics"],
description:"Does nothing since we have no sea tiles - In theory, allows construction of harbors"
baseDescription:"Does nothing since we have no sea tiles - In theory, allows construction of harbors"
},*/
{
name:"Education",
row:3,
prerequisites:["Theology","Civil Service"],
description:"Allows cities to convert production to science, construction of Universities which provide science"
baseDescription:"Allows cities to convert production to science,"
},
{
name:"Chivalry",
row:5,
prerequisites:["Civil Service","Currency"],
description:"Enables construction of the Angkor Wat wonder, reducing cost of aquiring new tiles, construction of Trading Posts on tiles, providing gold"
prerequisites:["Civil Service","Currency"]
},
{
name:"Machinery",
row:8,
prerequisites:["Physics","Metal Casting"],
description:"Speeds movement speed on roads and allows you to construct the Ironworks wonder, which gives a massive boost in production"
baseDescription:"Speeds movement speed on roads"
}
]
},
@ -218,26 +198,22 @@
{
name:"Astronomy",
row:2,
prerequisites:[/*"Compass",*/"Education"],
description:"Enables construction of Observatories in cities near mountains"
prerequisites:[/*"Compass",*/"Education"]
},
{
name:"Acoustics",
row:4,
prerequisites:["Education","Chivalry"],
description:"Enables construction of Opera Houses and the Sistine Chapel, providing culture"
prerequisites:["Education","Chivalry"]
},
{
name:"Banking",
row:6,
prerequisites:["Chivalry"],
description:"Enables construction of banks, increasing gold, and allows construciton of the Forbidden Palace, decreasing unhappiness form population"
prerequisites:["Chivalry"]
},
{
name:"Printing Press",
row:8,
prerequisites:["Machinery","Physics"],
description:"Enables construction of the Theatre and Taj Mahal, increasing happiness"
prerequisites:["Machinery","Physics"]
},
]
},
@ -252,25 +228,22 @@
name:"Navigation",
row:2,
prerequisites:["Astronomy"],
description:"Does nothing since we have no sea tiles - In theory, allows construction of Frigates and Seaports"
baseDescription:"Does nothing since we have no sea tiles - In theory, allows construction of Frigates and Seaports"
},*/
{
name:"Archaeology",
row:2,
prerequisites:["Astronomy"],
description:"Allows construction of Museums and the Hermitage and Louvre wonders, providing culture"
prerequisites:["Astronomy"]
},
{
name:"Economics",
row:6,
prerequisites:["Banking","Printing Press"],
description:"Camps and Trading Posts provide +1 gold, allows construction of Windmill and Big Ben"
prerequisites:["Banking","Printing Press"]
},
{
name:"Chemistry",
row:9,
prerequisites:["Machinery"],
description:"Mines and Quarries provide +1 production"
prerequisites:["Machinery"]
}
]
},
@ -284,14 +257,12 @@
{
name:"Scientific Theory",
row:4,
prerequisites:["Archaeology","Acoustics","Economics"],
description:"Reveals coal and allows construction of Public Schools, providing science. Also improves science from Academy."
prerequisites:["Archaeology","Acoustics","Economics"]
},
{
name:"Fertilizer",
row:7,
prerequisites:["Chemistry"],
description:"+1 food from Farms, Plantations and Pastures"
prerequisites:["Chemistry"]
}
]
},
@ -305,20 +276,17 @@
{
name:"Biology",
row:3,
prerequisites:["Archaeology","Scientific Theory","Fertilizer"],
description:"Reveals oil and allows construction of oil wells, and construction of hospitals, providing a large amount of food"
prerequisites:["Archaeology","Scientific Theory","Fertilizer"]
},
{
name:"Electricity",
row:5,
prerequisites:["Scientific Theory"],
description:"Reveals Aluminium on map and allows construction of stock exchange, increasing gold"
prerequisites:["Scientific Theory"]
},
{
name:"Steam Power",
row:7,
prerequisites:["Scientific Theory","Chemistry"],
description:"Enables construction of factories, boosting production, and increases produciton of lumber mills, "
prerequisites:["Scientific Theory","Chemistry"]
}
]
},
@ -333,19 +301,17 @@
name:"Refrigeration",
row:4,
prerequisites:["Electricity"],
description:"Does nothing since we have no sea tiles - In theory, allows construction of offshore platforms and submarines"
baseDescription:"Does nothing since we have no sea tiles - In theory, allows construction of offshore platforms and submarines"
},*/
{
name:"Radio",
row:5,
prerequisites:["Electricity"],
description:"Allows construction of broadcast towers and the Eiffel Tower, increasing culture"
prerequisites:["Electricity"]
},
{
name:"Combustion",
row:8,
prerequisites:["Steam Power"],
description:"Allows construction of railroads, providing fast transport and a 25% production boost to cities"
prerequisites:["Steam Power"]
}
]
},
@ -359,26 +325,23 @@
{
name:"Plastics",
row:3,
prerequisites:["Biology"],
description:"Allows construction of Research Lab, increasing science"
prerequisites:["Biology"]
},/*
{
name:"Electronics",
row:5,
prerequisites:["Radio"],
description:"Contributes only war-relatied things - on hold until AI is introduced - todo"
baseDescription:"Contributes only war-relatied things - on hold until AI is introduced - todo"
},*/
{
name:"Mass Media",
row:6,
prerequisites:["Radio"],
description:"Allows construction of Stadiums and the Sydney Opera House, boosting happiness"
prerequisites:["Radio"]
},
{
name:"Flight",
row:7,
prerequisites:["Combustion"],
description:"Allows construction of the Cristo Redentor, reducing cost of new policies"
prerequisites:["Combustion"]
},
]
},
@ -391,20 +354,18 @@
{
name:"Pharmaceuticals",
row:3,
prerequisites:["Plastics"],
description:"Enables construction of medical labs, alowing for greater city growth"
prerequisites:["Plastics"]
},
{
name:"Computers",
row:5,
prerequisites:["Mass Media"],
description:"+10% science and production in all cities"
baseDescription:"+10% science and production in all cities"
},
{
name:"Nuclear Fission",
row:7,
prerequisites:["Combustion"],
description:"Allows construction of Nuclear Plants, increasing production"
prerequisites:["Combustion"]
}
]
},
@ -417,20 +378,17 @@
{
name:"Ecology",
row:3,
prerequisites:["Pharmaceuticals"],
description:"Enables construction of Solar Plants on cities near deserts, increasing production"
prerequisites:["Pharmaceuticals"]
},
{
name:"Robotics",
row:4,
prerequisites:["Computers"],
description:"Allow construction of SS Boosters, a vital part of the spaceship, and the Spaceship Factory, which speeds the production of spaceship parts"
prerequisites:["Computers"]
},
{
name:"Rocketry",
row:6,
prerequisites:["Flight","Computers"],
description:"Allows you to construct the Apollo Project, to find a way off of this planet!"
prerequisites:["Flight","Computers"]
}
]
},
@ -444,20 +402,17 @@
{
name:"Nanotechnology",
row:3,
prerequisites:["Robotics","Ecology"],
description:"Allow construction of the SS Statis Chamber, a vital part of the spaceship"
prerequisites:["Robotics","Ecology"]
}
{
name:"Satellites",
row:5,
prerequisites:["Rocketry","Computers","Ecology"],
description:"Allow construction of the SS Cockpit, a vital part of the spaceship"
prerequisites:["Rocketry","Computers","Ecology"]
}
{
name:"Particle Physics",
row:6,
prerequisites:["Ecology","Computers","Nuclear Fission"],
description:"Allow construction of the SS Engine, a vital part of the spaceship"
prerequisites:["Ecology","Computers","Nuclear Fission"]
}
]
},
@ -472,7 +427,7 @@
name:"Future Tech",
row:5,
prerequisites:["Nanotechnology","Particle Physics","Satellites"],
description:"Who knows what the future holds?"
baseDescription:"Who knows what the future holds?"
}
]
}

View File

@ -109,7 +109,7 @@
hurryCostModifier:20
},
/* Medieval Era */
// Medieval Era
{
name:"Crossbowman",
baseDescription: "",
@ -120,7 +120,41 @@
cost: 120,
requiredTech:"Machinery",
hurryCostModifier:20
}
},
{
name:"Trebuchet",
baseDescription: "",
unitType:"Siege",
movement:2,
strength:12,
rangedStrength:14,
cost: 120,
requiredTech:"Physics",
uniques:["Bonus vs City 200%","No defensive terrain bonus","Must set up to ranged attack","Limited Visibility"],
hurryCostModifier:20
},
{
name:"Longswordsman",
baseDescription: "",
unitType:"Melee",
movement:2,
strength:21,
cost: 120,
requiredTech:"Steel",
requiredResource:"Iron",
hurryCostModifier:20
},
{
name:"Pikeman",
baseDescription: "",
unitType:"Melee",
movement:2,
strength:16,
cost: 90,
requiredTech:"Civil Service",
uniques:["Bonus vs Mounted 50%"],
hurryCostModifier:20
},
/* Great people */

View File

@ -27,7 +27,7 @@ class CityConstructions {
val stats = Stats()
for (building in getBuiltBuildings())
stats.add(building.getStats(cityInfo.civInfo.policies.adoptedPolicies))
stats.science += (cityInfo.buildingUniques.count({ it == "SciencePer2Pop" }) * cityInfo.population.population / 2).toFloat()
stats.science += (cityInfo.buildingUniques.count({ it == "Science Per 2 Population" }) * cityInfo.population.population / 2).toFloat()
return stats
}

View File

@ -22,7 +22,7 @@ class CityExpansionManager {
fun getCultureToNextTile(): Int {
val numTilesClaimed = cityInfo.tiles.size - 7
var cultureToNextTile = 6 * Math.pow(numTilesClaimed + 1.4813, 1.3)
if (cityInfo.civInfo.buildingUniques.contains("NewTileCostReduction")) cultureToNextTile *= 0.75 //Speciality of Angkor Wat
if (cityInfo.civInfo.buildingUniques.contains("Cost of acquiring new tiles reduced by 25%")) cultureToNextTile *= 0.75 //Speciality of Angkor Wat
if (cityInfo.civInfo.policies.isAdopted("Tradition")) cultureToNextTile *= 0.75
return Math.round(cultureToNextTile).toInt()
}

View File

@ -67,7 +67,7 @@ class CityInfo {
if (building.greatPersonPoints != null)
greatPersonPoints.add(building.greatPersonPoints!!)
if (civInfo.buildingUniques.contains("GreatPersonGenerationIncrease"))
if (civInfo.buildingUniques.contains("+33% great person generation in all cities"))
greatPersonPoints = greatPersonPoints.times(1.33f)
if (civInfo.policies.isAdopted("Entrepreneurship"))
greatPersonPoints.gold *= 1.25f

View File

@ -30,7 +30,7 @@ class CityStats {
val civInfo = cityInfo.civInfo
var goldFromTradeRoute = civInfo.getCapital().population.population * 0.15 + cityInfo.population.population * 1.1 - 1 // Calculated by http://civilization.wikia.com/wiki/Trade_route_(Civ5)
if (civInfo.policies.isAdopted("Trade Unions")) goldFromTradeRoute += 2.0
if (civInfo.buildingUniques.contains("TradeRouteGoldIncrease")) goldFromTradeRoute *= 1.25 // Machu Pichu speciality
if (civInfo.buildingUniques.contains("Gold from all trade routes +25%")) goldFromTradeRoute *= 1.25 // Machu Pichu speciality
stats.gold += goldFromTradeRoute.toFloat()
}
return stats
@ -102,7 +102,7 @@ class CityStats {
var unhappinessFromCitizens = cityInfo.population.population.toFloat()
if (civInfo.policies.isAdopted("Democracy"))
unhappinessFromCitizens -= cityInfo.population.getNumberOfSpecialists() * 0.5f
if (civInfo.buildingUniques.contains("CitizenUnhappinessDecreased"))
if (civInfo.buildingUniques.contains("Unhappiness from population decreased by 10%"))
unhappinessFromCitizens *= 0.9f
if (civInfo.policies.isAdopted("Aristocracy"))
unhappinessFromCitizens *= 0.95f
@ -163,6 +163,14 @@ class CityStats {
return stats
}
private fun getStatPercentBonusesFromWonders(): Stats {
val stats = Stats()
val civUniques = cityInfo.civInfo.buildingUniques
if (civUniques.contains("Culture in all cities increased by 25%")) stats.culture += 25f
return stats
}
private fun getStatPercentBonusesFromPolicies(policies: HashSet<String>, cityConstructions: CityConstructions): Stats {
val stats = Stats()
@ -200,6 +208,8 @@ class CityStats {
val statPercentBonuses = cityInfo.cityConstructions.getStatPercentBonuses()
statPercentBonuses.add(getStatPercentBonusesFromGoldenAge(cityInfo.civInfo.goldenAges.isGoldenAge()))
statPercentBonuses.add(getStatPercentBonusesFromPolicies(civInfo.policies.adoptedPolicies, cityInfo.cityConstructions))
// from wonders - Culture in all cities increased by 25%
statPercentBonuses.add(getStatPercentBonusesFromWonders())
statPercentBonuses.add(getStatPercentBonusesFromRailroad())
statPercentBonuses.add(getStatPercentBonusesFromMarble())
statPercentBonuses.add(getStatPercentBonusesFromComputers())

View File

@ -56,7 +56,7 @@ class PopulationManager {
// growth!
{
foodStored -= getFoodToNextPopulation()
if (cityInfo.buildingUniques.contains("FoodCarriesOver")) foodStored += (0.4f * getFoodToNextPopulation()).toInt() // Aqueduct special
if (cityInfo.buildingUniques.contains("40% of food is carried over after a new citizen is born")) foodStored += (0.4f * getFoodToNextPopulation()).toInt() // Aqueduct special
population++
autoAssignPopulation()
cityInfo.civInfo.addNotification(cityInfo.name + " has grown!", cityInfo.location)

View File

@ -91,7 +91,7 @@ class CivilizationInfo {
happiness += getCivResources().keys
.count { it.resourceType === ResourceType.Luxury } * happinessPerUniqueLuxury
happiness += cities.sumBy { it.cityStats.getCityHappiness().toInt() }
if (buildingUniques.contains("HappinessPerSocialPolicy"))
if (buildingUniques.contains("Provides 1 happiness per social policy"))
happiness += policies.getAdoptedPolicies().count { !it.endsWith("Complete") }
return happiness
}
@ -182,7 +182,7 @@ class CivilizationInfo {
.flatMap { it.neighbors } // tiles adjacent to city tiles
viewablePositions += gameInfo.tileMap.values
.filter { it.unit != null && it.unit!!.owner == civName }
.flatMap { it.getViewableTiles(2)} // Tiles within 2 tiles of units
.flatMap { it.getViewableTiles(it.unit!!.getVisibilityRange())} // Tiles within 2 tiles of units
viewablePositions.map { it.position }.filterNot { exploredTiles.contains(it) }.toCollection(exploredTiles)
return viewablePositions
}

View File

@ -16,7 +16,7 @@ class GoldenAgeManager {
fun enterGoldenAge() {
var turnsToGoldenAge = 10.0
if (civInfo.buildingUniques.contains("GoldenAgeLengthIncrease")) turnsToGoldenAge *= 1.5
if (civInfo.buildingUniques.contains("Golden Age length increases +50%")) turnsToGoldenAge *= 1.5
if (civInfo.policies.isAdopted("Freedom Complete")) turnsToGoldenAge *= 1.5
turnsLeftForCurrentGoldenAge += turnsToGoldenAge.toInt()
civInfo.addNotification("You have entered a golden age!", null)

View File

@ -26,7 +26,7 @@ class PolicyManager {
var cityModifier = 0.3 * (civInfo.cities.size - 1)
if (isAdopted("Representation")) cityModifier *= (2 / 3f).toDouble()
if (isAdopted("Piety Complete")) baseCost *= 0.9
if (civInfo.buildingUniques.contains("PolicyCostReduction")) baseCost *= 0.9
if (civInfo.buildingUniques.contains("Culture cost of adopting new Policies reduced by 10%")) baseCost *= 0.9
val cost: Int = Math.round(baseCost * (1 + cityModifier)).toInt()
return cost - (cost % 5)
}

View File

@ -124,4 +124,10 @@ class MapUnit {
override fun toString(): String {
return name +" - "+owner
}
fun getVisibilityRange(): Int {
var visibilityRange = 2
if(hasUnique("Limited Visibility")) visibilityRange-=1
return visibilityRange
}
}

View File

@ -111,7 +111,7 @@ class TileInfo {
if (stats.production < 0) stats.production = 0f
if ("Jungle" == terrainFeature && city != null
&& city.buildingUniques.contains("JunglesProvideScience"))
&& city.buildingUniques.contains("Jungles provide +2 science"))
stats.science += 2f
if (stats.gold != 0f && observingCiv.goldenAges.isGoldenAge())
stats.gold++

View File

@ -44,6 +44,12 @@ class Building : NamedStats(), IConstruction{
fun getRequiredTech(): Technology = GameBasics.Technologies[requiredTech]!!
fun getShortDescription(): String { // should fit in one line
var str = getStats(hashSetOf()).toString()
if(unique!=null) str += ", "+ unique!!
return str
}
fun getStats(adoptedPolicies: HashSet<String>): Stats {
val stats = this.clone()
if (adoptedPolicies.contains("Organized Religion") && hashSetOf("Monument", "Temple", "Monastery").contains(name))
@ -141,7 +147,7 @@ class Building : NamedStats(), IConstruction{
if (requiredBuildingInAllCities != null && civInfo.cities.any { !it.cityConstructions.isBuilt(requiredBuildingInAllCities!!) })
return false
if (cannotBeBuiltWith != null && construction.isBuilt(cannotBeBuiltWith!!)) return false
if ("MustBeNextToDesert" == unique && !construction.cityInfo.getCenterTile().getTilesInDistance(1).any { it.baseTerrain == "Desert" })
if ("Must be next to desert" == unique && !construction.cityInfo.getCenterTile().getTilesInDistance(1).any { it.baseTerrain == "Desert" })
return false
if (requiredResource != null && !civInfo.getCivResources().containsKey(GameBasics.TileResources[requiredResource!!]))
return false
@ -158,8 +164,8 @@ class Building : NamedStats(), IConstruction{
if (!containsResourceWithImprovement) return false
}
if ("SpaceshipPart" == unique) {
if (!civInfo.buildingUniques.contains("ApolloProgram")) return false
if ("Spaceship part" == unique) {
if (!civInfo.buildingUniques.contains("Allows the building of spaceship parts")) return false
if (civInfo.scienceVictory.unconstructedParts()[name] == 0) return false // Don't need to build any more of these!
}
return true
@ -168,7 +174,7 @@ class Building : NamedStats(), IConstruction{
override fun postBuildEvent(construction: CityConstructions) {
val civInfo = construction.cityInfo.civInfo
if (unique == "SpaceshipPart") {
if (unique == "Spaceship part") {
civInfo.scienceVictory.currentParts.add(name, 1)
UnCivGame.Current.screen = VictoryScreen()
return
@ -178,12 +184,12 @@ class Building : NamedStats(), IConstruction{
if (providesFreeBuilding != null && !construction.builtBuildings.contains(providesFreeBuilding!!))
construction.builtBuildings.add(providesFreeBuilding!!)
when (unique) {
"ApolloProgram" ->
"Enables construction of Spaceship parts" ->
if(construction.cityInfo.civInfo.isPlayerCivilization())
UnCivGame.Current.screen = VictoryScreen()
"EmpireEntersGoldenAge" -> civInfo.goldenAges.enterGoldenAge()
"Empire enters golden age" -> civInfo.goldenAges.enterGoldenAge()
"Free Great Artist Appears" -> civInfo.addGreatPerson("Great Artist")
"WorkerConstruction" -> {
"Worker construction increased 25%, provides 2 free workers" -> {
civInfo.placeUnitNearTile(construction.cityInfo.location, "Worker")
civInfo.placeUnitNearTile(construction.cityInfo.location, "Worker")
}

View File

@ -1,14 +1,47 @@
package com.unciv.models.gamebasics
import java.util.HashSet
import java.util.*
class Technology {
class Technology : ICivilopedia {
override val description: String
get(){
val SB=StringBuilder()
if(baseDescription!=null) SB.appendln(baseDescription)
val enabledUnits = GameBasics.Units.values.filter { it.requiredTech==name }
if(enabledUnits.isNotEmpty()) SB.appendln("Units enabled: "+enabledUnits.map { it.name }.joinToString())
val enabledBuildings = GameBasics.Buildings.values.filter { it.requiredTech==name }
val regularBuildings = enabledBuildings.filter { !it.isWonder }
if(regularBuildings.isNotEmpty())
SB.appendln("Buildings enabled: "+regularBuildings.map { it.name + " ("+it.getShortDescription()+")" }.joinToString())
val wonders = enabledBuildings.filter { it.isWonder }
if(wonders.isNotEmpty()) SB.appendln("Wonders enabled: "+wonders.map { it.name }.joinToString())
val revealedResource = GameBasics.TileResources.values.filter { it.revealedBy==name }.firstOrNull() // can only be one
if(revealedResource!=null) SB.appendln("Reveals $revealedResource on map")
val tileImprovements = GameBasics.TileImprovements.values.filter { it.techRequired==name }
if(tileImprovements.isNotEmpty()) SB.appendln("Tile improvements enabled: "+tileImprovements.map { it.name }.joinToString())
val improvedImprovements = GameBasics.TileImprovements.values.filter { it.improvingTech==name }.groupBy { it.improvingTechStats.toString()!! }
improvedImprovements.forEach{
val impimpString = it.value.joinToString { it.name } +" provide" + (if(it.value.size==1) "s" else "") +" "+it.key
SB.appendln(impimpString)
}
return SB.toString().trim()
}
lateinit var name: String
var description: String? = null
var baseDescription: String? = null
var cost: Int = 0
@JvmField var prerequisites = HashSet<String>()
var prerequisites = HashSet<String>()
@JvmField var column: TechColumn? = null // The column that this tech is in the tech tree
@JvmField var row: Int = 0
var column: TechColumn? = null // The column that this tech is in the tech tree
var row: Int = 0
override fun toString(): String {
return name
}
}

View File

@ -16,7 +16,7 @@ class TileImprovement : NamedStats(), ICivilopedia {
private val turnsToBuild: Int = 0 // This is the base cost.
fun getTurnsToBuild(civInfo: CivilizationInfo): Int {
var realTurnsToBuild = turnsToBuild.toFloat()
if (civInfo.buildingUniques.contains("WorkerConstruction"))
if (civInfo.buildingUniques.contains("Worker construction increased 25%, provides 2 free workers"))
realTurnsToBuild *= 0.75f
if (civInfo.policies.isAdopted("Citizenship"))
realTurnsToBuild *= 0.75f

View File

@ -39,6 +39,7 @@ class CivilopediaScreen : CameraStageBaseScreen() {
map["Terrains"] = GameBasics.Terrains.values
map["Tile Improvements"] = GameBasics.TileImprovements.values
map["Units"] = GameBasics.Units.values
map["Technologies"] = GameBasics.Technologies.values
val nameList = List<ICivilopedia>(CameraStageBaseScreen.skin)

View File

@ -55,7 +55,7 @@ class VictoryScreen : PickerScreen() {
fun scienceVictoryColumn():Table{
val t = Table()
t.defaults().pad(5f)
t.add(getMilestone("Built Apollo Program",civInfo.buildingUniques.contains("ApolloProgram"))).row()
t.add(getMilestone("Built Apollo Program",civInfo.buildingUniques.contains("Allows the building of spaceship parts"))).row()
val scienceVictory = civInfo.scienceVictory