From 398b612d8c6dab30f5ce7b266f6ec561e187d3c1 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 18 May 2018 17:18:47 +0300 Subject: [PATCH] Added Medieval era units Techs now display imformation baed on what's dependant on them Buildings uniques now in humanspeak --- android/assets/jsons/Buildings.json | 48 +++--- android/assets/jsons/Techs.json | 155 +++++++----------- android/assets/jsons/Units.json | 38 ++++- .../com/unciv/logic/city/CityConstructions.kt | 2 +- .../unciv/logic/city/CityExpansionManager.kt | 2 +- core/src/com/unciv/logic/city/CityInfo.kt | 2 +- core/src/com/unciv/logic/city/CityStats.kt | 14 +- .../com/unciv/logic/city/PopulationManager.kt | 2 +- .../logic/civilization/CivilizationInfo.kt | 4 +- .../logic/civilization/GoldenAgeManager.kt | 2 +- .../unciv/logic/civilization/PolicyManager.kt | 2 +- core/src/com/unciv/logic/map/MapUnit.kt | 6 + core/src/com/unciv/logic/map/TileInfo.kt | 2 +- .../com/unciv/models/gamebasics/Building.kt | 24 ++- .../com/unciv/models/gamebasics/Technology.kt | 45 ++++- .../models/gamebasics/TileImprovement.kt | 2 +- core/src/com/unciv/ui/CivilopediaScreen.kt | 1 + core/src/com/unciv/ui/VictoryScreen.kt | 2 +- 18 files changed, 199 insertions(+), 154 deletions(-) diff --git a/android/assets/jsons/Buildings.json b/android/assets/jsons/Buildings.json index fcb37a780f..a767b85cf4 100644 --- a/android/assets/jsons/Buildings.json +++ b/android/assets/jsons/Buildings.json @@ -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" }, { @@ -98,7 +98,7 @@ culture:3, greatPersonPoints:{science:1}, isWonder:true, - unique:"FreeSocialPolicy", + unique:"Free Social Policy", requiredTech:"Philosophy" }, { @@ -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" }, { @@ -384,7 +384,7 @@ culture:1, happiness:4, isWonder:true, - unique:"FreeGreatArtistAppears", + unique:"Free Great Artist Appears", requiredTech:"Archaeology" }, { @@ -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" } ] \ No newline at end of file diff --git a/android/assets/jsons/Techs.json b/android/assets/jsons/Techs.json index 1486c0fa1d..aa358f2106 100644 --- a/android/assets/jsons/Techs.json +++ b/android/assets/jsons/Techs.json @@ -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?" } ] } diff --git a/android/assets/jsons/Units.json b/android/assets/jsons/Units.json index 6461f7f1d1..5818185b25 100644 --- a/android/assets/jsons/Units.json +++ b/android/assets/jsons/Units.json @@ -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 */ diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index d47819c055..6b037e295c 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -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 } diff --git a/core/src/com/unciv/logic/city/CityExpansionManager.kt b/core/src/com/unciv/logic/city/CityExpansionManager.kt index 5083b5dec4..c629cd290b 100644 --- a/core/src/com/unciv/logic/city/CityExpansionManager.kt +++ b/core/src/com/unciv/logic/city/CityExpansionManager.kt @@ -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() } diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 325cf4d963..fe86296b1d 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -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 diff --git a/core/src/com/unciv/logic/city/CityStats.kt b/core/src/com/unciv/logic/city/CityStats.kt index e273bf34d0..0e10362464 100644 --- a/core/src/com/unciv/logic/city/CityStats.kt +++ b/core/src/com/unciv/logic/city/CityStats.kt @@ -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, 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()) diff --git a/core/src/com/unciv/logic/city/PopulationManager.kt b/core/src/com/unciv/logic/city/PopulationManager.kt index e5c1eb336c..bce8171245 100644 --- a/core/src/com/unciv/logic/city/PopulationManager.kt +++ b/core/src/com/unciv/logic/city/PopulationManager.kt @@ -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) diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index c1676f20d1..d047cfc1b7 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -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 } diff --git a/core/src/com/unciv/logic/civilization/GoldenAgeManager.kt b/core/src/com/unciv/logic/civilization/GoldenAgeManager.kt index 6575432402..5eabd92ba9 100644 --- a/core/src/com/unciv/logic/civilization/GoldenAgeManager.kt +++ b/core/src/com/unciv/logic/civilization/GoldenAgeManager.kt @@ -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) diff --git a/core/src/com/unciv/logic/civilization/PolicyManager.kt b/core/src/com/unciv/logic/civilization/PolicyManager.kt index 4beef44ff7..f3fca6a38b 100644 --- a/core/src/com/unciv/logic/civilization/PolicyManager.kt +++ b/core/src/com/unciv/logic/civilization/PolicyManager.kt @@ -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) } diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index c7c54e9972..2de21c2e37 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -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 + } } \ No newline at end of file diff --git a/core/src/com/unciv/logic/map/TileInfo.kt b/core/src/com/unciv/logic/map/TileInfo.kt index 4f638f25eb..08f6381be1 100644 --- a/core/src/com/unciv/logic/map/TileInfo.kt +++ b/core/src/com/unciv/logic/map/TileInfo.kt @@ -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++ diff --git a/core/src/com/unciv/models/gamebasics/Building.kt b/core/src/com/unciv/models/gamebasics/Building.kt index e509a9a791..216a75b331 100644 --- a/core/src/com/unciv/models/gamebasics/Building.kt +++ b/core/src/com/unciv/models/gamebasics/Building.kt @@ -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): 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,16 +184,16 @@ 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() - "FreeGreatArtistAppears" -> civInfo.addGreatPerson("Great Artist") - "WorkerConstruction" -> { + "Empire enters golden age" -> civInfo.goldenAges.enterGoldenAge() + "Free Great Artist Appears" -> civInfo.addGreatPerson("Great Artist") + "Worker construction increased 25%, provides 2 free workers" -> { civInfo.placeUnitNearTile(construction.cityInfo.location, "Worker") civInfo.placeUnitNearTile(construction.cityInfo.location, "Worker") } - "FreeSocialPolicy" -> { + "Free Social Policy" -> { civInfo.policies.freePolicies++ if(construction.cityInfo.civInfo.isPlayerCivilization()) UnCivGame.Current.screen = PolicyPickerScreen(civInfo) diff --git a/core/src/com/unciv/models/gamebasics/Technology.kt b/core/src/com/unciv/models/gamebasics/Technology.kt index b00fe9fb4d..7810a8a1a0 100644 --- a/core/src/com/unciv/models/gamebasics/Technology.kt +++ b/core/src/com/unciv/models/gamebasics/Technology.kt @@ -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() + var prerequisites = HashSet() - @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 + } } \ No newline at end of file diff --git a/core/src/com/unciv/models/gamebasics/TileImprovement.kt b/core/src/com/unciv/models/gamebasics/TileImprovement.kt index e6241d300e..165a6b58ee 100644 --- a/core/src/com/unciv/models/gamebasics/TileImprovement.kt +++ b/core/src/com/unciv/models/gamebasics/TileImprovement.kt @@ -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 diff --git a/core/src/com/unciv/ui/CivilopediaScreen.kt b/core/src/com/unciv/ui/CivilopediaScreen.kt index d851d21547..bc599c1a0f 100644 --- a/core/src/com/unciv/ui/CivilopediaScreen.kt +++ b/core/src/com/unciv/ui/CivilopediaScreen.kt @@ -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(CameraStageBaseScreen.skin) diff --git a/core/src/com/unciv/ui/VictoryScreen.kt b/core/src/com/unciv/ui/VictoryScreen.kt index 37513a1c2e..dac4ec29b2 100644 --- a/core/src/com/unciv/ui/VictoryScreen.kt +++ b/core/src/com/unciv/ui/VictoryScreen.kt @@ -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