[Custom Civ] [Ladies in Charge, vol. 1: Nzinga] Jarcast's Ndongo-Matamba for VP

jarcast2

Clueless Phantasm
Joined
Jan 10, 2018
Messages
1,137
Location
Terra Incognita
Ndongo-Matamba
icon_civ_Ndongo.png

DOWNLOAD

Leader - Nzinga Mbande
icon_Nzinga.png


UA - Ngola Sovereignty
Diplomatic Units yield :c5greatperson: Great Diplomat and General points when expended.
For each :c5citystate: City-State Allied or with an owned Embassy receive a Land military Unit once at war, and +2 :c5production: Production, :c5culture: Culture, :c5strength: Defense in owned Cities.
Land military Units start with Mbundu Resistance promotion.

Spoiler UA Details :
Diplo units generate 20 points, scaling with era.
UA caps at 15:c5citystate: City-States. Unit gift activates with a cooldown of 10 turns (standard game speed; 15 epic; 6 quick) between declarations of war (either received or given).
Units gift limited by available Supply and only 1 per CS.

Mbundu Resistance promotion:
+20% :c5strength: Combat Strength Inside Friendly Territory.
Additional +10% :c5strength: Combat Strength in or adjacent to a City.

UGP - Makunze (Great Diplomat)
icon_UU3- Makunze.png

6 :c5moves: (+1)
In addition, it provides a lump sum of :c5science: Science and +1 Military Supply when expended.
It constructs a unique Embassy called Makunze that has same properties but different 3d model for flavorful aesthetics.

UI - Kilombo (Village)
icon_UI- Kilombo.png

Unlocks at Currency.
It must be built in owned lands and may not be adjacent to another Kilombo. Same requirements of Fort.
Doesn't remove Forests and Jungles.
+50% :c5strength: Defense on tile.
Has the yields of a Village (+2 :c5gold:, +1 :c5culture:).
In addition: +1 :c5food: Food, +1 Great General point.
+1 :c5gold: Gold, +1 Great General point when adjacent to a Citadel.
Military Units stationing on a Kilombo gains +1 XP per turn and the Mbangala Yijila promotion: Unit will Heal Every Turn, even if it performs an action. Always fight at full strength.

+1 (+2) :c5gold: Gold, :c5production: Production with Road (Railroad).

+1 :c5gold: Gold at Guilds.
+2 Border Growth at Chemistry.
+1 :c5food: Food at Fertilizer.
+1 :c5production: Production at Industrialization.
+1 :c5science: Science at Military Science.
+1 :c5culture: Culture at Radio.

UU1 - Pombo (Explorer)
icon_UU1-Pombo.png

160 :c5production: . Unlocks at Guilds.
21 :c5strength: (+4), 3 :c5moves:
Unrelenting Pursuer promotion (kept on upgrade): +33% :c5strength: Combat Strength when attacking Wounded Units.
Other Explorer promotions.

UU2 - Imbare (Tercio)
icon_UU2-Imbare.png

300 :c5production: . Unlocks at Compass.
27 :c5strength: (+2), 2 :c5moves:
Sanguar promotion (kept on upgrade): +15% :c5strength: Combat Strength when defending against Ranged Attacks. Withdraw from Melee Attack if there is an open tile behind this Unit, once per turn.
Other Tercio promotions.

Flavor - Ngola (Great General)
Senza titolo-1.png

No difference with base General, only unique icon and model.
The Ngola have unique names of the Ndongo queens, it was quite unique to have female monarchs in African polities at that time.

NdongoMap.png


Credits:
  • DarthKyofu: Map
  • Leugi: image of Nzinga from Civ6 Kongo used for leader art
  • Cyon: icons for Pombo
  • JTitan: 3d model for Pombo and Ngola
  • PorkBean: icon for Kilombo
  • Alpha Gaming: 3d model for Kilombo
  • DMS: icons and model for Imbare
  • RawSasquatch: icons and 3d model for Makunze unit
  • DJSHenninger: icons and 3d model for Makunze unique embassy
  • LastSword: icons for Ngola
  • Gwennog: promotion icons art
  • Jarcast: design, code, leader art

Spoiler Pic :
ndongo.png



...
cassawhat?!
...
 
Last edited:
Little update.
Nerfed yields Kilombo gains on tech deriving from Forts: removed +4 Science at Stealth, +4 Border Growth at Electronics.
 
Last edited:
@jarcast2 , I've started a game, and so far everything's going well, even though I have three Warmongers as neighbors.
I've noticed that my units on Kilombo aren't getting the Mbangala Yijila promotion.
Apparently the promotion doesn't apply automatically to all units on the improvement tile but I have to specify the UnitCombats it applies.

I fixed it and uploaded an update.
For you, you can substitute the file in attachment then reload the game so the fix applies so you can continue the same game.
 

Attachments

Interesting design; odd little issue with the UA in that so far as I've observed, all of the spawned units are all the same randomly-selected combat class, with no respect to the amount of strategics you have, so you can wind up with ten instant knights without sufficient horses.
 
Last edited:
Thanks for another banger civ!!
vol.1... that means more coming.
If I had to take a guess... Tamar of Georgia, we still don't have a caucasian civ.
 
Interesting design; odd little issue with the UA in that so far as I've observed, all of the spawned units are all the same randomly-selected combat class, with no respect to the amount of strategics you have, so you can wind up with ten instant knights without sufficient horses.
The code gives the strongest land unit conditional on the resources, so it should already take into consideration strategics availability.
Hovewer I put the unit definition outside of the loop that gives the units, so it gives the same units.
I put the code for the strongest unit inside the loop so it has to recompute the strongest unit depending on the new resource availability.

Update v1.3 is online.
 
Hi @jarcast2 , sorry I didn't tell you in the previous post, there is a problem with the music. With the correction:


Code:
--==========================================================================================================================
-- AUDIO
--==========================================================================================================================
-- Audio_Sounds
--------------------------------------------------------------------------------------------------------------------------  
INSERT INTO Audio_Sounds
        (SoundID,                                 Filename,         LoadType)
VALUES    ('SND_LEADER_MUSIC_JAR_NZINGA_PEACE',    'Nzinga_Peace',    'DynamicResident'),
        ('SND_LEADER_MUSIC_JAR_NZINGA_WAR',        'Nzinga_War',     'DynamicResident'),      
        ('SND_AMBIENCE_NDONGO',                    'Nzinga_Ambience', 'DynamicResident');        --24.15 - 26.04
--------------------------------------------------------------------------------------------------------------------------
-- Audio_2DSounds
--------------------------------------------------------------------------------------------------------------------------
INSERT INTO Audio_2DSounds
        (ScriptID,                                         SoundID,                                 SoundType,         TaperSoundtrackVolume,    MinVolume,     MaxVolume,  IsMusic, Looping)
VALUES    ('AS2D_AMBIENCE_LEADER_JAR_NZINGA_AMBIENCE',    'SND_AMBIENCE_NDONGO',                    'GAME_SFX',     0.0,                    99,         99,         0,          1),
        ('AS2D_LEADER_MUSIC_JAR_NZINGA_PEACE',            'SND_LEADER_MUSIC_JAR_NZINGA_PEACE',    'GAME_MUSIC',     -1.0,                    45,         45,         1,          0),
        ('AS2D_LEADER_MUSIC_JAR_NZINGA_WAR',             'SND_LEADER_MUSIC_JJAR_NZINGA_WAR',     'GAME_MUSIC',     -1.0,                    45,         45,         1,         0);
 
Hi again @jarcast2 , For some reason I couldn't figure out in your code, the unit gain loop when war is declared on me runs twice, giving me double the unit.
Code:
[9293.171] Jar_Ndongo_Functions: Attacking Civ: Ndongo-Matamba
[9293.171] Jar_Ndongo_Functions: count    4
[9293.171] Jar_Ndongo_Functions: [1] Military Supply: 19/29
[9293.187] Jar_Ndongo_Functions: [2] Military Supply: 20/29
[9293.187] Jar_Ndongo_Functions: [3] Military Supply: 21/29
[9293.203] Jar_Ndongo_Functions: [4] Military Supply: 22/29
[9293.218] Jar_Ndongo_Functions: Attacking Civ: Ndongo-Matamba
[9293.218] Jar_Ndongo_Functions: count    4
[9293.218] Jar_Ndongo_Functions: [1] Military Supply: 23/29
[9293.234] Jar_Ndongo_Functions: [2] Military Supply: 24/29
[9293.234] Jar_Ndongo_Functions: [3] Military Supply: 25/29
[9293.250] Jar_Ndongo_Functions: [4] Military Supply: 26/29
 
Hi again @jarcast2 , For some reason I couldn't figure out in your code, the unit gain loop when war is declared on me runs twice, giving me double the unit.
Can you give me more details? How many civs are involved in the war?
It's possible that multiple civs declared on you so you receive units for each one, mmhh
 
Can you give me more details? How many civs are involved in the war?
It's possible that multiple civs declared on you so you receive units for each one, mmhh
Just one Civ delare war to me.
But also a CS. I didn't see anything in your code that excludes the declaration of war from CS, maybe that's it? Should a declaration of war from a CS give units?


For the Basques, I have a fairly simple code that should do the same thing as yours, except it just gives a promotion. It works with a war with/against a major civ but also a minor one.


Code:
-- On Declare War by/against Basques, give Babesten Promotion
function WarBeginBabestenPromotion(iTeam, iOtherTeam)
    local pTeam = Teams[iTeam]
    local pOtherTeam = Teams[iOtherTeam]
    local iAttackingPlayer = pTeam:GetLeaderID()
    local pAttackingPlayer = Players[iAttackingPlayer]
    local iPlayer = pOtherTeam:GetLeaderID()
    local pPlayer = Players[iPlayer]
    
    if (pPlayer and pAttackingPlayer and (pPlayer:GetCivilizationType() == eCivilizationBasques or pAttackingPlayer:GetCivilizationType() == eCivilizationBasques)) then
        --print("At War")
        if pPlayer:GetCivilizationType() == eCivilizationBasques then       
            CheckBabestenPromotion(iPlayer)
            --print("At War iPlayer")
        elseif pAttackingPlayer:GetCivilizationType() == eCivilizationBasques then       
            CheckBabestenPromotion(iAttackingPlayer)
            --print("At War iAttackingPlayer")
        end
        
        if pPlayer:IsHuman() or pAttackingPlayer:IsHuman() then
            local sTitle = "At war my Brothers! Protect our Lands!"
            local sText = 'All your land units present in your territory gain [COLOR_POSITIVE_TEXT]Babesten[ENDCOLOR] Promotion'       
            pPlayer:AddNotification(NotificationTypes.NOTIFICATION_GENERIC, sText, sTitle)
        end   
    end
end
 
Just one Civ delare war to me.
But also a CS. I didn't see anything in your code that excludes the declaration of war from CS, maybe that's it? Should a declaration of war from a CS give units?


For the Basques, I have a fairly simple code that should do the same thing as yours, except it just gives a promotion. It works with a war with/against a major civ but also a minor one.


Code:
-- On Declare War by/against Basques, give Babesten Promotion
function WarBeginBabestenPromotion(iTeam, iOtherTeam)
    local pTeam = Teams[iTeam]
    local pOtherTeam = Teams[iOtherTeam]
    local iAttackingPlayer = pTeam:GetLeaderID()
    local pAttackingPlayer = Players[iAttackingPlayer]
    local iPlayer = pOtherTeam:GetLeaderID()
    local pPlayer = Players[iPlayer]
 
    if (pPlayer and pAttackingPlayer and (pPlayer:GetCivilizationType() == eCivilizationBasques or pAttackingPlayer:GetCivilizationType() == eCivilizationBasques)) then
        --print("At War")
        if pPlayer:GetCivilizationType() == eCivilizationBasques then   
            CheckBabestenPromotion(iPlayer)
            --print("At War iPlayer")
        elseif pAttackingPlayer:GetCivilizationType() == eCivilizationBasques then   
            CheckBabestenPromotion(iAttackingPlayer)
            --print("At War iAttackingPlayer")
        end
    
        if pPlayer:IsHuman() or pAttackingPlayer:IsHuman() then
            local sTitle = "At war my Brothers! Protect our Lands!"
            local sText = 'All your land units present in your territory gain [COLOR_POSITIVE_TEXT]Babesten[ENDCOLOR] Promotion'   
            pPlayer:AddNotification(NotificationTypes.NOTIFICATION_GENERIC, sText, sTitle)
        end
    end
end
I tried the same code and it gave me the problem that identified both attacker and defender as Ndongo and I have no idea why.

Highly likely I have to exclude CS.

I wonder if get leader ID gives always 0 or the real playerID...

EDIT:
This should work

Code:
if fromPlayerHasTrait and not Players[Teams[toTeamID]:GetLeaderID()]:IsMinorCiv() then
...
elseif toPlayerHasTrait and not Players[Teams[fromTeamID]:GetLeaderID()]:IsMinorCiv() then
 
Last edited:
Yes, it works perfectly. I agree with you that we should exclude CS, it already seems very powerful to me.
It was not my intention to include them: the idea is war against major civs only.
I will add a limit so that in case of war with multiple civs the UA is triggered only once, otherwise it's too powerful.
My idea is to use a dummy building in the capital to mark the UA as used. Once at peace the building is removed.
 
It was not my intention to include them: the idea is war against major civs only.
I will add a limit so that in case of war with multiple civs the UA is triggered only once, otherwise it's too powerful.
My idea is to use a dummy building in the capital to mark the UA as used. Once at peace the building is removed.
I agree with you but I'm wondering. If several civs declare war on you at the same time and vice versa, you only gain the army bonus once. But if later you are still at war and civs join the coalition against you, do you gain anything?
 
I agree with you but I'm wondering. If several civs declare war on you at the same time and vice versa, you only gain the army bonus once. But if later you are still at war and civs join the coalition against you, do you gain anything?
Mmm... The civ has to be at peace with everyone major to recharge the UA. So if it's at war then others join nothing should happen.
 
Back
Top Bottom