Merging BUG 4.0 with FfH2

...

4. Tweaking from Original BUG
  • Banner dot becomes star with joining Great Commander instead of Great General.
  • Adding "Priests" row in Religion Advisor screen.
  • Great Person Tech in Tech Advisor screen works correctly. This function was rewritten and became same as DLL method.
  • Some Sevopedia pages are improved to match with FfH2 features.

That's awesome. I love the bug interface and your 'tweaks' are great.
I hope they will find there way to ff and all the other great mods anytime soon...
 
very very great. :goodjob:

One thing I noticed is that the Sevopedia has a category traits. Does it work for you? (I got an error because trait description doesn't exist) and even Ignoring this shows only weird information (link a hint that assembly line is a good tech for organized trait).
 
One thing I noticed is that the Sevopedia has a category traits. Does it work for you?

Yeah, unmodded Civilipedia doesn't have category traits.
This means that unmodded CvGameCoreDLL.dll has no python API which is required for displaying category traits.

BUG Mod uses very tricky method for category traits, because BUG doesn't touch CvGameCoreDLL.dll at all.
I have modded category traits for matching with FfH2 features following BUG method, but it is tricky too.

Now I have breached BUG mantra which says CvGameCoreDLL.dll is not modded.
Next version which is not released yet can treat TraitInfos as same as many other item infos.
 
Denev, if you're feeling adventurous you could try merging BULL (BUg dLL) with the FFH DLL. I don't know how much FFH changes their DLL at this point, but you'll be able to do a complete and total merger of BUG / FFH this way.
 
Denev, if you're feeling adventurous you could try merging BULL (BUg dLL) with the FFH DLL. I don't know how much FFH changes their DLL at this point, but you'll be able to do a complete and total merger of BUG / FFH this way.

Thanks for your advice.
Merging with BULL is one of my goal. But it is a little bit hard work for me;).

I'm working on improving sevopedia (and civilopedia) now.
After it is finished and Kael releases FfH2 041 patch "h", I will plan merging BULL afresh.
 
one little thing I noticed while merging. In void CvGameTextMgr::setBasicUnitHelp(CvWStringBuffer &szBuffer, UnitTypes eUnit, bool bCivilopediaText)

a check for !=NO_PROMOTION should be added.

Code:
				//race requirement
				const PromotionTypes ePromotionPrereq1 = (PromotionTypes)GC.getSpellInfo((SpellTypes)iJ).getPromotionPrereq1();
				const PromotionTypes ePromotionPrereq2 = (PromotionTypes)GC.getSpellInfo((SpellTypes)iJ).getPromotionPrereq2();
				PromotionTypes eRacePrereq = NO_PROMOTION;
				eRacePrereq = GC.getPromotionInfo(ePromotionPrereq2).isRace() ? ePromotionPrereq1 : eRacePrereq;
				eRacePrereq = GC.getPromotionInfo(ePromotionPrereq1).isRace() ? ePromotionPrereq1 : eRacePrereq;
				if (eRacePrereq != NO_PROMOTION)
				{
					if (!GC.getUnitInfo(eUnit).getFreePromotions(eRacePrereq))
					{
						continue;
					}
				}

to something like that
Code:
				const PromotionTypes ePromotionPrereq1 = (PromotionTypes)GC.getSpellInfo((SpellTypes)iJ).getPromotionPrereq1();
				const PromotionTypes ePromotionPrereq2 = (PromotionTypes)GC.getSpellInfo((SpellTypes)iJ).getPromotionPrereq2();
				PromotionTypes eRacePrereq = NO_PROMOTION;
				if (ePromotionPrereq2!=NO_PROMOTION)
				{
					eRacePrereq = GC.getPromotionInfo(ePromotionPrereq2).isRace() ? ePromotionPrereq2 : eRacePrereq;
				}
				if (ePromotionPrereq1!=NO_PROMOTION)
				{
					eRacePrereq = GC.getPromotionInfo(ePromotionPrereq1).isRace() ? ePromotionPrereq1 : eRacePrereq;
				}
 
Anyway, I really like what you have done so far. The interface looks a lot improved now :goodjob:
 
one little thing I noticed while merging. In void CvGameTextMgr::setBasicUnitHelp(CvWStringBuffer &szBuffer, UnitTypes eUnit, bool bCivilopediaText)

a check for !=NO_PROMOTION should be added.

Great catch!:D I might never have been able to notice this.
I will fix it next version.

Thanks for reporting!
 
In the code sephi quoted:

eRacePrereq = GC.getPromotionInfo(ePromotionPrereq2).isRace() ? ePromotionPrereq1 : eRacePrereq;
eRacePrereq = GC.getPromotionInfo(ePromotionPrereq1).isRace() ? ePromotionPrereq1 : eRacePrereq;

Note that both lines use Prereq1 to fill in eRacePrereq
 
Note that both lines use Prereq1 to fill in eRacePrereq

Yeah, I have committed double silly mistakes. Now, these code has been fixed as below. :
Spoiler :
Code:
		//race requirement
		const PromotionTypes ePromotionPrereq1 = (PromotionTypes)GC.getSpellInfo((SpellTypes)iSpell).getPromotionPrereq1();
		const PromotionTypes ePromotionPrereq2 = (PromotionTypes)GC.getSpellInfo((SpellTypes)iSpell).getPromotionPrereq2();
		PromotionTypes eRacePrereq = NO_PROMOTION;
		if (ePromotionPrereq1 != NO_PROMOTION && GC.getPromotionInfo(ePromotionPrereq1).isRace())
		{
			eRacePrereq = ePromotionPrereq1;
		}
		else if (ePromotionPrereq2 != NO_PROMOTION && GC.getPromotionInfo(ePromotionPrereq2).isRace())
		{
			eRacePrereq = ePromotionPrereq2;
		}
I'm glad if you notice anything and advise me in the future.
 
Top Bottom