Rise of Darkness

nvm ...... >->
 
Getting pretty long waits between turns now...

I tend to play huge maps, with 11 civs including mine.

I do experience some slow down playing FF...usually somewhere around turn 700 or so in a marathon game. It's not too bad, but it does get noticeably slower.

Ffh runs pretty well. There is some slow down, but it hardly seems like it's there.

This is *really* slow though. I'm at turn 250 (marathon) and I'm waiting over a minute (I just timed one - 62 seconds) between turns. I've never actually timed FF when it starts to crawl, but I don't think the wait was that long.

Not sure what kind of checks and code you are running between turns, but it's slowing things down tremendously.

I guess this isn't positive feedback, but wanted to let you know.
Time to do some streamlining! :p

I probably will have to get to some streamlining. I think that a large part of it is caused by the can build callback that is running from Turin's AI mod.

4 in 150 turns may be a bit too powerful for the grigori. On the other hand, if it gets them at a somewhat constant rate (aka, always get 4 every 150 turns, not 4 first 150 turns, 2 next 150 turns, and whatnot) it might encourage people to go out and loose them more, and it won't be as much of a setback. Or on the other hand the player has the option to hold them all till the end of the game and end up with a large number of very powerful hero's, but loose their early game potential.

That being said, its still better than 15 in the first 150 turns (I think thats what I ended up getting). As for the special place guardians, well, i started off next to the pyre of the seraphic, stepped on it, and it spawned the guardian. It attacked (my city was right next door), took out my archer, and promptly got owned by one of my heroic warriors. Now, having an unbeatable guardian is bad, but having one that can be killed that easily is a bit... sad. Maybe up their power just a touch?

Other than these minor issues though, is a nice little mod. I'll definitely be following it more in the future.

-Colin

The Grigori are getting tune down a little I put their spawn rate at 1/3 of what it is now in the next patch so we'll have to see how it goes.

The Guardian you killed, The Eye of Bhall shouldn't have died so easliy. In truth it is supposed to spawn Azers to help defend itself and pillage the countryside. I'll have to see if I can get it to create them more consistatly.
 
The Grigori are getting tune down a little I put their spawn rate at 1/3 of what it is now in the next patch so we'll have to see how it goes.

The Guardian you killed, The Eye of Bhall shouldn't have died so easliy. In truth it is supposed to spawn Azers to help defend itself and pillage the countryside. I'll have to see if I can get it to create them more consistatly.

Well, it did die so easily because the pyre was right next to my capital - which had about a half dozen heroic warriors in it at the time. I stepped one warrior onto the tile and it spawned the eye of bhaal. The eye attacked, killing the defending archer. I then finished it off with a warrior with combat 5, heroic attack 2 (and I think bronze weapons from a dungeon). Probably the better way to prevent it from dying so easily is to make it not attack itself - I probably would have just sat out spawning azer's until I got axmen or bronze or something. The other problem is that the pyre started out on desert - I'm not sure if the azer gets defensive bonuses or not, but that certantly didn't help it.

-Colin
 
I probably will have to get to some streamlining. I think that a large part of it is caused by the can build callback that is running from Turin's AI mod.

Yeah the canbuild function seems to get called extremely often in the lategame. I put a print command in one of the functions to test something and after 300 turns the log file was pushing 100 MB. I may have to look for a different way to get the AI to build sensible improvements. Curiously the slowdown only seems to get really bad after 250+ turns.
 
I didn't really want to disable it but the function was called every time a unit was selected and didn't provide that much of a benefit.


Anyways I tracked down an issue that was causing a weird crash for me so Patch D should be up tonight or tomorrow.
 
I have crash when first shapeshifter comes to play, is that normal and how fix this? Its over 300 turns played and znok!! I can put save and some of scerrens becouse sometime the strange long names of items or units appear like UNIT_TXT_***** is that normal or i done something wrong?
 
Ah, yes I think I know what happened. It may have something to do with the great person mod. If you run out of the list of names for great people it would display a TXT_KEY and pink dot.

I just didn't think it would cause a crash. I'll add in a bunch of filler great people to prevent that from happening anymore though.
 
Thats it a pink dot, i prevents me frm playing further, but if i start playing with another civ this problem stays or not?
 
I doubt that it was the pink dot that caused that and it will only happen for shapeshifters (The Cult of Nikito). Your issue probably was due to one of the bugs fixed by the upcoming patch but the other civs have less detail so less things could go wrong.
 
Yeah the canbuild function seems to get called extremely often in the lategame. I put a print command in one of the functions to test something and after 300 turns the log file was pushing 100 MB. I may have to look for a different way to get the AI to build sensible improvements. Curiously the slowdown only seems to get really bad after 250+ turns.

In FF the canBuild Callback is enabled by default and it doesn't cause any performance problems. At worst, a worker needs about 20ms on a huge map (ofcourse the actual ms depend on your cpu but since my comp isn't the fastest it should be a good average). That means 100 AI workers equal 2seconds waiting time. After all you can just disable the python callback to measure how much time it uses but I doubt it is even 1second per turn.
 
RoD.22 Patch D (Breaks savegames):
  1. Push spell can now be casted
  2. Grigori Adventurers spawn at one-third current speed
  3. Diplomacy for all leaders
  4. Constellation Events can't occur for dead players
  5. The Guardian can't be replicated
  6. Arkitan now maintain Forests after building improvements
  7. Shapeshifters created with Great People points now get a popup
  8. The Items held by the four horsemen give hidden nat. to prevent them from entering foreing cities and causing a CtD under the control of the Infernals
  9. The White Hand creates the Auric unit who can gain promotions and becomes Auric Ascended when the Ascension ritual is completed. His death does not stop the ritual but he will not keep his promotions if he dies


_______________________________________

In FF the canBuild Callback is enabled by default and it doesn't cause any performance problems. At worst, a worker needs about 20ms on a huge map (ofcourse the actual ms depend on your cpu but since my comp isn't the fastest it should be a good average). That means 100 AI workers equal 2seconds waiting time. After all you can just disable the python callback to measure how much time it uses but I doubt it is even 1second per turn.


I think the problem is not that it checks for units that are worker but just every single unit by my understanding. Of course I will have to move all functions from the unitCannotMoveInto which certainly is called for every unit into the DLL.
 
Hello, did you make any changes to the dll? Im guessing no because the file seemed to be able to load quickly, but Im just curious because I have heard that changing the dll makes the file massive, although the quick installation times speaks for otherwise.

If there is simply a more streamlined way to insert dll changes into a download, or if Im simply misinformed, please do tell :)
 
I think the problem is not that it checks for units that are worker but just every single unit by my understanding. Of course I will have to move all functions from the unitCannotMoveInto which certainly is called for every unit into the DLL.
As far as I know canbuild is only used by AI_workermove AI_workerseamove and there sub functions and not by any other units
 
I think there is a model for Odio currently, and either that or something grey or black based upon the Repentant Angel model would work.

( Is the Ira strength mechanic not overpowered? Just saying >_> )


Found a bug where units casting escape spell makes the game crash to desktop.

I was playing the Inmici. What is the point of the Inmici by the way? I am seeing that they have EXCELLENT archers that are completely for the defense, while they have some of the best Knights, and all their melee units are aimed at slowing the enemy down (nets) and all of their units are good for capturing slaves. Is their anything special that they do with slaves? or Did ye merely want a race that focused primarily on the Slave/ colliseaum aspects of the Roman empire? Perhaps you wanted them able to make buildings quickly by rushing the slaves they get from combat.

If you could explain this civ (as you have the other new ones in the first post) I would appreciate it, as well as better explaining certain civs in the Civilopedia

and perhaps giving the Inmici some city names :D
 
I have no interface after inastaling patch D and i can't turn it on by any known means to me, is ther some way to turn it? I have no minimap, no possible command for unit visible, no info on selected unit even city screen, help!!!

edit:
and i can't toggle "options" when presing "esc" or form main menu.
 
at first clean latest patched ff2, overwrited with .22 and .22D

Got bunch of errors already during loading and later interface is not working.
 
Hello, did you make any changes to the dll? Im guessing no because the file seemed to be able to load quickly, but Im just curious because I have heard that changing the dll makes the file massive, although the quick installation times speaks for otherwise.

If there is simply a more streamlined way to insert dll changes into a download, or if Im simply misinformed, please do tell :)

Yes I did add some changes to the DLL. They don't really take up that much space and greatly improve time over costly python functions.

As far as I know canbuild is only used by AI_workermove AI_workerseamove and there sub functions and not by any other units

Well if it's that then I guess it really isn't called that often.

I think there is a model for Odio currently, and either that or something grey or black based upon the Repentant Angel model would work.

( Is the Ira strength mechanic not overpowered? Just saying >_> )


Found a bug where units casting escape spell makes the game crash to desktop.

I was playing the Inmici. What is the point of the Inmici by the way? I am seeing that they have EXCELLENT archers that are completely for the defense, while they have some of the best Knights, and all their melee units are aimed at slowing the enemy down (nets) and all of their units are good for capturing slaves. Is their anything special that they do with slaves? or Did ye merely want a race that focused primarily on the Slave/ colliseaum aspects of the Roman empire? Perhaps you wanted them able to make buildings quickly by rushing the slaves they get from combat.

If you could explain this civ (as you have the other new ones in the first post) I would appreciate it, as well as better explaining certain civs in the Civilopedia

and perhaps giving the Inmici some city names :D

Yes that was the main point of the Inimici. They were a sort of civ focused upon the "negative" aspects of the Romans. The slavery is a way for them to either produce massive gold while not taking a loss to research (selling them at slave markets) or to increase production (having them work buildings). It was meant to be a civ that could sustain itself mostly by an unending war.

I may use that Odio model, the main problem is to find it.

By the way, I think that you are running Rise of Darkness without any patch. It currently is on Patch D which cures many of the problems you were talking about as well as a lot of slowdown and several CtDs.

I have no interface after inastaling patch D and i can't turn it on by any known means to me, is ther some way to turn it? I have no minimap, no possible command for unit visible, no info on selected unit even city screen, help!!!

edit:
and i can't toggle "options" when presing "esc" or form main menu.

at first clean latest patched ff2, overwrited with .22 and .22D

Got bunch of errors already during loading and later interface is not working.

Sorry, I didn't know I was including that file. The interface relies heavily on python so when a file isn't loaded it could cause the interface to go away. Anyways I made a Quickfix and linked it to the third post.
 
In FF the canBuild Callback is enabled by default and it doesn't cause any performance problems. At worst, a worker needs about 20ms on a huge map (ofcourse the actual ms depend on your cpu but since my comp isn't the fastest it should be a good average). That means 100 AI workers equal 2seconds waiting time. After all you can just disable the python callback to measure how much time it uses but I doubt it is even 1second per turn.

I don't know why, but it really gets called extremely often. I just tested the following code in a 2 player AI autoplay duel game for 1 turn:

Code:
		if pPlayer.isHuman() == False:
			print ("canbuild call")
			if eTeam.isHasTech(gc.getInfoTypeForString('TECH_CONSTRUCTION')) == True :
				if pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_GOVERNMENT')) == gc.getInfoTypeForString('CIVIC_ARISTOCRACY') or pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_GOVERNMENT')) == gc.getInfoTypeForString('CIVIC_THEOCRACY') or pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_LABOR')) == gc.getInfoTypeForString('CIVIC_GUILDS') or pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_CULTURAL_VALUES')) == gc.getInfoTypeForString('CIVIC_SCHOLARSHIP'):
					if iBuild == gc.getInfoTypeForString('BUILD_COTTAGE'):
						return 0
			if iBuild == gc.getInfoTypeForString('BUILD_FORT'):
				return 0
			if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR') or pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR'):
				if iBuild == gc.getInfoTypeForString('BUILD_LUMBERMILL'):
					return 0
			if not pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_FALLOW')) :
				if iBuild == gc.getInfoTypeForString('BUILD_WORKSHOP'):
					return 0
			if gc.getBuildInfo(iBuild).getType()[0:11] == 'BUILD_MANA_':
				if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_ELEMENTALISM')):
					# These civs always need a fire node
					if pPlayer.getCivilizationType() in (gc.getInfoTypeForString('CIVILIZATION_LUCHUIRP'), gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'), gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR')):
						if not pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_FIRE')):
							if iBuild != gc.getInfoTypeForString('BUILD_MANA_FIRE'):
								return 0

				if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_NECROMANCY')):
					#These civs should spectrespam and build the necrotower
					if pPlayer.getCivilizationType() in (gc.getInfoTypeForString('CIVILIZATION_SHEAIM'), gc.getInfoTypeForString('CIVILIZATION_CALABIM')):
						if iBuild not in (gc.getInfoTypeForString('BUILD_MANA_DEATH'),gc.getInfoTypeForString('BUILD_MANA_CHAOS'),gc.getInfoTypeForString('BUILD_MANA_ENTROPY'),gc.getInfoTypeForString('BUILD_MANA_SHADOW'),gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT')):
							return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_CHAOS')):
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_CHAOS'):
								return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_SHADOW')) or pPlayer.hasHolyCity(gc.getInfoTypeForString('RELIGION_COUNCIL_OF_ESUS')):
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_SHADOW'):
								return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_ENTROPY')) or pPlayer.hasHolyCity(gc.getInfoTypeForString('RELIGION_THE_ASHEN_VEIL')) :
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_ENTROPY'):
								return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_ENCHANTMENT')):
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT'):
								return 0
				#one enchantment node for everyone
				if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_ALTERATION')):
					if not pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_ENCHANTMENT')):
						if iBuild != gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT'):
							return 0
					elif iBuild == gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT'):
						return 0
				#and a body node
					if not pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_BODY')):
						if iBuild != gc.getInfoTypeForString('BUILD_MANA_BODY'):
							return 0
					elif iBuild == gc.getInfoTypeForString('BUILD_MANA_BODY'):
						return 0

and the log file shows 995 instances of canbuild call, with just the 3 starting units + barabarians and no workers at all. So putting more than a few if statements into it gets expensive really fast.

For a turn 400 large pangaea save "canbuild call" gets written 75000 times after a single turn, so it's extremely expensive lategame.
 

Bah, I hate Auric sooo much. I'll update the quickfix to fix that one.

I don't know why, but it really gets called extremely often. I just tested the following code in a 2 player AI autoplay duel game for 1 turn:

Code:
		if pPlayer.isHuman() == False:
			print ("canbuild call")
			if eTeam.isHasTech(gc.getInfoTypeForString('TECH_CONSTRUCTION')) == True :
				if pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_GOVERNMENT')) == gc.getInfoTypeForString('CIVIC_ARISTOCRACY') or pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_GOVERNMENT')) == gc.getInfoTypeForString('CIVIC_THEOCRACY') or pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_LABOR')) == gc.getInfoTypeForString('CIVIC_GUILDS') or pPlayer.getCivics(gc.getInfoTypeForString('CIVICOPTION_CULTURAL_VALUES')) == gc.getInfoTypeForString('CIVIC_SCHOLARSHIP'):
					if iBuild == gc.getInfoTypeForString('BUILD_COTTAGE'):
						return 0
			if iBuild == gc.getInfoTypeForString('BUILD_FORT'):
				return 0
			if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR') or pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR'):
				if iBuild == gc.getInfoTypeForString('BUILD_LUMBERMILL'):
					return 0
			if not pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_FALLOW')) :
				if iBuild == gc.getInfoTypeForString('BUILD_WORKSHOP'):
					return 0
			if gc.getBuildInfo(iBuild).getType()[0:11] == 'BUILD_MANA_':
				if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_ELEMENTALISM')):
					# These civs always need a fire node
					if pPlayer.getCivilizationType() in (gc.getInfoTypeForString('CIVILIZATION_LUCHUIRP'), gc.getInfoTypeForString('CIVILIZATION_LJOSALFAR'), gc.getInfoTypeForString('CIVILIZATION_SVARTALFAR')):
						if not pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_FIRE')):
							if iBuild != gc.getInfoTypeForString('BUILD_MANA_FIRE'):
								return 0

				if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_NECROMANCY')):
					#These civs should spectrespam and build the necrotower
					if pPlayer.getCivilizationType() in (gc.getInfoTypeForString('CIVILIZATION_SHEAIM'), gc.getInfoTypeForString('CIVILIZATION_CALABIM')):
						if iBuild not in (gc.getInfoTypeForString('BUILD_MANA_DEATH'),gc.getInfoTypeForString('BUILD_MANA_CHAOS'),gc.getInfoTypeForString('BUILD_MANA_ENTROPY'),gc.getInfoTypeForString('BUILD_MANA_SHADOW'),gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT')):
							return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_CHAOS')):
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_CHAOS'):
								return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_SHADOW')) or pPlayer.hasHolyCity(gc.getInfoTypeForString('RELIGION_COUNCIL_OF_ESUS')):
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_SHADOW'):
								return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_ENTROPY')) or pPlayer.hasHolyCity(gc.getInfoTypeForString('RELIGION_THE_ASHEN_VEIL')) :
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_ENTROPY'):
								return 0
						if pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_ENCHANTMENT')):
							if iBuild == gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT'):
								return 0
				#one enchantment node for everyone
				if pPlayer.isHasTech(gc.getInfoTypeForString('TECH_ALTERATION')):
					if not pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_ENCHANTMENT')):
						if iBuild != gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT'):
							return 0
					elif iBuild == gc.getInfoTypeForString('BUILD_MANA_ENCHANTMENT'):
						return 0
				#and a body node
					if not pPlayer.hasBonus(gc.getInfoTypeForString('BONUS_MANA_BODY')):
						if iBuild != gc.getInfoTypeForString('BUILD_MANA_BODY'):
							return 0
					elif iBuild == gc.getInfoTypeForString('BUILD_MANA_BODY'):
						return 0

and the log file shows 995 instances of canbuild call, with just the 3 starting units + barabarians and no workers at all. So putting more than a few if statements into it gets expensive really fast.

For a turn 400 large pangaea save "canbuild call" gets written 75000 times after a single turn, so it's extremely expensive lategame.

Wow, that is a lot of calls. I shudder to see how many times the Unitcannotmove is called.
 
Back
Top Bottom