MPMPM - Multiplayer Mod DLC-hack (Updated!)

Desyncs not fixed sadly, although I am absolutely certain it's related to the Inuksuk now. Desyncs begin happening every turn *immediately* after the first one is finished. At least that's my best guess, so I checked a few hunches:

I thought it might be that tile yields were not updating or applying properly for other players, but I checked my GFs laptop to make sure- tile yields were updated properly.

My other hunch was simply the script being too intensive, due to the plot iterations the inuksuk performs on all surrounding tiles. But this doesn't seem to be the case either, as other Civs that run plot iterator functions don't seem to produce the same issue.

I'm left wondering if there's something I'm missing (Their UA which grants food from tiles outside of workable range area), but these explanations don't gel with the Inuksuk, unless there's some interaction between the Inuksuk and their UA- Perhaps if the Inuksuk boosts food for a tile outside of workable range? Further testing would be required.


The only suspicious thing I could find in the lua.log was a bunch of entries like:

'[179377.718] NotificationPanel: Attempt to remove unknown Notification 28'

But these were occuring prior to the resync so I am not sure what to think of it.
 
kind of offtopic:

Can you explain, why in the start post and everywhere else is written:

"Communitas map
Workaround: After starting the game, IMMEDIATELY SAVE. Quit, and then reload the saved game. Now everyone should have the host's version of the map." ?

I just put the .lua file in my user map directory and I'm able to select and play communitas map in multiplayer without doing the steps above.
Or does in in fact not work and some features of communitas map are missing?

edit:
and while you talking about random: Is Map.Rand() okay, or will there be unsync ?
 
kind of offtopic:

Can you explain, why in the start post and everywhere else is written:

"Communitas map
Workaround: After starting the game, IMMEDIATELY SAVE. Quit, and then reload the saved game. Now everyone should have the host's version of the map." ?

I just put the .lua file in my user map directory and I'm able to select and play communitas map in multiplayer without doing the steps above.
Or does in in fact not work and some features of communitas map are missing?

edit:
and while you talking about random: Is Map.Rand() okay, or will there be unsync ?
It forces the game to give every player the same map. Each player's game generates their own version otherwise. This causes desyncs.
 
It forces the game to give every player the same map. Each player's game generates their own version otherwise. This causes desyncs.
So if I just place the communitasmap.lua file in everyones MyGames/Civ.../map directory, it won't work?

I played alot multiplayer games with communitas map and I never experienced a desync. So should there be always a desync? Or just with small chance and/or when someone do xy? I wonder why I never had a desync (I only play LAN, maybe that's the reason?)

the communitasmap.lua uses Map.Rand() (I did not see this before, my edited question above was because I found this in one of my mods :D)
But cicero wrote, that Game.Rand() is okay and will not cause desync, right? So it could be the same with Map.Rand(), or not?

What is the difference between Game.Rand() and Map.Rand() ? I found Map.Rand() in the Barbarian Immersion Mod in the BarbarianGGScripts.lua and wonder what this has to do with a map:
local random = Map.Rand(40, "Random Possibility of General")
if random == 1 then
print ("A BarbArian General was Born!")
 
Collaborating with some folks more knowledgeable than me, we figured out the Inuit desync problem. It is indeed related to Inuksuk.lua. The script checking for border expansion is written in such a way that it only fires if the Inuit Civ is the active player. This prevents it from firing for AI playing as the Inuit, and guarantees a desync as the script will not fire for those not playing as the Inuit.

I brought it to the attention of the Colonialist Legacy guys. Special thanks to ViceVirtuoso and Kyte for helping me figure this out. I'm going to work on a hot fix for my own modpack, and when it's all working well I'll post a link for you guys. Here's a preview of the features- it's a doozy, a huge modpack more than doubling the Civ count with what I consider to be some of the best crafted and balanced Civs:

Features said:
  • Game Mods:
    • InfoAddict (v 22)
    • JdH's Active AI Diplomacy in MP (v 3)
    • Faster Aircraft Animation
    • Unit Path Viewer
    • Gibraltar, GBR, Krakatoa Optimization
  • New Civs
    • Colonialist Legacies
      • [BNW] Colonialist Legacies - Afghanistan (v 2)
      • [BNW] Colonialist Legacies - Canadian Dominion (v 1)
      • [BNW] Colonialist Legacies - Mexican Republic (v 1)
      • [BNW] Colonialist Legacies - Phillipine Republic (v 3)
      • [BNW] Colonialist Legacies - The Blackfoot Confederacy (v 2)
      • [BNW] Colonialist Legacies - The Boers (v 1)
      • [BNW] Colonialist Legacies - The Cree (v 4)
      • [BNW] Colonialist Legacies - The Inuit (v 2)
      • [BNW] Colonialist Legacies - Vietnam ft. Trung Sisters (v 1)
      • Australia ft. Sir Henry Parkes (v 2)
    • JFD Civs
      • JFD's The Commonwealth of Iceland (v 2)
      • JFD's The Empire of Germany (Hitler) (v 9)
      • JFD's The Empire of Great Britain (v 3)
      • JFD's The Empire of Japan (Tojo) (v 2)
      • JFD's The Grand Duchy of Lithuania (v 1)
      • JFD's The Khazar Khaganate (v 2)
      • JFD's The Kingdom of Armenia (v 3)
      • JFD's The Kingdom of Bavaria (v 2)
      • JFD's The Kingdom of Belgium (v 1)
      • JFD's The Kingdom of Hungary (v 8)
      • JFD's The Kingdom of Italy (v 3)
      • JFD's The Kingdom of Norway (v 5)
      • JFD's The Kingdom of Prussia (v 15)
      • JFD's The Kingdom of Scotland (v 2)
      • JFD's The Nri Kingdom (v 1)
      • JFD's The Republic of France (v 1)
      • JFD's The Soviet Union (Stalin) (v 13)
      • JFD's The United Kingdom of Great Britain and Northern Ireland (v 5)
      • JFD's The United States of America (Roosevelt) (v 4)
    • Leugi Civs
      • (BNW) Leugi's Bolivian Civilization (v 10)
      • (BNW) Leugi's Cuban Civilization (v 5)
      • (BNW) Leugi's Haiti Civilization (v 1)
      • (BNW) Leugi's Israel Civilization (v 7)
      • (BNW) Leugi's Philistine Civilization (v 6)
      • [BNW] Aymara Civilization (v 2)
      • [BNW] Mapuche Civilization (v 1)
      • Argentina Civilization (v 1)
      • Chile Civilization (v 2)
      • Paraguay Civilization [BNW] (v 1)
      • Peru Civilization (v 1)
    • MC Civs
      • Ayyubid Civilization (v 2)
      • India Civilization Pack (v 1)
      • Kilwa Sultanate (v 4)
      • Nazca Civilization (v 3)
      • Oman Civilization (v 1)
      • Polynesian Civilization Pack (v 1)
    • Sukritract Civs
      • Sukritact's Burmese Civilization (v 2)
      • Sukritact's Chinookan Civilization (v 2)
      • Sukritact's Khmer Civilization (v 1)
      • Sukritact's Phoenician Civilization (v 2)
      • Sukritact's Sami Civilization (v 2)
    • Tomatekh Civs
      • Benin (Brave New World) (v 43)
      • Harappa - Indus Valley (Brave New World) (v 35)
      • Kongo (Brave New World) (v 35)
      • Sumer (BNW or GK) (v 56)
      • The Hittites (Brave New World) (v 64)
      • The Sioux (Brave New World) (v 19)
      • The Timurids (Brave New World) (v 59)
      • Tiwanaku Civilization (v 1)
      • Tupi Civilization Mod (v 1)
New Civs: 60

If you're wondering why a civ didn't make the cut, I'm trying to avoid excessive duplicate civilization entries. Modern Civs get an automatic pass (I play some WW1 and WW2 scenarios so this is totally my preference) and certain significantly distinct successor or predecessor states were given the OK (England and Great Britain; Rome and Italy) but multiple leaders for a single Civ were disfavoured. I got tired of encountering 3 different 'Empire of Russia' JFD Civs in a single game.

Also, I'm not sure if this is a problem with MPMPM or mods in general, but any Civ that has a unique unit or building that can be purchased with faith results in all players being able to purchase that unit with faith. A good example is the Dene's Sacred Drummer. Unfortunately had to axe from the pack any Civ for which this was the case. Also, 3D custom leader portraits do not work (Seems to be an MPMPM thing), so for any Civ that did not provide a 2D leader scene, I had to use the most recent version that did not use a custom 3D leader. This explains the use of an outdated version of Australia and Hitler.
 
So if I just place the communitasmap.lua file in everyones MyGames/Civ.../map directory, it won't work?

I played alot multiplayer games with communitas map and I never experienced a desync. So should there be always a desync? Or just with small chance and/or when someone do xy? I wonder why I never had a desync (I only play LAN, maybe that's the reason?)

the communitasmap.lua uses Map.Rand() (I did not see this before, my edited question above was because I found this in one of my mods :D)
But cicero wrote, that Game.Rand() is okay and will not cause desync, right? So it could be the same with Map.Rand(), or not?

What is the difference between Game.Rand() and Map.Rand() ? I found Map.Rand() in the Barbarian Immersion Mod in the BarbarianGGScripts.lua and wonder what this has to do with a map:

I don't know what the differences between Game.Rand() and Map.Rand() are, but when Cicero and I tested the communitas map we got desyncs, which were resolved by doing the save and reload trick. It's possible that the issue, whatever it was, was fixed in the meantime.
 
Sorry guys, I've been busy, and in the meantime everything has been fixed :goodjob:. I should go awol more often.

Re: Serp, as emeralis00 said, the most likely explanation is that the communitas map has been fixed in the meantime. The map designer knew about the issue, since he was the one who suggested the save/reload trick in the first place.

Regarding Map.Rand() vs. Game.Rand(), they do the same thing, but Game.Rand() cannot be called before the game is initialized, because the Game object doesn't get created until then, so for map scripts, which have to run before the game starts, Map.Rand() provides necessary multiplayer safe randomization functions.

Poizen, can you give more details on what the issue was, for my own enlightenment?

Re: 3D leader scenes, MPMPM doesn't have any support for it, but I might have to think about adding it now that some civs exist that have it.
Re: faith buying: that's a mod problem. The Civ 5 dll just isn't coded to check tech requirements or civ uniqueness for anything that's faith-bought, like it does for gold buying and direct production. You see mod civs that didn't get the memo, where people apparently never tested playing with a *different civ* while their mod is loaded. (and the AI never buys these unique faith units, since it's not programmed to, so you wouldn't notice random AI sacred drummers rolling around).

It's possible to recompile the civ 5 dll to fix this (I think whowards dlls do), but that has all the usual issues with civ 5 dll overlaps.

Serp: I'll put your previous modpack link in the OP and steam. I forgot to earlier.
 
Here's my post in the CL thread explaining the problem and solution to the Inuksuk issue

Here's the quote for simplicity sake.

Poizen 87 said:
Hey guys, ViceVirtuoso figured it out, and it includes some info you might want to know because it affects AI too!

Vicevirtuoso said:
Line 145 of Inuksuks.lua is a PlayerDoTurn event which checks for the player in question to be the ActivePlayer, i.e. the player sitting at the computer. Meaning that it will fire properly for the Inuit on their local machine, but it will not fire on anyone else's machine, since the Inuits are not the ActivePlayer there.

This should be brought to CL's attention, because this also means that the AI will never get any of these bonuses.

A user from Something Awful also commented on this function, and how it might be tunes/fixed

Kyte said:
Let's define Current Player as the player who triggered PlayerDoTurn. In other words, it's that player's turn.

The logic is to have the Inuksuk() function trigger only if the current player is Inuit and is the active player (aka the local player). The Inuksuk() function goes through every single plot in the map and checks if it's snow or tundra. If it is, it checks if it's owned by the current player. If it is, it checks if it has the Inuksuk improvement. If it does, and it's not pillaged, it'll find the closest city, then do some other stuff with the info.

From that logic, I suspect you can remove the ActivePlayer check with no problem (since it already checks if the player is Inuit). That should fix it for AI as well. Moreover, I think you should reverse the ifs. First check if it has the Inuksuk improvement (since it's the most likely to return false and therefore skip the rest of the checks), then check if it's owned by the current player. And remove the check to see if it's tundra or snow because I assume the Inuksuk improvement can only be built on tundra or snow (if that's not the case then make it the innermost if).

Unfortunately this is now beyond me so I can't be of much assistance beyond passing on info.
 
It's possible to recompile the civ 5 dll to fix this (I think whowards dlls do), but that has all the usual issues with civ 5 dll overlaps.

thanks cicero and emeralis for answers about communitas map :)

How much knowledge do you have about recompiling a dll?
Do you know if it is possible to merge whowards dll and the Active AI dll? And maybe also how to do it?
I wonder why whoward did not do that already, so I assume it is not possible?
Unfortunately neither whoward nor JdH answers to my PN about this question (think they are very busy)
 
So I've managed to get my current set of mods completely stable, albeit with a few non-critical bugs, so I tried beefing up the mod pack by adding a couple additional features.

The bizarre thing is, when I loaded this new set of mods into a game, everything was working just fine, but post-compile when I load the game up something weird happens. The select a Civ screen works fine, with all its icons, but when the game itself is loaded up everything is completely broken- units are missing their icons, the unit action box is missing, the city banner is fried, civ icons are wrong or misplaced (When I tried one civ, the flag icon was for the wrong Civ and half outside the ring border), among other things.

I narrowed it down to something in the Override folder, but I'm wondering if you've encountered this before Cicero, and might offer some input. Why would the set of XML files work fine as loaded mods but break when compiled?
 

Ah I see. I missed that he was checking for Active Player. That would be an evident source of desync, yes...I code my mod civs differently, so I didn't notice. He's checking simultaneously whether the player whose turn just ended is Inuit and whether that player is human. If the human player isn't Inuit, it never runs--not only does this cause desyncs, that also means Inuksuks will never work if the human player isn't Inuit!

The problems run even deeper than that, as ViceVirtuoso indicated. On the Active player's turn, he's also trying to go over every tile of the map (which should be avoided because it increases turn times and can cause desyncs from sheer lag) and do the Inuksuk things. Currently, because the whole thing only fires if the player whose turn just ended is the human player AND the Inuksuk functions only run if the Inuksuk belongs to the player whose turn just ended, there's a logic conflict, in that this means the only Inuksuks who belong to human player will ever do anything.

Just taking out the active player check would fix the problem in that would now work, and get rid of the hard guaranteed desync, but it would also cause the whole map to be checked once per each Inuit player, which is okay since there's usually only one. It's actually slightly better to take out the initial check that the player whose turn just ended is Inuit (since what does it matter? We just need it to run once per human player), but then we have to remove the later check that the Inuksuk belongs to the player whose turn just ended.

It's also worth noting that captured Inuksuks would never work unless the person capturing it is also Inuit, and I don't know if that's intended.

The necessary fix for removing the active player check is:

Replace

Code:
if pPlayer:GetCivilizationType() == GameInfoTypes.CIVILIZATION_CLINUIT and pPlayer == Players[Game.GetActivePlayer()] then

with

Code:
if pPlayer:GetCivilizationType() == GameInfoTypes.CIVILIZATION_CLINUIT then

in Inuksuks.lua.

Addendum:
A better way would be to check only the territory of the player whose turn just ended (you do have to check every player, unless Inuksuks only work for the Inuit, and not in Inuit cities captured by someone else, in which case even better, you only have to check the Inuit civs!).That would be much better, even late game, because at least it won't be checking every ocean tile.

This does assume an Inuksuk in neutral ground does nothing (if a city is razed) but I assume that's the case.

Another way would be to check only Inuit territory constantly for new Inuksuks, keep a list of running Inuksuks, then check each turn whether they've been destroyed, but that'd be obnoxious to do...plus you'd have to do a special thing for saved games that are reloaded :sad:. Though I have seen it done before...
 
So I've managed to get my current set of mods completely stable, albeit with a few non-critical bugs, so I tried beefing up the mod pack by adding a couple additional features.

The bizarre thing is, when I loaded this new set of mods into a game, everything was working just fine, but post-compile when I load the game up something weird happens. The select a Civ screen works fine, with all its icons, but when the game itself is loaded up everything is completely broken- units are missing their icons, the unit action box is missing, the city banner is fried, civ icons are wrong or misplaced (When I tried one civ, the flag icon was for the wrong Civ and half outside the ring border), among other things.

I narrowed it down to something in the Override folder, but I'm wondering if you've encountered this before Cicero, and might offer some input. Why would the set of XML files work fine as loaded mods but break when compiled?

You may have to do the log checking thing I mentioned a few pages ago. I know of nothing that would make the flag icons be outside the ring. Unless it's a weird red version of Washington's logo, because that's the logo for something missing.

EDIT: Actually can you take a screenshot?
 
Yeah, it's the red Washington flag you mentioned. So that means there's a mod breaking my XMLs or running into serious conflict with UI mods.

Maybe it's a mod load order issue? Anyway I can control the order mods are loaded in? You'd think there'd be a tool to parse a mod collection for conflicts and overwrites.
 
Maybe it's a mod load order issue? Anyway I can control the order mods are loaded in? You'd think there'd be a tool to parse a mod collection for conflicts and overwrites.
On whowards picknmix website is a tool to merge mods into a modpack, where you also can set the order of loading.
It also checks for common mistakes in mods, but I guess this tool is old, because it does not know about expansion2.dll.

but I don't know if this would help for multiplayer modpack.
 
Ah I see. I missed that he was checking for Active Player...

I didn't read this post initially, but as Kyte pointed out the tundra and snow check is an expensive process that serves absolutely no purpose. Inuksuks can only be constructed on tundra or snow, and will only ever expand to other snow and tundra tiles! You can take out the snow/ice check entirely without much consequence. Moreover, it's better to reverse the Ifs structure such that the tile checks occur last- since 'Inuit in game' and 'current player is inuit' are the most likely logical checks to fail. Generally speaking expensive calculations should be relegated to the bottom of an if chain, so that its outright skipped most of the time.

So the solution Kyte and I collaborated on was:

Code:
function Inuksuks(PlayerID)
local pPlayer = Players[PlayerID]
if pPlayer:GetCivilizationType() == GameInfoTypes.CIVILIZATION_CLINUIT then
--print("it triggered")
for plotLoop = 0, Map.GetNumPlots() - 1, 1 do
local pPlot = Map.GetPlotByIndex(plotLoop)
if pPlot:GetImprovementType() == GameInfoTypes.IMPROVEMENT_INUKSUK then
--print("Inuksuk found!")
if not pPlot:IsImprovementPillaged() and pPlot:GetOwner() == PlayerID then	
local pCity = DetermineClosestCity(pPlot, PlayerID)
for i = 0, 5 do
local NeiraiHP = Map.PlotDirection(pPlot:GetX(), pPlot:GetY(), i);
if NeiraiHP ~= nil then
EmpowerColdPlot(NeiraiHP, PlayerID)
end
end
ExpandInuksukLands(pPlot, PlayerID, pCity)
end
end
end
end
end

(Apologies for the collapsed indentations. Posting from an iPad and had to copy paste from private messages.)

Which has the added benefit of collapsing two other if statements into one for reduced performance cost. Note I have print statements commented out- which I suggest everyone intending to make a modpack using MPMPM do as well. It's a big performance boost, especially for Civs that print console statements for every damn plot iteration check. If you suspect bugs from a particular script you can always re-enable them to check.

As you mentioned though a captured inuit City would not grant working Inuksuks to the player so that's a flaw in Kyte's code too. I did bring this issue to the attention of the CL guys, along with the suggested solution, but they haven't really acknowledged it so who knows if it'll be fixed officially.
 
I didn't read this post initially, but as Kyte pointed out the tundra and snow check is an expensive process that serves absolutely no purpose. Inuksuks can only be constructed on tundra or snow, and will only ever expand to other snow and tundra tiles! You can take out the snow/ice check entirely without much consequence. Moreover, it's better to reverse the Ifs structure such that the tile checks occur last- since 'Inuit in game' and 'current player is inuit' are the most likely logical checks to fail. Generally speaking expensive calculations should be relegated to the bottom of an if chain, so that its outright skipped most of the time.

So the solution Kyte and I collaborated on was:

Code:
function Inuksuks(PlayerID)
local pPlayer = Players[PlayerID]
if pPlayer:GetCivilizationType() == GameInfoTypes.CIVILIZATION_CLINUIT then
--print("it triggered")
for plotLoop = 0, Map.GetNumPlots() - 1, 1 do
local pPlot = Map.GetPlotByIndex(plotLoop)
if pPlot:GetImprovementType() == GameInfoTypes.IMPROVEMENT_INUKSUK then
--print("Inuksuk found!")
if not pPlot:IsImprovementPillaged() and pPlot:GetOwner() == PlayerID then	
local pCity = DetermineClosestCity(pPlot, PlayerID)
for i = 0, 5 do
local NeiraiHP = Map.PlotDirection(pPlot:GetX(), pPlot:GetY(), i);
if NeiraiHP ~= nil then
EmpowerColdPlot(NeiraiHP, PlayerID)
end
end
ExpandInuksukLands(pPlot, PlayerID, pCity)
end
end
end
end
end

(Apologies for the collapsed indentations. Posting from an iPad and had to copy paste from private messages.)

Which has the added benefit of collapsing two other if statements into one for reduced performance cost. Note I have print statements commented out- which I suggest everyone intending to make a modpack using MPMPM do as well. It's a big performance boost, especially for Civs that print console statements for every damn plot iteration check. If you suspect bugs from a particular script you can always re-enable them to check.

As you mentioned though a captured inuit City would not grant working Inuksuks to the player so that's a flaw in Kyte's code too. I did bring this issue to the attention of the CL guys, along with the suggested solution, but they haven't really acknowledged it so who knows if it'll be fixed officially.

Those changes are generally good (as well as destroying print statements that run inside a loop...I tend to only use those for testing). I can also comment:

http://forums.civfanatics.com/showpost.php?p=13439717&postcount=17

#3 is something we should really try to get every mod civ to do (ViceVirtuoso is where I learned this from, and he does this on every one of his civs). Basically, when the game starts, check if the relevant civ is even in the game and only set the event listener if it is. In the case here with the Inuits, GameEvents.PlayerDoTurn.Add(Inuksuks) could easily go into a very similar beginning game check. Little optimizations like that...

Now that I am home, I can also comment a bit on scanning for Inuksuks:

For improvements, which can only be built within the borders of some civ, and which only have any effect if owned (and I see nothing in the Ikuksuk description or code to suggest otherwise), it's almost certainly more efficient to cycle through all of the give player's tiles, rather than go through all the tiles on the map. I do something extremely similar with my Cthulhu Civ, where I check every turn for holy sites and convert to a new improvement if necessary.

Code:
for pCity in pPlayer:Cities() do
			for ii = 0, pCity:GetNumCityPlots() - 1, 1 do
				local mPlot	= pCity:GetCityIndexPlot( ii );
				if ((mPlot:GetImprovementType()==GameInfoTypes["IMPROVEMENT_HOLY_SITE"]) or (mPlot:GetImprovementType()==GameInfoTypes["IMPROVEMENT_HOLY_SITE_CTHULHU2"]) and (replacementID==GameInfoTypes["IMPROVEMENT_HOLY_SITE_CTHULHU1"])) then
					local pillaged=mPlot:IsImprovementPillaged()
					mPlot:SetImprovementType(replacementID)
					mPlot:SetImprovementPillaged(pillaged)
				elseif ((mPlot:GetImprovementType()==GameInfoTypes["IMPROVEMENT_HOLY_SITE"]) or (mPlot:GetImprovementType()==GameInfoTypes["IMPROVEMENT_HOLY_SITE_CTHULHU1"]) and (replacementID==GameInfoTypes["IMPROVEMENT_HOLY_SITE_CTHULHU2"])) then
					local pillaged=mPlot:IsImprovementPillaged()
					mPlot:SetImprovementType(replacementID)
					mPlot:SetImprovementPillaged(pillaged)
				end
			end
		end

This does take a bit more work, but probably preferable to going through every tile on the map.

Honestly, this isn't even the first or second time Colonialist Legacies civs have been a problem for MPMPM. Now, of course, there's no reason to expect them to code for compatibility with multiplayer, but I've seen several instances of pretty inefficient code, as well as mass print statements, which aren't good ideas even if it's impossible to desync a single player game. I also get the impression sometimes that they don't really check the AIs rigorously.

But, this is just idle judgmentalism. Colonialist Legacies pumps out new civs like a factory, and here I am sitting on 3, with no time to really work on much...
 
While the Colonialist Legacies set include my favourite new Civs, and are arguably more ambitious and creative than just about any other mod makers, I feel that JFD is evidence that a high production rate shouldn't necessitate a dearth in bug testing. It is much rarer for me to find errors in his Civs, and his collection is much, much larger. Of course the CL Civs, being on the more ambitious and creative side as I mentioned, may be more prone to errors from exploring new territory, functions, and features.

I can't figure out for the life of me why mod makers don't comment out their print statements before publishing mods. Anyone capable of bug testing or knowledgeable about logs will likely know how to re-enable them, and they cause a major performance hit especially when looped. The most egregious example to me is the Himalayan Cavalry script for MC's Tibet! which contains a plot iteration that checks basically every plot on the map and has an accompanying print statement.

I wish I had the ability to code Lua a little better. I'd love to make my own mod Civs. At this point I've reverse engineered enough scripts that I have a rudimentary understanding. But I still don't know much about XML and even less about SQL. In academia, Python and R reign supreme, with a little Excel scripting on the side- so that's where my knowledge is.

As far as MPMPM goes, can't wait til you implement 3 D leader scenes if at all possible. I'd really like to include the the most recent Australia, Germany, and Mali mods in my pack. I can't seem to add any more mods to the mod pack listed above without breaking the game or causing random crashes though- 1.5GB appears to be almost a magical threshold for stability.
 
CivAddiction’s Multiplayer Modpack – CP+CSD+C4DF+Serp’s+And More! (BETA)

I made this to demonstrate that CP+CSD+C4DF could be successfully incorporated into a MODPACK. It did take some extra steps to get it to work, but it is certainly playable. I am currently testing it in a true multiplayer game, but I wanted to share what I have so far with you all.

Hi civaddiction :)

If you really got this modpack combination to work it is great!

But from my experience I have so far... I do not believe it, so I will ask some questions ;)

First the things,why I think it can't work. Please explain why it does :)
1) Which version of CSD+C4DF do you used? I made a small modpack with only these mod before and used the versions from whoward, which were compatible with his "various dll". Normally these both mods require each one dll, but with whowards version it is possible to play with only whowards dll. I think you don't have the "various dll" in your modpack, so how do they work?
2) I use the EUI with my modpack, you too? I ask because in my CSD+C4DF modpack was a small comptibilty issue: http://forums.civfanatics.com/showthread.php?p=13773999#post13773999 and I guess there are some more which I did not found so far.
3) It seems you uses mods from my modpack/from whoward that need the "various dll", don't you? If so, those mods won't work without the dll...?
4) InfoAddict: I don't know why, I also had this in my modpack before, it causes crashes to desktop when I clicked "Back to main menu" in about 70% of the time. Since the game needs alot of time to load(especially on old computers), I decided to remove it and now there are no crashes.
5) Quick Turns (v 10): I had this in my modpack, too. But it does not work in multiplayer. If one of the player change the settings, it will change for everyone, but without showing this in the UI. Also the exact settings, like "only barbarian move slow" or something like that do not work in multiplayer. That's why I removed it.
6) R.E.D. Modpack: I thought this modpack need a own dll? That's why I only used the Ethnic Units mod in my modpack. I think there are multiple versions of R.E.D. modpack out there, from where you got it?

Now my comments to the use of the mods ;) :
6) Fortress Borders (v 2) (Unaltered Version): I don't think the Unaltered version is good... If you want the forts to have this ability, just change my lua script that way. But I added some other important functions in the lua code that are really improtant for balancing. I don't think it is wise to play with the unaltered version, since you can exploit this mod in many ways (e.g. just build forts around your city and remove them -> you get land for free which will not go back to nature).
7) Units - Colonists and Pioneers: I also expierenced a runtime error with this mod. It was every time a non Colonist/Pioneer founded a city. Therefore I added this line into the lua script: " if (pPlot:GetUnit(i) == nil) then return; end " . If you use my version of this mod: Is it still the same part of the lua that causes the runtime error? Or is it another line?
 
@ cicero and other modpack builder:
Do you also experience crashes before the game is loaded sometimes?

E.g. I wanted to fix/add something to my modpack. Therefore I change a bit in the original mods and create n new modpack. But it happens very often, that this new modpack does not work. After clicking "start game" it crashes to desktop.

When making the v11 of my modpack I had this issue and found out, that I forgot to delete the line <File md5="{Your md5 will vary}" import="0">CvGameCore_Expansion2.dll</File> in the "various components dll.modinfo". After I did so, I'm sure the modpack worked, so I uploaded it.
Now I made v12 and did not forget to delete this line. I think I did everything correct. But now again I'm not able to start a game with this modpack. And if I try to start a game with v11 it suddenly also crashes ?! I was sure I solved this issue ?!
The only version that works here is the first release and I don't know why..

If I delete the "various components dll" from the modpack it will not crash, so the dll is the reason. But how to solve this?!

edit:
I tried to create a modpack which contains the "various components dll" only. I removed the dll and the modinfo entry in the original mod. Than I checked the multiplayer woraround mod and this various dll mod. I created the Modpack and copied the dll back into the mod folder of the modpack and also copied the modinfo entry back.
But it keeps crashing?!

edit2:
I found out it has to do with the YieldIconmanager I deleted to make it compatible with EUI. So If I make a modpack with this YIM, it does not crash...

edit3 solved:
I solved the problem by leaving the YieldIconManager.lua (YIM.lua) file in the "various components dll mod" (VCD). I only deleted the YIM.xml file, to prevent MPMPM saves the info from this xml. Then I loaded all mods and startet the game. Of course the YIM.lua will mess up the yields. But I just created the modpack. After the modpack is done, I deleted the YIM.lua file in the modpacks VCD.
The modpack now works fine :)

edit4:
Cicero, did you noticed my question here http://forums.civfanatics.com/showpost.php?p=13787817&postcount=349 ?
-> nevermind, I got a reply from JDH. Maybe he will make his code public after the next update, he said :)
 
Top Bottom