Final Fixes Reborn

I finally got around to playing a game of Ashes of Erebus. When I researched Honor, I didn't get the free Ecclesiastic I was supposed to. Same thing happened when I researched Way of the Earthmother: I didn't receive a Thane of Kilmorph. (I didn't research other religious techs before abandoning the game.) I was playing as the Mazatl, if you think that makes a difference. And if you need my full game settings, I can let you know that as well.
 
Is there a guide to actually installing this anywhere? because I just tried and it has completely and utterly f***** my install of rise to the point it just chokes to death giving me xml errors.
 
I finally got around to playing a game of Ashes of Erebus. When I researched Honor, I didn't get the free Ecclesiastic I was supposed to. Same thing happened when I researched Way of the Earthmother: I didn't receive a Thane of Kilmorph. (I didn't research other religious techs before abandoning the game.) I was playing as the Mazatl, if you think that makes a difference. And if you need my full game settings, I can let you know that as well.

I was able to find the fix for this issue quickly. The Mazatl and Cualli in earlier editions of this mod tree were agnostic if I remember correctly, as the Cualli still are. There is a check in place in CvEventManager.py that calls CustomFunction.py.canReceiveReligionUnit(player). This function is very small (included below) and stops the player from receiving the religious units if Cualli or Mazatl.

Code:
	def canReceiveReligionUnit(self, pPlayer):
		iCiv 		= pPlayer.getCivilizationType()
		Civ			= self.Civilizations
		if   iCiv == Civ["Cualli"]: return False
		elif iCiv == Civ["Mazatl"]: return False
		return True

Long story short - it's not exactly a bug, unless the design has shifted. I'm not on development for this mod - I just find and fix bugs for my own amusement - so I can't make that call. If you want to be able to play Mazatl and get those units, comment out the line checking for Mazatl by placing a '#' in front of elif (line 2480).

Python found in ...\Mods\Ashes of Erebus\Assets\python

Is there a guide to actually installing this anywhere? because I just tried and it has completely and utterly f***** my install of rise to the point it just chokes to death giving me xml errors.

I'm guessing by your wording that you may have tried to install Ashes of Erebus on top of Rise from Erebus. If I remember correctly, Ashes of Erebus is released as a complete standalone package, so you can just drop the folder into your mod directory and run from that launcher. I haven't downloaded again to check, but I think that is correct.
 
Hi, I have been playing recently, and found a bug:

Started a game as Khazad, I am unable to spend advanced start points on technology, the 'add tech' clickable just doesnt appear, leader is Reorx veinhunter.

Is this an emergent leader specific problem, or Khazad specific? How might it be fixed?

Thanks in advance, I appreciate all the work done on one of my favourite mods for Civ!
 
Hi, I have been playing recently, and found a bug:

Started a game as Khazad, I am unable to spend advanced start points on technology, the 'add tech' clickable just doesnt appear, leader is Reorx veinhunter.

Is this an emergent leader specific problem, or Khazad specific? How might it be fixed?

Thanks in advance, I appreciate all the work done on one of my favourite mods for Civ!

I took some time to look into this one, but I haven't been able to replicate the issue. I did discover that the add tech button will not appear until you settle the first city, or if you select a technology that you cannot immediately research (don't have prerequisites). I did see a different issue, in that the add technology button and the technology text appear in the middle of the screen instead of at the bottom, where it would make sense.

I tried with both Rhoanna (control) and as Reorx without issue.
 
Hey,

One bug that I think should be easy to fix. I told the old RIFE team, but clearly it wasnt dealt with:

When playing the ILLIANS and you get AURIC ASCENDED, a godslayer weapon is supposed to spawn int he capital of the Illian's most powerful enemy. Well, it STILL spawns in the Illian capital, making it almost impossible to kill Auric. He's 75 strngth and flies with 12 movement and lots of upgrades. :p

Second one... this is a shrug. I have a fatal CTD, repeatable with the Sheaim. It's a huge map, 15 +2 civs (Hyb and Bas), single player, Erebus continent. I'm not doing anyting, no rituals, no wonders, no major changes, just a normal turn. When I hit enter at the end of the turn it crashes every time before I start my next turn. Something the AI is doing I guess. I have it saved at the turn end. so just hit enter and CTD. If this kind of error is one you guys would like to look at, then I can upload it. But, how do I do that? If you want me to try something, just tell me what and I can.

Thanks guys for working on this, please make it stable for us. I have it all on a flash drive and I've given it to 4 friends who arent among those who DLed the file from the site, we try MP sometimes, but the crashes and OOS make it hard, so your progress on this is appreciated.

I finally decided to take a look into the first issue you mentioned there. It's good that you posted about it, since the bug tracker has that listed as unconfirmed.

The relevant bug is bug 55 and the issue is in cvEventManager.py as noted by Ronkhar et al. The code as is heavily favors the human player, and uses a random base for deciding the recipient of the godslayer:
Code:
if pLoopPlayer.isAlive():
	if not pLoopPlayer.isBarbarian():
		if pLoopPlayer.getTeam() != pPlayer.getTeam():
			if not pLoopPlayer.getStateReligion() == Religion["White Hand"]:
				iValue = randNum(500, "Ascension")
				if pLoopPlayer.isHuman():
					iValue += 2000
				iValue += (20 - getRank(iLoopPlayer)) * 50
				if iValue > iBestValue:
					iBestValue = iValue
					iBestPlayer = iLoopPlayer
This actually makes it possible for the human player to get the godslayer in last place. Without the human bonus, a player in last place in a game with 9
remaining players could get really lucky and get the godslayer. Bug tracking entry indicates "should appear in most powerful civ capital, except Illians team",
so the correct code should likely be:
Code:
[snip]
if not pLoopPlayer.getStateReligion() == Religion["White Hand"]:
	iValue += (20 - getRank(iLoopPlayer)) * 50
	if iValue > iBestValue:
		iBestValue = iValue
		iBestPlayer = iLoopPlayer

The second issue is completely unapproachable without a log, so I can't really help you there. You can probably send a copy of the log or the save file to Ronkhar (as listed in the first post) if you haven't already and hopefully he or one the team can find the chance to take a look at it.


Unrelated, I also found a fix for the issue referenced in bug 290 since I really like playing as duin, but found it odd that he got no werewolves.

The issue is in CvGameUtils.py, Lines 1261 and 1287 for check cannot build Varulv (replacement duin while playing as duin).
Code:
if pPlayer.getLeaderType() != Leader["Duin2"]: return True
...
if pPlayer.getLeaderType() != Leader["Duin"]: return True

Duin is the original duin created at some point prior to AoE or Rife(?), and duin2 is current leaderhead baron duin. duin remains in code (archived?) but is unused.
Comment or delete the Duin entry (with if statement) to get werewolves as the werewolves.

Since both of these are python changes, you can edit your local game to fix these issues.
 
so the correct code should likely be:

Nope. That wasn't it. (I mean that your change could be good, but it doesn't prevent the main problem: If 1st player is human and Auric and ascends, then HE receives the godslayer)

But trying your solution put me on the good track. I disabled, changed duplicated several other lines of code. And now, it's finally repaired (after several months of hair pulling)

Code:
containerUnit = getPlayer(iOrcPlayer).initUnit(Item["Container"], iX, iY, iNoAI, iSouth)
becomes
Code:
containerUnit = getPlayer(iOrcPlayer).initUnit(Item["Container"], pPlot.getX(), pPlot.getY(), iNoAI, iSouth)

aka "When the Easiest Is the Hardest"

And
Code:
if eUnit == Hero["Varulv"]:
			if pPlayer.getLeaderType() != Leader["Duin"]: return True
should indeed be removed

Thanks for your helping posts, including bug 486 ;)

@Beta-testers: version R78 uploaded.
 
Got python exception error and game freeze using last version of AOE playing Mekara order. Bug happened on promoting Slave to Battle Sluga. Next crash after conquering city with Battle Sluga (added using wb)
 

Attachments

  • PythonErr.7z
    2.2 KB · Views: 47
Does multiplayer actually work for anyone? When attempting to create a multiplayer game, i get these annoying errors :
 

Attachments

  • 5.jpg
    5.jpg
    265.5 KB · Views: 93
Certain icons don't appear and some that do are offcenter. I'm missing all the mana icons on the manabar, all resource icons, and a few others.
 

Attachments

  • Civ4ScreenShot0001.JPG
    Civ4ScreenShot0001.JPG
    472.6 KB · Views: 104
  • Civ4ScreenShot0003.JPG
    Civ4ScreenShot0003.JPG
    354.8 KB · Views: 91
Arrrgh, so many bugs! (this means "thanks a lot, guys. I wish RifE hadn't so many problems to solve :)")

I'm in a bit of a hurry right now so quick answer:
1) Does multiplayer actually work for anyone?
I play several LANs a month. 0 to ~5 OOS per game. 0 to 2 crash-to-desktop per game. We managed to finish 90% games by using the autosave from the previous turn and chosing different actions -> changes the random values.

2) When attempting to create a multiplayer game, i get these annoying errors
Never had this. Will add to bug sheet.

3) @Nor'easter:
1st screenshot for republic traits -> OK. Had the same bug
2nd screenshot -> when I look at the line and file your popup tells us about (CvMainInterface.py, line 4710), I only see a blank line.
Code:
	def updateHelpStrings( self ):
                                     <--------------- this line is 4710 for me
		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
Can you open the file in notepad and tell me if you have the same?


@Berenziah:
Idea1: Are you sure you use BTS 3.19? The last steam update broke compatibility with the mod (and others too). Steam users must go to menu to revert to previous version. This thread has a post with someone explaining how to do it.
I should make a tuto
 
@Ronkhar, maybe the line-numbering in my file is different? I've indicated the line numbers in brackets below in the CvMainInterface.py file I have. (The file is in Ashes of Erebus/Assets/Python/Screens.)

Code:
[4702]# Will update the help String
	[4703]def updateHelpStrings( self ):
[4704]
[4705]		screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
[4706]
[4707]		if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_HIDE_ALL ):
[4708]			screen.setHelpTextString( "" )
[4709]		else:
[4710]			screen.setHelpTextString( CyInterface().getHelpString() )
[4711]
[4712]		return 0

I hope I've done this correctly. I opened the file in Notepad and clicked on View Status Bar to get the line numbers.
 
Thanks. That helped me a lot.
Since last version, I've modified the file on my computer, thus changing the line numbering.
Now, I know the bug comes from
screen.setHelpTextString( CyInterface().getHelpString() )
It's a beginning :)
 
2 bugs
1, The hero promotion does not work. Hero units gain xp at about the same rate as arcane units.
2, the werewolves with subdue animal can both capture the animal and infect. This gives 2 units when capturing an animal. 1 that is a animal, 1 that is a werewolve version of that animal.
 
I took the time to look into the bugs you listed.

1.) This appears to actually be a feature. When decimal XP was implemented in an earlier form of the mod, scaling of xp gains according to game speed were also included. I dug through the code to make sure I was right on this. Relevant code is contained below.
Code:
CvUnit.cpp#2168 (commented out previous code)
/* changeExperience(GC.getPromotionInfo((PromotionTypes)iI).getFreeXPPerTurn(), -1, false, false, false);  */
changeExperience(1, -1, false, false, false)

CvUnit.cpp#2195
changeExperience(GC.getPromotionInfo((PromotionTypes)iI).getFreeXPPerTurn() * 100 / GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getGrowthPercent(), -1, false, false, false);

CIV4PromotionInfos.xml
<PromotionInfo>		<!-- Hero -->
	<Type>PROMOTION_HERO</Type>
	<fFreeXPCap>100</fFreeXPCap>
	<iFreeXPPerTurn>1</iFreeXPPerTurn>
	[SNIP]
</PromotionInfo>

getFreeXPPerTurn() { return (int)(m_iFreeXPPerTurn*100); }

CvUnit.cpp#2382
if (getSpellCasterXP() > getExperience()){
		int iXPGain = (int)((10000*(1+getCasterXPRate()))/((GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getGrowthPercent()/50)*(getExperience()+100)));
		changeExperience(std::max(1, iXPGain), -1, false, false, false);
}
Unit XP is represented in the DLL layer with values x100 in order to track the decimal values with int variables. This is why getFreeXPPerTurn returns the value x100. Both hero and arcane gains are scaled, but the scaling is more effective against the hero XP bonus than the other. I did some math against the formulas above and got the following results.
Code:
(PromotionTypes)iI).getFreeXPPerTurn() * 100 / GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getGrowthPercent()
100 * 100 /  (100, 150, 300)    - normal, epic, marathon
100 * 100 / 100
100, 66, 33

(.6, .8. 1)  Channel 1, 2, 3 , cumulative
(int) (10000 * 1 + (.6, 1.4. 2.4) )  /  ( ((100, 150, 300)/ 50) * currXP+100 )
16000 / 200 (all following assuming currXP = 0)
80, 53, 26      .6 and 100, .6 and 150
120, 80, 40      1.4 and 100,  so on
170, 113, 56
With these numbers, playing on marathon would result in your heroes gaining experience at roughly the same or similar rate as your mages, considering the scaling from current XP. A freshly built unit with channeling 3 (like a druid) or even 2 would actually show faster gains for a few XP before tapering off.

So, it's not a bug, it's a feature. :D Sorry I can't bring better news. :/ (That is, unless Ronkhar et al. decide they want to change it.)

2). This is actually a known bug (#223). I've looked into this one in the past with no solution, but I took a glance at it again. This one is kind of nasty in that the problem is due to an information disconnect between the C++ code and the python code.
Code:
CvSpellInterface.py#7282
def postCombatWinWerewolf(pCaster, pOpponent): [not included for brevity]

CvUnit.cpp#27098
			if (GC.getPromotionInfo((PromotionTypes)iI).getCaptureUnitCombat() != NO_UNITCOMBAT)
			{
			   if (iUnit == NO_UNIT && pLoser->getUnitCombatType() == GC.getPromotionInfo((PromotionTypes)iI).getCaptureUnitCombat())
				{
					iUnit = pLoser->getUnitType();
					bConvert = true;
				}
			}
CvUnit.cpp#27111
			if (!CvString(GC.getPromotionInfo((PromotionTypes)iI).getPyPostCombatWon()).empty())
			{
				CyUnit* pyCaster = new CyUnit(this);
				CyUnit* pyOpponent = new CyUnit(pLoser);
				CyArgsList argsList;
				argsList.add(gDLL->getPythonIFace()->makePythonObject(pyCaster));	// pass in unit class
				argsList.add(gDLL->getPythonIFace()->makePythonObject(pyOpponent));	// pass in unit class
				argsList.add(iI);	// Promotion
				gDLL->getPythonIFace()->callFunction(PYSpellModule, "postPromotionCombatWon", argsList.makeFunctionArgs()); //, &lResult
				delete pyCaster; // python fxn must not hold on to this pointer
				delete pyOpponent; // python fxn must not hold on to this pointer
			}
The issue comes from the fact that the convert logic (bConvert = true) is completely disjoint from the python function that creates the new werewolf unit. CvUnit.cpp#27098 will flag the unit for capture, but CvUnit.cpp#27111 will call the python with no coordination of whether the unit has been converted or turned into a werewolf. The postCombatWinWerewolf(...) function would then be called, creating the werewolf unit, followed by the C++ code using the bConvert flag to create a duplicate of the defeated unit.

I did notice the commented out &lResult from the python call near CvUnit.cpp#27111 (gDLL->getPythonIFace()...). I don't know what kind of investment it would be to add a result value pointer for all postPromotionCombatWon calls, but it may be possible to use that to help control the issue. Another solution could be to move the werewolf convert code into the C++ code. With the code in the same function it would be easier to manage convert conditions. Unfortunately, any solutions to this issue will almost definitely require some changes to the C++ code.
 
Hello!
Sorry if this is a noobish question, but I just tried out Ashes of Erebus and I have a major problem. Religion-founding tech can't be researched in my games except Corruption of Spirit, White Hand, Deception and Honor. The techs show up in the research tab but they are red, thus I can't research them, ever. I've tried it out with Bannor, Lanun, Balseraph and a variety of other civilizations. The AI also never founds a religion, except the above four. I tried deleting and redownloading the mod, but it didn't work. I usually play on WorldofErebus with broader alignments, all unique features, living world and wild mana.
EDIT: Nevermind, it randomly started working. The techs are again researchable for some reason.
 
Hello!
Sorry if this is a noobish question, but I just tried out Ashes of Erebus and I have a major problem. Religion-founding tech can't be researched in my games except Corruption of Spirit, White Hand, Deception and Honor. The techs show up in the research tab but they are red, thus I can't research them, ever. I've tried it out with Bannor, Lanun, Balseraph and a variety of other civilizations. The AI also never founds a religion, except the above four. I tried deleting and redownloading the mod, but it didn't work. I usually play on WorldofErebus with broader alignments, all unique features, living world and wild mana.
EDIT: Nevermind, it randomly started working. The techs are again researchable for some reason.

For future reference, you probably had the "disable religion" option enabled without being aware of it. Whenever you try a new mod, or switch from one to another, start a "play now!" game. You don't have to play it, just get to turn 1 of the game, then you can quit to the main menu. This will clear all the options to their default setting.

Ah, posting that spiel makes me feel so nostalgic...
 
Top Bottom