[MOD] MagisterModmod

I am getting tons of "Assert Failed" errors and I am surprised that someone might not see them or not reproduce them. Is there a chance that it's connected to steam version +win10? I don't recall having so many problems with win7 and CD edtition of civIV.
FYI - I have enabled the old 'Original beta unsupported' version of the CivIV in Steam properties, the mod is in the correct folder, installed with FFH final 'o' patch.
 
I am leaning towards using the Nobiliary particle "von." Losha would then be remaned "Losha von Valas."
Its nice to have this detail of the lore in the mod, because it shows more of the Calabim culture. However, shouldn't be better use latin nobiliary particles (de, di, d') ? As stated in the reddit forum, Patrian language is something close to (if not be) latin. The Calabim kingdom is one of the nations formed during the fragmentation of Patria. Certainly, they have inherited the language too.
on her way to deliver the Heartstone to Tebryn Arbandi
I have read the Fideism and Basium and the Boiling Sea stories and they show a different destiny of the one shown in The Black Tower scenario for Gosea. That means the scenario will have some changes ? Also, I suggest that you consider replace Gosea actual skin for this one in a future update. I think it matches her fisical caracteristics (described in the stories) more than the current one.
 
I am getting tons of "Assert Failed" errors and I am surprised that someone might not see them or not reproduce them. Is there a chance that it's connected to steam version +win10? I don't recall having so many problems with win7 and CD edtition of civIV.
FYI - I have enabled the old 'Original beta unsupported' version of the CivIV in Steam properties, the mod is in the correct folder, installed with FFH final 'o' patch.
Doubtful. I'm getting them too with discs and Windows 7.
 
I think I may release a minor update for Thanksgiving.

It fixes a few minor bugs I discovered.

I am not positive, but I think that the random building asserts might have been caused by comments like <!-- RevolutionDCM Building Effects --> or <!--End Religion specific buildings --> inside CIV4BuildingInfos.xml. I have not gotten any more of those since deleting such comments, but was not getting them consistently before either so that does not prove anything.

There were a couple missing text strings for discovering new equipment.

There was a typo in the Ascension ritual python that forced Auric Ascended to cast Snowfall Greater.

PROMOTION_CASWALLAWN was still found in a couple spots despite the promotion being deleted.

The python portion of Purge Magic was not functional during the last release. It would remove Channeling 1, 2, & 3, but did not touch the spell spheres or buffs that it should have. It works now, as does its help string.

I removed the Matron Essendi Pillar of Fire spell, as it was redundant once I deiced to let the equipment grant the Fire Affinity promotion.

I decided that having Awaken Magic grant Mastery of Magic diminished the importance of the Tower of Mastery too much. Instead of adding Channeling 1 and Mastery, it now grants Channeling 1, Channeling 2, and Arcane. Channeling 2 and Arcane only given to UNITCOMBAT_ADEPT, while Channeling 1 goes to most unitcombats. The targets of this spell do not get free random spell spheres or affinities, as I'd have to use python for that and would rather keep it a super efficient xml only spell.

I gave Govannon Divine 2, so that in addition to having the passive ability to teach magic and pass on Govanon's Ethics he may also cast Awaken Magic. If he is randomly granted another affinity or purchases it after gaining Mastery from the Tower of Mastery he may get access to the fourth tier spells in those spheres too. (I'm thinking I may change the name of Divine II to Channeling IV.)

The art that Dominus the Mentat recomended for Gosea is actually in the game already, as at one point I added Os-Gabella as an avatar unit and later removed her without removing her art. I am not sure it is a great fit for Gosea but went ahead and used it anyway, as the current art does not fit any better.


I don't think any of my changes so far would break any saved games.
edit: i just tested with the saved games OKSleeper posted. They load just fine and are not crashing. I was disappointed to find that one of his saves still gave me some random building asserts the first time I tried to load it, but had no such issue the nest 4 times I tried.
 
Hey, does anyone know where in the files the restriction for lumbermill building for fellowship is? I can't find it.
 
Hey, does anyone know where in the files the restriction for lumbermill building for fellowship is? I can't find it.
it is in C:\Program Files (x86)\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\Mods\Magister Modmod for FfH2\Assets\python\CvGameUtils.py
Spoiler :
Code:
   def canBuild(self,argsList):
       iX, iY, iBuild, iPlayer = argsList
       pPlot = CyMap().plot(iX, iY)
       pPlayer = gc.getPlayer(iPlayer)
       iImprovement = pPlot.getImprovementType()
       iImprovementNew = gc.getBuildInfo(iBuild).getImprovement()
       iBonus = pPlot.getBonusType(pPlot.getTeam())
       if iImprovement == iImprovementNew:
           return -1
       #I don't want mana nodes blocked by farms, mines, etc

       if iBuild == gc.getInfoTypeForString('BUILD_FARM'):
           if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_FALLOW')):
               return 0
           if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_GRIGORI'):
               return 0
       elif iBuild == gc.getInfoTypeForString('BUILD_HOMESTEAD'):
           if pPlayer.getCivilizationType() != gc.getInfoTypeForString('CIVILIZATION_GRIGORI'):
               return 0
       elif iBuild == gc.getInfoTypeForString('BUILD_CITADEL_OF_LIGHT'):
           if pPlayer.getStateReligion() != gc.getInfoTypeForString('RELIGION_THE_EMPYREAN'):
               return 0
           if iImprovement != gc.getInfoTypeForString('IMPROVEMENT_CITADEL'):
               return 0

       if iImprovementNew > -1:
           if iBonus != -1:
               if gc.getBonusInfo(iBonus).isMana():
                   iBonusNew = gc.getImprovementInfo(iImprovementNew).getBonusConvert()
                   if iBonusNew == -1:
                       return 0
           if pPlot.isOwned():
               if pPlot.getTeam() == pPlayer.getTeam():
                   if iImprovement != -1:
                       if iImprovement == gc.getImprovementInfo(iImprovementNew).getImprovementPillage():
                           return 1
                   if pPlot.isPeak():
                       if iBuild in [gc.getInfoTypeForString('BUILD_MINE'), gc.getInfoTypeForString('BUILD_QUARRY')]:
                           if iImprovement == -1:
                               if pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_LABOR')) == gc.getInfoTypeForString('CIVIC_ARETE'):
                                   return 1
                           if iBonus > -1:
                               if gc.getImprovementInfo(iImprovementNew).isImprovementBonusTrade(iBonus):
                                   return 1
           return -1
       if iBuild == gc.getInfoTypeForString('BUILD_REMOVE_FOREST'):
           if pPlayer.getStateReligion() == gc.getInfoTypeForString('RELIGION_FELLOWSHIP_OF_LEAVES'):
               if iImprovement != gc.getInfoTypeForString('IMPROVEMENT_SMOKE'):
                   return 0
       elif iBuild == gc.getInfoTypeForString('BUILD_LUMBERMILL'):
           if pPlayer.getStateReligion() == gc.getInfoTypeForString('RELIGION_FELLOWSHIP_OF_LEAVES'):
               return 0
       elif iBuild == gc.getInfoTypeForString('BUILD_MANA_ICE'):
           if gc.getGame().getProjectCreatedCount(gc.getInfoTypeForString('PROJECT_THE_DRAW')) > 0:
               iAuricPlayer = cf.getLeader(gc.getInfoTypeForString('LEADER_AURIC'))
               if iAuricPlayer != -1:
                   pAuricPlayer = gc.getPlayer(iAuricPlayer)
                   if pAuricPlayer.getUnitClassCount(gc.getInfoTypeForString('UNITCLASS_AURIC')) > 0:
                       if gc.getTeam(pPlayer.getTeam()).isAtWar(pAuricPlayer.getTeam()):
                           return 0
       if pPlayer.isFullMember(gc.getInfoTypeForString('DIPLOVOTE_UNDERCOUNCIL')):
           if iBuild == gc.getInfoTypeForString('BUILD_MANA_SUN'):
               if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_SUN_MANA')):
                   return 0
       elif pPlayer.isFullMember(gc.getInfoTypeForString('DIPLOVOTE_OVERCOUNCIL')):
           if iBuild == gc.getInfoTypeForString('BUILD_MANA_CHAOS'):
               if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_CHAOS_MANA')):
                   return 0
           elif iBuild == gc.getInfoTypeForString('BUILD_MANA_DEATH'):
               if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_DEATH_MANA')):
                   return 0
           elif iBuild == gc.getInfoTypeForString('BUILD_MANA_DIMENSIONAL'):
               if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_DIMENSIONAL_MANA')):
                   return 0
           elif iBuild == gc.getInfoTypeForString('BUILD_MANA_ENTROPY'):
               if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_ENTROPY_MANA')):
                   return 0
           elif iBuild == gc.getInfoTypeForString('BUILD_MANA_SHADOW'):
               if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_SHADOW_MANA')):
                   return 0
           elif iBuild == gc.getInfoTypeForString('BUILD_PLANTATION'):
               if iBonus == gc.getInfoTypeForString('BONUS_DESERT_ROSE'):
                   if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_DESERT_ROSE')):
                       return 0
               elif iBonus == gc.getInfoTypeForString('BONUS_GULAGARM'):
                   if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_GULAGARM')):
                       return 0
               elif iBonus == gc.getInfoTypeForString('BONUS_RAZORWEED'):
                   if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_RAZORWEED')):
                       return 0
               elif iBonus == gc.getInfoTypeForString('BONUS_SHEUT_STONE'):
                   if CyGame().isVotePassed(gc.getInfoTypeForString('VOTE_NO_SHEUT_STONE')):
                       return 0
       if not pPlayer.isHuman():
           iCiv = pPlayer.getCivilizationType()
           if iCiv in [gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'), gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR')]:
               if iBuild in [gc.getInfoTypeForString('BUILD_REMOVE_FOREST'), gc.getInfoTypeForString('BUILD_LUMBERMILL')]:
                   return 0
           elif iCiv == gc.getInfoTypeForString('CIVILIZATION_INFERNAL'):
               if iBuild == gc.getInfoTypeForString('BUILD_MANA_LIFE'):
                   if pPlayer.getArcaneTowerVictoryFlag() != 1:
                       return 0
           elif iCiv == gc.getInfoTypeForString('CIVILIZATION_MERCURIANS'):
               if iBuild in [gc.getInfoTypeForString('BUILD_MANA_CHAOS'), gc.getInfoTypeForString('BUILD_MANA_DEATH'), gc.getInfoTypeForString('BUILD_MANA_DIMENSIONAL'), gc.getInfoTypeForString('BUILD_MANA_ENTROPY')]:
                   if pPlayer.getArcaneTowerVictoryFlag() != 3:
                       return 0

       return -1# Returning -1 means ignore; 0 means Build cannot be performed; 1 or greater means it can
 
I noticed while playing (old may june version) that the Tower is very hard to build by Tall civilisations.
the requirement of having the 4 towers + having all mana types is huge.
It means that you need to have access to at least 21 mana sources (so 18 more than your palace). (and generally more than that).
This means you need a relatively large empire. (or to have vassals / allies that won't declare war when you start the tower).
further being in the Overcouncil blocks you from building the Tower.

If you want to have an effect of possession of mana to the Tower of Mastery I would do the following:
- make it a project (I would dislike it : but that way SoK and GE cannot rush its construction ... but the wonder would help it)
- Raise it's price by 3, give +20% construction rate for access to each of the mana nodes : if you have 21 mana nodes you'll get a +400% building rate; thus while counting that we can have other multipliers (forge/wonders/other), would mean that you about triple the construction rate : rendering it about as easy as current system, while not having access to a mana node is not crippling but can become hard. (or you can x5 or x6 the cost, and +50% per mana type ; but that tweaks it toward large civs and farther from Tall civs ;
alternatively some mana types "closer to the One" could give +50% and other "only" +20% )


Further I re-state that I find that limiting trade / access to mana to the mana-tech is crippling the World Improvements (which become mere fixed-mana-nodes, instead of being an early access to a new mana)


finally two "errors" :
- Adventurers cannot bind GC... which is an issue (but they keep the GC if they downgrade to adventurers)...
- Mercurians, upon summoning didn't move from the city they appeared : no beelining to build a city ; no beelining toward one of the 2 Evil-aligned enemy empires I was at war with.
 
Adventurers should not be allowed to bind with great commanders at all, in any of their forms. I thought I blocked it entirely, but see that I put that in reqCommanderJoinDecius() instead of the normal reqCommanderJoin(). Normal great commanders were only blocked from joining with civilians and world units, but not adventurers and other heroes. I just fixed that.

I changed it a while back so that joining with a commander converts the commander to that unit, passing on its name, race, promotions, religion, etc. It also passes on the unit's Scenario Counter, which can mess things up when it comes to the sluagh resurrection code.


Mercurians staying put is an old AI problem that I cannot do much about, except recommend that you either gift them a city or play with the control whole teams game option to make them fight.



I am not quite sure what you mean by "Tall civs."

I usually find that getting 21 types of mana is not that hard, due to the mana from relgious shrines. I guess if you do not rush to found religions (especially if you are Grigori or Illian) or capture the holy cities it could be hard though. Mana being banned by the councils (since the Undercoucnil can ban Sun now) is often a bigger issue.

I am currently playing around with making Metamagic mana the only bonus prereq, making every mana type double the production rate, and increasing the base cost from 4,000 to 100,000.


I may want to test this out a bit longer, and will be busy with family Thanksgiving once my sister and niece arrive, so I probably won't be releasing the new update today as I had planned. Next week seems more likely now. While playtesting I may also find more things I'd like to alter, but I still want to avoid changes that wouldbreak saved games this round.
 
I'll be sad that GC cannot be bound to hero units... for grigori it'll mean that the "heros" are weaker than a GC-led unit... the +1str and the +50%xp go for a bigger bonus than the +1xp/turn.

re Tall vs Wide:
Tall means having lower number of cities 2-3-4 ... (or one city challenges) but you boost all the cities to be powerhouses. and aim for quality units and cities
Wide means conquering lot of land (and not necessarily huge cities). and you aim for quantity of units and cities to win.
sometime you can get both.

Before then, the two Towers Victory (Altar & Tower) were the "tech-related victories". where the importance was Tech and construction, not land amount.
Accordingly, with the use of metamagic mana, hoarding 3-4 mana nodes was sufficient to get the 4 towers and then the Tower.
now it's much more complicated.
Shrines give mana... but there are often recouping, and recouping with the "free mana" from palace, wonders and unique improvements.

In my current game I had 9 cities and conquered 2 empires before mid game... I had 4 mana shrines (RoK, Empy, Order, FoL), 3 mana node and many wonders and UI... I had 25 manas.... but of only 16 Types (many were in double or even triple)

the bigger issues were :
- -2 minus mana from religion
- mana ban from council.
- getting 8 mana types that were not found in all my wonders, palace, UI and shrines--> this one was the most difficult. (remember... I was missing 5... while already having 3 mana nodes that were switchable, and 7 if you count that I had a -2 in air mana)

to be able to build the Tower I had to :
- Pwn a third civ (out of a total of 5 remaining)
- get an ally that got me all his manas
- Get a vassal (gifted me all his mana... often recurrent with the one I had)
- build 3 more cities ... just to get 3 more mana nodes
- I had to repudiate RoK (equivalent of +2Air) and repudiate the Councils (allowed to get entropy).
- ... refrain from killing the two remaining civs (which I could easily have done)

conclusion : winning by Tower was only doable because I was already able to win by Conquest.


Last point :I found that 4000 was a bit too huge.
I exepect that 100000 (*2 construction per mana type) will be much too huge.
what about smaller continents ? (less mana nodes)
what about smaller maps ? (less mana nodes)
how are Tall civs supposed to win ?
 
I am currently in the process of uploading a new minor update.

It consists mostly of minor bug fixes and should not break any saved games. It renames Divine 2 to Channeling IV and updates to icon to fit. In theory it allows arcane or disciple units to purchase the promotion, although a level 21 prereq makes that practically infeasible. The level prereqs for Channeling 1, 2, and 3 are reduced so they are easier for units to get back after losing their power to Purge Magic. Govanon and Hemah both gain Channeling IV, with Hemah losing his Divine spells and having a high miscast chance Awaken Magic no longer grants Mastery of Magic (so units may not purchase Affinities without the Tower of Mastery) but instead gives Adepts the Channeling 2 and Arcane promotions. The Tower of Mastery no longer requires 21 types of mana but instead has its production speed doubled with the possession of each mana type and its base price increased so that it is harder to rush or to finish without them.

Edit: I just found one bug after the upload.
Code:
Traceback (most recent call last):
  File "BugEventManager", line 366, in _handleDefaultEvent
  File "CvEventManager", line 6964, in onPlayerChangeStateReligion
UnboundLocalError: local variable 'iTeam' referenced before assignment
I should have added iTeam = pPlayer.getTeam() after pPlayer = gc.getPlayer(iPlayer) under onPlayerChangeStateReligion(
 
Last edited:
I have similar problems with "Assert Failed" messages, however it mostly works if I ignore them.

But in the last two games I have a crash just as AI finishes building The White Hand. I built it myself in the game before that, and it worked fine.

I have BUG logs enabled, and it seems Auric's AI starts making decisions.

I can upload the save files later on.
 
Here are the save files, if that helps any.
 

Attachments

  • mmm soon before crash TURN-0272.CivBeyondSwordSave
    347.4 KB · Views: 44
  • mmm sheaim summoned hyborem TURN-0244.CivBeyondSwordSave
    310.2 KB · Views: 45
Have had two great games since playing the december patch, no more Asset Failed crashes! One thing that I have noticed as Kuriotates is that casting Abundance, the T3 creation Affinity spell, and then making the unit leave the city, and removing Abundance actually removes the inherent 3 plot radius that the Kuriotates normally has.
 
Also did 2 games since installing the newest patch. No longer getting assertion failures, but my newest game keeps crashing just as the Illians finish The White Hand.
 
Also did 2 games since installing the newest patch. No longer getting assertion failures, but my newest game keeps crashing just as the Illians finish The White Hand.
I took the liberty to see and is the same issue I have a time ago. Both maps don't have the Letum Frigus present and the ritual needs it to create New Mulyr city and, if needed, a new Illian civ under Auric control. I resolved this putting Letum Frigus in the map when the Doviello or Illians are present (The AI of these ones do more frequently the White Hand ritual) and when I play with the Illians.
 
Seems you're right, it works after I added Letum Frigus in my newest game too. I just happened to have Letum Frigus when I built White Hand.
 
What settings are you guys using btw? I normally run World of Erebus on Epic and Large, with all default terrain settings. And I would never encounter that bug cause I always place all unique features.
 
This only happens when playing the normal game, which does not give you access to custom map options. In the "Custom Game" option, you can choose to have all unique features on the map, thus eliminating the conditions for triggering the fault.
 
I can't get the Radiant Guard scenario to work.

I seem to recall it using Advanced Start rules, but it starts right away and only gives you two Radiant Guard units.
No infernal units spawn; it's only you and Basium.
Finally, when Capria gives you the sidequest 10 turns in, not only does no units spawn for her, but the mission is immediately won as soon as you click away the message.

This also means you cannot complete her sidequest, and consequentially cannot build Bannor cities in the Black Tower mission. (As a sidenote, does anyone have a workaround for that issue?)
 
Really enjoying the free specialist changes, and Jonas Endain actually feels good to play now Bhall-Orcs are a thing. One thing I have found is when playing as Luichuirp, anything that gives xp on building (like Apprenticeship), causes golems to have the promotion glow, and so their action is reset so you can promote them. Of course, they have no promotions, so this happens every turn and oddly makes playing Luichuirp golemless the best, if you dont want a headache. Its not gamebreaking,but is rather annoying.

EDIT: I think I have worked out the cause of the Golem promotion glow, it is due to the free promotion pick offered by the Creation Affinity spell/building Muse, or the Tower of Alteration. Had a poke around in the files trying to see if I could make an exception for Golem unit types but was all greek to me.
 
Last edited:
Top Bottom