[MOD] MagisterModmod

Not sure if this has been posted, but Illians get "do you want to convert to this religion" dialogues even though they can't convert. This sometimes gets you a free relations bonus (if a leader demands you convert to their religion you can say yes, get the relations boost, but not actually convert) but otherwise it doesn't matter. I assume the Grigori have the same issue.

I'm not sure is this is an issue with this modmod or Tholals. Probably the latter.
 
I think we should buff pasilide and walls.

City defense is nothing compared to spells or uber-promoted units. Siege weapons is not necessary either.

In some mods, there are high walls that completely block units without certain ability. This mod already had too many insanely overpowered offensive units and spells, we should think defensive side now.
 
The Earthquake spell already has a chance to destroy buildings, including walls and palisades. That is a base FfH2 feature.
 
As I've said often before, saved games are less helpful than the logs.

"BBAILog - [player name].txt" is usually the most helpful.

Usually, problems going to the next turn are caused by an AI player having trouble deciding what to do with a specific unit. BBAILog can help you identify the unit (as it will be listed multiple times in a row at the bottom of the file), and then use world builder to delete it (or sometimes just change its Unit AI type, e.g. from Attack to Reserve).
 
Alright, I had no clue how to have such things logged until I went and took a quick crash course on it... I tried altering the last unit that had a recorded action by setting it to reserve like suggested, but it didn't do any good.

Edit: Well I made a more thorough brush over three factions turns using the new worldbuilder, speaking of which, thank you for that. It made it significantly easier to fix this.

Edit edit: Pointed a friend to this modmod, but apparently the DL links are broken right now.
 

Attachments

I've encountered two separate instances of the game being unable to move onto the next turn, both on multiple occasions. I checked the BBAI logs and found dozens of lines at the bottom about a unit initiating a move, then the same unit initiating a move, then the same unit initiating a move, and so on. In one such instance it had to do with a unit exploring a unique feature (Maenalus and the Broken Sepulcher). In the other, the problem unit was in a position where it would make sense to attack a Dragon Fanatic / Wyvern Rider of mine (we were at peace at the time) that was in their territory.

This would have to do with Tholal's MNAI more than the Magister Modmod, but I've noticed that an AI player with an excess of workers will constantly tear down existing improvements to replace them with newer, sub-optimal ones. Particularly cringe-worthy was an instance of Cardith Lorda chopping down an Ancient Forest covered Town to make way for a forest-less workshop. Could plots with villages/towns/enclaves (and in the case of the Kurios, Ancient Forested improvements) be given the "cannot build improvements here" option via Python?

Also, is it possible for races besides the Illians/Doviello to adopt the White Hand if they're Auric's vassals and he completes The Draw? Every turn, Jonas would convert to the White Hand, then immediately go back to the Ashen Veil. Glitch or intended?

What would everybody think about automatically giving any disciple unit belonging to a Demon Lord / Basium the Evangelist promotion? Spread that faith for more angelic/demonic servants.
 
Hullo, Magister. Can't remember if I've ever actually posted in this thread, but I adore your work. Just wanted to raise my opinion on something, which might be an annoyance with Tholal's or yours - I found his just before finding yours, so I have some trouble keeping track of which is which...
Also - I think I'm a patch behind so forgive me if anything I say has been addressed...

I'm currently playing as Faeryl, at war with Rhoanna, who is now employing hordes of horse archers. There's a Khazad city in between us and I only have to deal with the already-dead cowards that run into my forest, so I'm not exactly fearful of my life, but...the base withdrawal chance for a horse archer is 35%, there's an extra 10% for all units (is that from advanced tactics? I can't even remember...), and with all three flanking promotions that's an additional 50%.
And with the Hippus horselord trait, that's a total of 105% chance that the cowards keep cowarding.

As I recall, base FFH wouldn't let you take the flanking III promotion if it put your withdrawal chance too high, which I found very stupid, since that's not all flanking III does, and also because [I think] it considered above 80% too high. And I love that every unit has some chance to withdraw. But...there ought to be some sort of mechanic which limits withdrawal chance to 95% max, oughtn't there? Or...is there, and it just *says* 105%?


Also random typo I noticed: The Elohim golden age option for the event with Sirona's constellation looks to be missing a word. 'be', if I remember correctly. Trivial, of course, but I thought you might want to update it for the next patch. Assuming the extra events are yours, of course. :P
 
IIRC, you could actually get Horse Archers with over 100% withdrawal in base ffh, but you needed to
1) be a civ that had extra 10% withdrawal for mounted units (Illians and Hippus IIRC)
2)First promote the Horseman to flanking III (95% chance) and then upgrade to Horse Archer (105%).

I love doing this, but I do think it's a bit overpowered. Cool way to avoid your highly promoted units randomly dying at 98% odds though.
 
I really like how I can play as the Illians in Mulcarn Reborn. I never could bother in normal FFH2 because of switching civs, but control whole team seems to be even more torture, at least in terms of time (so I am just rushing with hero priests). It would be cool if you could also play as the bad guys in the Black Tower or in Lord of the Balors. Also had great fun as the Infernals in Wages of Sin.
Why do Illian javeliners cost 90 hammers compared to 60 for axe/archer? There seems to be no reason to ever build those.
Infernals get a +2 food for burning sands, seems pointless.
The raider trait doesn't give commando to disciple units, but they can still take them normally after C4. Intended?
 
I believe that Kael gave Illian (and Doviello) Javeliners have a higher base cost to make up for the fact that they do not have any building prerequisites.

Infernals get extra food despite not being able to use it because the game engine will not allow a player to build Cottages on tiles that no not provide any food, and I wanted the Infernals to be able to build the improvement there.

I don't think I changed the Raider trait from base FfH2, so I assume Kael intended it.
 
Really? Do you know where the code for that is?

Cottages, Farms, (Homesteads,) and Workshops all have this in their xml defines:

Code:
			<PrereqNatureYields>
				<iYield>1</iYield>
				<iYield>0</iYield>
				<iYield>0</iYield>
			</PrereqNatureYields>

Modders could limit the building of improvements based on a tile's other yield types too, but FfH2 does not include any limits based on production or commerce.


The C++ code that handles this prerequisite is found in CvPlot.cpp, at about line 2623, at almost the end of the canHaveImprovement function.
Spoiler :

Code:
bool CvPlot::canHaveImprovement(ImprovementTypes eImprovement, TeamTypes eTeam, bool bPotential) const
{
	CvPlot* pLoopPlot;
	bool bValid;
	int iI;

	FAssertMsg(eImprovement != NO_IMPROVEMENT, "Improvement is not assigned a valid value");
	FAssertMsg(getTerrainType() != NO_TERRAIN, "TerrainType is not assigned a valid value");

	bValid = false;

	if (isCity())
	{
		return false;
	}

//FfH: Modified by Kael 09/10/2008
//	if (isImpassable())
//	{
//		return false;
//	}
	if (isImpassable())
	{
		if (isPeak())
		{
			if (!GC.getImprovementInfo(eImprovement).isRequiresPeak())
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}
    if (GC.getImprovementInfo(eImprovement).isRequiresPeak())
    {
		if (!isPeak())
		{
            return false;
		}
    }
//FfH: End Modify

	if (GC.getImprovementInfo(eImprovement).isWater() != isWater())
	{
		return false;
	}

	if (getFeatureType() != NO_FEATURE)
	{
		if (GC.getFeatureInfo(getFeatureType()).isNoImprovement())
		{
			return false;
		}
	}

	// Tholal AI begin
	if((getBonusType() != NO_BONUS) && GC.getImprovementInfo(eImprovement).isActsAsCity() && GC.getBonusInfo(getBonusType()).isMana())
	{
		return false;
	}
	// Tholal AI end

	// Super Forts begin *build*
	if (GC.getImprovementInfo(eImprovement).getUniqueRange() > 0)
	{
		int iUniqueRange = GC.getImprovementInfo(eImprovement).getUniqueRange();
		for (int iDX = -iUniqueRange; iDX <= iUniqueRange; iDX++) 
		{
			for (int iDY = -iUniqueRange; iDY <= iUniqueRange; iDY++)
			{
				CvPlot *pLoopPlot = plotXY(getX_INLINE(), getY_INLINE(), iDX, iDY);
				if (pLoopPlot != NULL && pLoopPlot->getImprovementType() != NO_IMPROVEMENT)
				{
					if (finalImprovementUpgrade(pLoopPlot->getImprovementType()) == finalImprovementUpgrade(eImprovement))
					{
						return false;
					}
				}
			}
		}
	}
	// Super Forts end

	if ((getBonusType(eTeam) != NO_BONUS) && GC.getImprovementInfo(eImprovement).isImprovementBonusMakesValid(getBonusType(eTeam)))
	{
		return true;
	}

	if (GC.getImprovementInfo(eImprovement).isNoFreshWater() && isFreshWater())
	{
		return false;
	}

	if (GC.getImprovementInfo(eImprovement).isRequiresFlatlands() && !isFlatlands())
	{
		return false;
	}

	if (GC.getImprovementInfo(eImprovement).isRequiresFeature() && (getFeatureType() == NO_FEATURE))
	{
		return false;
	}

	if (GC.getImprovementInfo(eImprovement).isHillsMakesValid() && isHills())
	{
		bValid = true;
	}

	if (GC.getImprovementInfo(eImprovement).isFreshWaterMakesValid() && isFreshWater())
	{
		bValid = true;
	}

	if (GC.getImprovementInfo(eImprovement).isRiverSideMakesValid() && isRiverSide())
	{
		bValid = true;
	}

	if (GC.getImprovementInfo(eImprovement).getTerrainMakesValid(getTerrainType()))
	{
		bValid = true;
	}

	if ((getFeatureType() != NO_FEATURE) && GC.getImprovementInfo(eImprovement).getFeatureMakesValid(getFeatureType()))
	{
		bValid = true;
	}

	if (!bValid)
	{
		return false;
	}

	if (GC.getImprovementInfo(eImprovement).isRequiresRiverSide())
	{
		bValid = false;

		for (iI = 0; iI < NUM_CARDINALDIRECTION_TYPES; ++iI)
		{
			pLoopPlot = plotCardinalDirection(getX_INLINE(), getY_INLINE(), ((CardinalDirectionTypes)iI));

			if (pLoopPlot != NULL)
			{
				if (isRiverCrossing(directionXY(this, pLoopPlot)))
				{
					if (pLoopPlot->getImprovementType() != eImprovement)
					{
						bValid = true;
						break;
					}
				}
			}
		}

		if (!bValid)
		{
			return false;
		}
	}

[COLOR="Red"]	for (iI = 0; iI < NUM_YIELD_TYPES; ++iI)
	{
		if (calculateNatureYield(((YieldTypes)iI), eTeam) < GC.getImprovementInfo(eImprovement).getPrereqNatureYield(iI))
		{
			return false;
		}
	}[/COLOR]

	if ((getTeam() == NO_TEAM) || !(GET_TEAM(getTeam()).isIgnoreIrrigation()))
	{
		if (!bPotential && GC.getImprovementInfo(eImprovement).isRequiresIrrigation() && !isIrrigationAvailable())
		{
			return false;
		}
	}

	return true;
}
 
I'm am now uploading a new release.

This is a fairly minor update, containing little more than the WorldBuilder improvements that Platyping added in Worldbuilder version 3.20 plus some TXT_KEY corrections.

I doubt that any of the changes could possibly break saved games, although I have not checked and could be forgetting about something changed shortly after the last release.

You may download the installer here or the archive here.
 
I should have waited on that last release, as Platyping made another update already.

I don't feel like releasing a whole new version of my modmod so soon, but you can get the new functionality by copying all of the files except CvGameUtils.py and CvEventManager.py from the MNAI Worldbuilder update.
 
I got a message from Chrome saying it was preventing a malicious - not unknown but definitely malicious - file when trying to download your latest release.
 
Microsoft Security Essentials did not find anything wrong.

A Malwarebytes Anti-Malware quickscan found nothing wrong on my computer. I'm doing the full scan now to see if it is any different.


The difference might not be on my end, but with the hosting website. It seems that www.cx.com was purchased by www.myflare.com, so I could not use the same host I've been using but instead went over to the new site.

Perhaps I should find a different host instead for the next release?


Anyway, Platyping seems to have released yet another update early this morning. I'll start to merge it in after returning from Habitat for Humanity later today, and if all goes well will probably release a new version tomorrow afternoon.
 
Back
Top Bottom