[POLL] More Wonders for VP

What exclusive Enlightenment Era World Wonders you would like to see added in this mod (max. 3)

  • Wat Pho (Thailand) (around1688) tied to Economics

  • Buckingam Palace (England) (1703) tied to Navigation

  • Paro Taktsang (Bhutan) (1692) tied to EE-Flintlock

  • Bell Rock Lighthouse (Scotland) (1810) tied to EE-Wargames

  • Yellowstone National Park (USA) (1872) tied to EE-Wargames

  • Arc de Triomphe (France) (around 1830) tied to EE-Wargames

  • Bastille (France) (from XIV to late XVIII) (but as a prison) tied to EE-Fortifications

  • Taman Sari (Indonesia) (1765) tied to EE-Fortifications

  • Stone Town (Tanzania) (1830-1840) tied to EE-Fortifications

  • Bolshoi Theater (Russia) (1776/1825/1856) tied to EE-Romanticism

  • other (suggest in the thread, please)

  • Canal du Midi (France) (1681) tied to Navigation

  • Fontanna di Trevi (Italy) (1776) tied to Economics

  • Modlin Fortress (Poland) (1806) tied to EE-Fortifications


Results are only viewable after voting.
For anyone eager to check I posted another beta on github v0.14 vol 7. It contains few fixes mentioned in the thread in last days, and what is most important, it fixes stuff broken by VP 1.2.1 regarding Karlstejn/Kremlin/Motherland Calls/St. Basil's Cathedral. Now instead of Karlstejn you have Rila Monastery. Karlstejn's art is unused for now.

Few things must be done before official release and regarding this issue (Kremlin and some other WWs have no reqs now; assignstartingplots file).

Check for inconsistencies if they exist.
 
Last edited:
v0.14 vol 8 on github with requirements added for all new WWs. Please verify them carefully. They were added in a rush.
 
v0.14 vol 8 on github with requirements added for all new WWs. Please verify them carefully. They were added in a rush.
Sorry not yet had time to do it but on the other hand, I find a bug for Krak des Chevaliers placement. If I'm not mistaken, there is a prohibited water condition and yet :

Spoiler Coast Krak des Chevaliers :
upload_2021-12-12_20-22-33.png


I use Hard restrictions :
upload_2021-12-12_20-23-20.png

and IsNoWater = 1 in SQL database.
 
v0.14 officialy released. Below is brief description of changes, addons and fixes made throught recent weeks:
Code:
New World Wonders:
    - Ancient Era:             Plain of Jars;
    - Classical Era:        Sigiriya;
    - Atomic Era:            Habitat-67; Vostok Station; Milestii Mici Winery; Thule Air Base; Kumsusan Palace of the Sun;
    - Information Era:         Curiosity Rover; Global Positioning System;
Rework:
    - due to VP 1.2.1 changes to St. Basil's Cathedral and Motherland Calls:
        - Karlstejn is now Rila Monastery with exactly the same abilities, but artwork, quote, civilopedia change (before VP update it was St. Basil's Cathedral); Karlstejn art is unused);
        - Kremlin fixed and updated;
        - Motherland Calls fixed and updated; moved from Electronics to Nuclear Fission;
Features:
    - fresh updated AssignStartingPlots.lua files for standard and 43-civ versions;
Balance:
    - changed production percentage cots modifiers for WW from 50/35/25 to 40/35/30;
    - World Wonders:
        - El Ghriba (nerf):
            - reduced bonus from Faith purchase to 15% Gold (was 25%);
        - Golden Pavilion (boost):
            - local Forest and Jungles lost their Food bonus (was +1);
            - local Rivers got new +1 Food bonus;
            - flat yields increased to +3 Faith (was +2);
        - Marae Arahurahu (huge nerf):
            - reduced GMusP to +1 (was +2);
            - reduced Arahurahu bonus to 120% (was 150%);
            - reduced bonus from theming to +8 Food (was +10);
        - Meenakshi Temple (huge nerf):
            - reduced bonus from Faith purchase to 20% Food (was 33%);
            - reduced base yield to +1 Food (was +4);
        - Orszaghaz (rework):
            - removed flat yields;
            - increased global bonus to +15% Golden Age Points (was +10%);
            - added new flat bonus +1 League Vote;
        - Hollywood (rework):
            - removed +5% to GArtP, GWriP and GMusP;
            - reduced flat yields to +1 Tourism (was +5);
            - added new bonus +2 Tourism to all Guilds;
            - added new bonus 75 Tourism on Policy unlock;
        - Concorde (rework):
            - removed +10% global Tourism bonus;
            - increased base yield to +3 Tourism (was +2);
            - increased bonus from WLTKD to +25% Tourism (was +15%);
            - increased bonus from Oil and Aluminum to +3 Tourism (was +2);
        - Sputnik (nerf): now flat +1 Science (was +5);
        - Anitkabir (nerf): now flat +2 Culture (was +5) and +3 Tourism (was +4);
        - Arecibo (nerf): now flat +4 Science (was +6);
        - Palm Jumeirah (boost/nerf):
            - deleted flat yields;
            - now +7 Tourism from Atolls (was +6)
            - now +4 Gold from Oils (was +6);
        - Taipei 101 (huge nerf): deleted bonus CS points on construction;
Fixes:
    - Kuk renamed to Kuk Swamp;
    - moved MW-HELP setting to MainRulesForWonders.sql file like any other option;
    - many promotions (White Sands, Sanbo's, Hidden Artifacts, Damascus Steel) are now not lost on upgrade, which should be set since the beginning;
    - fixed Marae Arahurahu base yields: now +1 GAdmP (was +2);
    - fixed Hollywood yields from Guilds: now +2 Culture (was +3) and +2 Gold was (was +3);
    - fixed Cristo Redentor (now does not require Flat);
    - fixed Gate of the Sun (now correctly places dummy buildings);
    - fixed Fasil Ghebbi and Versailles requirements (missing IsNoCoast);
    - added light version of EE requirements (missing);
    - fixed some EE building cost;
    - added many missing ideology requirement info in World Wonder tooltips;
    - minor but numerous text fixes;
 

Attachments

  • WorldWonders (v0.14_H).pdf
    101.6 KB · Views: 18
  • WorldWonders (v0.14_L).pdf
    101.6 KB · Views: 14
Sorry not yet had time to do it but on the other hand, I find a bug for Krak des Chevaliers placement. If I'm not mistaken, there is a prohibited water condition and yet :

Spoiler Coast Krak des Chevaliers :


I use Hard restrictions :
View attachment 616310
and IsNoWater = 1 in SQL database.
Coast should be bloked by lua code because IsNoWater is in fact IsNoFreshWater in the base code. I can see it added in the proper table. Can you verify other wonders from IsNoCoast table?
Code:
tValidIsNoCoast = {
            [GameInfo.Buildings.BUILDING_GOEBEKLI_TEPE.ID] = true,
            [GameInfo.Buildings.BUILDING_MOHENJO_DARO.ID] = true,
            [GameInfo.Buildings.BUILDING_STONEHENGE.ID] = true,
            [GameInfo.Buildings.BUILDING_NAZCA.ID] = true,
            [GameInfo.Buildings.BUILDING_THONG_HAI_HIN.ID] = true,
            [GameInfo.Buildings.BUILDING_HANGING_GARDEN.ID] = true,
            [GameInfo.Buildings.BUILDING_SIGIRIYA.ID] = true,       
            [GameInfo.Buildings.BUILDING_TERRACOTTA_ARMY.ID] = true,
            [GameInfo.Buildings.BUILDING_ETCHMIADZIN.ID] = true,
            [GameInfo.Buildings.BUILDING_GREAT_ZIMBABWE.ID] = true,
            [GameInfo.Buildings.BUILDING_CHEVALIERS.ID] = true,
            [GameInfo.Buildings.BUILDING_TAJ_MAHAL.ID] = true,
            [GameInfo.Buildings.BUILDING_RED_FORT.ID] = true,
            [GameInfo.Buildings.BUILDING_SIBERIAN_RAILWAY.ID] = true,
            [GameInfo.Buildings.BUILDING_ORSZAGHAZ.ID] = true,
            [GameInfo.Buildings.BUILDING_MOTHERLAND_STATUE.ID] = true,
            [GameInfo.Buildings.BUILDING_BLETCHLEY_PARK.ID] = true,
            [GameInfo.Buildings.BUILDING_ANITKABIR.ID] = true,
            [GameInfo.Buildings.BUILDING_KREMLIN.ID] = true,
            [GameInfo.Buildings.BUILDING_MILESTII_MICI.ID] = true,
            [GameInfo.Buildings.BUILDING_EE_VERSAILLES.ID] = true,
            [GameInfo.Buildings.BUILDING_EE_FASIL_GHEBBI.ID] = true
        }

This is the exact lua code:
Code:
-- checks if city is NOT near COAST
function IsNoCoast(ePlayer, eCity, eBuilding)
    if not tValidIsNoCoast[eBuilding] then return true end
    if bReachedMaxEra then return false end

    local pPlayer = Players[ePlayer]
 
    if not pPlayer:IsAlive() then return false end

    local pCity = pPlayer:GetCityByID(eCity)

    if pCity:IsCoastal(10) then
        return false
    end

    return true
end
GameEvents.CityCanConstruct.Add(IsNoCoast)



I will have no time in next few days as I will be on delegation, so if you have time you couldput some "print" statements into the lua and verify why it is not working.
 
Last edited:
In fact, I think there is an error in the code of the Hard Requirement part.
Line 837 : attempt to index field 'BUILDING_EE_VERSAILLES' (a nil value)
and with the hard requirements are not loaded.

log file in copy
 

Attachments

  • Lua.7z
    9 KB · Views: 14
In fact, I think there is an error in the code of the Hard Requirement part.
Line 837 : attempt to index field 'BUILDING_EE_VERSAILLES' (a nil value)
and with the hard requirements are not loaded.

log file in copy
Ahh, I should predict that... The same problem was before with other requirements. Download the file again v0.14.1 with correction.
 
Last edited:
When Override AssignStartingplot is on and im using communitas, no ruins will spawn in the game.
Recent VP changes to this file could be the issue. I will try to update file and post new version, but no guarantee with communitas.

How did this perform earlier?
 
Just a heads up, naturalWondersData is now impactData[ImpactLayers.LAYER_NATURAL_WONDER].
 
Just a heads up, naturalWondersData is now impactData[ImpactLayers.LAYER_NATURAL_WONDER].
Uhh, bigger changes? I will need to be careful during copy/paste thing and change some code probably, right? I change total 4 parts of code each update:
Code:
local worldsizes = {
        [GameInfo.Worlds.WORLDSIZE_DUEL.ID] = 3, -- adan_eslavo
        [GameInfo.Worlds.WORLDSIZE_TINY.ID] = 6,
        [GameInfo.Worlds.WORLDSIZE_SMALL.ID] = 9,
        [GameInfo.Worlds.WORLDSIZE_STANDARD.ID] = 12,
        [GameInfo.Worlds.WORLDSIZE_LARGE.ID] = 15,
        [GameInfo.Worlds.WORLDSIZE_HUGE.ID] = 18
        }
Code:
-- Now place this wonder and record the placement.
            plot:SetFeatureType(feature_type_to_place)
            table.insert(self.placed_natural_wonder, wonder_number);
            self:PlaceResourceImpact(x, y, 6, math.floor(iH / 8))    -- Natural Wonders layer -- adan_eslavo (was 5)
            self:PlaceResourceImpact(x, y, 1, 1)                    -- Strategic layer
            self:PlaceResourceImpact(x, y, 2, 1)                    -- Luxury layer
            self:PlaceResourceImpact(x, y, 3, 1)                    -- Bonus layer
            self:PlaceResourceImpact(x, y, 5, 3)                    -- City State layer
            self:PlaceResourceImpact(x, y, 7, 1)                    -- Marble layer
            local plotIndex = y * iW + x + 1;
            self.playerCollisionData[plotIndex] = true                -- Record exact plot of wonder in the collision list.
            
            -- MOD.Barathor: Fixed: Added a check for the Great Barrier Reef being placed.  If so, it appropriately applies impact values to its second tile to avoid buggy collisions with water resources.
            -- MOD.Barathor: Start
            -- MOD.adan_eslavo: adaptation to 3-tile GBR (now tiles around center blocked);
            if (self.wonder_list[wonder_number] == "FEATURE_REEF") then
                --print("Great Barrier Reef placed... applying impact values to its southeast tile as well.")
                for i = 0, DirectionTypes.NUM_DIRECTION_TYPES - 1 do
                    local pBarrierPlot = Map.PlotDirection(x, y, i)
                    
                    if pBarrierPlot:GetFeatureType() == GameInfoTypes.FEATURE_REEF then   
                        local iBarrierX = pBarrierPlot:GetX()
                        local iBarrierY = pBarrierPlot:GetY()
                    
                        self:PlaceResourceImpact(iBarrierX, iBarrierY, 1, 1) -- Strategic layer
                        self:PlaceResourceImpact(iBarrierX, iBarrierY, 2, 1) -- Luxury layer
                        self:PlaceResourceImpact(iBarrierX, iBarrierY, 3, 1) -- Bonus layer
                    
                        local iBarrierPlotIndex = iBarrierY * iW + iBarrierX + 1
                        
                        self.playerCollisionData[iBarrierPlotIndex] = true -- Record exact plot of wonder in the collision list.
                    end
                end
            elseif (self.wonder_list[wonder_number] == "FEATURE_SALAR_A") then
                for i = 0, DirectionTypes.NUM_DIRECTION_TYPES - 1 do
                    local pSalarPlot = Map.PlotDirection(x, y, i)
                    
                    if pSalarPlot:GetFeatureType() == GameInfoTypes.FEATURE_SALAR_B then   
                        local iSalarX = pSalarPlot:GetX()
                        local iSalarY = pSalarPlot:GetY()
                    
                        self:PlaceResourceImpact(iSalarX, iSalarY, 1, 1) -- Strategic layer
                        self:PlaceResourceImpact(iSalarX, iSalarY, 2, 1) -- Luxury layer
                        self:PlaceResourceImpact(iSalarX, iSalarY, 3, 1) -- Bonus layer
                    
                        local iSalarPlotIndex = iSalarY * iW + iSalarX + 1
                        
                        self.playerCollisionData[iSalarPlotIndex] = true -- Record exact plot of wonder in the collision list.
                        break
                    end
                end
            elseif (self.wonder_list[wonder_number] == "FEATURE_BERMUDA_A") then
                local pBermudaPlotSE = Map.PlotDirection(x, y, DirectionTypes.DIRECTION_SOUTHEAST)
                local pBermudaPlotSW = Map.PlotDirection(x, y, DirectionTypes.DIRECTION_SOUTHWEST)
                    
                local iBermudaX = pBermudaPlotSE:GetX()
                local iBermudaY = pBermudaPlotSE:GetY()
                
                self:PlaceResourceImpact(iBermudaX, iBermudaY, 1, 1) -- Strategic layer
                self:PlaceResourceImpact(iBermudaX, iBermudaY, 2, 1) -- Luxury layer
                self:PlaceResourceImpact(iBermudaX, iBermudaY, 3, 1) -- Bonus layer
                
                local iBermudaPlotIndex = iBermudaY * iW + iBermudaX + 1
                    
                self.playerCollisionData[iBermudaPlotIndex] = true -- Record exact plot of wonder in the collision list.
                
                local iBermudaX = pBermudaPlotSW:GetX()
                local iBermudaY = pBermudaPlotSW:GetY()
                
                self:PlaceResourceImpact(iBermudaX, iBermudaY, 1, 1) -- Strategic layer
                self:PlaceResourceImpact(iBermudaX, iBermudaY, 2, 1) -- Luxury layer
                self:PlaceResourceImpact(iBermudaX, iBermudaY, 3, 1) -- Bonus layer
                
                local iBermudaPlotIndex = iBermudaY * iW + iBermudaX + 1
                    
                self.playerCollisionData[iBermudaPlotIndex] = true -- Record exact plot of wonder in the collision list.
            elseif (self.wonder_list[wonder_number] == "FEATURE_CAUSEWAY_A") then
                for i = 0, DirectionTypes.NUM_DIRECTION_TYPES - 1 do
                    local pCausewayPlot = Map.PlotDirection(x, y, i)
                    
                    if pCausewayPlot:GetFeatureType() == GameInfoTypes.FEATURE_CAUSEWAY_B then   
                        local iCausewayX = pCausewayPlot:GetX()
                        local iCausewayY = pCausewayPlot:GetY()
                    
                        self:PlaceResourceImpact(iCausewayX, iCausewayY, 1, 1) -- Strategic layer
                        self:PlaceResourceImpact(iCausewayX, iCausewayY, 2, 1) -- Luxury layer
                        self:PlaceResourceImpact(iCausewayX, iCausewayY, 3, 1) -- Bonus layer
                    
                        local iCausewayPlotIndex = iCausewayY * iW + iCausewayX + 1
                        
                        self.playerCollisionData[iCausewayPlotIndex] = true -- Record exact plot of wonder in the collision list.
                        break
                    end
                end
            end
            -- MOD.Barathor: End
Code:
if self:Plot_GetFertilityInRange(plot, 3) < 15 then -- adan_eslavo (was 28)
        return false
    end
Code:
for row in GameInfo.Features() do
        if (row.NaturalWonder == true or row.PseudoNaturalWonder == 1) then -- adan_eslavo
            self.wonder_list[next_wonder_number] = row.Type;
            next_wonder_number = next_wonder_number + 1;
        end
    end
Do I need to change it?
 
Any use of PlaceResourceImpact function needs to be reviewed.

I added some enums for easy access, e.g.

Code:
-- Enum values for impact layers
ImpactLayers = {
    LAYER_NONE = -1,
    LAYER_IRON = 1,
    LAYER_LUXURY = 2,
    LAYER_BONUS = 3,
    LAYER_FISH = 4,
    LAYER_CITY_STATE = 5,
    LAYER_NATURAL_WONDER = 6,
    LAYER_MARBLE = 7,
    LAYER_HORSE = 8,
    LAYER_COAL = 9,
    LAYER_OIL = 10,
    LAYER_ALUMINUM = 11,
    LAYER_URANIUM = 12,
};

These should replace the third parameter of PlaceResourceImpact calls.

If you want to impact ALL strategic tables, just use the new PlaceStrategicResourceImpact function.

You can refer to the current AssignStartingPlots:AttemptToPlaceNaturalWonder.
 
Qalhat gives bonus only for TR originating from city where it's built. Is it possible to give bonus to TR in general?
I rechecked the code. It finds:
  • all player routes
  • to or from any of the major players
  • these routes must be sea routes
  • they cannot be internal TR.
Then bonus is applied to Qalhat city.

Code:
for _, player in ipairs(Players) do
                if player:IsAlive() then
                    for _, tradeRoute in ipairs(player:GetTradeRoutes()) do
                        if ((tradeRoute.FromID == ePlayer and not Players[tradeRoute.ToID]:IsMinorCiv())
                        or (tradeRoute.ToID == ePlayer and not Players[tradeRoute.FromID]:IsMinorCiv()))
                        and tradeRoute.FromID ~= tradeRoute.ToID
                        and tradeRoute.Domain == GameInfoTypes.DOMAIN_SEA then
                            iSeaTradeRoutesWithMajors = iSeaTradeRoutesWithMajors + 1
                        end
                    end
                end
            end
Can someone confirm it works as intended?
 
Last edited:
Krakatoa always spawns in ocean (close to island) but Bermudas always spawns close (next) to continent even on next tile to land. It wood be nice for Bermudas to spawn in ocean, may be no closer to land than 5-7 tiles.
 
Top Bottom