Jump to content

kjeron

Members
  • Posts

    485
  • Joined

  • Last visited

Everything posted by kjeron

  1. The feedback string "You cannot cast multiple instances of the same contingency spell on yourself" is no longer displayed in v2.6 (possibly related to this). An instance of op232 will block all subsequent effects with the same parent resource. You need to put op232 in an EFF and call it via op177 to bypass this, while keeping the op321 as the first effect to avoid stacking. Global effects do not register a parent resource, which is why you saw a difference using that. If you want to avoid the feedback "A contingnecy spell has fired", the special field must be an even value.
  2. BG1/2EE Bear speed is 9, IWDEE Bear speed is 4 (same as zombie). Wolves have 8 movement in all games. There is however an issue comparing these values to player movement speed: PC race animations had 6 movement in BG1. This was increased 50% (9) in BG2 for QoL, and subsequently the EE's. AFAIK no other animations received this arbitrary increase.
  3. I vote to leave UI-overhauls to incorporate any such fixes on there end, as they would most likely have to do so anyway. #3 Would make it a lot harder for non-overhaul mods to patch UI.menu, as the relevant code may no longer be there. @DavidW I take it the only difference between #1, #2 & #4 would be how the patch is coded, with (ideally) the same resulting UI.Menu? To add to the list of UI.menu fixes: IWDEE needs scrolling in the sequencer menu, to display more than 12 memorized spell for a given level.
  4. The behavior was altered because it broke other items (those that provide spell slots), while the staff's invisibility can still be reactivated by switching. Clicking the quickslot button would re-equip the weapon, which would first removed its effects. That momentary loss of spell slots would unmemorize whatever spell occupied them. Since clicking the equipped quickslot button is intended and necessary to issue a forced-attack/bash action, it shouldn't be tied to other mechanics (re-equipping).
  5. Those two can easily be repurposed to achieve that. Each of their polymorph weapons would be given an immunity effect (op318) with a resource (SubA) shared by all for that spell. SPWI489/SPIN150 would be setup as such: op177: resource = SubA (SubA EFF: op318, resource=SPWI489/SPIN150, parent = SubA) op146: resource = (shared natural form) If one of their items is equipped, the natural form ability is applied, otherwise it's not. Both SPWI489/SPIN150 would require a different "SubA" EFF/resource name. This is something a (single) spellstate could accomplish, using op335. By giving every voluntary polymorph weapon the same 335 effect (same spellstate) with resource=(same natural form ability), the ability will automatically be given when you create the item & removed when you remove the weapon. You would always and only have the natural form ability while polymorphed in any voluntary form. The 0-second delay I referenced prior will also get around the issues op335 has regarding using the same spellstate. If the shared natural form ability removes that damage, then there doesn't need to be a separate ability, nor does it need to block any other polymorph/shapechange ability, voluntary or hostile. If the normal weapon-creation spells continue to cancel polymorphs (at least voluntary ones), they can cast (op326) the same natural form ability (if POLYMORPHED stat = 1), right before opcode 111, to remove those effects as well, with a momentary (0-duration) immunity to op135 so the newly created weapon doesn't get cleared.
  6. But that is easily avoidable by ordering the effects as necessary. A 0-second delay (timing=4,duration=0) after removing the old before applying the new will avoid that bug. For example, the unified natural form ability would contain: op135, target=2, all other fields 0/empty (aside from probability1). // Remove any existing p2=0 polymorph and any item in the magical weapon slot. op321: resource=(???) // Remove slayer-change delayed damage effects. // if necessary 2x op215: POLYFORM and POLYBACK // remove these effects from every other ability. 2x op172: resource=Breathe Fireball, resource=Psionic Blast // optional - alternate method available with op335, but uses a spellstate. Any given polymorph/shapechange ability would contain: (global): op172, op171: resource=(this ability) // refresh ability, Polymoph Self and Shapechange, and any other unlimited/at-will abilities. op146: timing=0, duration=0, saving throw(if hostile), resource=(unified natural form) // removes old polymorph, provides visual fx, removes form-specific innates. op111: timing=4, duration=0, saving throw(if hostile), resource=(item) // if permanent duration. op146: timing=4, duration=0, saving throw(if hostile), resource=(subspell with op111 and a duration) // if non-permanent duration. That's all you need. As long as op135 is an equipped effect on the weapon, the drow illusion will override your appearance/animation but not the polymorph stats.
  7. STAT POLYMORPHED already exists, why waste spellstates for this. There's no reason for the voluntary Slayer Change to block other polymorph/shapechanges. The involuntary Slayer Change already comes with losing player control, so there is no risk of canceling that. Adalon's Drow illusion is just that - an illusion. It should override the appearance of any polymorph/shapechange. The numerous "Human/Natural Form" abilities need to go, condensed into a single ability.
  8. kjeron

    Opcode 183?

    The monk's fists are both always equipped (similar to non-weapon slots) and actively equipped (selected as the active weapon). Any equipped effect on them will therefor be doubled while they are selected as they active weapon, it's nothing specific to op183. For op345, just apply it to your character with op177, special=1(mainhand), parameter4=28 (Fists/Hand to Hand). op178/179 don't allow for weapon-specific function, while the effect is active and target is valid, they affect all weapon attacks. Again though, nothing related to op183.
  9. @ptifab I think you tagged wrong person, but I think you're correct about both bugs.
  10. Could you also provide a concrete example of this? If I understand correctly, the vanilla Contingency spells will now remove a previous instance of themselves if recast before they have triggered. Probably was a cleaner solution than working with subspells to do the same with op321.
  11. IIRC, you only get 1st level proficiency values when going from level 0 to level 1. If you jump from level 0 to any other level, you skip the 1st level proficiency gains.
  12. Which game are you trying this on? Its working fine an all EE games.
  13. Reading the 50-100k+ files isn't what takes time, it's the patching done to each file that meets those criteria that can take a while, and likely needs optimization.
  14. Sorting the display of container contents is a rather easy, one line function. However, keeping it sorted is another matter, as clicking on just about anything in that screen will reset the store table, so you might have to hijack the entire store screen, at least while IsContainer().
  15. The "ChangeStat()" action only works for stats that can be set directly on the CRE file by similar opcodes. Proficiency stats cannot be set this way (the CRE file doesn't even have a dedicated place for them). Proficiency must be set via effects, op233. CRE files do have a place for the original BG1 proficiency, and while they work, there is no way to manipulate them in game.
  16. You can alternatively use "Trim BAM frames", Left only, 4-6 pixels. The second frame isn't used, so there's not harm in altering it as well.
  17. DEFINE_ACTION_FUNCTION CLONE_ARRAY STR_VAR array = ~~ RET_ARRAY EVAL ~%array%~ BEGIN END LAF CLONE_ARRAY STR_VAR array = ~old~ RET_ARRAY new = old END Simple method to clone array "old" into array "new" with the new RET_ARRAY feature. Is there another, more direct way to do this? It seems like such a feature should have already existed.
  18. Golem spell immunity is poorly implemented as 100% Magic Resistance. Most weapons with elemental damage bypass MR, except for arrows and bolts. Oils and potions (of burning/exploding) don't bypass MR either. Ravenloft Flesh golems are fully susceptible to direct damage from spells (aside from their specific elemental immunities - cold/electricity), but immune to all other spell effects. Non-Ravenloft Flesh golems are slowed by fire/cold spells (but not damaged), and healed by electricity, but immune to all other spells. So if they are going to require Acid/Fire to destroy (something exclusive to the Ravenloft variety), then you should allow spells to damage them (if nothing else drop their magic resistance while they are downed). @Angel Some of the "fix_creatures" functions are altering stats incorrectly. i.e. A L8 Shaman had it's save vs. breath altered from 13(correct) to 12(wrong). You may not have an updated version to account for Shaman class, as that value is correct for warriors (which I believe it defaults to). Several creatures with Saving throws of 20 for all 5 stats were also altered. A full set of 20 saving throws should be left as is. This prevents a creature from generating savingthrow feedback (by automatically failing all saving throws, regardless of any bonus). It's sort of like 100 difficulty for traps/locks.
  19. Reflection occurs before immunity (with one exception - op83), so if Minor Spell Turning is still setup to reflects spells instead of deflecting them, it has purpose, though I would still argue that a Rakshasa should be immune to Minor Spell Turning anyway as it's only a L5 spell. Sadly that is not entirely true. The reflect/deflect/trap mechanics are horribly broken, they would have the potential to reflect spells up to 8th level (still single target). Rakshasa -> Minor Spell Turning (+innate immunity/op102 to level 1-8 spells). Player -> Sequencer w/(larloch's minor drain & finger of death) // could alternatively cast them back to back under improved alacrity. Both will get reflected if larloch's hits first, while only stripping 1 level of reflection. The only requirements are that both spells have the same source (creature, not spell), the same projectile, the first to strike is reflected, the second to strike is reflected/deflected/trapped by *any* effect on the target, and that they strike the target within the same 25 tick window that reflection/deflection/trapping operate in (12.5t if hasted, 50t if slowed). This is all EE behavior, original may differ.
  20. ADD_MEMORIZED_SPELL ~%spell_res%~ #%stkl% ~wizard~ -> ADD_MEMORIZED_SPELL ~%spell_res%~ (stkl) ~wizard~
  21. It's a weird requirement, but that specific field always needs to be in ALLCAPS. Be careful checking in Near Infinity, it displays resource fields in ALLCAPS regardless of the actual characters. However, it also always saves those field in ALLCAPS as well.
  22. EFF: parent type = 1(spell) parent resource = "%RESOURCE%" // ALLCAPS op206: resource = "%resource%" // case insensitive The setup you describe works, at least in the EE's, I don't know if it works in the original games. Might be an unrelated error. Equipped effects (timing=2) do not show up in save games, at all. They are not actually saved, but are reapplied from the item upon loading.
  23. Don't worry, it's just a line in the animation's INI file, nothing hardcoded. [ambient] false_color=1 invulnerable=1 // <-- switch to 0 for all your massacring needs list_type=0 path_smooth=0 resref=NBOYH
  24. %WNL% is a combination of both return characters, within a [ ] it should match any of them. I think the issue is related though, the ^ symbol doesn't consider anything after a lone "\r" as a new line, then again, neither does the game engine, so it shouldn't be used here anyway. This trigger in a dialog cannot compile: CheckSpellState(Myself,NEW_SPELLSTATE) if the index for NEW_SPELLSTATE in SPLSTATE.ids is preceded with a lone "\r", instead of "\r\n" or "\n": 149 OLDER_SPELLSTATE\r\n150 OLD_SPELLSTATE\r151 NEW_SPELLSTATE\r\n152 NEWER_SPELLSTATE
  25. It looks that way, but I don't see how, after checking for an existing FIND_TRAPS entry, it's a crude but simple loop: OUTER_FOR (i = 0; i < 256; ++i) BEGIN ACTION_IF !FILE_CONTAINS_EVALUATED (~SPLSTATE.IDS~ ~^%i%[ %TAB%]+[^ %TAB%%WNL%$]+[ %TAB%%WNL%$]~) BEGIN APPEND ~SPLSTATE.IDS~ ~%i% %label%~ OUTER_SET new_ids = i OUTER_SET i = 300 END END and "145 D5_NEW_PROFS" certainly meets the FILE_CONTAINS_EVALUATED for i=145. Function hasn't changed since at least v0.03.
×
×
  • Create New...