Jump to content


  • Content Count

  • Joined

  • Last visited

About Bubb

  • Rank
    Engine Wizard

Profile Information

  • Gender
  • Mods Worked On
    Bubb's Spell Menu

Recent Profile Visitors

153 profile views
  1. Most of the spell protection opcodes add an entry to an immunity list in the stats of a creature. Every time the effects list is evaluated on a creature the engine checks if one of these lists is populated, and if it is it adds a corresponding graphic to the creature. Pseudocode: Opcode #291 sets m_bPreventSpellProtectionEffects to Param2, (so it's an all-or-nothing deal). The list of Opcode graphics it blocks is as follows: // Blocks the below graphics m_bPreventSpellProtectionEffects -> Opcode #291 Param2 // Applies SPTURNI2 m_cBounceProjectile -> Opcode #197 m_cBounceEffect -> Opcode #198 m_cBounceProjectileLevelDec -> Opcode #200 m_cBounceSchool -> Opcode #202 m_cBounceSecondaryType -> Opcode #203 m_cBounceSpell -> Opcode #207 m_cImmunitiesSecondaryTypeLevelDec -> Opcode #226 m_cBounceSchoolLevelDec -> Opcode #227 m_cBounceSecondaryTypeLevelDec -> Opcode #228 m_nChaosShield -> Opcode #299 Param1 // Applies SPMAGGLO m_cImmunitiesProjectileLevelDec -> Opcode #201 m_cImmunitiesSchool -> Opcode #204 m_cImmunitiesSecondaryType -> Opcode #205 m_cImmunitiesSchoolLevelDec -> Opcode #223 m_cSpellTrapLevelDec -> Opcode #259 The IESDP description lists Opcode #199 as one of the opcodes with blocked graphics - but this is false, (that opcode has no associated graphics). So this is all to say, Opcode #291 doesn't discriminate which visuals it blocks; if you apply it to a creature with Param2 = 1, all the above opcodes will have their graphics suppressed for as long as the Opcode #291 stays in effect. If you put a permanent Opcode #291 on every creature, and manually add-back the graphics to all the affected spells, in theory you could customize how you want new spells to display without borking the vanilla ones.
  2. If I'm remembering right, Opcode #291 can disable the hardcoded visuals, with the caveat that it disables them on the opcode level, (meaning all spells that use those opcodes, and rely on them for their graphics, will suddenly lose their visuals on the target creature).
  3. I think there was some confusion with what I said in the SR thread — Detect Illusions uses Opcode #220, which is the full spell-school dispel. The secondary type isn't used, if a spell has Illusionist as its primary type it'll get dispelled. (The secondary-type dispel opcode is #221, I probably should have clarified which one I was talking about)
  4. The spell-dispelling part is just a mass-applied Opcode #220 with these params: Param1 -> 9 Param2 -> 5 probabilityLower -> 0 probabilityUpper -> nDetectIllusion skill value
  5. TargetUnreachable() only returns true if an attacker, (either using weapons or spells), suddenly loses the ability to target what it is attacking - given some specific circumstances: Attack() - Attacker can't see invisible creatures, and target either went STATE_INVISIBLE or went under sanctuary. Spell() - Target is a sprite (creature), the caster isn't the target, caster can't see invisible creatures, spellFlags & 0x1000000 == 0, and target either went STATE_INVISIBLE, STATE_IMPROVEDINVISIBILITY, or went under sanctuary. UseItem() - Target is a sprite (creature), the caster isn't the target, caster can't see invisible creatures, abilityFlags & 0x4000000 != 0, and target either went STATE_INVISIBLE, STATE_IMPROVEDINVISIBILITY, or went under sanctuary. This basically mirrors Auto-Pause: Target Gone, (listed as "Character's Target Destroyed" in the Auto-Pause menu), except it doesn't trigger on target death.
  6. Normal specialist bonuses directly modify the save bonus of outgoing effects, but I think I've got an on-target method working: 1) All spells that acknowledge this bonus should have an Opcode #326 (as the first effect) that invokes a subspell. 2) The subspell ability projectile must be '0', else the engine uses an internal projectile that delays the effect application. 3) Put one of the saving throw bonus opcodes (#33-37) in the subspell, using Param2 = 3. The IESDP doesn't list this parameter value, but it is an INCREMENT variant that allows the saving throw to be updated within the current spell application, (normally this cannot be done with stats). 4) To prevent multiple spells that use this mechanism from stacking their modifications if they hit at the same time, another subspell needs to be applied at the end of the top-level spell which reverses the saving throw bonus, (using the same #33-37 opcode, just with an inverted value). The #326 and #33-37 opcodes should all be Instant/Limited, Duration=0. From my limited testing, the above seems to achieve the desired effect. Edit: I just checked - the IESDP lists Param2 = 3 for Opcode #325, but it also applies to the individual ones I listed.
  7. To start off, I have little to no experience with how the IE multiplayer functions. The problem I am currently up against is EEex - it currently only works correctly in singleplayer, becoming desynced in multiplayer when being run on anyone who isn't the host. I was going to dive into the problem blind, but I figured it might be beneficial to pick the wisdom of the community before I waste a couple of days. So, some of my inquiries/assertions are as follows: 1) I assume both the host and client(s) need identical game files, right? 2) How do scripts behave while in multiplayer? I see actions such as MultiPlayerSync(), which leads me to believe that each player's game instance is running the scripts separately. Obviously the scripts should be 100% identical if this is what happens, (and some EEex stuff might only be safe to run host-side). 3) How does the engine synchronize host-client state? Is the game run in its entirety on the host, only syncing to clients? Do both the host and the client run the game individually, frequently syncing up? The MultiPlayerSync() argument above would make me believe the latter to be the case, but I really have no idea. I'm not sure if this question is pertinent to normal modding, so I'm mentally preparing to go down an engine rabbit-hole to figure this one out. 4) While I'm at it, are there any technical pitfalls to watch out for when making a mod with multiplayer in mind? Any insights would be appreciated! (And yes, I put my fake list under a bullet to get indentation, this formatting is killing me)
  8. Could you please describe these crashes and provide the corresponding crash .dmp's? I'm grateful for all of the installs here trying out EEex, it is exactly what is required to battle-harden, and bug-proof a mod. EEex is perfectly stable in vanilla, but as you have seen, the vast amount of mods available for the IE can interact with EEex in unexpected ways. The one thing I will stress, (and I don't mean this in an accusatory way, so please don't take it as such), is that reporting a crash/bug is very important. Sure, there might be unknown crashes, and that sucks, but they will never be fixed if they aren't reported. As for the multiplayer talk with EEex, sadly EEex doesn't handle multiplayer very well right now - I'll try to improve this in the next major version bump.
  9. STATDESC.2DA looks up the entry based on the index number + column heading, so yes, in this 2DA it actually matters.
  10. Correct - you can do something like this: Append to the very top of UI.MENU => Use WeiDU to replace this part of UI.MENU: with => This patch works for the vanilla UI, (it might break if a UI mod alters the wrong part of WORLD_ACTIONBAR). You can then, in scripts, check if Party AI is enabled with: Global("B3PartyAI","GLOBAL",1) Zero being disabled, of course. I always forget that PST:EE had some unique features; I agree, would be nice if some of those were merged into the normal EE branch.
  11. I'm afraid it's impossible in classic games. The only place the engine exposes such information is to the UI in v2.0+ Enhanced Edition games, (to render the button on the worldscreen in the correct state). It would be possible to rig UI.MENU to toggle a GLOBAL according to the current state of the party AI, but that's about it.
  12. EEex crashes almost always generate a .dmp, a freeze with no crash report is usually the engine entering an infinite loop. Would be strange if EEex is causing these stalls, but since there's no generated .dmps for me to look at I can't tell if it's EEex or not. If you do ultimately narrow it down to EEex I'll gladly try to reproduce the bug and squash it. An interesting thing to try would be to manually install EEex on top of your working install. If it starts crashing, totally EEex. You can always uninstall to get everything back to working order.
  13. @subtledoctor Here's an updated B3Identify.tph that should be compatible with lefreut's wonderful UI, (and all of its skins)!
  14. Yep, the relevant spells will probably bring up a broken contingency screen instead of redirecting to the identification menu, since that part of the code failed to get inserted. @Cahir Most likely it's Lefreut's that's conflicting, I'll try to update my utility to support it.
  15. @Cahir A user on the Beamdog forums alerted me to a crash that occurred when the Extended Skills component was installed, (it actually was an engine bug, not EEex, but I digress). You should probably make sure your install is using EEex v0.8.6-alpha, or you might experience a rare crash now and then.
  • Create New...