Merge remote-tracking branch 'upstream/master'

update
This commit is contained in:
YueR 2019-09-15 20:38:07 +08:00
commit 11f9728c94
40 changed files with 946 additions and 786 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 1.0 MiB

View File

@ -333,14 +333,14 @@
production:2, production:2,
specialistSlots:{production:1}, specialistSlots:{production:1},
hurryCostModifier:25, hurryCostModifier:25,
percentStatBonus:{production:15}, percentStatBonus:{production:10},
requiredTech:"Metal Casting" requiredTech:"Metal Casting"
}, },
/*
{ {
name:"Longhouse", name:"Longhouse",
replaces:"Workshop", replaces:"Workshop",
uniqueTo:"Iroquois", uniqueTo:"Iroquois",
cost:140,
maintenance:2, maintenance:2,
production:2, production:2,
specialistSlots:{production:1}, specialistSlots:{production:1},
@ -348,7 +348,6 @@
uniques:["Forests provide +1 production"], uniques:["Forests provide +1 production"],
requiredTech:"Metal Casting" requiredTech:"Metal Casting"
}, },
*/
{ {
name:"Forge", name:"Forge",
maintenance:1, maintenance:1,
@ -454,7 +453,7 @@
greatPersonPoints:{gold:1}, greatPersonPoints:{gold:1},
isWonder:true, isWonder:true,
requiredTech:"Physics", requiredTech:"Physics",
quote:"Architecture has recorded the great ideas of the human race. Not only every religious symbol, but every human thought has its page in that vast book.' - Victor Hugo" quote:"'Architecture has recorded the great ideas of the human race. Not only every religious symbol, but every human thought has its page in that vast book.' - Victor Hugo"
}, },
{ {
name:"Armory", name:"Armory",
@ -501,7 +500,6 @@
requiredBuilding:"Market", requiredBuilding:"Market",
requiredTech:"Banking" requiredTech:"Banking"
}, },
/*
{ {
name:"Satrap's Court", name:"Satrap's Court",
replaces:"Bank", replaces:"Bank",
@ -511,11 +509,9 @@
happiness:2, happiness:2,
hurryCostModifier:15, hurryCostModifier:15,
percentStatBonus:{gold:25}, percentStatBonus:{gold:25},
uniques:["+1 Gold per incoming trade route (and +1 Gold for the foreign owner)"],
requiredBuilding:"Market", requiredBuilding:"Market",
requiredTech:"Banking" requiredTech:"Banking"
}, },
*/
{ {
name:"Hanse", name:"Hanse",
replaces:"Bank", replaces:"Bank",

View File

@ -541,6 +541,84 @@
"Changwon","Andong","Gongju","Haeju","Cheongju","Mokpo","Dongducheon","Geoje","Suncheon","Jinju","Sangju", "Changwon","Andong","Gongju","Haeju","Cheongju","Mokpo","Dongducheon","Geoje","Suncheon","Jinju","Sangju",
"Rason","Gyeongju","Chungju","Sacheon","Gimje","Anju"] "Rason","Gyeongju","Chungju","Sacheon","Gimje","Anju"]
}, },
{
name:"Iroquois",
leaderName:"Hiawatha",
adjective:["Irochese"],
startBias:["Forest"],
preferredVictoryType:"Scientific",
startIntroPart1: "Greetings, noble Hiawatha, leader of the mighty Iroquois nations! Long have your people lived near the great and holy lake Ontario in the land that has come to be known as the New York state in North America. In the mists of antiquity, the five peoples of Seneca, Onondaga, Mohawks, Cayugas and Oneida united into one nation, the Haudenosaunee, the Iroquois. With no written language, the wise men of your nation created the great law of peace, the model for many contitutions including that of the United States. For many years, your people battled great enemies, such as the Huron, and the French and English invaders. Tought outnumbered and facing weapons far more advanced than the ones your warriors wielded, the Iroquois survived and prospered, until they were finally overwhelmed by the mighty armies of the new United States."
startIntroPart2: "Oh noble Hiawatha, listen to the cries of your people! They call out to you to lead them in peace and war, to rebuild the great longhouse and unite the tribes once again. Will you accept this challenge, great leader? Will you build a civilization that will stand the test of time?"
declaringWar:"You are a plague upon Mother Earth! Prepare for battle!"
attacked:"You evil creature! My braves will slaughter you!"
defeated:"You have defeated us... but our spirits will never be vanquished! We shall return!"
introduction:"Greetings, stranger. I am Hiawatha, speaker for the Iroquois. We seek peace with all, but we do not shrink from war."
neutralHello:"Good day."
neutralLetsHearIt:["Yes?","I'm listening"]
neutralNo:["No.","Certainly not."]
neutralYes:["Very well.","Alright."]
hateHello:"Oh, it's you."
hateLetsHearIt:["I'm listening.","Speak."]
hateNo:["That's unacceptable","You cannot be serious!"]
hateYes:["I suppose I must.","Very well."]
afterPeace:"I thank you for your mercy. I pray that we can now be friends."
tradeRequest:"Does this trade work for you, my friend?"
outerColor:[54,72,72],
innerColor:[246,205,137],
uniqueName:"The Great Warpath"
unique:"All units move through Forest and Jungle tiles in friendly territory as if it is Road. These tiles can be used to establish City Connections upon researching the Wheel.",
cities:["Onoondaga","Osininka","Grand River","Akwesasme","Buffalo Creek","Brantford","Montreal","Genesse River",
"Canandaigua Lake","Lake Simcoe","Salamanca","Gowanda","Cuba","Akron","Kanesatake","Ganienkeh","Cayuga Castle",
"Chondote","Canajoharie","Nedrow","Oneida Lake","Kanonwalohale","Green Bay","Southwold","Mohawk Valley",
"Schoharie","Bay of Quinte","Kanawale","Kanatsiokareke","Tyendinaga","Hahta"]
},
{
name:"Persia",
leaderName:"Darius I",
adjective:["Persian"],
preferredVictoryType:"Scientific",
startIntroPart1: "The blessings of heaven be upon you, beloved king Darius of Persia! You lead a strong and wise people. In the morning of the world, the great Persian leader Cyrus revolted against the mighty Median empire and by 550 BC, the Medes were no more. Through cunning diplomacy and military prowess, great Cyrus conquered wealthy Lydia and powerful Babylon. His son conquering proud Egypt some years later. Over time, Persian might expanded into far away Macedonia, at the very door of the upstart Greek city-states. Long would Persia prosper until the upstart villain Alexander of Macedon, destroyed the great empire in one shocking campaign."
startIntroPart2: "Darius, your people look to you to once again bring back the days of power and glory for Persia! The empire of your ancestors must emerge again, to triumph over its foes and to bring peace and order to the world! O king, will you answer the call? Can you build a civilization that will stand the test of time?"
declaringWar:"Your continue existence is an embarrassment to all leaders everywhere! You must be destroyed!"
attacked:"Curse you! You are beneath me, son of a donkey driver! I will crush you!"
defeated:"You mongrel! Cursed be you! The world will long lament your heinous crime!"
introduction:"Peace be on you! I am Darius, the great and outstanding king of kings of great Persia... but I suppose you knew that."
neutralHello:"Good day to you!"
neutralLetsHearIt:["Go on.","You said?"]
neutralNo:["You are not serious!","Not good enough."]
neutralYes:["Good!","Certainly.","Agreed!"]
hateHello:"Ahh... you..."
hateLetsHearIt:["I'm listening.","Go on!"]
hateNo:["We say... no!","Of course not!"]
hateYes:["Alright!","Agreed."]
afterPeace:"It appears we should call it a tie..."
tradeRequest:"In my endless magnanimity, I am making you this offer. You agree, of course?"
outerColor:[153,5,3],
innerColor:[244,232,54],
uniqueName:"Achaemenid Legacy"
unique:"Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and +10% Strength",
cities:["Persepolis","Parsagadae","Susa","Ecbatana","Tarsus","Gordium","Bactra","Sardis","Ergili","Dariushkabir",
"Ghulaman","Zohak","Istakhr","Jinjan","Borazjan","Herat","Dakyanus","Bampur","Turengtepe","Rey","Shiraz",
"Thuspa","Hasanlu","Gabae","Merv","Behistun","Kandahar","Altintepe","Bunyan","Charsadda","Uratyube",
"Dura Europos","Aleppo","Qatna","Kabul","Capisa","Kyreskhata","Marakanda","Peshawar","Van","Pteira","Arshada",
"Artakaona","Aspabota","Autiyara","Bagastana","Baxtri","Darmasa","Daphnai","Drapsaka","Eion","Gandutava",
"Gaugamela","Harmozeia","Ekatompylos","Izata","Kampada","Kapisa","Karmana","Kounaxa","Kuganaka","Nautaka",
"Paishiyauvada","Patigrbana","Phrada"]
},
/* /*
{ {
name:"Australia", name:"Australia",
@ -771,45 +849,6 @@
"Huaras","Riobamba","Caxamalca","Sausa","Tambo Colorado","Huaca","Tumbes","Chan Chan","Sipan","Pachacamac", "Huaras","Riobamba","Caxamalca","Sausa","Tambo Colorado","Huaca","Tumbes","Chan Chan","Sipan","Pachacamac",
"Llactapata","Pisac","Kuelap","Pajaten","Chucuito","Choquequirao"] "Llactapata","Pisac","Kuelap","Pajaten","Chucuito","Choquequirao"]
} }
{
name:"Persian",
leaderName:"Darius I",
adjective:["Persian"],
preferredVictoryType:"Scientific",
startIntroPart1: "The blessings of heaven be upon you, beloved king Darius of Persia! You lead a strong and wise people. In the morning of the world, the great Persian leader Cyrus revolted against the mighty Median empire and by 550 BC, the Medes were no more. Through cunning diplomacy and military prowess, great Cyrus conquered wealthy Lydia and powerful Babylon. His son conquering proud Egypt some years later. Over time, Persian might expanded into far away Macedonia, at the very door of the upstart Greek city-states. Long would Persia prosper until the upstart villain Alexander of Macedon, destroyed the great empire in one shocking campaign."
startIntroPart2: "Darius, your people look to you to once again bring back the days of power and glory for Persia! The empire of your ancestors must emerge again, to triumph over its foes and to bring peace and order to the world! O king, will you answer the call? Can you build a civilization that will stand the test of time?"
declaringWar:"Your continue existence is an embarrassment to all leaders everywhere! You must be destroyed!"
attacked:"Curse you! You are beneath me, son of a donkey driver! I will crush you!"
defeated:"You mongrel! Cursed be you! The world will long lament your heinous crime!"
introduction:"Peace be on you! I am Darius, the great and outstanding king of kings of great Persia... but I suppose you knew that."
neutralHello:"Good day to you!"
neutralLetsHearIt:["Go on.","You said?"]
neutralNo:["You are not serious!","Not good enough."]
neutralYes:["Good!","Certainly.","Agreed!"]
hateHello:"Ahh... you..."
hateLetsHearIt:["I'm listening.","Go on!"]
hateNo:["We say... no!","Of course not!"]
hateYes:["Alright!","Agreed."]
afterPeace:"It appears we should call it a tie..."
tradeRequest:"In my endless magnanimity, I am making you this offer. You agree, of course?"
outerColor:[255,0,0],
innerColor:[255,255,0],
uniqueName:"Achaemenid Legacy"
unique:"Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and +10% Strenght",
cities:["Persepolis","Parsagadae","Susa","Ecbatana","Tarsus","Gordium","Bactra","Sardis","Ergili","Dariushkabir",
"Ghulaman","Zohak","Istakhr","Jinjan","Borazjan","Herat","Dakyanus","Bampur","Turengtepe","Rey","Shiraz",
"Thuspa","Hasanlu","Gabae","Merv","Behistun","Kandahar","Altintepe","Bunyan","Charsadda","Uratyube",
"Dura Europos","Aleppo","Qatna","Kabul","Capisa","Kyreskhata","Marakanda","Peshawar","Van","Pteira","Arshada",
"Artakaona","Aspabota","Autiyara","Bagastana","Baxtri","Darmasa","Daphnai","Drapsaka","Eion","Gandutava",
"Gaugamela","Harmozeia","Ekatompylos","Izata","Kampada","Kapisa","Karmana","Kounaxa","Kuganaka","Nautaka",
"Paishiyauvada","Patigrbana","Phrada"]
},
{ {
name:"Polynesia", name:"Polynesia",
leaderName:"Kamehameha I", leaderName:"Kamehameha I",
@ -920,43 +959,6 @@
"Nan","Tak","Suphanburi","Hongsawadee","Thawaii","Ayutthuya","Taphan Hin","Uthai Thani","Lap Buri","Ratchasima", "Nan","Tak","Suphanburi","Hongsawadee","Thawaii","Ayutthuya","Taphan Hin","Uthai Thani","Lap Buri","Ratchasima",
"Ban Phai","Loci","Khan Kaen","Surin"] "Ban Phai","Loci","Khan Kaen","Surin"]
}, },
{
name:"Iroquois",
leaderName:"Hiawatha",
adjective:["Irochese"],
startBias:["Forest"],
preferredVictoryType:"Scientific",
startIntroPart1: "Greetings, noble Hiawatha, leader of the mighty Iroquois nations! Long have your people lived near the great and holy lake Ontario in the land that has come to be known as the New York state in North America. In the mists of antiquity, the five peoples of Seneca, Onondaga, Mohawks, Cayugas and Oneida united into one nation, the Haudenosaunee, the Iroquois. With no written language, the wise men of your nation created the great law of peace, the model for many contitutions including that of the United States. For many years, your people battled great enemies, such as the Huron, and the French and English invaders. Tought outnumbered and facing weapons far more advanced than the ones your warriors wielded, the Iroquois survived and prospered, until they were finally overwhelmed by the mighty armies of the new United States."
startIntroPart2: "Oh noble Hiawatha, listen to the cries of your people! They call out to you to lead them in peace and war, to rebuild the great longhouse and unite the tribes once again. Will you accept this challenge, great leader? Will you build a civilization that will stand the test of time?"
declaringWar:"You are a plague upon Mother Earth! Prepare for battle!"
attacked:"You evil creature! My braves will slaughter you!"
defeated:"You have defeated us... but our spirits will never be vanquished! We shall return!"
introduction:"Greetings, stranger. I am Hiawatha, speaker for the Iroquois. We seek peace with all, but we do not shrink from war."
neutralHello:"Good day."
neutralLetsHearIt:["Yes?","I'm listening"]
neutralNo:["No.","Certainly not."]
neutralYes:["Very well.","Alright."]
hateHello:"Oh, it's you."
hateLetsHearIt:["I'm listening.","Speak."]
hateNo:["That's unacceptable","You cannot be serious!"]
hateYes:["I suppose I must.","Very well."]
afterPeace:"I thank you for your mercy. I pray that we can now be friends."
tradeRequest:"Does this trade work for you, my friend?"
outerColor:[0,25,51],
innerColor:[255,255,102],
uniqueName:"The Great Warpath"
unique:"All units move through Forest and Jungle tiles in friendly territory as if it is Road. These tiles can be used to establish City Connections upon researching the Wheel.",
cities:["Onoondaga","Osininka","Grand River","Akwesasme","Buffalo Creek","Brantford","Montreal","Genesse River",
"Canandaigua Lake","Lake Simcoe","Salamanca","Gowanda","Cuba","Akron","Kanesatake","Ganienkeh","Cayuga Castle",
"Chondote","Canajoharie","Nedrow","Oneida Lake","Kanonwalohale","Green Bay","Southwold","Mohawk Valley",
"Schoharie","Bay of Quinte","Kanawale","Kanatsiokareke","Tyendinaga","Hahta"]
},
{ {
//NEEDS SNOW AND ICE //NEEDS SNOW AND ICE
name:"Denmark", name:"Denmark",

View File

@ -79,6 +79,10 @@
Polish:"Stonehenge" Polish:"Stonehenge"
} }
"'Time crumbles things; everything grows old and is forgotten under the power of time' - Aristotle":{
Italian:"'Il tempo sgretola le cose; davanti al suo potere tutto invecchia e viene dimenticato.' - Aristotele"
}
"Library":{ "Library":{
Italian:"Biblioteca" Italian:"Biblioteca"
Russian:"Библиотека" Russian:"Библиотека"
@ -127,6 +131,10 @@
Polish:"Wielka Biblioteka" Polish:"Wielka Biblioteka"
} }
"'Libraries are as the shrine where all the relics of the ancient saints, full of true virtue, and all that without delusion or imposture are preserved and reposed.' - Sir Francis Bacon":{
Italian:"'Le biblioteche sono come una cappella in cui sono conservate e protette tutte le reliquie dei santi antichi, colme di vera virtù, e tutto ciò che è privo di illusione e inganno' - Sir Francis Bacon"
}
"Circus":{ "Circus":{
Italian:"Circo" Italian:"Circo"
Russian:"Цирк" Russian:"Цирк"
@ -171,6 +179,10 @@
Polish:"Piramidy" Polish:"Piramidy"
} }
"'O, let not the pains of death which come upon thee enter into my body. I am the god Tem, and I am the foremost part of the sky, and the power which protecteth me is that which is with all the gods forever.' - The Book of the Dead, translated by Sir Ernest Alfred Wallis Budge":{
Italian:"''Oh, non lasciare che i dolori della morte che piombano su di te entrino nel mio corpo. Io sono il dio Tem, e risiedo nella parte più importante del cielo, e il potere che mi protegge è quello che si accompagna per sempre a tutti gli dèi.' - Il Libro dei Morti, traduzione di Sir Ernest Alfred Wallis Budge"
}
"Worker construction increased 25%":{ //typo? Removed one instance of "Worker construction increased" "Worker construction increased 25%":{ //typo? Removed one instance of "Worker construction increased"
Italian:"+25% velocità costruzione lavoratori" Italian:"+25% velocità costruzione lavoratori"
Russian:"Увеличивает на 25% скорость создания улучшений на клетках" Russian:"Увеличивает на 25% скорость создания улучшений на клетках"
@ -239,6 +251,10 @@
Russian:"Колосс Родосский" Russian:"Колосс Родосский"
} }
"'Why man, he doth bestride the narrow world like a colossus, and we petty men walk under his huge legs, and peep about to find ourselves dishonorable graves.' - William Shakespeare, Julius Caesar":{
Italian:"'Già, lui cavalca questo stretto mondo ormai come un colosso; e noi, gli omuncoli, passiamo sotto le sue gambe enormi e ci scrutiamo intorno, per ritrovarci tutti quanti siamo come tanti sepolcri senza onore' - William Shakespeare: Giulio Cesare"
}
"+1 gold from worked water tiles in city":{ "+1 gold from worked water tiles in city":{
Italian:"+1 Oro per ogni risorsa anfibia sfruttata dalla città." Italian:"+1 Oro per ogni risorsa anfibia sfruttata dalla città."
Simplified_Chinese:"所在城市每个水上地块+1金钱" Simplified_Chinese:"所在城市每个水上地块+1金钱"
@ -290,6 +306,10 @@
Polish:"Wyrocznia" Polish:"Wyrocznia"
} }
"'The ancient Oracle said that I was the wisest of all the Greeks. It is because I alone, of all the Greeks, know that I know nothing' - Socrates":{
Italian:"'L'antico Oracolo ha detto che sono il più saggio di tutti i greci. Questo perché io solo, di tutti i greci, so di non sapere nulla.' - Socrate"
}
"Free Social Policy":{ "Free Social Policy":{
Italian:"Ricevi una politica sociale gratuita" Italian:"Ricevi una politica sociale gratuita"
Russian:"Бесплатный общественный институт" Russian:"Бесплатный общественный институт"
@ -327,6 +347,10 @@
Polish:"Chichen Itza" Polish:"Chichen Itza"
} }
"'The katun is established at Chichen Itza. The settlement of the Itza shall take place there. The quetzal shall come, the green bird shall come. Ah Kantenal shall come. It is the word of God. The Itza shall come.' - The Books of Chilam Balam":{
Italian:"'Il katun è stabilito a Chichèn Itzà. L'insediamento degli Itzà avrà luogo. Arriverà il quetzal, arriverà l'uccello verde. Ah Kantenal arriverà. È la parola di Dio. Gli Itzà arriveranno. - I Libri di Chilam Balam"
}
"Golden Age length increases +50%":{ "Golden Age length increases +50%":{
Italian:"+50% durata dell'Età dell'Oro" Italian:"+50% durata dell'Età dell'Oro"
Russian:"Длина золотого века +50%" Russian:"Длина золотого века +50%"
@ -385,6 +409,10 @@
Russian:"Фаросский маяк" Russian:"Фаросский маяк"
} }
"'They that go down to the sea in ships, that do business in great waters; these see the works of the Lord, and his wonders in the deep.' - The Bible, Psalms 107:23-24":{
Italian:"'Ecco quelli che scendon nel mare su navi, che trafficano sulle grandi acque; essi veggono le opere dell'Eterno e le sue meraviglie nell'abisso.' - Salmi 107:23-24"
}
"All military naval units receive +1 movement and +1 sight":{ "All military naval units receive +1 movement and +1 sight":{
Spanish:"Todas las unidades militares navales reciben +1de movimiento y +1 de vision" Spanish:"Todas las unidades militares navales reciben +1de movimiento y +1 de vision"
Italian:"+1 Movimento e +1 Visione per ogni unità militare marittima" Italian:"+1 Movimento e +1 Visione per ogni unità militare marittima"
@ -456,6 +484,10 @@
Polish:"Wiszące Ogrody" Polish:"Wiszące Ogrody"
} }
"'I think that if ever a mortal heard the word of God it would be in a garden at the cool of the day.' - F. Frankfort Moore":{
Italian:"'Penso che se mai un mortale ha sentito la voce di Dio, sarà stato in un giardino sul far della sera.' - F. Frankfort Moore"
}
/* /*
//New Wonder: Statue of Zeus! Suggested by Smashfanful //New Wonder: Statue of Zeus! Suggested by Smashfanful
"Statue of Zeus":{ "Statue of Zeus":{
@ -508,6 +540,10 @@
Russian:"Терракотовая армия" Russian:"Терракотовая армия"
} }
"'Regard your soldiers as your children, and they will follow you into the deepest valleys; look on them as your own beloved sons, and they will stand by you even unto death.' - Sun Tzu":{
Italian:"'Trattate i soldati come figli, e vi seguiranno nelle valli più profonde; considerateli la vostra amata progenie, e resteranno accanto a voi fino alla morte.' - Sun Tzu"
}
"Market":{ "Market":{
Italian:"Mercato" Italian:"Mercato"
Russian:"Рынок" Russian:"Рынок"
@ -577,6 +613,10 @@
Polish:"Notre Dame" Polish:"Notre Dame"
} }
"Architecture has recorded the great ideas of the human race. Not only every religious symbol, but every human thought has its page in that vast book.' - Victor Hugo":{
Italian:"'L'architettura ha registrato le più grandi idee della razza umana. Non solo ogni simbolo religioso, ma ogni pensiero umano ha la sua pagina in quel vasto libro.' - Victor Hugo"
}
"Hagia Sophia":{ "Hagia Sophia":{
Italian:"Hagia Sophia" Italian:"Hagia Sophia"
Russian:"Собор Святой Софии" Russian:"Собор Святой Софии"
@ -589,6 +629,10 @@
Polish:"Hagia Sophia" Polish:"Hagia Sophia"
} }
"'For it soars to a height to match the sky, and as if surging up from among the other buildings it stands on high and looks down upon the remainder of the city, adorning it, because it is a part of it, but glorying in its own beauty' - Procopius, De Aedificis":{
Italian:"'Perché si erge così alta da toccare il cielo, e come fluttuando sugli altri edifici guarda dall'alto in basso il resto della città, abbellendola, perché fa parte di essa, ma gloriandosi della propria bellezza.' - Procopio, De Aedificis (Sugli edifici)"
}
"+33% great person generation in all cities":{ "+33% great person generation in all cities":{
Italian:"+33% di generazione di Grandi Personaggi in tutte le città" Italian:"+33% di generazione di Grandi Personaggi in tutte le città"
Russian:"+33% к созданию великих людей во всех городах" Russian:"+33% к созданию великих людей во всех городах"
@ -626,6 +670,10 @@
Polish:"Machu Picchu" Polish:"Machu Picchu"
} }
"'Few romances can ever surpass that of the granite citadel on top of the beetling precipices of Machu Picchu, the crown of Inca Land.' - Hiram Bingham":{
Italian:"'Pochi racconti fantastici possono sorpassare quello della cittadella di granito sospesa in cima ai precipizi, Machu Picchu, la corona delle terre degli Inca.' - Hiram Bingham"
}
"Gold from all trade routes +25%":{ "Gold from all trade routes +25%":{
Italian:"+25% oro da ogni rotta commerciale" Italian:"+25% oro da ogni rotta commerciale"
Russian:"Золото со всех торговых путей + 25%" Russian:"Золото со всех торговых путей + 25%"
@ -672,6 +720,10 @@
Russian:"Великая стена" Russian:"Великая стена"
} }
"'The art of war teaches us to rely not on the likelihood of the enemy's not attacking, but rather on the fact that we have made our position unassailable.' - Sun Tzu":{
Italian:"'L'arte della guerra ci insegna a non affidarci alla possibilità che il nemico... non ci attacchi, ma piuttosto alla certezza di aver reso la nostra posizione inattaccabile.' - Sun Tzu"
}
"Enemy land units must spend 1 extra movement point when inside your territory (obsolete upon Dynamite)":{ "Enemy land units must spend 1 extra movement point when inside your territory (obsolete upon Dynamite)":{
Italian:"Le unità nemiche impiegano un punto Movimento extra se all'interno del tuo territorio (diventa obsoleta con la Dinamite)." Italian:"Le unità nemiche impiegano un punto Movimento extra se all'interno del tuo territorio (diventa obsoleta con la Dinamite)."
Simplified_Chinese:"境内敌方陆军单位在任何地块额外消耗1移动力" Simplified_Chinese:"境内敌方陆军单位在任何地块额外消耗1移动力"
@ -692,8 +744,7 @@
Polish:"Warsztat" Polish:"Warsztat"
} }
/* "Longhouse":{ // Iroquois unique
"Longhouse":{ //Irochese unique
Italian:"Casa Lunga" Italian:"Casa Lunga"
French:"Longère" French:"Longère"
Polish:"Długi dom" Polish:"Długi dom"
@ -704,7 +755,6 @@
French:"+1 production pour chaque cases de forêt exploitées par la ville." French:"+1 production pour chaque cases de forêt exploitées par la ville."
Polish:"+1 do produkcji za każde pracujące pole lasu" Polish:"+1 do produkcji za każde pracujące pole lasu"
} }
*/
"Forge":{ "Forge":{
Italian:"Fucina" Italian:"Fucina"
@ -828,6 +878,10 @@
Russian:"Альгамбра" Russian:"Альгамбра"
} }
"'Justice is an unassailable fortress, built on the brow of a mountain which cannot be overthrown by the violence of torrents, nor demolished by the force of armies.' - Joseph Addison":{
Italian:"'La giustizia è una fortezza inespugnabile, costruita sulla cresta di una montagna che non può essere rovesciata dalla violenza dei torrenti né demolita dalla forza degli eserciti.' - Joseph Addison"
}
"All newly-trained melee, mounted, and armored units in this city receive the Drill I promotion":{ "All newly-trained melee, mounted, and armored units in this city receive the Drill I promotion":{
Italian:"Ogni unità da mischia, a cavallo e corazzata appena reclutata nella città riceve la promozione Addestramento I" Italian:"Ogni unità da mischia, a cavallo e corazzata appena reclutata nella città riceve la promozione Addestramento I"
German:"Alle neuen Nahkampf-, berittenen und gepanzerten Einheiten in dieser Stadt erhalten eine Drill I Beförderung" German:"Alle neuen Nahkampf-, berittenen und gepanzerten Einheiten in dieser Stadt erhalten eine Drill I Beförderung"
@ -849,6 +903,10 @@
Polish:"Angkor Wat" Polish:"Angkor Wat"
} }
"'The temple is like no other building in the world. It has towers and decoration and all the refinements which the human genius can conceive of.' - Antonio da Magdalena":{
Italian:"'Il tempio non ha eguali nel mondo. Ha torri e decorazioni e tutti gli abbellimenti che il genio dell'uomo può concepire.' - Antonio da Magdalena"
}
"Cost of acquiring new tiles reduced by 25%":{ "Cost of acquiring new tiles reduced by 25%":{
Italian:"-25% costo per l'acquisto di nuove celle" Italian:"-25% costo per l'acquisto di nuove celle"
Russian:"Сокращает стоимость приобретения новых клеток на 25%" Russian:"Сокращает стоимость приобретения новых клеток на 25%"
@ -1063,6 +1121,7 @@
} }
"Get ":{ "Get ":{
Italian:"Ottieni "
Simplified_Chinese:"获得" Simplified_Chinese:"获得"
} }

View File

@ -531,11 +531,14 @@
"Type: ":{ "Type: ":{
Italian:"Tipo: " Italian:"Tipo: "
Simplified_Chinese:"城邦类型:" Simplified_Chinese:"城邦类型:"
Russian:"Тип: "
} }
"Influence: ":{ "Influence: ":{
Italian:"Influenza: " Italian:"Influenza: "
Simplified_Chinese:"影响力:" Simplified_Chinese:"影响力:"
Russian:"Влияние: "
} }
////// Trade ////// Trade
@ -756,6 +759,7 @@
"Introduction to [nation]":{ "Introduction to [nation]":{
Italian:"Introduci a [nation]" Italian:"Introduci a [nation]"
Simplified_Chinese:"介绍认识[nation]" Simplified_Chinese:"介绍认识[nation]"
Russian:"Представиться [nation]"
} }
"Luxury resources":{ "Luxury resources":{
@ -858,7 +862,7 @@
Italian:"Alessandro" Italian:"Alessandro"
French:"Alexandre le Grand" French:"Alexandre le Grand"
Simplified_Chinese:"亚历山大" Simplified_Chinese:"亚历山大"
Russian:"Александр Македонский" Russian:"Александр"
}, },
"City-State Influence degrades at half and recovers at twice the normal rate": { "City-State Influence degrades at half and recovers at twice the normal rate": {
@ -1214,7 +1218,6 @@
Russian:"+2 Наука для всех специалистов и улучшений клеток Великими людьми." Russian:"+2 Наука для всех специалистов и улучшений клеток Великими людьми."
} }
/*
"Iroquois":{ "Iroquois":{
Italian:"Irochese" Italian:"Irochese"
@ -1222,12 +1225,32 @@
Portuguese:"Tribo Iroquois" //tribo meaning tribe of course Portuguese:"Tribo Iroquois" //tribo meaning tribe of course
} }
"Hiawatha":{
}
"Units move through Forest and Jungle in friendly territory as if it is a Road. These tiles can be used to establish Trade Routes upon searching The Wheel.":{ "Units move through Forest and Jungle in friendly territory as if it is a Road. These tiles can be used to establish Trade Routes upon searching The Wheel.":{
Italian:"Le caselle di Foreste e Giungle in territorio amico agiscono come strade, e sono usate per stabilire Rotte Commerciali quando si scopre la Ruota." Italian:"Le caselle di Foreste e Giungle in territorio amico agiscono come strade, e sono usate per stabilire Rotte Commerciali quando si scopre la Ruota."
Portuguese:"Mova-se por florestas e selvas em território amigo como se fossem estradas. Estas terras podem ser usadas para estabelecer rotas de comércio após pesquisar a roda." Portuguese:"Mova-se por florestas e selvas em território amigo como se fossem estradas. Estas terras podem ser usadas para estabelecer rotas de comércio após pesquisar a roda."
French:"Les Forêt et les Jungles en territoire alliés ont les mêmes attributs que les routes. A la découverte de la Roue, elles peuvent établir des routes commerciales." French:"Les Forêt et les Jungles en territoire alliés ont les mêmes attributs que les routes. A la découverte de la Roue, elles peuvent établir des routes commerciales."
} }
"Persia":{
Italian:"Persia"
French:"Perse"
Portuguese:"Pérsia"
}
"Darius I":{
}
"Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and a +10% Combat Strenght bonus.":{
Italian:"+50% durata delle Età dell'Oro, durante le quali le unità ricevono +1 Movimento e +10% Forza."
Portuguese:"Idades douradas duram 50% mais, unidades recebem 1 movimento a mais e um bonus de +10% em força de combate."
French:"Les Ages d'Or durent 50% plus longtemps. Durant les Ages d'Or, les unités gagnent +1 mouvement et +10% de force de Combat."
}
/*
"Aztecs":{ "Aztecs":{
Italian:"Azteca" Italian:"Azteca"
French:"Aztèques" French:"Aztèques"
@ -1306,17 +1329,6 @@
French:"Peut embarquer et bouger sur les océans dès le début. +1 Vision lorsque embarqué." French:"Peut embarquer et bouger sur les océans dès le début. +1 Vision lorsque embarqué."
} }
"Persia":{
Italian:"Persia"
French:"Perse"
Portuguese:"Pérsia"
}
"Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and a +10% Combat Strenght bonus.":{
Italian:"+50% durata delle Età dell'Oro, durante le quali le unità ricevono +1 Movimento e +10% Forza."
Portuguese:"Idades douradas duram 50% mais, unidades recebem 1 movimento a mais e um bonus de +10% em força de combate."
French:"Les Ages d'Or durent 50% plus longtemps. Durant les Ages d'Or, les unités gagnent +1 mouvement et +10% de force de Combat."
}
*/ */

View File

@ -382,6 +382,12 @@
French:"Hoplite" French:"Hoplite"
} }
"Immortal":{ // Persian unique
}
"+10 HP when healing":{
}
////// Classical Era Units ////// Classical Era Units
"Composite Bowman":{ "Composite Bowman":{
@ -439,6 +445,12 @@
German:"Schwertkämpfer" German:"Schwertkämpfer"
} }
"Mohawk Warrior":{
}
"+33% combat bonus in Forest/Jungle":{
}
"Legion":{ "Legion":{
Italian:"Legionario" Italian:"Legionario"
Romanian:"Legionar" Romanian:"Legionar"

View File

@ -243,11 +243,10 @@
hurryCostModifier:20, hurryCostModifier:20,
attackSound:"metalhit" attackSound:"metalhit"
}, },
/*
{ {
name:"Immortal", name:"Immortal",
replaces:"Spearman", replaces:"Spearman",
uniqueTo:"Persian", uniqueTo:"Persia",
unitType:"Melee", unitType:"Melee",
movement:2, movement:2,
strength:12, strength:12,
@ -255,12 +254,10 @@
requiredTech:"Bronze Working", requiredTech:"Bronze Working",
obsoleteTech:"Civil Service", obsoleteTech:"Civil Service",
upgradesTo: "Pikeman", upgradesTo: "Pikeman",
uniques:["Bonus vs Mounted 50%","Heals at double rate"], uniques:["Bonus vs Mounted 50%","+10 HP when healing"],
hurryCostModifier:20, hurryCostModifier:20,
attackSound:"metalhit" attackSound:"metalhit"
//Persian unique unit
}, },
*/
/* Classical Era */ /* Classical Era */
@ -322,6 +319,21 @@
hurryCostModifier:20, hurryCostModifier:20,
attackSound:"metalhit" attackSound:"metalhit"
}, },
{
name:"Mohawk Warrior",
unitType:"Melee",
replaces:"Swordsman",
uniqueTo:"Iroquois",
movement:2,
strength:14,
cost: 75,
requiredTech:"Iron Working",
upgradesTo:"Longswordsman",
obsoleteTech:"Steel",
uniques:["+33% combat bonus in Forest/Jungle"]
hurryCostModifier:20,
attackSound:"metalhit"
},
{ {
name:"Legion", name:"Legion",
unitType:"Melee", unitType:"Melee",
@ -338,7 +350,6 @@
hurryCostModifier:20, hurryCostModifier:20,
attackSound:"metalhit" attackSound:"metalhit"
}, },
/*
{ {
name:"Mohawk Warrior", name:"Mohawk Warrior",
unitType:"Melee", unitType:"Melee",
@ -353,9 +364,7 @@
hurryCostModifier:20, hurryCostModifier:20,
uniques:["Combat Bonus in Forest/Jungle 33%"], uniques:["Combat Bonus in Forest/Jungle 33%"],
attackSound:"metalhit" attackSound:"metalhit"
//Iroquese unique unit. Bonus when fighting in Jungles and Forests. Doesn't require Iron.
}, },
*/
{ {
name:"Horseman", name:"Horseman",
unitType:"Mounted", unitType:"Mounted",

View File

@ -21,8 +21,8 @@ android {
applicationId "com.unciv.app" applicationId "com.unciv.app"
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 29 targetSdkVersion 29
versionCode 297 versionCode 298
versionName "3.0.4" versionName "3.0.5"
} }
// Had to add this crap for Travis to build, it wanted to sign the app // Had to add this crap for Travis to build, it wanted to sign the app

View File

@ -41,6 +41,7 @@ class GameInfo {
toReturn.difficulty=difficulty toReturn.difficulty=difficulty
toReturn.gameParameters = gameParameters toReturn.gameParameters = gameParameters
toReturn.gameId = gameId toReturn.gameId = gameId
toReturn.oneMoreTurnMode = oneMoreTurnMode
return toReturn return toReturn
} }

View File

@ -1,5 +1,6 @@
package com.unciv.logic.battle package com.unciv.logic.battle
import com.unciv.Constants
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.models.gamebasics.unit.UnitType import com.unciv.models.gamebasics.unit.UnitType
@ -40,47 +41,49 @@ class BattleDamage{
for (BDM in getBattleDamageModifiersOfUnit(combatant.unit)) { for (BDM in getBattleDamageModifiersOfUnit(combatant.unit)) {
if (BDM.vs == enemy.getUnitType().toString()) if (BDM.vs == enemy.getUnitType().toString())
addToModifiers(BDM) addToModifiers(BDM)
if(BDM.vs == "wounded units" && enemy is MapUnitCombatant && enemy.getHealth()<100) if (BDM.vs == "wounded units" && enemy is MapUnitCombatant && enemy.getHealth() < 100)
addToModifiers(BDM) addToModifiers(BDM)
if(BDM.vs == "land units" && enemy.getUnitType().isLandUnit()) if (BDM.vs == "land units" && enemy.getUnitType().isLandUnit())
addToModifiers(BDM) addToModifiers(BDM)
if(BDM.vs == "water units" && enemy.getUnitType().isWaterUnit()) if (BDM.vs == "water units" && enemy.getUnitType().isWaterUnit())
addToModifiers(BDM) addToModifiers(BDM)
if(BDM.vs == "air units" && enemy.getUnitType().isAirUnit()) if (BDM.vs == "air units" && enemy.getUnitType().isAirUnit())
addToModifiers(BDM) addToModifiers(BDM)
} }
//https://www.carlsguides.com/strategy/civilization5/war/combatbonuses.php //https://www.carlsguides.com/strategy/civilization5/war/combatbonuses.php
val civHappiness = combatant.getCivInfo().getHappiness() val civHappiness = combatant.getCivInfo().getHappiness()
if (civHappiness < 0) if (civHappiness < 0)
modifiers["Unhappiness"] = max(0.02f * civHappiness,-0.9f) // otherwise it could exceed -100% and start healing enemy units... modifiers["Unhappiness"] = max(0.02f * civHappiness, -0.9f) // otherwise it could exceed -100% and start healing enemy units...
if(combatant.getCivInfo().policies.isAdopted("Populism") && combatant.getHealth() < 100){ if (combatant.getCivInfo().policies.isAdopted("Populism") && combatant.getHealth() < 100) {
modifiers["Populism"] = 0.25f modifiers["Populism"] = 0.25f
} }
if(combatant.getCivInfo().policies.isAdopted("Discipline") && combatant.isMelee() if (combatant.getCivInfo().policies.isAdopted("Discipline") && combatant.isMelee()
&& combatant.getTile().neighbors.flatMap { it.getUnits() } && combatant.getTile().neighbors.flatMap { it.getUnits() }
.any { it.civInfo==combatant.getCivInfo() && !it.type.isCivilian() && !it.type.isAirUnit()}) .any { it.civInfo == combatant.getCivInfo() && !it.type.isCivilian() && !it.type.isAirUnit() })
modifiers["Discipline"] = 0.15f modifiers["Discipline"] = 0.15f
val requiredResource = combatant.unit.baseUnit.requiredResource val requiredResource = combatant.unit.baseUnit.requiredResource
if(requiredResource!=null && combatant.getCivInfo().getCivResourcesByName()[requiredResource]!!<0 if (requiredResource != null && combatant.getCivInfo().getCivResourcesByName()[requiredResource]!! < 0
&& !combatant.getCivInfo().isBarbarian()){ && !combatant.getCivInfo().isBarbarian()) {
modifiers["Missing resource"]=-0.25f modifiers["Missing resource"] = -0.25f
} }
//todo : performance improvement
if (combatant.getUnitType()!=UnitType.City) {
val nearbyCivUnits = combatant.unit.getTile().getTilesInDistance(2) val nearbyCivUnits = combatant.unit.getTile().getTilesInDistance(2)
.filter {it.civilianUnit?.civInfo == combatant.unit.civInfo} .filter { it.civilianUnit?.civInfo == combatant.unit.civInfo }
.map {it.civilianUnit} .map { it.civilianUnit }
if (nearbyCivUnits.any { it!!.hasUnique("Bonus for units in 2 tile radius 15%") }) { if (nearbyCivUnits.any { it!!.hasUnique("Bonus for units in 2 tile radius 15%") }) {
modifiers["Great General"]= if (combatant.unit.civInfo.nation.unique == val greatGeneralModifier = if (combatant.unit.civInfo.nation.unique ==
"Great general provides double combat bonus, and spawns 50% faster") 0.3f "Great general provides double combat bonus, and spawns 50% faster") 0.3f
else 0.15f else 0.15f
modifiers["Great General"] = greatGeneralModifier
} }
}
if(combatant.getCivInfo().nation.unique=="Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and +10% Strength")
modifiers["Golden Age"] = 0.1f
} }
if (combatant.getCivInfo().policies.isAdopted("Honor") && enemy.getCivInfo().isBarbarian()) if (combatant.getCivInfo().policies.isAdopted("Honor") && enemy.getCivInfo().isBarbarian())
@ -95,22 +98,6 @@ class BattleDamage{
if(attacker is MapUnitCombatant) { if(attacker is MapUnitCombatant) {
modifiers.putAll(getTileSpecificModifiers(attacker,defender.getTile())) modifiers.putAll(getTileSpecificModifiers(attacker,defender.getTile()))
val defenderTile = defender.getTile()
val isDefenderInRoughTerrain = defenderTile.isRoughTerrain()
for (BDM in getBattleDamageModifiersOfUnit(attacker.unit)) {
val text = BDM.getText()
if (BDM.vs == "units in open terrain" && !isDefenderInRoughTerrain) {
if(modifiers.containsKey(text))
modifiers[text] =modifiers[text]!! + BDM.modificationAmount
else modifiers[text] = BDM.modificationAmount
}
if (BDM.vs == "units in rough terrain" && isDefenderInRoughTerrain) {
if (modifiers.containsKey(text))
modifiers[text] = modifiers[text]!! + BDM.modificationAmount
else modifiers[text] = BDM.modificationAmount
}
}
for (ability in attacker.unit.getUniques()) { for (ability in attacker.unit.getUniques()) {
val regexResult = Regex("""Bonus as Attacker [(\d*)]%""").matchEntire(ability) //to do: extend to defender, and penalyy val regexResult = Regex("""Bonus as Attacker [(\d*)]%""").matchEntire(ability) //to do: extend to defender, and penalyy
if (regexResult == null) continue if (regexResult == null) continue
@ -119,12 +106,9 @@ class BattleDamage{
modifiers["Attacker Bonus"] =modifiers["Attacker Bonus"]!! + bonus modifiers["Attacker Bonus"] =modifiers["Attacker Bonus"]!! + bonus
else modifiers["Attacker Bonus"] = bonus else modifiers["Attacker Bonus"] = bonus
} }
}
else if (attacker is CityCombatant) { if(attacker.unit.isEmbarked())
if (attacker.getCivInfo().policies.isAdopted("Oligarchy") && attacker.city.getCenterTile().militaryUnit != null) modifiers["Landing"] = -0.5f
modifiers["Oligarchy"] = 0.5f
}
if (attacker.isMelee()) { if (attacker.isMelee()) {
val numberOfAttackersSurroundingDefender = defender.getTile().neighbors.count { val numberOfAttackersSurroundingDefender = defender.getTile().neighbors.count {
@ -135,9 +119,14 @@ class BattleDamage{
if (numberOfAttackersSurroundingDefender > 1) if (numberOfAttackersSurroundingDefender > 1)
modifiers["Flanking"] = 0.1f * (numberOfAttackersSurroundingDefender-1) //https://www.carlsguides.com/strategy/civilization5/war/combatbonuses.php modifiers["Flanking"] = 0.1f * (numberOfAttackersSurroundingDefender-1) //https://www.carlsguides.com/strategy/civilization5/war/combatbonuses.php
} }
}
else if (attacker is CityCombatant) {
if (attacker.getCivInfo().policies.isAdopted("Oligarchy") && attacker.city.getCenterTile().militaryUnit != null)
modifiers["Oligarchy"] = 0.5f
}
if(attacker is MapUnitCombatant && attacker.unit.isEmbarked())
modifiers["Landing"] = -0.5f
return modifiers return modifiers
} }
@ -155,26 +144,11 @@ class BattleDamage{
if (tileDefenceBonus > 0) modifiers["Terrain"] = tileDefenceBonus if (tileDefenceBonus > 0) modifiers["Terrain"] = tileDefenceBonus
} }
if(attacker.isRanged()){ if(attacker.isRanged()) {
val defenceVsRanged = 0.25f * defender.unit.getUniques().count{it=="+25% Defence against ranged attacks"} val defenceVsRanged = 0.25f * defender.unit.getUniques().count { it == "+25% Defence against ranged attacks" }
if(defenceVsRanged>0) modifiers["defence vs ranged"] = defenceVsRanged if (defenceVsRanged > 0) modifiers["defence vs ranged"] = defenceVsRanged
} }
val defenderTile = defender.getTile()
val isDefenderInRoughTerrain = defenderTile.isRoughTerrain()
for (BDM in getBattleDamageModifiersOfUnit(defender.unit)) {
val text = BDM.getText()
if (BDM.vs == "units in open terrain" && !isDefenderInRoughTerrain) {
if (modifiers.containsKey(text))
modifiers[text] = modifiers[text]!! + BDM.modificationAmount
else modifiers[text] = BDM.modificationAmount
}
if (BDM.vs == "units in rough terrain" && isDefenderInRoughTerrain) {
if (modifiers.containsKey(text))
modifiers[text] = modifiers[text]!! + BDM.modificationAmount
else modifiers[text] = BDM.modificationAmount
}
}
if (defender.unit.isFortified()) if (defender.unit.isFortified())
modifiers["Fortification"] = 0.2f * defender.unit.getFortificationTurns() modifiers["Fortification"] = 0.2f * defender.unit.getFortificationTurns()
@ -190,6 +164,25 @@ class BattleDamage{
if(!isFriendlyTerritory && unit.unit.hasUnique("+20% bonus outside friendly territory")) if(!isFriendlyTerritory && unit.unit.hasUnique("+20% bonus outside friendly territory"))
modifiers["Foreign Land"] = 0.2f modifiers["Foreign Land"] = 0.2f
if(unit.unit.hasUnique("+33% combat bonus in Forest/Jungle")
&& (tile.terrainFeature== Constants.forest || tile.terrainFeature==Constants.jungle))
modifiers[tile.terrainFeature!!]=0.33f
val isRoughTerrain = tile.isRoughTerrain()
for (BDM in getBattleDamageModifiersOfUnit(unit.unit)) {
val text = BDM.getText()
if (BDM.vs == "units in open terrain" && !isRoughTerrain) {
if (modifiers.containsKey(text))
modifiers[text] = modifiers[text]!! + BDM.modificationAmount
else modifiers[text] = BDM.modificationAmount
}
if (BDM.vs == "units in rough terrain" && isRoughTerrain) {
if (modifiers.containsKey(text))
modifiers[text] = modifiers[text]!! + BDM.modificationAmount
else modifiers[text] = BDM.modificationAmount
}
}
return modifiers return modifiers
} }

View File

@ -109,8 +109,8 @@ class CivilizationInfo {
fun getTranslatedNation(): Nation { fun getTranslatedNation(): Nation {
val language = UnCivGame.Current.settings.language.replace(" ","_") val language = UnCivGame.Current.settings.language.replace(" ","_")
if(!Gdx.files.internal("jsons/Nations_$language.json").exists()) return nation if(!Gdx.files.internal("jsons/Nations/Nations_$language.json").exists()) return nation
val translatedNation = GameBasics.getFromJson(Array<Nation>::class.java, "Nations_$language") val translatedNation = GameBasics.getFromJson(Array<Nation>::class.java, "Nations/Nations_$language")
.firstOrNull { it.name==civName} .firstOrNull { it.name==civName}
if(translatedNation==null) // this language's trnslation doesn't contain this nation yet, if(translatedNation==null) // this language's trnslation doesn't contain this nation yet,
return nation // default to english return nation // default to english

View File

@ -27,6 +27,8 @@ class GoldenAgeManager{
fun enterGoldenAge() { fun enterGoldenAge() {
var turnsToGoldenAge = 10.0 var turnsToGoldenAge = 10.0
if (civInfo.containsBuildingUnique("Golden Age length increases +50%")) turnsToGoldenAge *= 1.5 if (civInfo.containsBuildingUnique("Golden Age length increases +50%")) turnsToGoldenAge *= 1.5
if(civInfo.nation.unique=="Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and +10% Strength")
turnsToGoldenAge*=1.5
if (civInfo.policies.isAdopted("Freedom Complete")) turnsToGoldenAge *= 1.5 if (civInfo.policies.isAdopted("Freedom Complete")) turnsToGoldenAge *= 1.5
turnsToGoldenAge *= civInfo.gameInfo.gameParameters.gameSpeed.getModifier() turnsToGoldenAge *= civInfo.gameInfo.gameParameters.gameSpeed.getModifier()
turnsLeftForCurrentGoldenAge += turnsToGoldenAge.toInt() turnsLeftForCurrentGoldenAge += turnsToGoldenAge.toInt()

View File

@ -82,17 +82,20 @@ class MapUnit {
fun getMovementString(): String = DecimalFormat("0.#").format(currentMovement.toDouble()) + "/" + getMaxMovement() fun getMovementString(): String = DecimalFormat("0.#").format(currentMovement.toDouble()) + "/" + getMaxMovement()
fun getTile(): TileInfo = currentTile fun getTile(): TileInfo = currentTile
fun getMaxMovement(): Int { fun getMaxMovement(): Int {
if(isEmbarked()) return getEmbarkedMovement() if (isEmbarked()) return getEmbarkedMovement()
var movement = baseUnit.movement var movement = baseUnit.movement
movement += getUniques().count{it=="+1 Movement"} movement += getUniques().count { it == "+1 Movement" }
if(type.isWaterUnit() && !type.isCivilian() if (type.isWaterUnit() && !type.isCivilian()
&& civInfo.containsBuildingUnique("All military naval units receive +1 movement and +1 sight")) && civInfo.containsBuildingUnique("All military naval units receive +1 movement and +1 sight"))
movement += 1 movement += 1
if(type.isWaterUnit() && civInfo.nation.unique=="+2 movement for all naval units") if (type.isWaterUnit() && civInfo.nation.unique == "+2 movement for all naval units")
movement+=2 movement += 2
if(civInfo.nation.unique=="Golden Ages last 50% longer. During a Golden Age, units receive +1 Movement and +10% Strength")
movement+=1
return movement return movement
} }
@ -336,11 +339,14 @@ class MapUnit {
tile.improvementInProgress = null tile.improvementInProgress = null
} }
private fun heal(){ private fun heal() {
if(isEmbarked()) return // embarked units can't heal if (isEmbarked()) return // embarked units can't heal
var amountToHealBy = rankTileForHealing(getTile()) var amountToHealBy = rankTileForHealing(getTile())
if (amountToHealBy == 0) return
if (hasUnique("+10 HP when healing")) amountToHealBy += 10
val adjacentUnits = currentTile.getTilesInDistance(1).flatMap { it.getUnits() } val adjacentUnits = currentTile.getTilesInDistance(1).flatMap { it.getUnits() }
if(adjacentUnits.isNotEmpty()) if (adjacentUnits.isNotEmpty())
amountToHealBy += adjacentUnits.map { it.adjacentHealingBonus() }.max()!! amountToHealBy += adjacentUnits.map { it.adjacentHealingBonus() }.max()!!
healBy(amountToHealBy) healBy(amountToHealBy)
} }

View File

@ -143,9 +143,12 @@ open class TileInfo {
if (terrainFeature == Constants.jungle && city != null if (terrainFeature == Constants.jungle && city != null
&& city.containsBuildingUnique("Jungles provide +2 science")) && city.containsBuildingUnique("Jungles provide +2 science"))
stats.science += 2f stats.science += 2f
if(terrainFeature=="Oasis" && city!=null if (terrainFeature == "Oasis" && city != null
&& city.containsBuildingUnique("+2 Gold for each source of Oil and oasis")) && city.containsBuildingUnique("+2 Gold for each source of Oil and oasis"))
stats.gold += 2 stats.gold += 2
if (terrainFeature == Constants.forest && city != null
&& city.containsBuildingUnique("Forests provide +1 production"))
stats.production += 1
} }
if (hasViewableResource(observingCiv)) { if (hasViewableResource(observingCiv)) {

View File

@ -5,40 +5,46 @@ import com.unciv.Constants
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
class UnitMovementAlgorithms(val unit:MapUnit) { class UnitMovementAlgorithms(val unit:MapUnit) {
// This function is called ALL THE TIME and should be as time-optimal as possible!
private fun getMovementCostBetweenAdjacentTiles(from: TileInfo, to: TileInfo, civInfo: CivilizationInfo): Float { private fun getMovementCostBetweenAdjacentTiles(from: TileInfo, to: TileInfo, civInfo: CivilizationInfo): Float {
var cost = getMovementCostBetweenAdjacentTiles(from,to)
val toOwner = to.getOwner() if ((from.isLand != to.isLand) && unit.type.isLandUnit())
if(toOwner!=null && to.isLand && civInfo.isAtWarWith(toOwner) && toOwner.hasActiveGreatWall)
cost += 1
return cost
}
private fun getMovementCostBetweenAdjacentTiles(from: TileInfo, to: TileInfo): Float {
if(unit.type.isLandUnit() && (from.isLand != to.isLand))
return 100f // this is embarkment or disembarkment, and will take the entire turn return 100f // this is embarkment or disembarkment, and will take the entire turn
if (from.roadStatus === RoadStatus.Railroad && to.roadStatus === RoadStatus.Railroad) var extraCost = 0f
return 1 / 10f
if (from.roadStatus !== RoadStatus.None && to.roadStatus !== RoadStatus.None) //Road val toOwner = to.getOwner()
if (toOwner != null && to.isLand && toOwner.hasActiveGreatWall && civInfo.isAtWarWith(toOwner))
extraCost += 1
if (from.roadStatus === RoadStatus.Railroad && to.roadStatus === RoadStatus.Railroad)
return 1 / 10f + extraCost
if (hasRoad(from,civInfo) && hasRoad(to,civInfo))
{ {
if (unit.civInfo.tech.movementSpeedOnRoadsImproved) return 1 / 3f if (unit.civInfo.tech.movementSpeedOnRoadsImproved) return 1 / 3f + extraCost
else return 1 / 2f else return 1 / 2f + extraCost
} }
if (unit.ignoresTerrainCost) return 1f if (unit.ignoresTerrainCost) return 1f + extraCost
if(unit.doubleMovementInForestAndJungle && (to.baseTerrain==Constants.forest || to.baseTerrain==Constants.jungle)) if (unit.doubleMovementInForestAndJungle && (to.baseTerrain == Constants.forest || to.baseTerrain == Constants.jungle))
return 1f return 1f + extraCost
if (unit.roughTerrainPenalty if (unit.roughTerrainPenalty
&& (to.baseTerrain == Constants.hill || to.terrainFeature == Constants.forest || to.terrainFeature == Constants.jungle)) && (to.baseTerrain == Constants.hill || to.terrainFeature == Constants.forest || to.terrainFeature == Constants.jungle))
return 4f return 4f + extraCost
if(unit.doubleMovementInCoast && to.baseTerrain==Constants.coast) if (unit.doubleMovementInCoast && to.baseTerrain == Constants.coast)
return 1/2f return 1 / 2f + extraCost
return to.getLastTerrain().movementCost.toFloat() // no road return to.getLastTerrain().movementCost.toFloat() + extraCost // no road
}
fun hasRoad(tileInfo:TileInfo, civInfo: CivilizationInfo): Boolean {
if(tileInfo.roadStatus!==RoadStatus.None) return true
if(civInfo.nation.forestsAndJunglesAreRoads && tileInfo.terrainFeature!=null
&& (tileInfo.terrainFeature==Constants.jungle || tileInfo.terrainFeature==Constants.forest)) return true
return false
} }
class ParentTileAndTotalDistance(val parentTile:TileInfo, val totalDistance: Float) class ParentTileAndTotalDistance(val parentTile:TileInfo, val totalDistance: Float)

View File

@ -27,7 +27,7 @@ object GameBasics {
fun <T> getFromJson(tClass: Class<T>, name: String): T { fun <T> getFromJson(tClass: Class<T>, name: String): T {
val jsonText = Gdx.files.internal("jsons/$name.json").readString() val jsonText = Gdx.files.internal("jsons/$name.json").readString()
return Json().apply { ignoreUnknownFields=true }.fromJson(tClass, jsonText) return Json().apply { ignoreUnknownFields = true }.fromJson(tClass, jsonText)
} }
fun <T : INamed> createHashmap(items: Array<T>): LinkedHashMap<String, T> { fun <T : INamed> createHashmap(items: Array<T>): LinkedHashMap<String, T> {
@ -38,16 +38,6 @@ object GameBasics {
} }
init { init {
Buildings += createHashmap(getFromJson(Array<Building>::class.java, "Buildings"))
Terrains += createHashmap(getFromJson(Array<Terrain>::class.java, "Terrains"))
TileResources += createHashmap(getFromJson(Array<TileResource>::class.java, "TileResources"))
TileImprovements += createHashmap(getFromJson(Array<TileImprovement>::class.java, "TileImprovements"))
Units += createHashmap(getFromJson(Array<BaseUnit>::class.java, "Units"))
UnitPromotions += createHashmap(getFromJson(Array<Promotion>::class.java, "UnitPromotions"))
PolicyBranches += createHashmap(getFromJson(Array<PolicyBranch>::class.java, "Policies"))
Nations += createHashmap(getFromJson(Array<Nation>::class.java, "Nations"))
Difficulties += createHashmap(getFromJson(Array<Difficulty>::class.java, "Difficulties"))
val techColumns = getFromJson(Array<TechColumn>::class.java, "Techs") val techColumns = getFromJson(Array<TechColumn>::class.java, "Techs")
for (techColumn in techColumns) { for (techColumn in techColumns) {
for (tech in techColumn.techs) { for (tech in techColumn.techs) {
@ -56,6 +46,8 @@ object GameBasics {
Technologies[tech.name] = tech Technologies[tech.name] = tech
} }
} }
Buildings += createHashmap(getFromJson(Array<Building>::class.java, "Buildings"))
for (building in Buildings.values) { for (building in Buildings.values) {
if (building.requiredTech == null) continue if (building.requiredTech == null) continue
val column = building.getRequiredTech().column val column = building.getRequiredTech().column
@ -63,6 +55,13 @@ object GameBasics {
building.cost = if (building.isWonder || building.isNationalWonder) column!!.wonderCost else column!!.buildingCost building.cost = if (building.isWonder || building.isNationalWonder) column!!.wonderCost else column!!.buildingCost
} }
Terrains += createHashmap(getFromJson(Array<Terrain>::class.java, "Terrains"))
TileResources += createHashmap(getFromJson(Array<TileResource>::class.java, "TileResources"))
TileImprovements += createHashmap(getFromJson(Array<TileImprovement>::class.java, "TileImprovements"))
Units += createHashmap(getFromJson(Array<BaseUnit>::class.java, "Units"))
UnitPromotions += createHashmap(getFromJson(Array<Promotion>::class.java, "UnitPromotions"))
PolicyBranches += createHashmap(getFromJson(Array<PolicyBranch>::class.java, "Policies"))
for (branch in PolicyBranches.values) { for (branch in PolicyBranches.values) {
branch.requires = ArrayList() branch.requires = ArrayList()
branch.branch = branch.name branch.branch = branch.name
@ -73,7 +72,14 @@ object GameBasics {
branch.policies.last().name = branch.name + " Complete" branch.policies.last().name = branch.name + " Complete"
} }
for(file in Gdx.files.internal("jsons/Translations").list()) Nations += createHashmap(getFromJson(Array<Nation>::class.java, "Nations/Nations"))
for(nation in Nations.values) nation.setTransients()
Difficulties += createHashmap(getFromJson(Array<Difficulty>::class.java, "Difficulties"))
for (file in Gdx.files.internal("jsons/Translations").list())
Translations.add(file.readString()) Translations.add(file.readString())
} }
} }

View File

@ -50,18 +50,29 @@ class Nation : INamed {
var innerColor: List<Int>?=null var innerColor: List<Int>?=null
var startBias = ArrayList<String>() var startBias = ArrayList<String>()
@Transient private lateinit var outerColorObject:Color
fun getOuterColor(): Color = outerColorObject
fun getColor(): Color { @Transient private lateinit var innerColorObject:Color
return colorFromRGB(outerColor[0], outerColor[1], outerColor[2])
} fun getInnerColor(): Color = innerColorObject
fun getSecondaryColor(): Color {
if(innerColor==null) return Color.BLACK
return colorFromRGB(innerColor!![0], innerColor!![1], innerColor!![2])
}
fun isCityState()= cityStateType != null fun isCityState()= cityStateType != null
fun isMajorCiv() = !isBarbarian() && !isCityState() fun isMajorCiv() = !isBarbarian() && !isCityState()
fun isBarbarian() = name=="Barbarians" fun isBarbarian() = name=="Barbarians"
// This is its own transient because we'll need to check this for every tile-to-tile movement which is harsh
@Transient var forestsAndJunglesAreRoads = false
fun setTransients(){
outerColorObject = colorFromRGB(outerColor[0], outerColor[1], outerColor[2])
if(innerColor==null) innerColorObject = Color.BLACK
else innerColorObject = colorFromRGB(innerColor!![0], innerColor!![1], innerColor!![2])
if(unique == "All units move through Forest and Jungle tiles in friendly territory as if it is Road. These tiles can be used to establish City Connections upon researching the Wheel.")
forestsAndJunglesAreRoads = true
}
lateinit var cities: List<String> lateinit var cities: List<String>
} }

View File

@ -122,12 +122,12 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
private fun createOffersTable(civ: CivilizationInfo, offersList: TradeOffersList, numberOfOtherSidesOffers: Int): Table { private fun createOffersTable(civ: CivilizationInfo, offersList: TradeOffersList, numberOfOtherSidesOffers: Int): Table {
val table = Table() val table = Table()
table.defaults().pad(10f) table.defaults().pad(10f)
table.background = ImageGetter.getBackground(civ.nation.getColor()) table.background = ImageGetter.getBackground(civ.nation.getOuterColor())
table.add(civ.civName.toLabel().setFontColor(civ.nation.getSecondaryColor())).row() table.add(civ.civName.toLabel().setFontColor(civ.nation.getInnerColor())).row()
table.addSeparator() table.addSeparator()
for(offer in offersList){ for(offer in offersList){
val offerText = offer.getOfferText() val offerText = offer.getOfferText()
table.add(offerText.toLabel().setFontColor(civ.nation.getSecondaryColor())).row() table.add(offerText.toLabel().setFontColor(civ.nation.getInnerColor())).row()
} }
for(i in 1..numberOfOtherSidesOffers - offersList.size) for(i in 1..numberOfOtherSidesOffers - offersList.size)
table.add("".toLabel()).row() // we want both sides of the general table to have the same number of rows table.add("".toLabel()).row() // we want both sides of the general table to have the same number of rows
@ -416,8 +416,8 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
label.setFontColor(Color.BLACK) label.setFontColor(Color.BLACK)
} else if (currentPlayer==civ || UnCivGame.Current.viewEntireMapForDebug || currentPlayer.knows(civ)) { } else if (currentPlayer==civ || UnCivGame.Current.viewEntireMapForDebug || currentPlayer.knows(civ)) {
civGroup.add(ImageGetter.getNationIndicator(civ.nation, 30f)) civGroup.add(ImageGetter.getNationIndicator(civ.nation, 30f))
civGroup.background = civGroupBackground.tint(civ.nation.getColor()) civGroup.background = civGroupBackground.tint(civ.nation.getOuterColor())
label.setFontColor(civ.nation.getSecondaryColor()) label.setFontColor(civ.nation.getInnerColor())
} else { } else {
civGroup.background = civGroupBackground.tint(Color.DARK_GRAY) civGroup.background = civGroupBackground.tint(Color.DARK_GRAY)
label.setText("???") label.setText("???")

View File

@ -11,24 +11,22 @@ import com.unciv.ui.utils.*
class NationTable(val nation: Nation, width:Float, onClick:()->Unit) class NationTable(val nation: Nation, width:Float, onClick:()->Unit)
: Table(CameraStageBaseScreen.skin){ : Table(CameraStageBaseScreen.skin){
val innerTable = Table() private val innerTable = Table()
init { init {
background = ImageGetter.getBackground(nation.getSecondaryColor()) background = ImageGetter.getBackground(nation.getInnerColor())
innerTable.pad(10f) innerTable.pad(10f)
innerTable.background = ImageGetter.getBackground(nation.getColor()) innerTable.background = ImageGetter.getBackground(nation.getOuterColor())
val titleTable = Table() val titleTable = Table()
titleTable.add(ImageGetter.getNationIndicator(nation, 50f)).pad(10f) titleTable.add(ImageGetter.getNationIndicator(nation, 50f)).pad(10f)
titleTable.add(nation.getLeaderDisplayName().toLabel() titleTable.add(nation.getLeaderDisplayName().toLabel()
.apply { setFontColor(nation.getSecondaryColor()); setFontSize(24) }) .apply { setFontColor(nation.getInnerColor()); setFontSize(24) })
innerTable.add(titleTable).row() innerTable.add(titleTable).row()
innerTable.add(getUniqueLabel(nation) innerTable.add(getUniqueLabel(nation)
.apply { setWrap(true);setFontColor(nation.getSecondaryColor()) }) .apply { setWrap(true);setFontColor(nation.getInnerColor()) })
.width(width) .width(width)
onClick { onClick { onClick() }
onClick()
}
touchable = Touchable.enabled touchable = Touchable.enabled
add(innerTable) add(innerTable)
} }

View File

@ -45,10 +45,10 @@ class CityButton(val city: CityInfo, internal val tileGroup: WorldTileGroup, ski
private fun addAirUnitTable() { private fun addAirUnitTable() {
if (!tileGroup.tileInfo.airUnits.isNotEmpty()) return if (!tileGroup.tileInfo.airUnits.isNotEmpty()) return
val secondarycolor = city.civInfo.nation.getSecondaryColor() val secondarycolor = city.civInfo.nation.getInnerColor()
val airUnitTable = Table().apply { defaults().pad(5f) } val airUnitTable = Table().apply { defaults().pad(5f) }
airUnitTable.background = ImageGetter.getDrawable("OtherIcons/civTableBackground") airUnitTable.background = ImageGetter.getDrawable("OtherIcons/civTableBackground")
.tint(city.civInfo.nation.getColor()) .tint(city.civInfo.nation.getOuterColor())
val aircraftImage = ImageGetter.getImage("OtherIcons/Aircraft") val aircraftImage = ImageGetter.getImage("OtherIcons/Aircraft")
aircraftImage.color = secondarycolor aircraftImage.color = secondarycolor
airUnitTable.add(aircraftImage).size(15f) airUnitTable.add(aircraftImage).size(15f)
@ -89,11 +89,11 @@ class CityButton(val city: CityInfo, internal val tileGroup: WorldTileGroup, ski
} }
private fun getIconTable(): Table { private fun getIconTable(): Table {
val secondaryColor = city.civInfo.nation.getSecondaryColor() val secondaryColor = city.civInfo.nation.getInnerColor()
val iconTable = Table() val iconTable = Table()
iconTable.touchable=Touchable.enabled iconTable.touchable=Touchable.enabled
iconTable.background = ImageGetter.getDrawable("OtherIcons/civTableBackground") iconTable.background = ImageGetter.getDrawable("OtherIcons/civTableBackground")
.tint(city.civInfo.nation.getColor()) .tint(city.civInfo.nation.getOuterColor())
if (city.resistanceCounter > 0) { if (city.resistanceCounter > 0) {
val resistanceImage = ImageGetter.getImage("StatIcons/Resistance") val resistanceImage = ImageGetter.getImage("StatIcons/Resistance")
@ -170,7 +170,7 @@ class CityButton(val city: CityInfo, internal val tileGroup: WorldTileGroup, ski
group.addActor(circle) group.addActor(circle)
group.addActor(image) group.addActor(image)
val secondaryColor = cityConstructions.cityInfo.civInfo.nation.getSecondaryColor() val secondaryColor = cityConstructions.cityInfo.civInfo.nation.getInnerColor()
val cityCurrentConstruction = cityConstructions.getCurrentConstruction() val cityCurrentConstruction = cityConstructions.getCurrentConstruction()
if(cityCurrentConstruction !is SpecialConstruction) { if(cityCurrentConstruction !is SpecialConstruction) {
val turnsToConstruction = cityConstructions.turnsToConstruction(cityCurrentConstruction.name) val turnsToConstruction = cityConstructions.turnsToConstruction(cityCurrentConstruction.name)

View File

@ -278,7 +278,7 @@ open class TileGroup(var tileInfo: TileInfo, var tileSetStrings:TileSetStrings)
previousTileOwner = tileOwner previousTileOwner = tileOwner
if (tileOwner == null) return if (tileOwner == null) return
val civColor = tileInfo.getOwner()!!.nation.getColor() val civColor = tileInfo.getOwner()!!.nation.getOuterColor()
for (neighbor in tileInfo.neighbors) { for (neighbor in tileInfo.neighbors) {
val neighborOwner = neighbor.getOwner() val neighborOwner = neighbor.getOwner()
if (neighborOwner == tileOwner && borderImages.containsKey(neighbor)) // the neighbor used to not belong to us, but now it's ours if (neighborOwner == tileOwner && borderImages.containsKey(neighbor)) // the neighbor used to not belong to us, but now it's ours

View File

@ -67,15 +67,15 @@ object ImageGetter {
} }
fun getNationIndicator(nation: Nation, size:Float): IconCircleGroup { fun getNationIndicator(nation: Nation, size:Float): IconCircleGroup {
val civIndicator = getCircle().apply { color = nation.getSecondaryColor() } val civIndicator = getCircle().apply { color = nation.getInnerColor() }
.surroundWithCircle(size).apply { circle.color = nation.getColor() } .surroundWithCircle(size).apply { circle.color = nation.getOuterColor() }
val civIconName = if(nation.isCityState()) "CityState" else nation.name val civIconName = if(nation.isCityState()) "CityState" else nation.name
if(nationIconExists(civIconName)){ if(nationIconExists(civIconName)){
val cityStateIcon = ImageGetter.getNationIcon(civIconName) val cityStateIcon = ImageGetter.getNationIcon(civIconName)
cityStateIcon.setSize(size*0.7f,size*0.7f) cityStateIcon.setSize(size*0.7f,size*0.7f)
cityStateIcon.center(civIndicator) cityStateIcon.center(civIndicator)
cityStateIcon.color = nation.getColor() cityStateIcon.color = nation.getOuterColor()
civIndicator.addActor(cityStateIcon) civIndicator.addActor(cityStateIcon)
} }

View File

@ -11,12 +11,12 @@ class UnitGroup(val unit: MapUnit, val size: Float): Group() {
var blackSpinningCircle:Image?=null var blackSpinningCircle:Image?=null
init { init {
val unitBaseImage = ImageGetter.getUnitIcon(unit.name, unit.civInfo.nation.getSecondaryColor()) val unitBaseImage = ImageGetter.getUnitIcon(unit.name, unit.civInfo.nation.getInnerColor())
.apply { setSize(size * 0.75f, size * 0.75f) } .apply { setSize(size * 0.75f, size * 0.75f) }
val background = getBackgroundImageForUnit(unit) val background = getBackgroundImageForUnit(unit)
background.apply { background.apply {
this.color = unit.civInfo.nation.getColor() this.color = unit.civInfo.nation.getOuterColor()
setSize(size, size) setSize(size, size)
} }
setSize(size, size) setSize(size, size)

View File

@ -78,9 +78,9 @@ class Minimap(val tileMapHolder: TileMapHolder) : ScrollPane(null){
if (!(UnCivGame.Current.viewEntireMapForDebug || cloneCivilization.exploredTiles.contains(tileInfo.position))) if (!(UnCivGame.Current.viewEntireMapForDebug || cloneCivilization.exploredTiles.contains(tileInfo.position)))
hex.color = Color.DARK_GRAY hex.color = Color.DARK_GRAY
else if (tileInfo.isCityCenter() && !tileInfo.isWater) else if (tileInfo.isCityCenter() && !tileInfo.isWater)
hex.color = tileInfo.getOwner()!!.nation.getSecondaryColor() hex.color = tileInfo.getOwner()!!.nation.getInnerColor()
else if (tileInfo.getCity() != null && !tileInfo.isWater) else if (tileInfo.getCity() != null && !tileInfo.isWater)
hex.color = tileInfo.getOwner()!!.nation.getColor() hex.color = tileInfo.getOwner()!!.nation.getOuterColor()
else hex.color = tileInfo.getBaseTerrain().getColor().lerp(Color.GRAY, 0.5f) else hex.color = tileInfo.getBaseTerrain().getColor().lerp(Color.GRAY, 0.5f)
} }
} }

View File

@ -10,10 +10,10 @@ class PlayerReadyScreen(currentPlayerCiv: CivilizationInfo) : CameraStageBaseScr
init { init {
val table= Table() val table= Table()
table.touchable= Touchable.enabled table.touchable= Touchable.enabled
table.background= ImageGetter.getBackground(currentPlayerCiv.nation.getColor()) table.background= ImageGetter.getBackground(currentPlayerCiv.nation.getOuterColor())
table.add("[$currentPlayerCiv] ready?".toLabel().setFontSize(24) table.add("[$currentPlayerCiv] ready?".toLabel().setFontSize(24)
.setFontColor(currentPlayerCiv.nation.getSecondaryColor())) .setFontColor(currentPlayerCiv.nation.getInnerColor()))
table.onClick { table.onClick {
UnCivGame.Current.worldScreen = WorldScreen(currentPlayerCiv) UnCivGame.Current.worldScreen = WorldScreen(currentPlayerCiv)

View File

@ -36,6 +36,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https:
* [Catapult](https://thenounproject.com/search/?q=Spear&i=1233840) By Jakub Ukrop * [Catapult](https://thenounproject.com/search/?q=Spear&i=1233840) By Jakub Ukrop
* [Unloaded Crossbow](https://thenounproject.com/term/unloaded-crossbow/815992/) By Hamish as Ballista * [Unloaded Crossbow](https://thenounproject.com/term/unloaded-crossbow/815992/) By Hamish as Ballista
* [Sword](https://thenounproject.com/search/?q=Sword&i=1215443) By Guilherme Furtado for Swordsman * [Sword](https://thenounproject.com/search/?q=Sword&i=1215443) By Guilherme Furtado for Swordsman
* [Mohawk](https://thenounproject.com/search/?q=mohawk&i=1426649) By Dairy Free Design for Mohawk Warrior
* [Roman Helmet](https://thenounproject.com/search/?q=legion&i=440134) By parkjisun for Legion * [Roman Helmet](https://thenounproject.com/search/?q=legion&i=440134) By parkjisun for Legion
* [Horse](https://thenounproject.com/search/?q=Horse&i=1373793) By AFY Studio for Horseman * [Horse](https://thenounproject.com/search/?q=Horse&i=1373793) By AFY Studio for Horseman
* [Horse Head](https://thenounproject.com/search/?q=Cavalry&i=374037) By Juan Pablo Bravo for Companion Cavalry * [Horse Head](https://thenounproject.com/search/?q=Cavalry&i=374037) By Juan Pablo Bravo for Companion Cavalry
@ -45,7 +46,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https:
* [Ship](https://thenounproject.com/term/ship/1998589/) By Vanisha for Galleass * [Ship](https://thenounproject.com/term/ship/1998589/) By Vanisha for Galleass
* [Crossbow](https://thenounproject.com/term/crossbow/965389/) By Creaticca Creative Agency for Crossbowman * [Crossbow](https://thenounproject.com/term/crossbow/965389/) By Creaticca Creative Agency for Crossbowman
* [Longbow](https://thenounproject.com/search/?q=longbow&i=815991) By Hamish for Longbowman * [Longbow](https://thenounproject.com/search/?q=longbow&i=815991) By Hamish for Longbowman
* [Trebuchet](https://thenounproject.com/search/?q=Trebuchet&i=827987) By Ben Davis * [Trebuchet](https://thenounproject.com/search/?q=trebuchet&i=828475) By Ben Davis
* [Sword](https://thenounproject.com/search/?q=Sword&i=1432662) By uzeir syarief for Longswordsman * [Sword](https://thenounproject.com/search/?q=Sword&i=1432662) By uzeir syarief for Longswordsman
* [Samurai](https://thenounproject.com/search/?q=samurai&i=1683729) By Chanut is Industries * [Samurai](https://thenounproject.com/search/?q=samurai&i=1683729) By Chanut is Industries
* [Spear](https://thenounproject.com/search/?q=Spear&i=1233840) By Alvaro Cabrera for Pikeman * [Spear](https://thenounproject.com/search/?q=Spear&i=1233840) By Alvaro Cabrera for Pikeman
@ -167,7 +168,7 @@ Unless otherwise specified, all the following are from [the Noun Project](https:
* [Anubis](https://thenounproject.com/term/anubis/1080090/) By Carpe Diem for Burial Tomb * [Anubis](https://thenounproject.com/term/anubis/1080090/) By Carpe Diem for Burial Tomb
* [Parthenon](https://thenounproject.com/term/parthenon/493272/) By Christopher T. Howlett for The Oracle * [Parthenon](https://thenounproject.com/term/parthenon/493272/) By Christopher T. Howlett for The Oracle
* [Stadium](https://thenounproject.com/term/stadium/1500595/) By sandra for Colosseum * [Stadium](https://thenounproject.com/term/stadium/1500595/) By sandra for Colosseum
* [Terracotta Army](https://thenounproject.com/search/?q=terracotta&i=2306346) By Supalerk Laipawat * [Terracotta Army](https://thenounproject.com/search/?q=terracotta&i=2412905) By Phạm Thanh Lộc
* [Stadium](https://thenounproject.com/term/stadium/1152530/) By Creaticca Creative Agency for Circus Maximus * [Stadium](https://thenounproject.com/term/stadium/1152530/) By Creaticca Creative Agency for Circus Maximus
* [Market](https://thenounproject.com/term/market/1723050/) By sofi * [Market](https://thenounproject.com/term/market/1723050/) By sofi
* [Bazaar](https://thenounproject.com/term/bazaar/902288/) By Tokka Elkholy * [Bazaar](https://thenounproject.com/term/bazaar/902288/) By Tokka Elkholy
@ -183,12 +184,13 @@ Unless otherwise specified, all the following are from [the Noun Project](https:
* [Christian Church](https://thenounproject.com/term/christian-church/1174183/) By Andrejs Kirma for Monastery * [Christian Church](https://thenounproject.com/term/christian-church/1174183/) By Andrejs Kirma for Monastery
* [Castle](https://thenounproject.com/search/?q=castle&i=390189) By Mint Shirt * [Castle](https://thenounproject.com/search/?q=castle&i=390189) By Mint Shirt
* [Red Fort](https://thenounproject.com/arunabh.jain.0fficial/collection/famous-indian-monuments/?i=2092466), [Gateway of India](https://thenounproject.com/arunabh.jain.0fficial/collection/famous-indian-monuments/?i=2092468) By Arunabh Jain, IN for Mughal Fort * [Red Fort](https://thenounproject.com/arunabh.jain.0fficial/collection/famous-indian-monuments/?i=2092466), [Gateway of India](https://thenounproject.com/arunabh.jain.0fficial/collection/famous-indian-monuments/?i=2092468) By Arunabh Jain, IN for Mughal Fort
* [Cambodia](https://thenounproject.com/term/cambodia/1809152/) By Wichai Wi for Angkor Wat * [Angkor Wat](https://thenounproject.com/search/?q=angkor%20wat&i=2412873) By Phạm Thanh Lộc for Angkor Wat
* [Alhambra](https://thenounproject.com/search/?q=alhambra&i=403759) By parkjisun * [Alhambra](https://thenounproject.com/search/?q=alhambra&i=2322217) By Phạm Thanh Lộc
* [Books](https://thenounproject.com/term/books/1140218/) By Abir Alward for Oxford University * [Books](https://thenounproject.com/term/books/1140218/) By Abir Alward for Oxford University
* [Forge](https://thenounproject.com/term/forge/1044767/) By Monjin Friends * [Forge](https://thenounproject.com/term/forge/1044767/) By Monjin Friends
* [Anchor](https://thenounproject.com/term/anchor/1258518/) By Saeful Muslim for Harbor * [Anchor](https://thenounproject.com/term/anchor/1258518/) By Saeful Muslim for Harbor
* [Hand saw](https://thenounproject.com/term/hand-saw/990902/) By b farias for Workshop * [Hand saw](https://thenounproject.com/term/hand-saw/990902/) By b farias for Workshop
* [House](https://thenounproject.com/search/?q=house&i=1651759) By sofy for Longhouse
* [Hagia Sophia](https://thenounproject.com/term/hagia-sophia/1907752/) By Felipe Alvarado * [Hagia Sophia](https://thenounproject.com/term/hagia-sophia/1907752/) By Felipe Alvarado
* [Factory](https://thenounproject.com/term/factory/1624235/) By Maxim Kulikov for Ironworks * [Factory](https://thenounproject.com/term/factory/1624235/) By Maxim Kulikov for Ironworks
* [Notre Dame](https://thenounproject.com/term/notre-dame/1361725/) By Marco Livolsi * [Notre Dame](https://thenounproject.com/term/notre-dame/1361725/) By Marco Livolsi