Skip to content

General mod Questions thread

1394042444570

Comments

  • The user and all related content has been deleted.
  • BubbBubb Member Posts: 1,000
    kjeron wrote: »
    Disease/Poison/Regeneration are all frequency effects, curious - is ApplyEffect the equivalent for opcode 272?
    Just checked - it is indeed linked to Opcode #272.
    kjeron wrote: »
    Which leaves Damage and Move.
    Move is constructed by Opcode #235

    Looking closer at Damage, it actually isn't a standalone effect. It's a class that contains a single function: SlowPoison(). This function is called by:

    CGameEffectDisease
    CGameEffectPoison
    CGameEffectRegeneration
    CGameEffectRepeatingApplyEffect

    Depending on the type it can modify the effect's poll frequency by a factor, and can even modify how powerful the effects are.
  • kjeronkjeron Member Posts: 2,367
    Bubb wrote: »
    Move is constructed by Opcode #235
    So it's Wing Buffet - I was torn between that and opcode 186.
    Bubb wrote: »
    Looking closer at Damage, it actually isn't a standalone effect. It's a class that contains a single function: SlowPoison(). This function is called by:

    CGameEffectDisease
    CGameEffectPoison
    CGameEffectRegeneration
    CGameEffectRepeatingApplyEffect

    Depending on the type it can modify the effect's poll frequency by a factor, and can even modify how powerful the effects are.
    Interesting, as the Slow Poison opcode only interacts with Poison(op25) - though all 4 opcodes use the field it modifies in the same manner (parameter4 in v2.5, special in v2.3/earlier).
    When I tested it, the Slow Poison opcode literally just overwrote that field in any Poison effects attached to the creature. It was thus useless if the Poison effect was called through op177/EFF pair. It was also useless against poison if it used p2=(0 or 1), as that mode wasn't influenced by the field it modifies (for any of the opcodes).
    So I would guess that it's those opcodes calling the function based on that field (parameter4/special), and not the SlowPoison opcode.
  • RaduzielRaduziel Member Posts: 4,714
    edited February 2019
    About the specialist save penalty simulation...

    The code now installs smoothly, but the effects are nowhere close to what I expected.

    Here's the coding that adds the #326.

    
    LPF ADD_SPELL_EFFECT INT_VAR header = (i + 1) opcode = 326 target = 1 parameter1 = %RAUS_code% parameter2 = %RAUS_row% timing = 1 insert_point = 0 STR_VAR resource = EVAL ~RAUS2~ END
    
    

    RAUS2 is a spell with a single effect:

    Target: Creature - everything else in the header is 0.

    Effect 1: Opcode 325; p1 = -2; target = 2; duration = 3000 (for testing, but I will knock it down to 1).

    I'll actually trade Opcode 325 for Opcode 346 (special = 7), this way is safer to guarantee that only a necromancy spell will get this bonus.

    ---

    Expected behavior: Target creature's STs are raised by 2 - what means a penalty (if it was 15, should go to 17).

    Observed behavior: Caster's STs are raised by 4 (if it was 15 it is going to 18).

    No, I'm not kidding.

    Any insights?


    A very reliable source told me that what I want to do can't be done. So I'm moving on and leaving this idea behind.

    Thanks everyone.
    Post edited by Raduziel on
  • QuickbladeQuickblade Member Posts: 957
    edited February 2019
    I have one.

    "How do Shadowdancers have Hide in Plain Sight, and can it be duplicated?" If possible, as a HLA or at 17th circle per 3.5E for Ranger.

    I know it can be done simply be Keepering a character to the Shadowdancer kit, even if not a Thief, but that eliminates the ability to take a Ranger kit, or any other kit, meaning I can't use 'Deities of Faerun' or 'Faiths and Powers'.
  • The user and all related content has been deleted.
  • BubbBubb Member Posts: 1,000
    The engine is rigged to allow any kit with a KITIDS ending in 21 (hex) to hide in plain sight. I assume the other kits also have hardcodedness associated with their ids so I guess you can't add it to them; though it might be possible to make a new kit with shadowdancer abilities by ending it in 21.
  • QuickbladeQuickblade Member Posts: 957
    Quickblade wrote: »
    I have one.

    "How do Shadowdancers have Hide in Plain Sight, and can it be duplicated?" If possible, as a HLA or at 17th circle per 3.5E for Ranger.

    I know it can be done simply be Keepering a character to the Shadowdancer kit, even if not a Thief, but that eliminates the ability to take a Ranger kit, or any other kit, meaning I can't use 'Deities of Faerun' or 'Faiths and Powers'.

    I think that's the only way. IIRC HiPS is hard-coded to only work for that kit, period.

    You could give yourself innate at-will Sanctuary or Invisibility, or console in a crap-ton of Invisibility potions, or something like that... with sufficiently high Stealth (which you will have at HLA levels) there's no real difference.

    Rangers cap at 99 Stealth @13th. It's high, but not really impossible to fail out of shadows and with armor penalties.

    But that's unfortunate, because those options are less desirable than the Stealth button, because it would be clunky with the 1 spell/item per turn "aura".

    Maybe an innate at-will invis with a 6 second aura-cleanse? Would that be feasible?
  • RaduzielRaduziel Member Posts: 4,714
    Bubb wrote: »
    The engine is rigged to allow any kit with a KITIDS ending in 21 (hex) to hide in plain sight. I assume the other kits also have hardcodedness associated with their ids so I guess you can't add it to them; though it might be possible to make a new kit with shadowdancer abilities by ending it in 21.

    Is there a way to ensure that a kitid will end in 21?
  • The user and all related content has been deleted.
  • RaduzielRaduziel Member Posts: 4,714
    Can someone tell me why this code is chocking?
    COPY_EXISTING_REGEXP ~^.+\.spl$~ override
    PATCH_FOR_EACH label IN
    	~CLERIC_BLESS~
    	~CLERIC_CURE_LIGHT_WOUNDS~
    	~CLERIC_DETECT_EVIL~
    	~CLERIC_PROTECT_FROM_EVIL~
    	~CLERIC_REMOVE_FEAR~
    	~CLERIC_ARMOR_OF_FAITH~
    	~CLERIC_SPIRIT_WARD~
    	~CLERIC_PROTECT_FROM_GOOD~
    	~CLERIC_AID~
    	~CLERIC_BARKSKIN~
    	~CLERIC_FIND_TRAPS~
    	~CLERIC_GOOD_BERRIES~
    	~CLERIC_KNOW_ALIGNMENT~
    	~CLERIC_RESIST_FIRE~
    	~CLERIC_SLOW_POISON~
    	~CLERIC_GOODBERRY~
    	~CLERIC_RESIST_FIRE_AND_COLD~
    	~CLERIC_CURE_MODERATE_WOUNDS~
    	~CLERIC_PROTECTION_FROM_FIRE~
    	~CLERIC_REMOVE_CURSE~
    	~CLERIC_REMOVE_PARALYSIS~
    	~CLERIC_INVISIBILITY_PURGE~
    	~CLERIC_CURE_MEDIUM_WOUNDS~
    	~CLERIC_CURE_DISEASE~
    	~CLERIC_ZONE_OF_SWEET_AIR~
    	~CLERIC_EXALTATION~
    	~CLERIC_STORM_SHELL~
    	~CLERIC_FAVOR_OF_ILMATER~
    	~CLERIC_SPIRITUAL_CLARITY~
    	~CLERIC_CURE_SERIOUS_WOUNDS~
    	~CLERIC_FREE_ACTION~
    	~CLERIC_NEUTRALIZE_POISON~
    	~CLERIC_DEFENSIVE_HARMONY~
    	~CLERIC_PROTECTION_FROM_LIGHTNING~
    	~CLERIC_PROTECTION_FROM_EVIL_10_FOOT~
    	~CLERIC_DEATH_WARD~
    	~CLERIC_NEGATIVE_PLANE_PROTECTION~
    	~CLERIC_FAR_SIGHT~
    	~CLERIC_LESSER_RESTORATION~
    	~CLERIC_UNFAILING_ENDURANCE~
    	~CLERIC_CURE_CRITICAL_WOUNDS~
    	~CLERIC_RAISE_DEAD~
    	~CLERIC_TRUE_SIGHT~
    	~CLERIC_IRONSKIN~
    	~CLERIC_CHAOTIC_COMMANDS~
    	~CLERIC_MAGIC_RESISTANCE~
    	~CLERIC_MASS_CURE~
    	~CLERIC_REPULSE_UNDEAD~
    	~CLERIC_PIXIE_DUST~
    	~CLERIC_SHIELD_OF_LATHANDER~
    	~CLERIC_UNDEAD_WARD~
    	~CLERIC_RECALL_SPIRIT~
    	~CLERIC_HEAL~
    	~CLERIC_WONDROUS_RECALL~
    	~CLERIC_PHYSICAL_MIRROR~
    	~CLERIC_ENTROPY_SHIELD~
    	~CLERIC_SHIELD_OF_THE_ARCHONS~
    	~CLERIC_REGENERATE~
    	~CLERIC_RESURRECTION~
    	~CLERIC_RESTORATION~
    	~CLERIC_MASS_RAISE_DEAD~
    	~CLERIC_IMPERVIOUS_SANCTITY_OF_MIND~
    	~CLERIC_GREATER_SHIELD_OF_LATHANDER~
    	~CLERIC_MIST_OF_ELDATH~
    	~WIZARD_ARMOR~
    	~WIZARD_FRIENDS~
    	~WIZARD_IDENTIFY~
    	~WIZARD_INFRAVISION~
    	~WIZARD_PROTECTION_FROM_EVIL~
    	~WIZARD_SHIELD~
    	~WIZARD_REFLECT_IMAGE~
    	~WIZARD_EXPEDITIOUS_RETREAT~
    	~WIZARD_BLUR~
    	~WIZARD_DETECT_EVIL~
    	~WIZARD_DETECT_INVISIBILITY~
    	~WIZARD_INVISIBILITY~
    	~WIZARD_KNOCK~
    	~WIZARD_KNOW_ALIGNMENT~
    	~WIZARD_LUCK~
    	~WIZARD_RESIST_FEAR~
    	~WIZARD_MIRROR_IMAGE~
    	~WIZARD_VOCALIZE~
    	~WIZARD_CHAOS_SHIELD~
    	~WIZARD_CATS_GRACE~
    	~WIZARD_PROTECTION_FROM_PETRIFICATION~
    	~WIZARD_CLAIRVOYANCE~
    	~WIZARD_HASTE~
    	~WIZARD_INVISIBILITY_10_FOOT~
    	~WIZARD_NON_DETECTION~
    	~WIZARD_PROTECTION_FROM_NORMAL_MISSILES~
    	~WIZARD_GHOST_ARMOR~
    	~WIZARD_MINOR_SPELL_DEFLECTION~
    	~WIZARD_PROTECTION_FROM_FIRE~
    	~WIZARD_PROTECTION_FROM_COLD~
    	~WIZARD_DETECT_ILLUSION~
    	~WIZARD_DIMENSION_DOOR~
    	~WIZARD_IMPROVED_INVISIBILITY~
    	~WIZARD_MINOR_GLOBE_OF_INVULNERABILITY~
    	~WIZARD_STONE_SKIN~
    	~WIZARD_REMOVE_CURSE~
    	~WIZARD_SPIRIT_ARMOR~
    	~WIZARD_MINOR_SEQUENCER~
    	~WIZARD_TELEPORT_FIELD~
    	~WIZARD_FAR_SIGHT~
    	~WIZARD_EYE~
    	~WIZARD_EMOTION_HOPE~
    	~WIZARD_EMOTION_COURAGE~
    	~WIZARD_SHADOW_DOOR~
    	~WIZARD_SPELL_IMMUNITY~
    	~WIZARD_PROTECTION_FROM_NORMAL_WEAPONS~
    	~WIZARD_PROTECTION_FROM_ELECTRICITY~
    	~WIZARD_ORACLE~
    	~WIZARD_PROTECTION_FROM_ACID~
    	~WIZARD_SPELL_SHIELD~
    	~WIZARD_MINOR_SPELL_TURNING~
    	~WIZARD_CONTACT_OTHER_PLANE~
    	~WIZARD_GLOBE_OF_INVULNERABILITY~
    	~WIZARD_PROTECTION_FROM_MAGIC_ENERGY~
    	~WIZARD_TRUE_SIGHT~
    	~WIZARD_PROTECTION_FROM_MAGIC_WEAPONS~
    	~WIZARD_IMPROVED_HASTE~
    	~WIZARD_CONTINGENCY~
    	~WIZARD_SPELL_DEFLECTION~
    	~WIZARD_STONE_TO_FLESH~
    	~WIZARD_TROLLISH_FORTITUDE~
    	~WIZARD_SPELL_TURNING~
    	~WIZARD_PROTECTION_FROM_THE_ELEMENTS~
    	~WIZARD_MANTLE~
    	~WIZARD_SPELL_SEQUENCER~
    	~WIZARD_MASS_INVISIBILITY~
    	~WIZARD_LIMITED_WISH~
    	~WIZARD_IMPROVED_CHAOS_SHIELD~
    	~WIZARD_SEVEN_EYES~
    	~WIZARD_MIND_BLANK~
    	~WIZARD_PROTECTION_FROM_ENERGY~
    	~WIZARD_IMPROVED_MANTLE~
    	~WIZARD_SPELL_TRIGGER~
    	~WIZARD_IRON_BODY~
    	~WIZARD_SPELL_TRAP~
    	~WIZARD_ABSOLUTE_IMMUNITY~
    	~WIZARD_CHAIN_CONTINGENCY~
    	~WIZARD_FREEDOM~
    	~WIZARD_WISH~
    	~WIZARD_IMPROVED_ALACRITY~
    	PATCH_IF	FILE_CONTAINS_EVALUATED	(~SPELL.IDS~	~[ %TAB%]%label%[ %TAB%%WNL%%LNL%%MNL%$]~)	BEGIN
    	LPF RES_NUM_OF_SPELL_NAME STR_VAR	spell_name = EVAL ~%label%~	RET	spell_res	END
    	COPY_EXISTING ~%spell_res%.spl~ override
    	WRITE_BYTE 0x19 (THIS BAND 253)
    	BUT_ONLY IF_EXISTS
    	END
    

    Thanks!
  • ArdanisArdanis Member Posts: 1,736
    edited February 2019
    PATCH vs ACTION mismatch. Also I don't think you need to COPY_EXISTING_REGEXP GLOB?

    This will probably compile better
    ACTION_FOR_EACH label IN
      ~CLERIC_BLESS~
      // ... spell list
    BEGIN
      ACTION_IF FILE_CONTAINS_EVALUATED	(~SPELL.IDS~ ~[ %TAB%]%label%[ %TAB%%WNL%%LNL%%MNL%$]~)	BEGIN
        LAF RES_NUM_OF_SPELL_NAME STR_VAR spell_name = EVAL ~%label%~ RET	spell_res	END
        ACTION_IF FILE_EXISTS_IN_GAME ~%spell_res%.spl~ BEGIN
          COPY_EXISTING ~%spell_res%.spl~ override
            WRITE_BYTE 0x19 (THIS BAND 253)
          BUT_ONLY
        END
      END
    END
    
  • RaduzielRaduziel Member Posts: 4,714
    @Ardanis Thanks, that did the trick. :)
  • RaduzielRaduziel Member Posts: 4,714
    edited February 2019
    I have another general mod question.
    CREATE eff ~RADTF~
    
    COPY_EXISTING ~RADTF.eff~ override
    WRITE_SHORT 0x00 ~326~      // Effect
    WRITE_BYTE  0x02 ~0~        // Target
    WRITE_BYTE  0x03 ~0~        // Power
    WRITE_LONG  0x04 ~0~        // Parameter 1
    WRITE_LONG  0x08 ~1~        // Parameter 2
    WRITE_BYTE  0x0c ~2~        // Timing Mode
    WRITE_BYTE  0x0d ~0~        // Dispel/Resistance
    WRITE_LONG  0x0e ~0~        // Duration
    WRITE_BYTE  0x12 ~100~      // Probability 1
    WRITE_BYTE  0x13 ~0~        // Probability 2
    WRITE_ASCII 0x14 ~RADTF1~   // Resource
    WRITE_LONG  0x1c ~0~        // Dice count
    WRITE_LONG  0x20 ~0~        // Dice sides
    WRITE_LONG  0x24 ~0~        // ST type
    WRITE_LONG  0x28 ~0~        // ST bonus
    

    Why NI can't read this .eff? The values it shows are nuts

    PS: I've already tried without the ~.
  • kjeronkjeron Member Posts: 2,367
    edited February 2019
    Raduziel wrote: »
    I have another general mod question.
    CREATE eff ~RADTF~
    
    COPY_EXISTING ~RADTF.eff~ override
    WRITE_SHORT 0x00 ~326~      // Effect
    WRITE_BYTE  0x02 ~0~        // Target
    WRITE_BYTE  0x03 ~0~        // Power
    WRITE_LONG  0x04 ~0~        // Parameter 1
    WRITE_LONG  0x08 ~1~        // Parameter 2
    WRITE_BYTE  0x0c ~2~        // Timing Mode
    WRITE_BYTE  0x0d ~0~        // Dispel/Resistance
    WRITE_LONG  0x0e ~0~        // Duration
    WRITE_BYTE  0x12 ~100~      // Probability 1
    WRITE_BYTE  0x13 ~0~        // Probability 2
    WRITE_ASCII 0x14 ~RADTF1~   // Resource
    WRITE_LONG  0x1c ~0~        // Dice count
    WRITE_LONG  0x20 ~0~        // Dice sides
    WRITE_LONG  0x24 ~0~        // ST type
    WRITE_LONG  0x28 ~0~        // ST bonus
    

    Why NI can't read this .eff? The values it shows are nuts

    PS: I've already tried without the ~.

    Try increasing each offest by 0x10. Signature/Version come first in the file.
    Also, EFF files have different field sizes that spell/item effects - most fields are 4 bytes long, and in different order. In NI, go to Options->Show Hex Offsets, to see the offset for each field.
  • RaduzielRaduziel Member Posts: 4,714
    @kjeron Thanks.

    I was trying to make a thief who can backstab undead, but I just discovered that in IE undead can be backstabbed (at least in IWDEE)...

    Damn, it was such a nice idea.
  • The user and all related content has been deleted.
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    Raduziel wrote: »
    @kjeron Thanks.

    I was trying to make a thief who can backstab undead, but I just discovered that in IE undead can be backstabbed (at least in IWDEE)...

    Damn, it was such a nice idea.

    Isn't there a new backstab effect opcode?

    Yep, opcode #340.............
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    edited February 2019
    2. How do ability modifiers get applied and how are they displayed in the NI. Specifically:
    a) Is strength bonus applied in NI (THAC0 field) or does it work as some runtime effect in the game? Example: fighter level 7 has THAC0 14; if I want to create level 7 fighter with strength 17 (+1 to hit), do I set THACO 14 or 13 in NI?
    The latter. Stats like STR, DEX modify things in real-time. In the .CRE file you want to set the *base* values. So in this case, 14. In the case of DEX, 10.

    I guess this is true for attacks per round and opcode #233 too, right?
  • RaduzielRaduziel Member Posts: 4,714
    Raduziel wrote: »
    @kjeron Thanks.

    I was trying to make a thief who can backstab undead, but I just discovered that in IE undead can be backstabbed (at least in IWDEE)...

    Damn, it was such a nice idea.

    Isn't there a new backstab effect opcode? You could use some 318 trickery to have the thief do *more* damage when backstsbbing undead... or add some disabling effect, or something. Lots of possibilities.

    You're right. I'll see what I can do with #340. As undead are immune to a lot of effects I'll have to be tricky.

    Thanks!
  • RaduzielRaduziel Member Posts: 4,714
    edited February 2019
    I have a general modding question.

    If I use Opcode 337 (Remove Opcode), with a Duration X, will the Opcode return to the target after X or do I need to manually reapply it?

    If I DO need to manually reapply it, can I do so through Opcode 321 (removing the spell that removed the opcode) or I need to reapply the hard way (Opcode 101, Opcode 267, Opcode 169...)

    Thanks!
  • BubbBubb Member Posts: 1,000
    edited February 2019
    @Raduziel: Opcode #337 does a one-time remove of all opcodes matching the parameters and then terminates itself. Duration has no meaning to it, except to delay its execution on certain timing modes.

    You'll need to reapply the Opcodes you removed the hard way. I'm not sure how you are planning on using #101, #267 and #169 in order to achieve this though... once the opcode is removed it is gone forever. You would have to reapply its original source manually, and that has the lengthy drawback of actually knowing what its source was.
  • RaduzielRaduziel Member Posts: 4,714
    edited February 2019
    Bubb wrote: »
    @Raduziel: Opcode #337 does a one-time remove of all opcodes matching the parameters and then terminates itself. Duration has no meaning to it, except to delay its execution on certain timing modes.

    You'll need to reapply the Opcodes you removed the hard way. I'm not sure how you are planning on using #101, #267 and #169 in order to achieve this though... once the opcode is removed it is gone forever. You would have to reapply its original source manually, and that has the lengthy drawback of actually knowing what its source was.

    I'm reapplying what I'm removing.

    Here's what I'm doing (example: Berserker for undead creatures)

    Ignore all the p1 = 1, those are dummy values.

    Thanks for the feedback @Bubb :)
  • BubbBubb Member Posts: 1,000
    o

    Yeah, that should work :)
  • RaduzielRaduziel Member Posts: 4,714
    Bubb wrote: »
    o

    Yeah, that should work :)

    @Bubb

    As my instructor at the boot camp used to say:

    Nothing like stubbornness and brute force to compensate for the absolute lack of knowledge and talent!
  • switswit Member, Translator (NDA) Posts: 495
    edited February 2019
    Luke93 wrote: »
    What's the problem with the following script block? Its associated actions are never executed (tested against BJORNI.cre.....)
    IF
    	!GlobalTimerNotExpired("gt_kcdw","LOCALS")
    	AttackedBy(NearestEnemyOf(Myself),DEFAULT)
    	General(NearestEnemyOf(Myself),HUMANOID)
    	!Race(NearestEnemyOf(Myself),MEPHIT)
    	!CheckSpellState(NearestEnemyOf(Myself),BERSERKER_RAGE)
    	!CheckSpellState(NearestEnemyOf(Myself),BARBARIAN_RAGE)
    	!StateCheck(NearestEnemyOf(Myself),STATE_SLEEPING)
    	See(NearestEnemyOf(Myself))
    THEN
    	RESPONSE #100
    		SetGlobalTimer("gt_kcdw","LOCALS",ONE_ROUND)
    		ForceSpellRES("GTKCDW",LastSeenBy(Myself))
    		Continue()
    END
    

    [AttackedBy] Moreover, is it true that the style parameter is non functional (i.e., this trigger is triggered by any attack style?)

    The problem seems to be related to this trigger:

    AttackedBy(NearestEnemyOf(Myself),DEFAULT)
    If I remove it, then everything is fine.........
    huh, this sounds like an engine bug and not a small one. There are 50+ hits in vanilla BG2:EE scripts for AttackedBy(NearestEnemyOf(Myself),DEFAULT) alone, and all those blocks seems to be completly broken since AttackedBy trigger in this case always returns false.

    Here is a test case:
    IF
      AttackedBy(NearestEnemyOf(Myself),DEFAULT)
    THEN
      RESPONSE #100
        DisplayStringHead(LastAttackerOf(Myself),1)
        DisplayStringHead(Myself,2)
        Continue()
    END
    
    IF
      AttackedBy([ENEMY],DEFAULT)
    THEN
      RESPONSE #100
        DisplayStringHead(LastAttackerOf(Myself),3)
        DisplayStringHead(Myself,4)
        Continue()
    END
    

    Only second block dispalys meesages. No problems with See trigger. Probably worth reporting it on Beamdog redmine.
  • RaduzielRaduziel Member Posts: 4,714
    edited February 2019
    Is the monk broken?

    It was supposed to receive +2 (lv 1) plus +1 ST (lv 9) bonus vs. Spells and +1 AC vs. Missile every three levels, but I can't find anything in its CLAB that applies it.
  • kjeronkjeron Member Posts: 2,367
    edited February 2019
    Raduziel wrote: »
    Is the monk broken?

    It was supposed to receive +2 (lv 1) plus +1 ST (lv 9) bonus vs. Spells and +1 AC vs. Missile every three levels, but I can't find anything in its CLAB that applies it.
    Compare 'SAVEMONK.2DA' to 'SAVEPRS.2DA' - the bonuses are incorporated into it's normal progression.
    The AC vs. Missile bonus is hardcoded - it's only updated when a Monk levels up.
  • RaduzielRaduziel Member Posts: 4,714
    @kjeron Thanks for clarifying :)
  • RaduzielRaduziel Member Posts: 4,714
    Is there an equivalent of Opcode 324 that doesn't show the string "Unaffected by (...)"?

    Or a way to make this string go away while using Opcode 324?

    Thanks!
Sign In or Register to comment.