[MOD} Several BGEE/SOD BG2EE/TOB Leveling Progress Bar tweaks
I love playing multi-class characters, but I'm old and lazy. While I appreciate the progress bar label telling me how much class XP is needed to level up, I hate having to do the mental multiplication to determine the total XP I need to earn. So I created an alternative to the getNextLevelString function named getAdjustedNextLevelString that does the arithmetic for me.
Also, while I like the idea of the quick 'How far I've progressed to the next level' visual that the progress bar provides; I'm not fond of the fact that it is displaying an absolute (ratio of total current XP to total required XP) rather than a level relative (ratio of XP earned since last level up to additional XP needed to reach next level) value. So, I created a Lua function, getNextLevelXPDeltas, that returns the deltas needed to feed the existing getPercent function.
I've hidden all of the previous stuff behind a spoiler tag. It's concerned with doing manual editing - interesting perhaps from a historical point of view but no longer relevant
I'm going to start with how to do the tweaks - then I'll finish with a few comments on the implementation and limitations of the getNextLevelXPDeltas function.
First, copy and paste the following code into your preferred text editor and save it as a file named LvlPgBar.lua in the {installation-directory}/00806/override directory.
function getAdjustedNextLevelString() local multiplier = 1 if (characters[currentID].race ~= 1096) then -- Not human if (characters[currentID].classlevel.third) then multiplier = 3 elseif (characters[currentID].classlevel.second) then multiplier = 2 end end local nextLevelXp = (characters[currentID].level.nextLvlXp - characters[currentID].level.xp) * multiplier local str = "" if(nextLevelXp > 0) then str = t("NEXT_LEVEL_LABEL") str = str .. " " str = str .. nextLevelXp str = str .. " " str = str .. t("XP_LABEL") else str = t("READY_TO_LEVEL_LABEL") end return str end -- Extracted from clastext.2DA local MixIdtoClassIdMap = { -- MixedId ClassId Class/kit name [502] = 1, --ABJURER [504] = 1, --CONJURER [1076] = 2, --FIGHTER [1077] = 12, --RANGER [1078] = 6, --PALADIN [1079] = 3, --CLERIC [1080] = 11, --DRUID [1081] = 1, --MAGE [1082] = 4, --THIEF [1083] = 5, --BARD [2012] = 1, --DIVINER [2022] = 1, --ENCHANTER [10369] = 12, --FALLEN_RANGER [10371] = 6, --FALLEN_PALADIN [12785] = 1, --ILLUSIONIST [12786] = 1, --INVOKER [12787] = 1, --NECROMANCER [12788] = 1, --TRANSMUTER [24205] = 3, --FALLEN_CLERIC [24206] = 3, --FALLEN_GODLATHANDER [24208] = 6, --FALLEN_CAVALIER [24210] = 6, --FALLEN_INQUISITOR [24212] = 6, --FALLEN_UNDEAD_HUNTER [24214] = 12, --FALLEN_FERALAN [24216] = 12, --FALLEN_STALKER [24218] = 12, --FALLEN_BEAST_MASTER [24227] = 19, --SORCERER [24228] = 20, --MONK [24229] = 2, --BARBARIAN [24261] = 2, --BERSERKER [24262] = 2, --WIZARD_SLAYER [24263] = 2, --KENSAI [24264] = 6, --CAVALIER [24265] = 6, --INQUISITOR [24266] = 6, --UNDEAD_HUNTER [24267] = 12, --FERALAN [24268] = 12, --STALKER [24269] = 12, --BEAST_MASTER [24270] = 4, --ASSASSIN [24271] = 4, --BOUNTY_HUNTER [24272] = 4, --SWASHBUCKLER [24273] = 5, --BLADE [24274] = 5, --JESTER [24275] = 5, --SKALD [24276] = 3, --GODTALOS [24277] = 3, --GODHELM [24278] = 3, --GODLATHANDER [24279] = 11, --TOTEMIC_DRUID [24280] = 11, --SHAPESHIFTER [24281] = 11, --AVENGER [24282] = 1, --WILD_MAGE [28605] = 6, --BLACKGUARD [31971] = 4, --SHADOWDANCER [31974] = 2, --DWARVEN_DEFENDER [31977] = 19, --DRAGON_DISCIPLE [31980] = 20, --DARK_MOON [31983] = 20, --SUN_SOUL [32307] = 6, --FALLEN_BLACKGUARD [32342] = 21, --SHAMAN [32345] = 3 --OHTYR } -- Extracted from xplist.2DA local ClassIdToXPLevelMap = { -- Class ID Level ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?0 --[[MAGE]] [1] ={ 0, 2500, 5000, 10000, 20000, 40000, 60000, 90000, 135000, 250000, 375000, 750000, 1125000, 1500000, 1875000, 2250000, 2625000, 3000000, 3375000, 3750000, 4125000, 4500000, 4875000, 5250000, 5625000, 6000000, 6375000, 6750000, 7125000, 7500000, 7875000, 8250000, 8625000, 9000000, 9375000, 9750000,10125000,10500000,10875000,11250000, 13000000}, --[[FIGHTER]] [2] ={ 0, 2000, 4000, 8000, 16000, 32000, 64000, 125000, 250000, 500000, 750000, 1000000, 1250000, 1500000, 1750000, 2000000, 2250000, 2500000, 2750000, 3000000, 3250000, 3500000, 3750000, 4000000, 4250000, 4500000, 4750000, 5000000, 5250000, 5500000, 5750000, 6000000, 6250000, 6500000, 6750000, 7000000, 7250000, 7500000, 7750000, 8000000, 8250000}, --[[CLERIC]] [3] ={ 0, 1500, 3000, 6000, 13000, 27500, 55000, 110000, 225000, 450000, 675000, 900000, 125000, 1350000, 1575000, 1800000, 2025000, 2250000, 2475000, 2700000, 2925000, 3150000, 3375000, 3600000, 3825000, 4050000, 4275000, 4500000, 4725000, 4950000, 5175000, 5400000, 5625000, 5850000, 6075000, 6300000, 6525000, 6750000, 6975000, 8000000, 9000000}, --[[THIEF]] [4] ={ 0, 1250, 2500, 5000, 10000, 20000, 40000, 70000, 110000, 160000, 220000, 440000, 660000, 880000, 1100000, 1320000, 1540000, 1760000, 1980000, 2200000, 2420000, 2640000, 2860000, 3080000, 3300000, 3520000, 3740000, 3960000, 4180000, 4400000, 4620000, 4840000, 5060000, 5280000, 5500000, 5720000, 5940000, 6160000, 6380000, 8000000, 9000000}, --[[BARD]] [5] ={ 0, 1250, 2500, 5000, 10000, 20000, 40000, 70000, 110000, 160000, 220000, 440000, 660000, 880000, 1100000, 1320000, 1540000, 1760000, 1980000, 2200000, 2420000, 2640000, 2860000, 3080000, 3300000, 3520000, 3740000, 3960000, 4180000, 4400000, 4620000, 4840000, 5060000, 5280000, 5500000, 5720000, 5940000, 6160000, 6380000, 8000000, 9000000}, --[[PALADIN]] [6] ={ 0, 2250, 4500, 9000, 18000, 36000, 75000, 150000, 300000, 600000, 900000, 1200000, 1500000, 1800000, 2100000, 2400000, 2700000, 3000000, 3300000, 3600000, 3900000, 4200000, 4500000, 4800000, 5100000, 5400000, 5700000, 6000000, 6300000, 6600000, 6900000, 7200000, 7500000, 7800000, 8100000, 8400000, 8700000, 9000000, 9300000, 9600000, 9900000}, --[[DRUID]] [11]={ 0, 2000, 4000, 7500, 12500, 20000, 35000, 60000, 90000, 125000, 200000, 300000, 750000, 1500000, 3000000, 3150000, 3300000, 3450000, 3600000, 3750000, 3900000, 4150000, 4400000, 4700000, 5000000, 5500000, 6000000, 6500000, 7000000, 7500000, 8000000, 8500000, 9000000, 9500000,10000000,10500000,11000000,11500000,12000000,12500000, 13000000}, --[[RANGER]] [12]={ 0, 2250, 4500, 9000, 18000, 36000, 75000, 150000, 300000, 600000, 900000, 1200000, 1500000, 1800000, 2100000, 2400000, 2700000, 3000000, 3300000, 3600000, 3900000, 4200000, 4500000, 4800000, 5100000, 5400000, 5700000, 6000000, 6300000, 6600000, 6900000, 7200000, 7500000, 7800000, 8100000, 8400000, 8700000, 9000000, 9300000, 9600000, 9900000}, --[[SORCERER]][19]={ 0, 2500, 5000, 10000, 20000, 40000, 60000, 90000, 135000, 250000, 375000, 750000, 1125000, 1500000, 1875000, 2250000, 2625000, 3000000, 3375000, 3750000, 4125000, 4500000, 4875000, 5250000, 5625000, 6000000, 6375000, 6750000, 7125000, 7500000, 7875000, 8250000, 8625000, 9000000, 9375000, 9750000,10125000,10500000,10875000,11250000, 13000000}, --[[MONK]] [20]={ 0, 1500, 3000, 6000, 13000, 27500, 55000, 110000, 225000, 450000, 675000, 900000, 1125000, 1350000, 1575000, 1800000, 2025000, 2250000, 2475000, 2700000, 2925000, 3150000, 3375000, 3600000, 3825000, 4050000, 4275000, 4500000, 4725000, 4950000, 5175000, 5400000, 5625000, 5850000, 6075000, 6300000, 6525000, 6750000, 6975000, 8000000, 9000000}, --[[SHAMAN]] [21]={ 0, 2500, 5000, 10000, 20000, 40000, 60000, 90000, 135000, 250000, 375000, 750000, 1125000, 1500000, 1875000, 2250000, 2625000, 3000000, 3375000, 3750000, 4125000, 4500000, 4875000, 5250000, 5625000, 6000000, 6375000, 6750000, 7125000, 7500000, 7875000, 8250000, 8625000, 9000000, 9375000, 9750000,10125000,10500000,10875000,11250000, 13000000} } local u8asciiMatchString = "^([^:]-)%s*:%D+(%d+)" local u3colonMatchString = "^(..-)[\239][\188][\154]%D-(%d+)" local nbspaceMatchString = "^([^:]-)[\194][\160]:%D+(%d+)" local LanguageMatch = { ['zh_CN'] = u3colonMatchString, ['cs_CZ'] = u8asciiMatchString, ['en_US'] = u8asciiMatchString, ['fr_FR'] = nbspaceMatchString, ['de_DE'] = u8asciiMatchString, ['it_IT'] = u8asciiMatchString, ['ja_JP'] = u3colonMatchString, ['ko_KR'] = u8asciiMatchString, ['nb_NO'] = u8asciiMatchString, ['pl_PL'] = u8asciiMatchString, ['pt_BR'] = u8asciiMatchString, ['ru_RU'] = u8asciiMatchString, ['es_ES'] = u8asciiMatchString, ['tr_TR'] = u8asciiMatchString, ['uk_UA'] = u8asciiMatchString, ['hu_HU'] = u8asciiMatchString } local KitStringToXPMap = {} local function KitStringToXPMapInit() for k,v in pairs(MixIdtoClassIdMap) do KitStringToXPMap[Infinity_FetchString(k)] = ClassIdToXPLevelMap[v] end KitStringToXPMap['Matchstring'] = LanguageMatch[Infinity_GetINIString('Language','Text')] KitStringToXPMap['Initialized'] = true end local function getCurrentLevelXP(targetDetails) local targetKit local targetLevel local currentlevelxp = 0 targetKit,targetLevel = string.match(targetDetails, KitStringToXPMap['Matchstring']) if ( -- Fail safe for kit strings that haven't yet been put into language files targetKit and targetLevel and #targetKit > 0 and not string.match(targetKit, "placeholder") ) then currentlevelxp = KitStringToXPMap[targetKit][tonumber(targetLevel)] end return currentlevelxp end function getNextLevelXPDeltas() if (not KitStringToXPMap['Initialized']) then KitStringToXPMapInit() end -- Fail safe. Can't determine language so fail by returning non-delta values if (not KitStringToXPMap['Matchstring']) then return characters[currentID].level.xp, characters[currentID].level.nextLvlXp end local candidates = {} -- Array of current level base XP for each class that will next level up if ( characters[currentID].classlevel.third and characters[currentID].classlevel.third.active and characters[currentID].classlevel.third.nextLvlXp == characters[currentID].level.nextLvlXp ) then candidates[#candidates+1] = getCurrentLevelXP(characters[currentID].classlevel.third.details) end if ( characters[currentID].classlevel.second and characters[currentID].classlevel.second.active and characters[currentID].classlevel.second.nextLvlXp == characters[currentID].level.nextLvlXp ) then candidates[#candidates+1] = getCurrentLevelXP(characters[currentID].classlevel.second.details) end if ( characters[currentID].classlevel.first and characters[currentID].classlevel.first.nextLvlXp == characters[currentID].level.nextLvlXp ) then candidates[#candidates+1] = getCurrentLevelXP(characters[currentID].classlevel.first.details) end local currentlevelxp if(#candidates > 0) then currentlevelxp = candidates[1] for i = 2, #candidates do currentlevelxp = math.max(currentlevelxp, candidates[i]) end else currentlevelxp = 0 -- Something is bogus, fail safe end return characters[currentID].level.xp - currentlevelxp, characters[currentID].level.nextLvlXp - currentlevelxp end
Next, open ui.menu. Near the beginning, you'll find a Lua if() then ... else ... end statement that makes a couple of calls to Infinity_DoFile. Add the following after that code:
Infinity_DoFile("LvlPgBar")
This will add the code from our LvlPgBar.lua file to the current environment. If you want to use a different file name be aware that, at least under Windows (all I can test), the file name must conform to the old 8.3 convention for Infinity_DoFile to work. Wasted an hour or so learning that. Good thing my grandsons weren't visiting at the time - they'd have learned a couple of new cuss words .
If you want to enable the getAdjustedNextLevelString tweak, search for the label (or button if you've incorporated one of my prior tweaks) that has the line that looks like this:
text lua "getNextLevelString()"
Change it to this:
text lua "getAdjustedNextLevelString()"
To enable the getNextLevelXPDeltas tweak, search for the label containing the line:
progressbar lua "getPercent(characters[currentID].level.xp, characters[currentID].level.nextLvlXp)"
Change it to this:
progressbar lua "getPercent(getNextLevelXPDeltas())"
That's it! Now for the why's and limits.
The obvious why is 'Why a separate override file?'. The equally obvious answer is that the ui.menu file is inconveniently large due to the interactive ui editing feature needing all of the ui code to be in one file. Since most of the code I've created here is Lua rather than ui code - I've opt'ed to not clutter ui.menu with an extra 250 lines of code.
Why create getAdjustedNextLevelString instead of just tweaking getNextLevelString? Because one of the next things I'm going to look at is the possibility of defining my own Options and this would be a simple one to investigate. I suspect that other folks already have or will soon implement this, so it may a fairly trivial exercise (for me - not them )
The next thing has to do with the behavior of getNextLevelXPDeltas. I decided early that if, for one reason or another, the function was unable to determine the current level's base XP value, that the function should 'fail safe' - which in this case means returning the same values as the existing 'non-tweaked' code. To look up the current level's base XP value for each of the (3) potential classes/kits that could be candidates for leveling, it's necessary to know the class and the current level for that class. The only way I could discover to do this from the Lua code was by extracting them from the 'details' string of the (potentially) 3 classlevel tables. Without going into the gory details, this/these string(s) is/are what you see at the top of the 'wall of text' Information panel of the character screen (disregarding the initial 'Multi-Class'/'Dual-Class' bit). To decode them, the code needs to know the language so it can properly decode the string(s) and identify the kit/class. Thus, getting back to the original point (at last!), there are 3 possibilities for the 'fail-safe' behavior. First, if the code can't recognize the language. If you're busy creating a Klingon .tlk file, this tweak won't do you any good (at least until you tell me what language string you're stuffing into Baldur.lua). Second, and most frequent, is where a new class/kit hasn't yet been added to the .tlk file or where 'placeholder' has been used until the translation team gets around to it. There are, for example, several of the languages that have 'placeholder' for the Shaman class (and yes, I know that a lot of the translation work is done by volunteers - what I'm saying should not be considered a complaint or criticism). In those cases, for characters of the 'placeholder' class(es) - you'll get the 'fail-safe' behavior. The final case is where there's a bug. Currently (2.1), the Turkish language 'details' string(s) are missing the class/kit portion. The strings (with the appropriate strrefs) are in the .tlk file. They're just not being used to build the 'details' strings. I'm assuming this is such an obvious problem that it's already been noted. So, for Turkish, this tweak doesn't accomplish anything. I'll obviously be checking this when 2.2 drops.
The last item to mention is where multiple classes will level up at the same point - with different current level base XP values. Which base value is used? The highest one. It makes the code a bit simpler (and thus faster) and also makes the progress bar a bit more sensitive to smaller XP gains. If you would prefer, you can change the line that invokes 'math.max' to 'max.min' - just be sure you're dealing with (or don't have to deal with) the case where the private getCurrentLevelXP function returns 0 (typically the 'placeholder' case above).
The current release is part of EEUITweaks
The file below contains information for configuring the mod by editing Baldur.lua (versus using Mods Options)
Enjoy - and if anyone wishes to use any or all of this (or anything else I've posted on this forum) in their own tweaks/mods, please feel free to do so. Posted publicly to be used by anyone.
Comments
The following code works a treat for displaying 3 bars... you just need to amend it with your altered XP calculations:
label { area 575 642 210 28 progressbar lua "getPercent(characters[currentID].classlevel.first.xp, characters[currentID].classlevel.first.nextLvlXp)" greyscale 0 --display greyscale or not, number 0-1 progressbar color 92 34 10 255 --color when percentage != 100 progressbar full 0 46 99 255 --color when percentage == 100 } label { area 575 678 210 28 enabled "characters[currentID].classlevel.second.xp > 0" progressbar lua "getPercent(characters[currentID].classlevel.second.xp, characters[currentID].classlevel.second.nextLvlXp)" greyscale 0 --display greyscale or not, number 0-1 progressbar color 92 34 10 255 --color when percentage != 100 progressbar full 0 46 99 255 --color when percentage == 100 } label { area 575 714 210 28 enabled "characters[currentID].classlevel.third > 0" progressbar lua "getPercent(characters[currentID].classlevel.third.xp, characters[currentID].classlevel.third.nextLvlXp)" greyscale 0 --display greyscale or not, number 0-1 progressbar color 92 34 10 255 --color when percentage != 100 progressbar full 0 46 99 255 --color when percentage == 100 }
Note the enabled bars to 'switch on/off' the progressbar. Here's the bars for jaheira with a bad XP calculation...
Take for example this code:
text lua "t('AC_LABEL') .. ': ' .. characters[currentID].AC.current .. '\n' .. '\n' .. t('HP_LABEL') .. ': ' .. characters[currentID].HP.current .. '/' .. characters[currentID].HP.max .. '\n' .. '\n' .. t('THAC0_LABEL') .. ': ' .. displayLabelTHAC() .. '\n' .. '\n' .. t('DAMAGE_LABEL') .. ': ' .. displayLabelDamage() .. '\n' .. '\n' .. Infinity_FetchString(characters[currentID].proficiencies.numAttacks.strRef) .. ': ' .. characters[currentID].proficiencies.numAttacks.current .. '\n' .. '\n' .. t('SAVING_THROWS_LABEL') .. ': ' .. '' .. '\n' .. characters[currentID].proficiencies.savingThrows .. '\n' .. '\n' .. t('RESISTANCES_LABEL') .. ': ' .. '' .. '\n' .. characters[currentID].proficiencies.resistances"
It produces the following 'text block' in game:
Code like t('AC_LABEL') is a direct reference to a label name in the language file. characters[currentID].AC.current is the selected character's (referenced as currentID) current AC and so on... You can reference this pretty much anywhere quite easily and don't need any extra work to retrieve it. Unfortunately, the XP values are a little more complicated (and even more complicated if multi/dual class) hence @AncientCowboy and his excellent work above.
@Mr2150 - I've created 3 new functions that behave like getNextLevelXPDeltas but are specific to the three potential classes. Just add them to the end of LvlPgBar.lua (or whatever you named it ) and change your GetPercentage calls as appropriate.
I'll update the original post once I've checked out a couple of additional things. However, it will probably be after 2.2 drops so I can incorporate any 2.2 changes.
The functions themselves - getFirstLevelXPDeltas,getSecondLevelXPDeltas, and getThirdLevelXPDeltas - have the same language specific fail-safe behavior as getNextLevelXPDeltas. In additon, getSecondLevelXPDeltas and getThirdLevelXPDeltas will return the non-delta next-level values if there is no second/third class. Thus, calls to them should be protected as you do in your 'enabled' code.
To deal with dual-classed characters, getSecondLevelXPDeltas has an optional argument showfull. It's ignored for single/multi-class, but for dual-class characters it controls whether getSecondLevelXPDeltas should return values that will result in an empty or a full progress bar for the non-leveling class (which is always classlevel.second). If you want an empty progress bar, call it with no argument (nil in Lua terms) or false (not 'false'). If you want a full (but blinking - unless you know how to turn off the infernal blinking ) bar, call it with true, 1, 0, 'Hello World', or anything other than false.
Anyway, have fun!
@Iroumen - I feel your pain . Putting those tables together, even with the help of OpenOffice spreadsheet, was no fun. Having to change both xplist.2da and the tables in this code in order to change the leveling curve for a class (e.g. Druid) won't be fun either. For this particular mod/tweak however, I think the approach I'm going to take is to request an enhancement in the information provided in the characters[currentID].classlevel tables and eliminate the parsing and table stuff altogether. Then if you edit xplist.2da for example, the changed values should be automatically incorporated.
For version 2.2 everything in the original posting still works (and Turkish is still broken). However, I've made several changes/enhancements. First, rather than including code and detailed instructions directly in the post, I'm providing a link to a zip that contains the files and detailed instructions required. Second, I've incorporated the tweaks in my first 'progress bar tweaks' thread into the files referenced by the link. Third, I've incorporated Baldur.lua options for configuring and enabling/disabling the tweaks (in preparation for a future Options dialog). And fourth, I've created a new 'tweak' that dual-purposes the portrait panel on the Character screen such that when you click on the portrait you'll get something like this:
If you click anywhere on the bottom part of the portrait alternate panel, it will have the same effect as clicking on the 'Combat Stats' button. Clicking on any of the titles/progress bars that are 'Ready to Level Up' will take you to the Level Up screen, while clicking on a title/bar that isn't ready to level will be like clicking the 'Information' button. Clicking in the center area will cause the full portrait to be displayed.
For dual-classed characters, the progress bar for the initial class is treated as an absolute progress until re-enabled indicator. Once the class is re-enabled, the bar is full and the label changes appropriately:
In the zip you'll find 4 files. The M_PgBar.lua file contains the Lua code and should be placed in the 00806/override directory. There weren't appropriate labels in the ui.strings table for the dual-mode progress bar so you'll find an English specific file named en_USPgB.lua that should also be placed in 00806/override. If you choose to create a non-English file (there are only 3 strings so far), name it using the appropriate 00806/lang/xx_YY prefix with PgB.lua appended. I'd recommend that you not delete en_USPgB.lua as it is the 'failed to resolve uiTranslationFile' fallback.
The UI_MENU_Changes.txt file is, as you would expect, both the instructions and code needed to modify UI.menu.
The fourth file, Baldur_lua.txt, contains 13 lines to be added to Baldur.lua. Six of the lines with values 'Color Red/Green/Blue' or 'Full Red/Green/Blue' allow you to specify the Filling and Full colors for the progress bars. The useful values are 0 to 255 for each of the color components.
The 'Disable Deltas/Multiplier/Level Up/Portrait Alternate' lines allow you, by setting them to 1, to turn off the relative (vs. absolute) level bar behavior; the multi-class global (vs. class specific) how much XP is needed to advance feature; the 'click the progress bar to level-up' behavior; and the entire alternate portrait feature respectively.
The 'Initial Display' setting (0-2) controls what the Portrait space initially contains whenever you open the Character panel. If set to 1, it will initially show the (large) Portrait. If set to 2, it will initially show the alternate view. If left/set to 0, it will 'remember' what it was showing last time.
The final two values are specific to the Dual-Class display. When 'Grey Scale Dual-Class' is set to 1, the initial class progress bar will fill with black rather than the Color value and will fill to solid black. Unfortunately, for either Color fill or Grey Scale fill, once the progress bar fills, it will blink. Aside from setting the Full color to white (255,255,255), the only way I've found to defeat the blinking is to keep the progress bar empty after the initial class has been re-enabled. Unfortunately it isn't particularly attractive unless you like light grey . Here's what 'grey scale' and 'empty' look like, respectively:
Files have been moved to the original posting for convenience. Thanks!
It really is a great job
I've released a new version of the tweaks that have 2 major enhancements over the prior version. First, there is now a BG2EE/TOB version of the tweaks. Second, I've created a 'Mods Options' options setting menu for each version. You'll need to install the base version of the 'Mods Options' mod to make use of it (see the Mod Options mod thread for details). The 'Progress Bar Tweaks' option menus look like this:
The updated zips are in the detailed description message above. The new zips contain a 'xxx_Installation.txt' file that contains complete installation instructions.
Enjoy!
To install, first extract a copy of UI.MENU to your override directory (WeiDU isn't quite there yet), Then grab the appropriate zip file(s) from the original post above (yeah, I've re-arranged things). If you are running a generic BeamDog UI.MENU and you want to configure PB Tweaks via the Options menu, you'll want to install the Mods Options mod (if you haven't already) prior to installing this mod. The installation itself is the usual WeiDU process - put the zip contents in your installation directory, run setup-ProgressBar.exe (probably as Administrator), and answer the questions. If you've previously manually installed this mod - don't worry. Just install over it. The WeiDU script is smart enough to work around prior manual installations.
There's a file named 'Installation.txt' in the ProgressBar directory within the zip that has full instructions and additonal information for those who aren't familar with WeiDU, for those who would rather configure PB Tweaks via Baldur.lua, and for those running one of the full UI.MENU GUIs I mentioned earlier.
As for SoD GUI Overhaul and BG2EE GUI to BGEE users: First, the Mods Options mod is incompatible with both - at least for now. So you're stuck with manual configuration via Baldur.lua. The 'Installation.txt' file has all the info you'll need.
In terms of functionality, SOD Overhaul has no general Report screen Progress Bar, so that part of the mod obviously doesn't apply - the installation fails it gracefully. The Large Portrait portion works fine. However, when you click in the small portrait/battle stats area the Proficiencies/Skills info is displayed in the inforation pane. If you would like to change this, instructions on how to do so is in 'Installation.txt'.
For BG2EE GUI to BGEE, there is a progress bar and it is modded appropriately. The Large Portrait component also works. However, when you click in the small portrait/battle stats area, nothing useful is displayed in the info pane. This is because there is no definition for currentTab being set to 9. If this is a problem, once again 'Installation.txt' has the solution.
If you have any difficulties, please let me know. Enjoy!
I've posted above new versions of Progress Bar Tweaks. The main features are:
If you're familiar with installing WeiDU mods, you'll find nothing surprising in the installation. If not, within the ProgressBar directory/folder you'll find a file named 'Installation.txt' that will walk you through the process. As before, you'll need to have a copy of UI.MENU in your override directory.
Installation.txt also contains the Baldur.lua settings if you choose to manually configure the mod (rather than using Mod Options/Progress Bar Options); and it contains a section entitled 'Modding the Mod' that describes how to change what is displayed when you click on the top or bottom areas of the alternate portrait area.
Enjoy - and give me a shout if you have any difficulties.
I've created a new version of this mod that provides the option for the 'alternate portrait display' to not show a small portrait and combat stats below the leveling bars; but rather a centered, medium-sized portrait - as below:
The reason is two-fold: As @Mr2150 pointed out to me, on DragonSpear UI++ the information is redundant. It's all in the left-most pane of the display. I have also gathered from comments on this forum that some believe that the Record panel is not the correct place for combat information.
The new code is part of EEUITweaks. And, as I don't want to have two different versions of the mod floating around, the zip in the OP has been removed. For those who prefer to configure the mod by editing Baldur.lua rather than using Mods Options; I will attach a zip of a text file documenting the settings to the original post.
Enjoy!
I installed EEUITweaks-1.3 on a heavily modded version of BG/SOD 2.3. Everything Installed successfully, but when I ran it, I got this message.
The game ran fine, but the level bar doesn't show the progress color.
I then installed the tweak pack on a clean install and everything worked OK. There was no error, and the progress bar showed correct colors.
I looked at the properties of WX_PgBar.lua files in both installations and noticed they were different sizes. I copied the one from the clean install to the modded install and now it works fine.
I'm attaching the two files as working.zip and broken.zip and also my WeiDU log in case you need it.
Thank you.
The fix will be included in the next EEUITweaks update.