As a French person I feel like it's my duty to explain strikes to you. - AdrienIer

Create an account  

 
Curious Civplayer - Mysteries of the DLL

What determines which type of unit is spawned for the barbarians?

For this we go to CvGame and there into the rather big createBarbarianUnits method. There's a lot more in the method, but that is so far well known already, like when barbs are spawning. The interesting part is this:


Code:
for (iJ = 0; iJ < GC.getNumUnitClassInfos(); iJ++)
{
   bool bValid = false;
   eLoopUnit = ((UnitTypes)(GC.getCivilizationInfo(GET_PLAYER(BARBARIAN_PLAYER).getCivilizationType()).getCivilizationUnits(iJ)));

   if (eLoopUnit != NO_UNIT)
   {
       CvUnitInfo& kUnit = GC.getUnitInfo(eLoopUnit);

       bValid = (kUnit.getCombat() > 0 && !kUnit.isOnlyDefensive());

       if (bValid)
       {
           if (pLoopArea->isWater() && kUnit.getDomainType() != DOMAIN_SEA)
           {
               bValid = false;
           }
           else if (!pLoopArea->isWater() && kUnit.getDomainType() != DOMAIN_LAND)
           {
               bValid = false;
           }
       }

       if (bValid)
       {
           if (!GET_PLAYER(BARBARIAN_PLAYER).canTrain(eLoopUnit))
           {
               bValid = false;
           }
       }

       if (bValid)
       {
           if (NO_BONUS != kUnit.getPrereqAndBonus())
           {
               if (!GET_TEAM(BARBARIAN_TEAM).isHasTech((TechTypes)GC.getBonusInfo((BonusTypes)kUnit.getPrereqAndBonus()).getTechCityTrade()))
               {
                   bValid = false;
               }
           }
       }

       if (bValid)
       {
           bool bFound = false;
           bool bRequires = false;
           for (int i = 0; i < GC.getNUM_UNIT_PREREQ_OR_BONUSES(); ++i)
           {
               if (NO_BONUS != kUnit.getPrereqOrBonuses(i))
               {
                   TechTypes eTech = (TechTypes)GC.getBonusInfo((BonusTypes)kUnit.getPrereqOrBonuses(i)).getTechCityTrade();
                   if (NO_TECH != eTech)
                   {
                       bRequires = true;
                       
                       if (GET_TEAM(BARBARIAN_TEAM).isHasTech(eTech))
                       {
                           bFound = true;
                           break;
                       }
                   }
               }
           }

           if (bRequires && !bFound)
           {
               bValid = false;
           }
       }

       if (bValid)
       {
           iValue = (1 + getSorenRandNum(1000, "Barb Unit Selection"));

           if (kUnit.getUnitAIType(eBarbUnitAI))
           {
               iValue += 200;
           }

           if (iValue > iBestValue)
           {
               eBestUnit = eLoopUnit;
               iBestValue = iValue;
           }
       }
   }
}

We start this by iterating through all the units available to the civs in this case the barbarians. You can find this info in the CIV4CivilizationInfos.xml. The barbarian civ is at the end. Here is the complete list of units available to the barbs either for spawning or building:

  • All the animals
  • Worker (these won't spawn because the have zero strength)
  • Spies (these won't spawn because the have zero strength)
  • Warrior
  • Axeman
  • Swordsman
  • Maceman
  • Spearman
  • Rifleman
  • Grenadier
  • Paratrooper
  • Archer
  • Longbowman
  • Horse Archer (yes, I've tested that)
  • Galley
  • Privateer
  • Frigate

We look through this list for the best valid unit to spawn. First we look if the current unit is valid by doing various checks:


Code:
bValid = (kUnit.getCombat() > 0 && !kUnit.isOnlyDefensive());


We start with a rather simple check. The unit needs to have a strength bigger then 0 (no worker or settler) and it shouldn't be a defensive unit (scouts, explorers, machine guns)

Next part is a little bit more interesting:


Code:
if (bValid)
{
   if (pLoopArea->isWater() && kUnit.getDomainType() != DOMAIN_SEA)
   {
       bValid = false;
   }
   else if (!pLoopArea->isWater() && kUnit.getDomainType() != DOMAIN_LAND)
   {
       bValid = false;
   }
}


Here we just check that the unit has the right domain to spawn in that area. This pLoopArea was determined earlier in the method. Basically we prevent water units spawning on land and vice versa.


Code:
if (bValid)
{
   if (!GET_PLAYER(BARBARIAN_PLAYER).canTrain(eLoopUnit))
   {
       bValid = false;
   }
}

Here we have the first really interesting part. This is your standard canTrain check like it does for every other players. The important things that are checked in canTrain are:
  • is the units production cost not -1
  • does the player has the necessary technologies
  • is the maximum for national units reached
It's important to note that this method does not check for necessary resources. This happens in the next step:


Code:
if (bValid)
{
   if (NO_BONUS != kUnit.getPrereqAndBonus())
   {
       if (!GET_TEAM(BARBARIAN_TEAM).isHasTech((TechTypes)GC.getBonusInfo((BonusTypes)kUnit.getPrereqAndBonus()).getTechCityTrade()))
       {
           bValid = false;
       }
   }
}

This code is rather interesting. We check if the unit requires resources. But then we do not check for this resource itself, but rather we check if the barbs have the necessary tech to trade this resource.

Now let me pause quickly here for a second, because this is something that not everybody knows about Civ 4. You actually need certain techs to be able to trade resources. For the most parts these are the same techs that enable the improvement you need to connect the resource anyway, so I won't go through the whole list. You can find all the info here in the BonusXML, which I turned into a spreadsheet here: BonusInfo.XML

The important resources for unit training are:

Copper - tradable with Mining
Horse - tradable with Animal Husbandry
Iron - tradable with Mining
Ivory - tradable with Hunting
Oil - tradable with Combustion
Uranium - tradable with Fission (this is the only resource that needs a different tech then the one enabling the improvement)

By the way this tech requirement for trading resources is the one single reason, why you don't want to skip Agriculture, because without Agriculture you can't get those resources from other players.

Let's return to the unit spawning again:


Code:
if (bValid)
{
   bool bFound = false;
   bool bRequires = false;
   for (int i = 0; i < GC.getNUM_UNIT_PREREQ_OR_BONUSES(); ++i)
   {
       if (NO_BONUS != kUnit.getPrereqOrBonuses(i))
       {
           TechTypes eTech = (TechTypes)GC.getBonusInfo((BonusTypes)kUnit.getPrereqOrBonuses(i)).getTechCityTrade();
           if (NO_TECH != eTech)
           {
               bRequires = true;
               
               if (GET_TEAM(BARBARIAN_TEAM).isHasTech(eTech))
               {
                   bFound = true;
                   break;
               }
           }
       }
   }

   if (bRequires && !bFound)
   {
       bValid = false;
   }
}

This very long part is basically the same check as the last one. Only difference, last time we checked for AND connections between multiple resources and here we check for OR connections.

With that out of the way, we now know if the unit is valid and we only need to determine the best unit


Code:
if (bValid)
{
   iValue = (1 + getSorenRandNum(1000, "Barb Unit Selection"));

   if (kUnit.getUnitAIType(eBarbUnitAI))
   {
       iValue += 200;
   }

   if (iValue > iBestValue)
   {
       eBestUnit = eLoopUnit;
       iBestValue = iValue;
   }
}

We start by rolling a random number between 1-1000. Then we add 200 if the unit has a certain UnitAIType. eBarbUnitAI was set previously in the method to UNITAI_ATTACK_SEA for water units and UNITAI_ATTACK for others. This means if the unit has one of those UnitAITypes it is more likely to spawn. Here is the complete list of barbarian units with these types:

UNITAI_ATTACK:
  • Warrior
  • Swordsman
  • Axeman
  • Maceman
  • Rifleman
  • Grenadier
  • Archer
  • Longbowman
  • Horse Archer


UNITAI_ATTACK_SEA:
  • Privateer
  • Frigate

Lastly we check for the unit with the highest value and spawn it.

Summary

The important factors for which units are available for barb spawning are:
  • Only units with combat strength > 0 are allowed
  • Defensive only units (Scouts, Explorers, Machine Guns) can't spawn for them
  • Do the barbarians have the necessary techs for the unit itself
  • Do the barbarians have the necessary tech to trade the resource required for the unit
So to give a quick overview about the common units from Ancient starts:

Warrior - no requirement
Axeman - Bronze Working and Mining
Spearman - Hunting and Mining
Archer - Archery
Horse Archer - Horseback Riding and Animal Husbandry
Galley - Sailing

Next I will look into how barbarians gain techs. Stay tuned.

EDIT: I was notified that I had a mistake in this. I didn't consider that the barbs have a unit list of their own in the CIV4CivilizationInfos.xml. I edited this post to reflect that.
Mods: RtR    CtH

Pitboss: PB39, PB40PB52, PB59 Useful Collections: Pickmethods, Mapmaking, Curious Civplayer

Buy me a coffee
Reply

2-movers can't spawn, though, thank goodness.
If only you and me and dead people know hex, then only deaf people know hex.

I write RPG adventures, and blog about it, check it out.
Reply

Going back to teleportation, I think the most unusual case I've ever had or seen in a pitboss game came in my pitboss 18 game where my scout teleported 7 tiles on turn 51 of a game:

(May 19th, 2014, 19:47)pindicator Wrote: Turn 051

Cyneheard has been posturing very aggressively towards my scout, trailing it with warriors despite the forced peace through turn 51. So on turn 50 when I began my return home, and found him positioned like so, I feared my scout was done for. They who had been to the ends of the earth, yet now on the return home the Egyptians were waiting like cowards to prey on them.

[Image: pb18%20-%20turn050%20-%20flight%20from%2....jpg?raw=1]

They hounded and tossed insults at our brave men, shadowing them for days as they roamed the waters of the west. Left with no options, the scout took the only route possible. It grasped at a gossamer hope so thin if you turned your head just a little it would disappear in the sunlight. The captain of the scouting party ordered his men south: He would lose the Egyptians in the wild forests west of their capital, where he promised them that they would be home faster than they could imagine, and no Egyptian would catch trace of any sign of their passing. The men thought him mad, but followed with grim resolution.

The captain swears he could not find the path again if his life depended on it. Already the tale of it has taken on a life of its own among the company. Some say they found an underground tunnel that led them from one side of Egypt to the other. Others claim the gods of the land had so favored them that they were able to walk in open during full daylight and the enemies' eyes were turned away. Others refuse to speak anything of it at all, simply shaking their heads and smiling as if they still cannot believe their luck.

But they all agree that the captain knew how it would end all a long, and to a man they will follow him now wherever he should call them to go. They know they are close to home now. And although there are reports of wild men roaming the vast empty spacies of world -- as wild and untamed as the Egyptians but living under no banner of their own -- the men know their captain will see them safely home.

[Image: pb18%20-%20turn051%20-%20teleportation.jpg?raw=1]
Suffer Game Sicko
Dodo Tier Player
Reply

See here https://forums.civfanatics.com/threads/s...t-11460930.
Reply

(October 13th, 2020, 14:56)Commodore Wrote: 2-movers can't spawn, though, thank goodness.

So far I didn't find anything specifically preventing 2-movers from spawning, maybe I will find that answer in the tech research of barbs.

(October 13th, 2020, 15:32)pindicator Wrote: Going back to teleportation, I think the most unusual case I've ever had or seen in a pitboss game came in my pitboss 18 game where my scout teleported 7 tiles on turn 51 of a game:

(May 19th, 2014, 19:47)pindicator Wrote: Turn 051

Cyneheard has been posturing very aggressively towards my scout, trailing it with warriors despite the forced peace through turn 51.  So on turn 50 when I began my return home, and found him positioned like so, I feared my scout was done for.  They who had been to the ends of the earth, yet now on the return home the Egyptians were waiting like cowards to prey on them.  

[Image: pb18%20-%20turn050%20-%20flight%20from%2....jpg?raw=1]

They hounded and tossed insults at our brave men, shadowing them for days as they roamed the waters of the west.  Left with no options, the scout took the only route possible.  It grasped at a gossamer hope so thin if you turned your head just a little it would disappear in the sunlight.  The captain of the scouting party ordered his men south:  He would lose the Egyptians in the wild forests west of their capital, where he promised them that they would be home faster than they could imagine, and no Egyptian would catch trace of any sign of their passing.  The men thought him mad, but followed with grim resolution.

The captain swears he could not find the path again if his life depended on it.  Already the tale of it has taken on a life of its own among the company.  Some say they found an underground tunnel that led them from one side of Egypt to the other.  Others claim the gods of the land had so favored them that they were able to walk in open during full daylight and the enemies' eyes were turned away.  Others refuse to speak anything of it at all, simply shaking their heads and smiling as if they still cannot believe their luck.

But they all agree that the captain knew how it would end all a long, and to a man they will follow him now wherever he should call them to go.  They know they are close to home now.  And although there are reports of wild men roaming the vast empty spacies of world -- as wild and untamed as the Egyptians but living under no banner of their own -- the men know their captain will see them safely home.

[Image: pb18%20-%20turn051%20-%20teleportation.jpg?raw=1]

I assume you move the scout to the forest between horses and spice, correct? In that case the border pop from the egyptian capitol triggered the teleporation. From there the mechanism works just like I described, I presume. Your closest city was to the east of Egypt, like civac already hinted at.
Mods: RtR    CtH

Pitboss: PB39, PB40PB52, PB59 Useful Collections: Pickmethods, Mapmaking, Curious Civplayer

Buy me a coffee
Reply

Same game as Pindi, but I prefer to brute-force my teleportation solutions.

(August 30th, 2014, 14:05)Old Harry Wrote: So just to continue an argument Fintourist and I have been having.

Before:


After:


So placing a chariot in the theoretical stone city, if it hasn't popped borders *should* teleport it to let us attack Zzzap.

But we're not going to do that because we can just move the chariot to the right place on t127 without running that risk Zz.

The bad news is that if the stone city is where we think and has popped it's borders the chariot isn't going to be able to hit Zzzap frown.

Then TBS did an amazing hit and run attack on us by closing borders with dtay later in the game. Seems like PB18 was the teleportation heyday.
Reply

I'm fairly sure from years of observation that the Barbs can never build or spawn any units stronger then Rifles. They can continue teching (or, more accurately, receiving free techs); I seem to recall some players encountering Barb cities with airports defended by Rifles back in the now-ancient Civ IV Epic 4 reports, but going by memory the Barbs can only field a limited array of troops:

* Warriors
* Archers
* Spears
* Axes
* HA (only via an event)
* Swords
* LB
* Maces
* Grenadiers
* Rifles

At sea, I don't think I've ever seen them spawn anything better than Galleys and Triremes.


I thought the Barbs automatically obtained any tech all - 1 players know, which is why you can get hassled by Barb Archers rather early in Emperor+ difficulty games.
Reply

(October 13th, 2020, 17:02)Old Harry Wrote: Same game as Pindi, but I prefer to brute-force my teleportation solutions.

(August 30th, 2014, 14:05)Old Harry Wrote: So just to continue an argument Fintourist and I have been having.

Before:


After:


So placing a chariot in the theoretical stone city, if it hasn't popped borders *should* teleport it to let us attack Zzzap.

But we're not going to do that because we can just move the chariot to the right place on t127 without running that risk Zz.

The bad news is that if the stone city is where we think and has popped it's borders the chariot isn't going to be able to hit Zzzap frown.

Then TBS did an amazing hit and run attack on us by closing borders with dtay later in the game. Seems like PB18 was the teleportation heyday.

It looks like only 7 chariots were teleported SW and the rest to the east. Those being teleported SW were most likely standing directly on the border. I can tell from the minimap alone, but I would have guessed that the next city of yours was a little bit farther away compared to pindicators first example.


(October 13th, 2020, 22:38)Bobchillingworth Wrote: I'm fairly sure from years of observation that the Barbs can never build or spawn any units stronger then Rifles.  They can continue teching (or, more accurately, receiving free techs); I seem to recall some players encountering Barb cities with airports defended by Rifles back in the now-ancient Civ IV Epic 4 reports, but going by memory the Barbs can only field a limited array of troops:

* Warriors
* Archers
* Spears
* Axes
* HA (only via an event)
* Swords
* LB
* Maces
* Grenadiers
* Rifles

At sea, I don't think I've ever seen them spawn anything better than Galleys and Triremes.  


I thought the Barbs automatically obtained any tech all - 1 players know, which is why you can get hassled by Barb Archers rather early in Emperor+ difficulty games.

I only looked at spawning of barbarians, not their city production. So far I only looked at the code and that code part did not show a reduced list like yours. I don't mean to say you or I am wrong. There might be additional ways to limit the unit types that I will have to investigate further.
Mods: RtR    CtH

Pitboss: PB39, PB40PB52, PB59 Useful Collections: Pickmethods, Mapmaking, Curious Civplayer

Buy me a coffee
Reply

Ok, I've found the last puzzle piece to the barb spawning riddle. It's this code from the very beginning of the method:

Code:
for (iJ = 0; iJ < GC.getNumUnitClassInfos(); iJ++)
{
   bool bValid = false;
   eLoopUnit = ((UnitTypes)(GC.getCivilizationInfo(GET_PLAYER(BARBARIAN_PLAYER).getCivilizationType()).getCivilizationUnits(iJ)));

   if (eLoopUnit != NO_UNIT)

Here we iterate over all units, but we check if the the civilization is allowed to build them. Now this information is found in the CIV4CivilizationInfos.xml. There the barbarians are the last civ in the list and there you find a long list of units that they are not allowed to spawn or build. I've looked through the list and inverted the list here. These are the units the barbarians actually can build/spawn:
  • All the animals
  • Worker (these won't spawn because the have zero strength)
  • Spies (these won't spawn because the have zero strength)
  • Warrior
  • Axeman
  • Swordsman
  • Maceman
  • Spearman
  • Rifleman
  • Grenadier
  • Paratrooper
  • Archer
  • Longbowman
  • Horse Archer (yes, I've tested that)
  • Galley
  • Privateer
  • Frigate

I will edit my initial answer to the question, so that it reflects this. If you want to those things, then the easiest way is to:
  • end turns until T50
  • go into worldbuilder
  • remove all units on the worldmap
  • add the techs to the barbarians
  • end the turn and look what spawned with the barbs.
That way I verified that the barbs can indeed spawn Horse Archers.
Mods: RtR    CtH

Pitboss: PB39, PB40PB52, PB59 Useful Collections: Pickmethods, Mapmaking, Curious Civplayer

Buy me a coffee
Reply

How do barbarians gain new technologies?

The barbarians gain technologies in two ways: An active and a passive way.

The active way is just the normal research progress that every civ has, but there are some unusual things for the barbs here:
  • The don't start with a palace and can't build a huge collection of buildings
  • The don't get any economic bonuses that the normal AI civilizations get. In that regard they are just like the human players.
  • They do start with the standard techs for AIs though
  • Of course barbarians cities only spawn later and because of that they only start gaining commerce later
As you can see the barbarians are handicapped in their active research. That's why the also have a passive way to gain techs. For this we go to CvTeam and there into the doTurn method.

Code:
for (iI = 0; iI < GC.getNumTechInfos(); iI++)
{
   if (!isHasTech((TechTypes)iI))
   {
       iCount = 0;
       iPossibleCount = 0;

       for (iJ = 0; iJ < MAX_CIV_TEAMS; iJ++)
       {
           if (GET_TEAM((TeamTypes)iJ).isAlive())
           {
               if (GET_TEAM((TeamTypes)iJ).isHasTech((TechTypes)iI))
               {
                   iCount++;
               }

               iPossibleCount++;
           }
       }

       if (iCount > 0)
       {
           FAssertMsg(iPossibleCount > 0, "iPossibleCount is expected to be greater than 0");

           changeResearchProgress(((TechTypes)iI), ((getResearchCost((TechTypes)iI) * ((GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / iPossibleCount)) / 100), getLeaderID());
       }
   }
}

We start by iterating over technologies in the game and as the first check we ensure that the barbarians do not already have the tech.

Next we iterate over all teams (note that this includes the barbarians themself). We check if the team is alive and has the tech. If that is the case increase iCount by 1. If the civ does not have the tech we at least increase iPossibleCount by one.

With this we know how many civs have the tech. If at least one civ has the tech we continue by adding beakers to that tech for the barbs with the method changeResearchProgress. The important formula in there is this:

(getResearchCost((TechTypes)iI) * ((GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / iPossibleCount) / 100)

Here a small legend to the variables

(getResearchCost((TechTypes)iI) = the cost of the tech
GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") = defined in the GlobalDefines.XML and set to 3
iCount = how many alive civs have the tech
iPossibleCount = how many alive civs (including the barbs) there are

And with that the barbs gained beakers for the tech. It's important to noted that the barbarians do gain research for every known tech at once. Let's finish this with a small example. Let's say we are looking at the tech Mining with cost of 74 (Monarch, Standard size etc.). We play with 6 civs of which 4 have Mining:

(getResearchCost((TechTypes)iI) * ((GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / iPossibleCount) / 100)
=
74 * ((3 * 4) / 7) / 100)
= 0.74, which thanks to integer calculation turns into 0 (note that ((3 * 4) / 7) = 1.71 = 1 because of integer)

Let's do another example:
Mining = 74, 6 civs of which 6 have Mining:

((getResearchCost((TechTypes)iI) * ((GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / iPossibleCount)) / 100)
=
74 * ((3 * 6) / 7)) / 100)
= 1.48, which thanks to integer calculation turns into 1

Here I am done for BtS, but for CtH and RtR I've integrated the unoffical patch which includes to changes to the code above. Here that code again, but the two changed lines are marked with a // From Mongoose SDK


Code:
for (iI = 0; iI < GC.getNumTechInfos(); iI++)
{
   if (!isHasTech((TechTypes)iI))
   {
       iCount = 0;
       iPossibleCount = 0;

       for (iJ = 0; iJ < MAX_CIV_TEAMS; iJ++)
       {
           // From Mongoose SDK, BarbarianPassiveTechFix
           if (GET_TEAM((TeamTypes)iJ).isAlive() && !GET_TEAM((TeamTypes)iJ).isBarbarian())
           {
               if (GET_TEAM((TeamTypes)iJ).isHasTech((TechTypes)iI))
               {
                   iCount++;
               }

               iPossibleCount++;
           }
       }

       if (iCount > 0)
       {
           FAssertMsg(iPossibleCount > 0, "iPossibleCount is expected to be greater than 0");
           // From Mongoose SDK, BarbarianPassiveTechFix
           changeResearchProgress((TechTypes)iI, std::max((getResearchCost((TechTypes)iI) * GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / (100 * iPossibleCount), 1), getLeaderID());
       }
   }
}

The first change guarantees that the barbarians are not counted for the iPossibleCount.

The second change, changes the actual formula from before:

std::max((getResearchCost((TechTypes)iI) * GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / (100 * iPossibleCount), 1)

std::max =  is a method that returns the bigger of multiple values, in this case the formula or 1. This ensures that the barbs always gain at least 1 beaker

Let's use the two examples from before and see what this change means:

Mining = 74, 6 civs and 4 have Mining


std::max((getResearchCost((TechTypes)iI) * GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / (100 * iPossibleCount), 1)
=
std::max((74 * 3 * 4) / (100 * 6), 1)
=
std::max(1.48, 1)
= 1, because of integer rounding


Mining = 74, 6 civs and 6 have Mining


std::max((getResearchCost((TechTypes)iI) * GC.getDefineINT("BARBARIAN_FREE_TECH_PERCENT") * iCount) / (100 * iPossibleCount), 1)
=
std::max((74 * 3 * 6) / (100 * 6), 1)
=
std::max(2.22, 1)
= 2, because of integer rounding

Summary

The barbs gain techs in two ways. With normal research from cities and a passive research towards all known techs. This passive research has the following formulas:

BtS:
(Cost of Tech * ((3 * How many alive civs know the tech) / How many alive civs are in the game including the barbs) / 100)

For CtH and RtR there exists the unoffical patch with the following formula:
(Cost of Tech * 3 * How many alive civs know the tech) / (100 * How many alive civs are in the game excluding the barbs)

if that value is smaller then 1 it is set to 1.
Mods: RtR    CtH

Pitboss: PB39, PB40PB52, PB59 Useful Collections: Pickmethods, Mapmaking, Curious Civplayer

Buy me a coffee
Reply



Forum Jump: