Jump to content

kjeron

Members
  • Posts

    485
  • Joined

  • Last visited

Posts 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. 23 minutes ago, jmerry said:

    Yes and no. Some of them can be condensed, some of them shouldn't. In particular, Polymorph Self and Shapechange come with forced transformations back (SPWI489, SPIN150) when the duration expires. Those should be their own spells, with a spellstate block so they only apply if you're in a Polymorph Self/Shapechange form and don't accidentally override a magic weapon spell or a different transformation.

    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.

    23 minutes ago, jmerry said:

    Also, in the current model, the voluntary Natural Form abilities for Polymorph Self and Shapechange renew themselves when you use them; I don't see the need for that, but if we keep it then those abilities (SPWI490, SPIN151) need to be separate as well.

    On the other hand, we don't really need to be using all of SPIN122, SPIN123, SPIN124, and SPINHUM (druid natural form abilities).

    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.

    23 minutes ago, jmerry said:

    The voluntary Slayer Change does block other polymorph/shapechanges (most of them, anyway), and there is a good reason. In particular, transforming out of that form - whether voluntarily or involuntarily - doesn't clear the delayed magic damage effects.

    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. 13 hours ago, Luke said:

    True, but you can only set it via op135, p2=0 (Change into)... But that is bugged when you shapechange between two different non-natural forms...

    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.
    5 hours ago, DavidW said:

    I think there is a way of reconciling all of these (I admit I haven't tested it). First, standardize on the shapeshifts-live-on-items model

    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. 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. 7 hours ago, Luke said:
    On 3/25/2022 at 1:44 AM, Bubb said:

    2) New to v2.6, when:

    1. Starting Spell()
    2. And the resref being cast (first 7 letters) is a parent resource of an active op232 effect on the caster
    3. And the active op232 originated from op234 [param2=0/1] or was defined with [Extra | 1] or [param3 != 0]

           => Remove the active op232, (only remove one instance, even if more would have met the above)

    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.

  10. 1 hour ago, subtledoctor said:

    BUT, there seems to be some weirdness with proficiencies. I tried changing both Imoen and Jaheira into fighters at the beginning of BG2, and it properly turned them into level 0 fighters... but it only gave them two proficiency points to spend, instead of four.  I have no earthly idea why that would be.  @kjeron, any potential insight here?

    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.

  11. 4 hours ago, subtledoctor said:

    When I do this:

    ChangeStat(LastSummonerOf(Myself),"LEVEL",0,SET)
    ChangeStat(LastSummonerOf(Myself),"LEVEL2",0,SET)
    ChangeStat(LastSummonerOf(Myself),"LEVEL3",0,SET)

    ...the game crashes. I know that's a little weird, and unusual, but if anyone has any experience with this and can think of a way to become level zero inside the game, I'd appreciate it.

    Which game are you trying this on?  Its working fine an all EE games.

  12. 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.

  13. 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.

  14. 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.

    5 hours ago, Christian said:

    After carefully reading the spell descriptions it turns out, that you are right. Minor spell turning won´t affect spells of lv5 (Domination) and higher and minor spell deflection won´t help with lv7 and higher. I honestly didn´t know that until now.

    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).

    1. Rakshasa -> Minor Spell Turning (+innate immunity/op102 to level 1-8 spells).
    2. Player -> Sequencer w/(larloch's minor drain & finger of death) // could alternatively cast them back to back under improved alacrity.
    3. 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.

  15. 28 minutes ago, subtledoctor said:

    Huh, maybe it’s not in all-caps, that’s an obvious possibility that I should double-check. 

    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.

  16. 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.

  17. 8 minutes ago, Bartimaeus said:

    It's borderline unconstitutional that I can't chunk children anymore. Literally unplayable - thanks, Beamdog.

    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
  18. 53 minutes ago, DavidW said:

    A return character other than %WNL%, perhaps? 

    %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
  19. 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...