1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

[BTS] COMBAT REVOLUTION MOD V1.34

Discussion in 'Civ4 - Modpacks' started by CHINCHIN, Jun 12, 2019 at 3:52 AM.

  1. CHINCHIN

    CHINCHIN Chieftain

    Joined:
    Jul 8, 2004
    Messages:
    55
    Location:
    Spain
    This Mod can be played both against AI and multiplayer, and supports all languages, although it is only translated 100% in English and Spanish.

    It has the following important and differential changes:

    1) Combat:

    Bombing:
    In this Mod the siege units do not attack, bomb, until they get a maximum damage from 16% Catapults, up to 28% Heavy artillery.

    ZOC (Control Zone): All land and naval units have a ZOC in their contiguous squares, which can not pass through enemy units (can be deactivated in the main menu of the game)

    Limited attacks: Each field square has a maximum number of attacks (can be disabled in the menu)
    From land squares: 3 Terrestrial and 2 Blitz.
    From sea squares: 2 Naval, 2 Terrestrial, and 2 Blitz.
    From City: 4 Terrestrial, 2 Naval, and 2 Blitz.

    Units of combat: They have been modified slightly to equal the forces and to have a predominant offensive unit in each epoch.

    With these changes, usually equal matches are won, in which promotion, fortification, and terrain are very important. The combat tactics change radically, solid fronts are created with small stacks, the power to break the enemy lines, the mobility, and the power to attack from other squares becomes vital for the victory.

    2) Resources:

    Resource-Units:
    Part of the resources of the game function as the standard game, other resources have to be transported, through resource-units that can only be produced in cities where their culture radio has said resources.

    General resources: These resource units must be transported to the capital to give happiness, health, in addition to gold, hammers, and food. (At 10 turns disappear)

    Manufactured resources: Other resource units must be transported to specific cities that have the appropriate building. These can produce other resource units, such as Steel, fuel ...) or units (workers, Settlers, weapons (which in turn give military units), or tools (very important since they accelerate the constructions very effectively)

    Ammunition and fuel: If this option is checked in the main menu, certain units need fuel to move, or ammunition to combat.

    With this we transform the game into a kind of "Colonization" where the resource units move around the world, the vast majority to the Capital, others to special cities (Foundry => Iron = Steel / Refinery => Oil = Fuel. ..), others to units (Fuel and / or Ammunition), or to other foreign cities to exchange or trade. On the other hand workers are transported (in the mod they are destroyed when creating improvements, except roads and roads) and tools, to growing cities.

    3) Others.
    It has many other changes that are not as significant, new units, resources, buildings ... All the changes you have exposed in the second post. You also have them in the following documentation:

    http://bit.ly/2KEL616

    4) Scenarios
    Includes 2 scenarios, The Great War, and WWII War in the Pacific.

    Integrates the following Mods:

    The BUG Mod

    http://civ4bug.sourceforge.net/BUGMod.html

    Blocade-units

    https://forums.civfanatics.com/threa...-units.614387/

    And here the mod: MOD COMBAT REVOLUTION v1.34

    http://bit.ly/2K7AmZC

    The mod folder is placed in: Sid Meier's Civilization 4 \ Beyond the Sword \ Mods

    Thanks to Manolo, who with his knowledge in programming contributed a lot in the beginning, and to the community of Civilization IV for its graphics of units, buildings, icons ...
     
  2. CHINCHIN

    CHINCHIN Chieftain

    Joined:
    Jul 8, 2004
    Messages:
    55
    Location:
    Spain
    GENERAL:

    Sightings: The sighting is reduced to a range of 3 (5 in BTS).

    Healing: Units heal much more slowly, 8% in any terrain, and 12% in city.

    UNITS-RESOURCE:

    Generalities:
    Part of the resources of the game function as the standard game, other resources have to be transported, by means of resource units that can only be produced in cities where their culture radio has said resources.

    General resources: These resource units must be transported to the capital to give happiness, health, in addition to gold, hammers, and food. (At 10 turns disappear)

    Spoiler Units recourse to the capital :
    Recursos3.jpg


    Manufactured resources: Other resource units must be transported to specific cities that have the appropriate building. These can produce other resource units, such as Steel, fuel ...) or units (workers, Settlers, weapons (which in turn give military units), or tools (very important since they accelerate the constructions very effectively)

    Spoiler Manufactured resources :
    Recursos1.jpg
    Recursos2.jpg


    Ammunition and fuel: If this option is checked in the main menu, certain units need fuel to move, or ammunition to combat.

    Entertainment buildings: The Contract building triggers an event whereby 2 happy people are received in all the cities during 6 shifts, this action is accumulated in number of shifts and not in the amount of happy ones. You can see the number of turns on the screen of the city by placing the mouse over total happiness. Construible by Success songs, Successful musics, and Success films. They require the wonders Rock & Roll, Broadway, and Holywood respectively.

    COMBAT: The units have been modified minimally to ensure that each time there is an offensive unit slightly higher in attack to any unit defending, and also so that there are no great advantages between units.

    Attacks per square: Can be activated or deactivated in the starting menu. They are limited to 3 land attacks (2 if they are from the sea), 2 naval attacks, and 2 lightning strikes. It is understood as attacks, direct attacks or bombings. From the city, 4 land attacks are allowed. Air units have no limits.

    Control Zone (ZOC): The ZOC is an option of the game menu and therefore can be activated or deactivated, this does not work like the ZOCs of board games, it is somewhat complex due to the diagonal squares. See: https://forums.civfanatics.com/threa...-units.614387/

    Special units: Are: Air bases, may contain 4 air units. Bunkers, may contain 2 units of infantry, Field of mines, take them as target the Engineers. Naval mines are taken by minesweepers. And Torpedos, the submarines launch them and take Transport as a priority target. These units start with fuel but can not recharge, with this we get that they can not move, if they want to have the possibility of being loaded again in a transport. And if for whatever reason they move, they will remain there immobile (Since in the mod it does not allow to load units without movement)

    Air Interception: Units with this order do not intercept if they are injured.

    Submarines and anti-submarine weapons (ASW): The ASW units are represented by seaplanes that take off from airbases and destroyers, and only discover submarines through sighting. The nuclear submarine has the option to submerge (icon in the orders of the unit) of this form it can not attack but it is not visible by any unit. If he emerges in a turn he can no longer submerge in the same turn.

    Bombardment: Units with this ability have limited damage between 14% (Catapult) and 28% (Heavy Artillery)

    Ammunition and fuel: Some units require ammunition and / or fuel to combat or move, these are loaded with the corresponding icons. The units that supply (Ammunition, Fuel, and Dairy Cow) also have an icon to distribute among all the units in the stack. If they do not have ammunition they can not attack or bomb, and in defense they have -25%. If they do not have fuel they can not move. If the option "Supply" is deactivated in the game menu, this need is eliminated.

    Defenses of the cities: These always have a minimum of + 5%, and increase by + 5% per level of culture. The Walls, Fortress, and Castle increase + 20%. These can not be reduced with bombing and no unit ignores them. The only way to eliminate it is through spies. And the change by culture level in normal speed is 10-200-10000-30000-50000.

    Workers: Their cost is 20, they do not consume food, and they are eliminated when building improvements. Except roads and railways.

    Spies: The missions of Rebellion, and changes of principles and Religion are eliminated.

    Troop: Troop is considered the Infantry, Artillery, Ammunition and Fuel units. Also, airbases, bunkers, and minefields.

    Torpedo: Transported by submarines

    Naval Mines: Transported by minesweepers.

    Transports: The following units can only load Troop: Caravan, Trucks, Armored, Helicopters, and Air transport. The Transports and Trains can load any land unit. The Destroyers: ASW, the Portaviones: Fighters, and torpedo boats, the Airbases any air unit.

    Train Unit: This unit can only be moved on railway tracks. Much slower by enemy territory. They transport 4 land units.

    Promotion Wheels: The units with the ascent wheels costs 1 point more the land. These are resource units, Caravan, and Truck.

    Spoiler Terrain :
    Terreno.jpg

    Jungle: +1 Hammer and sawmill can be built.
    Pasture: Can be built on plains and meadows (+1 Food).
    Camp: Can be built in forest-jungle.
    Talar Selva gives 10/14 hammers.

    New resources:
    Citrus: +1 Health
    Walrus: +1 Health
    Pearls: +1 Happiness
    Rubber: +1 Happiness
    Clothing: +1 health
    Currencies: +1 Happiness
    Jewels: +1 Happiness.
    Figures of Ivory: +1 Happiness
    Fruit: +1 Health
    Liquors: +1 Health
    Canned food: +1 Health

    Strategic:
    Bronze weapons
    Iron weapons
    Horses of war
    Steel
    Alloy
    Fuel

    Improvements:
    Sawmill: +1 Hammer with Electricity
    Improved Mine: Produces 1 Hammer more than the Mine.
    Improved mill: Produces 1 Hammer and 1 Gold more than the Windmill.
    Forest Reserve: Produces +1 gold.
    Fort Damaged: As the strong but + 15% defense + 10% anti-air defense (AA).
    Village: + 5% defense.
    Villa: + 10% defense + 5% AA.
    Town: + 15% defense + 10% AA.

    When the fort receives an impact (bombing or pillage), it becomes Fort Damage.
    The railway does not increase the production of squares.
    The Windmill does not increase its performance with Spare Parts and Electricity.

    LEADERS: There are special leaders who only appear on stages, never in the standard game. All features contain the advantage "Without anarchy". Modify the following features:

    Spiritual: Add +1 to Happiness in all cities.

    The period of anarchy is 6 turns (5 in BTS).

    ACCELERATE PRODUCTION: All units up to industrialization accelerate production in proportion of 1 hammer to 5 of cost (1/5) The units Tools (3/2) with Workshop and (2/1) with Casting.

    MOVEMENT AND TRANSPORTATION:
    The road movement costs 1PM (1/2).
    The flat terrain costs 2 Movement Points (PM)
    Hill, forest, and snow, costs 3PM
    Jungle, or hill + forest or jungle, costs 4PM
    UD move more, Infantry 2, Workers 3, tanks 4 ...
    By rail it costs 0.80PM. This gives 1 more box per unit (before 10 in total)
    The infantry moves through all the terrains as by road.

    PROMOTION:

    Modified:

    Assault I: (Montaraz I) + 15% Ata. Hills-Forest-Jungle.
    Assault II: (Montaraz II) + 20% Ata. Hills-Forest-Jungle.
    Assault III: (Montaraz III) + 25% Ata. Hills-Forest-Jungle.
    Guerrilla I: + 15% Def. Hills-Forest-Jungle.
    Guerrilla II: + 20% Def. Hills-Forest-Jungle.
    Guerrilla III: + 25% Def. Hills-Forest-Jungle.
    Medica I: + 4% cure in the same box.
    Medica II: + 2% cure in the same cell + 6% cure adjacent cells.
    Medica III: + 10% cure in the same box and contiguous. Requires MEDICINE.
    Combat IV: No cure
    Combat V: + 15% Strength, Not cure
    Instruction I: + 5% Strength
    Instruction III: + 5% Force
    Accuracy: + 10% Strength / 2 Ata. Initiative / Requires Instruction IV
    Ace: Requires Combat II (Combat III)
    Bliz: Requires Combat I (Combat II)

    New:
    Naval: + 25% against naval
    Maneuver: -30% Forest-Forest-City, and -20% Hills
    Wheels: +1 at the cost of the land.
    Rails: +4 at the cost of the land.
    Radar: + 15% Defending in coast and ocean.
    Sonar: -2 Visibility

    CORPORATIONS
    Standed Ethanol: They do not give oil. Science +2.25 (1.50) Food +0.37 (0)
    Aluminiun Co: Do not give Aluminum. Science +1.50 (2.25) Production +0.56 (0)

    UNIT CATEGORY
    New categories:
    Submarine: Submarine I, Submarine II, and Submarine III.

    Spoiler New units :
    UNIDADES.jpg
     
    Last edited: Jun 12, 2019 at 4:53 AM
  3. CHINCHIN

    CHINCHIN Chieftain

    Joined:
    Jul 8, 2004
    Messages:
    55
    Location:
    Spain
  4. keldath

    keldath LivE LonG AnD PrOsPeR

    Joined:
    Dec 20, 2005
    Messages:
    6,295
    Location:
    israel
    oh my god CHINCHIN,

    incredible ,
    how long have you worked on this amazing thing?

    ok,
    now ill ask - how am i to merge this with advanced civ mod?
    did you use vanilla bts code?

    im even more blown away by -
    AI know how to use
    multiplayer compatible.

    fuel OMG.

    edit: oh..no source code?
     
    Last edited: Jun 12, 2019 at 11:42 AM
  5. CHINCHIN

    CHINCHIN Chieftain

    Joined:
    Jul 8, 2004
    Messages:
    55
    Location:
    Spain
    Hello Keldath,

    Thank for your kind words.

    I started in 2011 with the mod, 8 years now.

    Do you want to integrate all the mod, or some specific part?

    Yes, the initial code was that of the BTS. In the beginning it was my colleague Manolo who modified the code, unfortunately he left the project, now I modify it by testing and observing, since my computer skills are poor.

    I do not modify any AI, you can play against the AI, but the AI does not understand many of the changes, so you play with a slight advantage.
     
  6. keldath

    keldath LivE LonG AnD PrOsPeR

    Joined:
    Dec 20, 2005
    Messages:
    6,295
    Location:
    israel
    well,

    very nice, hard work.

    ill try to find time to see how it works and play with it a bit and learn it, i like many of the concepts.

    thanks.
     
  7. devolution

    devolution Chieftain

    Joined:
    Oct 7, 2016
    Messages:
    251
    Gender:
    Male
    Location:
    Stavanger, Norway
    I see some interesting mechanics here. You have implemented a limited tile attack mechanic which is of interest to me and @f1rpo since we're in the process of implementing a similar (but somewhat different) mechanic. It would be interesting to compare our implementations if the source code is made available.
     
    Last edited: Jun 12, 2019 at 1:18 PM
  8. keldath

    keldath LivE LonG AnD PrOsPeR

    Joined:
    Dec 20, 2005
    Messages:
    6,295
    Location:
    israel
    Limited attack to a tile is a very interesting interpretation for combat,
    Its like another way to restrain stacks of doom, maybe also the number of attack should take stack size, terrain type, enemy stack and deff.

    Maybe firaxis should have also though about it.
    Though the logic of it if so so,
    I would also like to have it in my mod.
     
  9. CHINCHIN

    CHINCHIN Chieftain

    Joined:
    Jul 8, 2004
    Messages:
    55
    Location:
    Spain
    The source code:

    https://drive.google.com/file/d/1AIWkAq40F_FSw-iyldKBr_ThgVTDkJE_/view?usp=sharing

    Spoiler Cvdefine.h :
    #define ATAQUE_BASE_CASILLA 2


    Spoiler CvPlayer.cpp :

    //CCM Ataques por casilla
    int CvPlayer::numeroAtaquesTerrestres(CvPlot *pPlotUnidad) const
    {

    int maximo=0;
    int porEra=0;/*
    if((int)GC.getGameINLINE().getCurrentEra()<2)

    else
    if((int)GC.getGameINLINE().getCurrentEra()<4)

    else porEra=2;*/
    int porCiudad=0;
    if (pPlotUnidad->isCity())

    int porCultura=0;
    int porFuerte=0;
    if ((PlayerTypes)pPlotUnidad->getOwner()!=NO_PLAYER)
    {
    if (GET_PLAYER((PlayerTypes)pPlotUnidad->getOwner()).isAtWar(getID()))
    porCultura=1;

    if (GET_PLAYER((PlayerTypes)pPlotUnidad->getOwner()).isAtWar(getID()))
    porFuerte=0;
    else
    {


    }
    }
    if (((GET_TEAM(GET_PLAYER((PlayerTypes)pPlotUnidad->getOwner()).getTeam()).isHasTech((TechTypes)80)) && porCultura==1))
    porEra=1;

    if (porCultura>0)
    {
    porCiudad =0;
    porFuerte=0;
    }
    if (pPlotUnidad->isWater())

    else
    maximo = ATAQUE_BASE_CASILLA+porEra+porCiudad+porCultura+porFuerte;



    return maximo -pPlotUnidad->numAtaques[(int)getID()];
    }
    int CvPlayer::numeroAtaquesMar(CvPlot *pPlotUnidad) const
    {
    return 2-(pPlotUnidad->numAtaquesMar[(int)getID()]);


    }
    int CvPlayer::numeroAtaquesBlitz(CvPlot *pPlotUnidad) const
    {

    return 2 -pPlotUnidad->numBlitz[(int)getID()];

    }


    Spoiler CvUnit.cpp :

    {//MMC
    CvPlot *pPlotUnidad = GC.getMapINLINE().plotINLINE(this->getX(),this->getY());
    int ataquesLibres=0;
    int ataquesLibresBlitz=GET_PLAYER((PlayerTypes)this->getOwner()).numeroAtaquesBlitz(pPlotUnidad);
    if ((int)this->getDomainType()==DOMAIN_SEA)
    ataquesLibres= GET_PLAYER((PlayerTypes)this->getOwner()).numeroAtaquesMar(pPlotUnidad);
    else
    ataquesLibres= GET_PLAYER((PlayerTypes)this->getOwner()).numeroAtaquesTerrestres(pPlotUnidad);
    if (!this->isBlitz())
    {
    if (m_bMadeAttack)
    return true;
    }
    if (ataquesLibres>0)
    return false;
    if (this->isBlitz())
    {
    if (m_bMadeAttack)
    {
    if (ataquesLibresBlitz>0) return false;
    else
    return true;
    }
    else
    {
    return true;
    }

    }
    else
    {
    if (ataquesLibres<=0)
    return true;
    }
    //MMC*
    //MMC
    int CvUnit::numeroAtaques( ) const
    {
    CvPlot *pPlotUnidad = GC.getMapINLINE().plotINLINE(this->getX(),this->getY());
    int maximo=0;
    int porEra=0;/*
    if((int)GC.getGameINLINE().getCurrentEra()<2)
    porEra=0;
    else
    if((int)GC.getGameINLINE().getCurrentEra()<4)
    porEra=1;
    else porEra=2;*/
    int porCiudad=0;
    if (pPlotUnidad->isCity())
    porCiudad=1;
    int porCultura=0;
    int porFuerte=0;
    if ((PlayerTypes)pPlotUnidad->getOwner()!=NO_PLAYER)
    {
    if (GET_PLAYER((PlayerTypes)pPlotUnidad->getOwner()).isAtWar(this->getOwner()))
    porCultura=1;

    if (GET_PLAYER((PlayerTypes)pPlotUnidad->getOwner()).isAtWar(this->getOwner()))
    porFuerte=0;
    else
    {
    if (pPlotUnidad->getImprovementType()==GC.getInfoTypeForString("IMPROVEMENT_FORT"))
    porFuerte=1;
    }
    }
    if (((GET_TEAM(GET_PLAYER((PlayerTypes)pPlotUnidad->getOwner()).getTeam()).isHasTech((TechTypes)80)) && porCultura==1))
    porEra=1;


    maximo = ATAQUE_BASE_CASILLA+porEra+porCiudad+porCultura+porFuerte;

    if ((int)this->getDomainType()==DOMAIN_SEA)
    if (pPlotUnidad->numAtaques[(int)this->getOwner()]>=1) return 0;
    else
    return 1;

    return maximo -pPlotUnidad->numAtaques[(int)this->getOwner()];

    } //MMC*


    Spoiler CvPlot.cpp :

    //APTMOD
    numAtaques = new int[MAX_CIV_PLAYERS+1];
    numAtaquesMar = new int[MAX_CIV_PLAYERS+1];
    numBlitz = new int[MAX_CIV_PLAYERS+1];

    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaques[iI] = 0;
    }
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaquesMar[iI] = 0;
    }

    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numBlitz[iI] = 0;
    }
    //APTMOD
    SAFE_DELETE_ARRAY(numAtaques);
    SAFE_DELETE_ARRAY(numAtaquesMar);
    SAFE_DELETE_ARRAY(numBlitz);

    //APTMOD
    if (numAtaques!=NULL)
    for (iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaques[iI] = 0;
    }
    else
    {
    numAtaques = new int[MAX_CIV_PLAYERS+1];
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaques[iI] = 0;
    }
    }
    if (numAtaquesMar!=NULL)
    for (iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaquesMar[iI] = 0;
    }
    else
    {
    numAtaquesMar = new int[MAX_CIV_PLAYERS+1];
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaquesMar[iI] = 0;
    }
    }
    if (numBlitz!=NULL)
    for (iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numBlitz[iI] = 0;
    }
    else
    {
    numBlitz = new int[MAX_CIV_PLAYERS+1];
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numBlitz[iI] = 0;
    }
    }
    m_ownerGuerra = NO_PLAYER;
    //APTMOD
    if (numAtaques!=NULL)
    {
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaques[iI] = 0;
    }
    }
    else
    {
    numAtaques = new int[MAX_CIV_PLAYERS+1];
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaques[iI] = 0;
    }
    }
    if (numAtaquesMar!=NULL)
    {
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaquesMar[iI] = 0;
    }
    }
    else
    {
    numAtaquesMar = new int[MAX_CIV_PLAYERS+1];
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numAtaquesMar[iI] = 0;
    }
    }
    if (numBlitz!=NULL)
    {
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numBlitz[iI] = 0;
    }
    }
    else
    {
    numBlitz = new int[MAX_CIV_PLAYERS+1];
    for (int iI = 0; iI <= MAX_CIV_PLAYERS; ++iI)
    {
    numBlitz[iI] = 0;
    }
    }
    if (m_ownerGuerra==(int)NO_PLAYER)
    //APTMOD
    SAFE_DELETE_ARRAY(numAtaques);
    SAFE_DELETE_ARRAY(numAtaquesMar);
    SAFE_DELETE_ARRAY(numBlitz);
    numAtaques = new int[MAX_CIV_PLAYERS+1];
    pStream->Read(MAX_CIV_PLAYERS+1, numAtaques);
    numAtaquesMar = new int[MAX_CIV_PLAYERS+1];
    pStream->Read(MAX_CIV_PLAYERS+1, numAtaquesMar);
    numBlitz = new int[MAX_CIV_PLAYERS+1];
    pStream->Read(MAX_CIV_PLAYERS+1, numBlitz);
    pStream->Read(&m_ownerGuerra);
    //APTMOD
    pStream->Write(MAX_CIV_PLAYERS+1, numAtaques);
    pStream->Write(MAX_CIV_PLAYERS+1, numAtaquesMar);
    pStream->Write(MAX_CIV_PLAYERS+1, numBlitz);
    pStream->Write(m_ownerGuerra);


    Spoiler CvPlot.h :

    //APTMOD
    int *numAtaques;
    int *numAtaquesMar;
    int *numBlitz;
    void setOwnerGuerra (int valor)
    {
    m_ownerGuerra=valor;
    if (valor !=(int)NO_PLAYER)
    setOwner((PlayerTypes)m_ownerGuerra, false, false);
    };
    int getOwnerGuerra ()
    {
    return m_ownerGuerra;
    };


    I think that's all.
     
    Last edited: Jun 12, 2019 at 6:14 PM
    f1rpo likes this.

Share This Page