-
Posts
198 -
Joined
Content Type
Forums
Events
Downloads
Gallery
Mods
News
Store
Posts posted by Bubb
-
-
@argent77 Looks like GivePartyGoldGlobal() also doesn't concatenate its strings.
I stepped through what the in-engine encoder does, and aside from GivePartyGoldGlobal(), it aligns with Near Infinity's hardcoded list:
Spoiler////////////// // Triggers // ////////////// Decode type - 0xD: param2 + param1 => string1 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'I' no param4 TRIGGER.IDS Matches: 0x400F Global(S:Name*,S:Area*,I:Value*) 0x4034 GlobalGT(S:Name*,S:Area*,I:Value*) 0x4035 GlobalLT(S:Name*,S:Area*,I:Value*) 0x40F7 BitCheck(S:Name*,S:Area*,I:Bit*Bits) // BUG - The trigger expects both string1 and string2 to be used Decode type - 0x21: param2 + param1 => string1 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'I' param4 type annotation == 'I' no param5 param1 == "name*" (case insensitive) param2 == "area*" (case insensitive) TRIGGER.IDS Matches: None ///////////// // Actions // ///////////// Decode type - 0xD: param2 + param1 => string1 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'I' no param4 ACTION.IDS Matches: 30 SetGlobal(S:Name*,S:Area*,I:Value*) 109 IncrementGlobal(S:Name*,S:Area*,I:Value*) 115 SetGlobalTimer(S:Name*,S:Area*,I:Time*GTimes) 268 RealSetGlobalTimer(S:Name*,S:Area*,I:Time*GTimes) Decode type - 0x1D: <first 6 characters of param2, padded with spaces if less than 6> + param1 => string1 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'S' param4 type annotation == 'O' ACTION.IDS Matches: None Decode type - 0x1E: <first 6 characters of param2, padded with spaces if less than 6> + param1 => string1 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'S' no param4 ACTION.IDS Matches: 246 CreateCreatureAtLocation(S:GLOBAL*,S:Area*,S:ResRef*) 256 CreateItemGlobal(S:Global*,S:Area*,S:ResRef*) 335 SetTokenGlobal(S:GLOBAL*,S:Area*,S:Token*) Decode type - 0x21: param2 + param1 => string1 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'I' param4 type annotation == 'I' no param5 param1 == "name*" (case insensitive) param2 == "area*" (case insensitive) ACTION.IDS Matches: 364 SetGlobalRandom(S:Name*,S:Area*,I:Count*,I:Size*) 377 SetGlobalTimerRandom(S:Name*,S:Area*,I:Min*GTimes,I:Max*GTimes) Decode type - 0x25: param2 + param1 => string1 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'I' param4 type annotation == 'I' param5 type annotation == 'I' param1 == "name*" (case insensitive) param2 == "area*" (case insensitive) ACTION.IDS Matches: 364 SetGlobalRandomPlus(S:Name*,S:Area*,I:Count*,I:Size*,I:Plus*) Decode type - 0x26: param2 + param1 => string1 Match Requirements: action id == 297 has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' no param3 ACTION.IDS Matches: 297 MoveToSavedLocation(S:GLOBAL*,S:Area*) Decode type - 0x29: param2 + param1 => string1, param4 + param3 => string2 Match Requirements: has param1 param1 type annotation != 'P' param1 type annotation != 'O' param1 type annotation != 'I' (parsed as string) param2 type annotation == 'S' param3 type annotation == 'S' param4 type annotation != 'O' (parsed as int) ACTION.IDS Matches: 446 IncrementGlobalOnce(S:Name1*,S:Area1*,S:Name2*,S:Area2*,I:Val*)
Interestingly, BitCheck() is incorrectly matched by the engine for string merging – which causes it to always return false in dialog conditions.
-
- Added German translation, (thanks moe23!).
- Updated French translation, (thanks 11jo!).
-
The recent crash bug with EEex should be fixed in EEex v0.10.2-alpha.
-
3 hours ago, lynx said:
Do I understand correctly that iwd spawned a random amount of the same resref — the randomization was only done once (not per attempt)?
Correct.
-
This post might help.
-
I unintentionally broke how pointers are passed around in EEex's Lua bindings. In particular it's dereferencing the sprite's terrain table one too many times in EEex_Sprite_ForAllOfTypeInRange(). I'll try to get a fix up somewhat quickly, though bindings errors have a habit of being tricky.
-
- Updated Spanish translation, (thanks IoViVo!).
-
Bubb’s Spell Menu
This mod aims to overhaul the spell-selection interface to provide a more convenient experience for the player. The primary enhancements over the default spell selection include:
- Displaying all available spells at once – categorized by level.
- A searchable spell list.
v5.0 adds Overlay Mode – which displays the selected character’s spells in a widget that hovers over the world screen, similar to NWN2’s quick cast menu.
Note: Requires EEex v0.10.1.1-alpha+, which is Windows only – can be run on Linux using Wine. Compatible with BG:EE v2.6.6.0, BG2:EE v2.6.6.0, and IWD:EE v2.6.6.0.
Links:
- Download: GitHub
- Discussions: Gibberlings3, Beamdog Forums
-
Yep, v5.0 should continue to work with everything the spell menu previously supported.
-
v5.0:
-
Added Overlay Mode!
Spoiler
Requires EEex v0.10.1.1-alpha+
-
Added Overlay Mode!
-
engine.lua is read before the engine has even loaded in the normal game resources, so yeah, engine_mode has to stay in engine.lua to have any effect.
Also, bear in mind that changing engine_mode will tell the engine to act like IWD:EE in all respects, (which includes over 100 special-casings in the code) – so there would be many side-effects, many of which probably breaking a non-IWD:EE game in some way.
-
op192 is hardcoded to only allow itself to be applied to Player1 unless [engine.lua]->engine_mode = 2 (IWDEE).
-
Congrats!
-
Odd – not sure why that would be happening. You could try these versions; they are the latest that work on the v2.5 engine:
-
Hi @dreypdx!
Yes, the mod should work with Hidden Gameplay Options. Since the spell menu uses EEex to do its UI editing it rarely has compatibility issues – it should be compatible with UI tweaks, and most, if not all of the popular UI overhauls, (lefreuts, Dragonspear UI++, Infinity UI++, etc.).
-
oIWD rest interruptions are indeed simpler:
- If [+0xA6] is 0 rest interruptions are disabled.
- Roll [0-99], if this roll is ≤ the relevant probability field (day – [+0xA8], night – [+0xAA]) the rest is interrupted by a single spawn pass.
- If [+0x98] or [+0xA4] is 0 the rest interruption is cancelled.
- Time is randomly advanced between 0 and 7.5 minutes.
- A random CRE resref + feedback string is selected using rand[0–[+0x98]-1]
- The number of spawn attempts is max(1, [+0xA4] + rand[-2–2]) + (bHeartOfFury ? 1 : 0)
- If the position randomization ends up putting a creature in an invalid spot the creature can be dropped.
-
-
All good – I ninja'd your post where you mentioned that, I just wanted to clarify. As an aside: you can also open Baldur.exe through the command prompt to see the same output. EEex just spawns a console window by default.
-
For the record, EEex doesn't alter UI.MENU directly. It does all of its UI patching in-memory during runtime, so it's highly unlikely that syntax errors would ever be caused by EEex.
-
I'm not aware of any. Apple locks down their OSes so much that slightly non-conventional things (such as these mods) aren't possible.
Edit: "Not possible" might not be correct strictly speaking, but Apple certainly makes it near impossible / highly disincentivizes it.
-
The engine attempted to render a BAM with an invalid combination of render flags; it has nothing to do with your graphics card. If I had to guess, I'd say there's a good chance the crash was caused by a bad projectile, though without a stack trace it's impossible to say for certain.
-
Thanks, I've fixed the issue in v4.7. The main component number of Dragonspear UI++ changed between some of the forks, and the spell menu was only detecting the newer number.
- Added Spanish translation, (thanks Davoker!).
v4.6:
- Added Infinity UI++ compatibility.
- The spell menu now responds to spell casting hotkeys when the search bar is unfocused.
-
Pressing Left Ctrl toggles the search bar's focus when the "Automatically Focus Search Bar" option is disabled.
- Note: This release requires a recent EEex version: v0.9.20-alpha+.
v4.7:
- Fixed some versions of Dragonspear UI++ not being detected due to differing main component numbers.
-
21 hours ago, Guest moe23 said:
Thank you very much for this genuis mod!
I installed it with EET and Dragonspear UI++ using Project Infinity and it always installs the BG2EE theme.
I think the BGEE-SOD theme would look more consistent with the color scheme of Dragonspear UI++?
Is it possible to change the theme after installation? or force to install BGEE-SOD theme?
I already tried to copy the files from \bubb_spell_menu_extended\copy\bgee-sod into my override folder after installation but that doesn’t work.
Hello, glad you like the mod! It's not possible to completely update the skin after installation, (unless you want to dive into the game files and update dozens of values). The way you copied bgee-sod into the override folder should have changed the slots to their SoD variant, so I'm unsure why that didn't work. The code is responsible for tweaking other UI elements.
Did you install the spell menu after Dragonspear UI++? The installer should have detected dragonspear and changed its skin automatically.
-
HasItemEquiped() checks slots [0-17] and [35-38] for the item, i.e. everything except the general inventory and the magic item slot.
Edit: And it only checks if the item exists, not if it is "equipped."
AddexperiencePartyGlobal
in IESDP Updates and Info
Posted
I think I'm missing something; in what cases does the engine handle both? From what I've seen actions / triggers generally only accept one version of the encoding, and if they encounter the other version the "no matching global" behavior will be used, which itself seems to be undefined for some of these.