I understand you don't want to clutter the main UI too much, but the bars could stand to be just a little thicker for readability. The blue bar could be changed to an easier-to-see cyan or light blue instead of dark blue. As far as placement goes, I've got nothing.
Placement looks fine to me. An option would be to layer it over the portrait itself, perhaps to the right side because it's easier to find something that small when it's right against the edge.
I've pushed the timer module to master; anyone who wants to try it out can download master here.
Since my last post I've changed the dark-blue color to cyan, and made the timer bars hide if nothing on the character is using them. Here's a preview:
Red = Modal action like Find Traps or Turn Undead.
Green = Contingency spell that checks conditions every so often, like Globe of Blades or Contingency.
Blue = Spell/Item cooldown aura.
Like other EEex modules, you enable it by opening override/EEex_Modules.lua after installing and by changing:
Hello, great mod. I've got a few feature requests:
1) Would it be possible to add a sub menu for EEex inside Baldur's gate options, so you can actually toggle the options from there, rather than having to tweak the .ini? Would be extremely cool.
2) I've tried Bubb-spell menu on a sod-less install. Would it be possible to make it compatible even with people that do not enjoy Siege of Dragonspear?
Good work so far on the update for 2.6! Here are some more features I'd like you to reimplement before I can update my EEex mods.
* Opcode 401 - Set Extended Stat
* Opcode 408 - Projectile Mutator (along with the three projectile hooks).
* The various hooks for existing opcodes, especially the ones for opcodes 42, 62, and 280.
* Opcodes 400, 404, 405, 406 and 407.
* The hook that makes invisible creatures visible while a character that can see invisibility is selected.
* The various other new BCS triggers (EEex_IsImmuneToOpcode, EEex_HasDispellableEffect, EEex_MatchObject, EEex_MatchObjectEx).
Also, there are several features from IWD2EE's IEex that would be great to have in EEex as well.
* EEex_Extern_OnPostCreatureProcessEffectList(creatureData) - A function that is called for every actor on every tick after effects are processed.
* EEex_JumpActorToPoint(actorID, pointX, pointY, bSendSpriteUpdateMessage) - Teleports a creature without applying an effect.
These last two things would let me reimplement my flying and height-changing functions as they are in IWD2EE (which is much less clunky than the way I implemented them in EEex).
Hello, great mod. I've got a few feature requests:1) Would it be possible to add a sub menu for EEex inside Baldur's gate options, so you can actually toggle the options from there, rather than having to tweak the .ini? Would be extremely cool.
2) I've tried Bubb-spell menu on a sod-less install. Would it be possible to make it compatible even with people that do not enjoy Siege of Dragonspear?
The latest version's installer asks you if you want to enable the modules, so at least they are visible now. I'll look into the spell menu.
@OlvynChuru: Thanks for the list, it helps to stay organized. I've reimplemented Opcode 401 - Set Extended Stat. Basically you:
Add an entry to the end of STATS.IDS.
(Optionally) add an entry to X-STATS.2DA to define the stat's minimum, maximum, and default values. (row label is the stat name, as listed in STATS.IDS.
The opcode itself should work the same, and should be integrated as it was with CheckStat* and SPLPROT. You can poll the stat from lua with EEex_Sprite_GetExtendedStat().
I am on the process to build my EET modlist. Is it relevant to incorporate EeeX in my modlist ? I am planning to install it right after EET core unless you have other recommandation.
I am on the process to build my EET modlist. Is it relevant to incorporate EeeX in my modlist ? I am planning to install it right after EET core unless you have other recommandation.
It depends, do you plan on using an mods that require EEex?
I am on the process to build my EET modlist. Is it relevant to incorporate EeeX in my modlist ? I am planning to install it right after EET core unless you have other recommandation.
It depends, do you plan on using an mods that require EEex?
Yes. I will probably include (after some testing, EET compatibility...) :
Bubb's Spell Menu Extended
Bubb's Revert Pathfinding Tweak
Olvyn Tweaks (probably partially compatible with EET)
Skills and Abilities
I haven't try them yet but they are very appealing to me. Any other suggestions ?
I am not sure about their EET compatibility as they are not yet part of Kathos Mod Compatibility List for EET (except your "deprecated" Thieving Skills for Bards mod that is in the list). EEex also is not in the list.
Hi,
I guess the bars should be the same size as the portraits and aligned with those of Tiax and Garrick.
3440*1440 monitor
DragonsprearUI++
Two things:
1) Apparently the portrait UI elements scale (and can be non-default in DragonspearUI++), I don't account for this.
2) The timer module scans RIGHT_SIDEBAR to find the portrait locations. DragonspearUI++ defines two copies for each portrait, (one for normal portraits and one for the large portraits option), of which the timers latch onto the large portraits.
After doing an otherwise succesful modded EET install, I get the following warning at launch: "[string "M__EEEX.lua"]:3: [!] ERROR: EEex not active. Did you forget to start the game with InfinityLoader.exe?"
The first thing I did was check my Weidu log to see that EEex installed correctly (it did and it's the very first thing after EET in the load order.) I then tried manually launching Infinity Loader.exe outside of Project Infinity, but got the same error. Does anyone have any insight as to what the error could be and how to fix it?
Hey Bubb, I love the timer and the spell effect modules. They have made playing a much smoother experience! Amazing!
Do you think it's feasible for additional modules to list extra actor information, like:
* Status effect immunities - stun, blindness, that sort of thing.
* Innate enchantment immunities - +3 or greater, etc. Or damage type resistances, 100% crushing e.g.
* Effects on attack, like level drain, dispell, or a lich's paralyzing touch.
* Show how fatigued characters are.
Hi. Is the latest version compatible with Siege of Dragonspear? Fresh install gets me a "failed attempting to start" error using Infinity Loader. If I add SiegeOfDragonspear.exe to InfinityLoader.ini, it starts with an error "EEex not active". It launches though, but I don't know if there are any side effects.
After doing an otherwise succesful modded EET install, I get the following warning at launch: "[string "M__EEEX.lua"]:3: [!] ERROR: EEex not active. Did you forget to start the game with InfinityLoader.exe?"
I'm not sure why you would be getting that. Could you upload your WeiDU.log and try starting InfinityLoader.exe from the command line and see if any errors are logged?
(if you don't know how to open the game with cmd, extract the attached zip's contents to your game's base folder and double-click RUN.bat).
Do you think it's feasible for additional modules to list extra actor information, like:
* Status effect immunities - stun, blindness, that sort of thing.
* Innate enchantment immunities - +3 or greater, etc. Or damage type resistances, 100% crushing e.g.
* Effects on attack, like level drain, dispell, or a lich's paralyzing touch.
* Show how fatigued characters are.
That's something I've wanted to do for a while, but I'm not very good at UI design or making new assets. I can't figure out how to display all that info to the player in a seamless way without it being an ugly full-screen overlay / an overwhelming text dump in the combat log.
@Bubb Is there still any chance you could reimplement these features?
* Opcode 408 - Projectile Mutator (along with the three projectile hooks).
* The various hooks for existing opcodes, especially the ones for opcodes 42, 62, and 280.
* Opcodes 400, 404, 405, 406 and 407.
* The hook that makes invisible creatures visible while a character that can see invisibility is selected.
* The various other new BCS triggers (EEex_IsImmuneToOpcode, EEex_HasDispellableEffect, EEex_MatchObject, EEex_MatchObjectEx).
After doing an otherwise succesful modded EET install, I get the following warning at launch: "[string "M__EEEX.lua"]:3: [!] ERROR: EEex not active. Did you forget to start the game with InfinityLoader.exe?"
I'm not sure why you would be getting that. Could you upload your WeiDU.log and try starting InfinityLoader.exe from the command line and see if any errors are logged?
(if you don't know how to open the game with cmd, extract the attached zip's contents to your game's base folder and double-click RUN.bat).
Really appreciate your offer to help! Was eager to play so ended up removing it from the installation; I may yet do a fresh install, if I do I'll definitely provide logs.
Do you think it's feasible for additional modules to list extra actor information, like:
* Status effect immunities - stun, blindness, that sort of thing.
* Innate enchantment immunities - +3 or greater, etc. Or damage type resistances, 100% crushing e.g.
* Effects on attack, like level drain, dispell, or a lich's paralyzing touch.
* Show how fatigued characters are.
That's something I've wanted to do for a while, but I'm not very good at UI design or making new assets. I can't figure out how to display all that info to the player in a seamless way without it being an ugly full-screen overlay / an overwhelming text dump in the combat log.
Yes that's tough to display all at once. Something I can think of is splitting the information by type, and follow the same approach as with the spell effects scroll overlay on shift+hover, but assign different trigger keys per type?
* ctrl for damage resistances
* alt for status immunities
* ctrl+alt for on-hit effects, maybe?
I think the fatigue bit might not be out of place on the hold-tab text with the name and HP.
In general the game lacks feedback so much that going in turn a bit overboard with it (and mostly only for certain enemies with lots to display) might be warranted. I'm drooling at the possibility of this! The spell effects has made the game SO much more enjoyable already. Edited because I screwed the quotes.
How about an option to make green bars (from Timer component) only show up in combat? I know what they represent, they simply bother me when I am just traveling around.
I can't possibly imagine why would I want to know when my contingency triggers when no enemy is in sight. There obviously is some condition for it in-game, given how music changes in combat. There are also mods that supposedly make you faster outside of combat (never used them myself, I don't know much more about it).
@Bubb Is there still any chance you could reimplement these features?
<snip>
* EEex_MatchObject, EEex_MatchObjectEx.
EEex_MatchObject is now reimplemented. I redid this one to not be so hacky, its implementation is 100% external to the engine and customizable. So it works a bit differently, here's the rundown:
Chunk: A Lua string to run for every object that passes the internal checks. The current object is stored into the EEex_MatchObject global; return true/false from this string to match the object.
Nth: Returns the nth match based on the current prioritization mode. Starts at 0, default behavior is to return the nth nearest object. The FARTHEST flag returns the nth farthest object, (shocking).
Range: The range objects must be within relative to the caller to be eligible for matching. If this value is 0 it uses the caller's current visual range, and if this value is -1 range is ignored (+ the IGNORE_LOS flag is implied).
Flags:
IGNORE_LOS: Objects are eligible for matching regardless if the caller can see them.
MATCH_NON_SPRITES: Objects other than sprites are eligible for matching.
IGNORE_INVISIBLE: Default behavior is to use the caller's ability to see invisible creatures. Invisible creatures are ignored when this flag is specified.
MATCH_INVISIBLE: Default behavior is to use the caller's ability to see invisible creatures. Invisible creatures are always eligible for matching if this flag is specified.
MATCH_SLEEPING: Sleeping creatures are eligible for matching.
MATCH_DEAD: Dead creatures are eligible for matching, (+ implies MATCH_BACKLIST).
MATCH_BACKLIST: Backlist creatures are eligible for matching, (knocked-out creatures if MATCH_SLEEPING, dead creatures if MATCH_DEAD, some other object types if MATCH_NON_SPRITES).
PRIORITIZE_BACKLIST: Default behavior when MATCH_BACKLIST is specified is to search the frontlist, and if no match was found search the backlist. This flag prioritizes backlist objects as if they were frontlist objects, (+ implies MATCH_BACKLIST).
MATCH_ONLY_BACKLIST: Only backlist objects are eligible for matching, (+ implies PRIORITIZE_BACKLIST).
FARTHEST: Switches the prioritization mode to prefer objects farther away from the caller.
Comments
Edit: Apparently the forum doesn't like me embedding this file. Here's a link: https://imgur.com/fd4Zfi1
Not really happy with how they look. Any ideas on how to display them?
Looks great on the whole, by the way.
Since my last post I've changed the dark-blue color to cyan, and made the timer bars hide if nothing on the character is using them. Here's a preview:
Red = Modal action like Find Traps or Turn Undead.
Green = Contingency spell that checks conditions every so often, like Globe of Blades or Contingency.
Blue = Spell/Item cooldown aura.
Like other EEex modules, you enable it by opening override/EEex_Modules.lua after installing and by changing: to
1) Would it be possible to add a sub menu for EEex inside Baldur's gate options, so you can actually toggle the options from there, rather than having to tweak the .ini? Would be extremely cool.
2) I've tried Bubb-spell menu on a sod-less install. Would it be possible to make it compatible even with people that do not enjoy Siege of Dragonspear?
3) I'm a fan of Olvynchuru stuff. I tried installing some of the component from his mods to no avail. Post here: https://forums.beamdog.com/discussion/comment/1182271/#Comment_1182271
* Opcode 401 - Set Extended Stat
* Opcode 408 - Projectile Mutator (along with the three projectile hooks).
* The various hooks for existing opcodes, especially the ones for opcodes 42, 62, and 280.
* Opcodes 400, 404, 405, 406 and 407.
* The hook that makes invisible creatures visible while a character that can see invisibility is selected.
* The various other new BCS triggers (EEex_IsImmuneToOpcode, EEex_HasDispellableEffect, EEex_MatchObject, EEex_MatchObjectEx).
Also, there are several features from IWD2EE's IEex that would be great to have in EEex as well.
* EEex_Extern_OnPostCreatureProcessEffectList(creatureData) - A function that is called for every actor on every tick after effects are processed.
* EEex_JumpActorToPoint(actorID, pointX, pointY, bSendSpriteUpdateMessage) - Teleports a creature without applying an effect.
These last two things would let me reimplement my flying and height-changing functions as they are in IWD2EE (which is much less clunky than the way I implemented them in EEex).
The latest version's installer asks you if you want to enable the modules, so at least they are visible now. I'll look into the spell menu.
@OlvynChuru: Thanks for the list, it helps to stay organized. I've reimplemented Opcode 401 - Set Extended Stat. Basically you:
The opcode itself should work the same, and should be integrated as it was with CheckStat* and SPLPROT. You can poll the stat from lua with EEex_Sprite_GetExtendedStat().
Is there any chance for you to have checked "vs melissan stoneskin bug" that I've written about?
It depends, do you plan on using an mods that require EEex?
Yes. I will probably include (after some testing, EET compatibility...) :
Bubb's Spell Menu Extended
Bubb's Revert Pathfinding Tweak
Olvyn Tweaks (probably partially compatible with EET)
Skills and Abilities
I haven't try them yet but they are very appealing to me. Any other suggestions ?
I am not sure about their EET compatibility as they are not yet part of Kathos Mod Compatibility List for EET (except your "deprecated" Thieving Skills for Bards mod that is in the list). EEex also is not in the list.
Hi,
I guess the bars should be the same size as the portraits and aligned with those of Tiax and Garrick.
3440*1440 monitor
DragonsprearUI++
Two things:
1) Apparently the portrait UI elements scale (and can be non-default in DragonspearUI++), I don't account for this.
2) The timer module scans RIGHT_SIDEBAR to find the portrait locations. DragonspearUI++ defines two copies for each portrait, (one for normal portraits and one for the large portraits option), of which the timers latch onto the large portraits.
I'll look into improving compatibility.
FR: could the bars drain rather than fill?
The first thing I did was check my Weidu log to see that EEex installed correctly (it did and it's the very first thing after EET in the load order.) I then tried manually launching Infinity Loader.exe outside of Project Infinity, but got the same error. Does anyone have any insight as to what the error could be and how to fix it?
Do you think it's feasible for additional modules to list extra actor information, like:
* Status effect immunities - stun, blindness, that sort of thing.
* Innate enchantment immunities - +3 or greater, etc. Or damage type resistances, 100% crushing e.g.
* Effects on attack, like level drain, dispell, or a lich's paralyzing touch.
* Show how fatigued characters are.
I'm not sure why you would be getting that. Could you upload your WeiDU.log and try starting InfinityLoader.exe from the command line and see if any errors are logged?
(if you don't know how to open the game with cmd, extract the attached zip's contents to your game's base folder and double-click RUN.bat).
That's something I've wanted to do for a while, but I'm not very good at UI design or making new assets. I can't figure out how to display all that info to the player in a seamless way without it being an ugly full-screen overlay / an overwhelming text dump in the combat log.
* Opcode 408 - Projectile Mutator (along with the three projectile hooks).
* The various hooks for existing opcodes, especially the ones for opcodes 42, 62, and 280.
* Opcodes 400, 404, 405, 406 and 407.
* The hook that makes invisible creatures visible while a character that can see invisibility is selected.
* The various other new BCS triggers (EEex_IsImmuneToOpcode, EEex_HasDispellableEffect, EEex_MatchObject, EEex_MatchObjectEx).
My mods use most of these features.
Really appreciate your offer to help! Was eager to play so ended up removing it from the installation; I may yet do a fresh install, if I do I'll definitely provide logs.
Yes that's tough to display all at once. Something I can think of is splitting the information by type, and follow the same approach as with the spell effects scroll overlay on shift+hover, but assign different trigger keys per type?
* ctrl for damage resistances
* alt for status immunities
* ctrl+alt for on-hit effects, maybe?
I think the fatigue bit might not be out of place on the hold-tab text with the name and HP.
In general the game lacks feedback so much that going in turn a bit overboard with it (and mostly only for certain enemies with lots to display) might be warranted. I'm drooling at the possibility of this! The spell effects has made the game SO much more enjoyable already.
Edited because I screwed the quotes.
I can't possibly imagine why would I want to know when my contingency triggers when no enemy is in sight. There obviously is some condition for it in-game, given how music changes in combat. There are also mods that supposedly make you faster outside of combat (never used them myself, I don't know much more about it).
Might be useful for an "on see enemy" chain contigency, perhaps.
EEex_MatchObject is now reimplemented. I redid this one to not be so hacky, its implementation is 100% external to the engine and customizable. So it works a bit differently, here's the rundown:
Chunk: A Lua string to run for every object that passes the internal checks. The current object is stored into the EEex_MatchObject global; return true/false from this string to match the object.
Nth: Returns the nth match based on the current prioritization mode. Starts at 0, default behavior is to return the nth nearest object. The FARTHEST flag returns the nth farthest object, (shocking).
Range: The range objects must be within relative to the caller to be eligible for matching. If this value is 0 it uses the caller's current visual range, and if this value is -1 range is ignored (+ the IGNORE_LOS flag is implied).
Flags: