Jump to content

Angel

Modders
  • Posts

    729
  • Joined

  • Last visited

Posts posted by Angel

  1. Try it now. It may advertise at you, but closing the advertisement should leave you at a working download link.

    That fixed it, thanks. And kudos on doing the Lanthorn lenses quest. I wanted to add that to UB v27, but I guess I can save myself the trouble now. :-)

  2. Static Charge not working as designed is a known issue. From the readme, under "Known Issues":

     

    "Just like IWD-in-BG2, a small number of spells cannot currently be converted at all. The current list is: Seven Eyes, Soul Eater, (Great) Shout, Mordenkainen's Force Missiles, Spiritual Wrath, Mold Touch, Wall of Moonlight, and Smashing Wave. A few other spells are converted a bit suboptimally, and don't work quite the way they did in IWD. The current list is Blood Rage, Animal Rage, Static Charge, and Whirlwind."

     

    This is because the BG and IWD engines are not the same, there is a difference in which opcodes and projectiles are available, what they do and how they work. So unless someone steps up and hacks in the missing stuff, or thinks of a clever way to emulate the effects within the BG2 engine, not all spells can be converted one to one.

     

    As for Sunscorch, it works fine in my game (old BG2 with BGT). Already burned quite a few ghasts. :-)

  3. A few things I came across while I was creating a new sword for a mod:

    - The effect file lycnhit2.eff affects vampires, not lycanthropes like you'd expect.

    - The effect file undhit2.eff gives a +3 bonus instead of the expected +2.

     

    Impact is likely minimal as there are no items or spells using these in an unmodded game. (lycnhit3.eff, lycnhit4.eff, undhit1.eff and undhit3.eff function like you'd expect)

  4. replace_cre_script, find and replace a creature script

     

    Written out of frustration when trying to give ankhegs and winter wolves different scripts for their special attacks and finding that almost every single version of the critters had it in a different slot.

     

     

     

    DEFINE_PATCH_FUNCTION replace_cre_script
      INT_VAR
      check_override    = 1
      check_class        = 1
      check_race        = 1
      check_general        = 1
      check_default        = 1
      STR_VAR
      old_script        = ""
      new_script        = ""
      RET
      found
    BEGIN
      SET found = 0
    
      PATCH_IF check_override
      BEGIN
        READ_ASCII SCRIPT_OVERRIDE script
    
        PATCH_IF ("%script%" STRING_EQUAL_CASE "%old_script%")
        BEGIN
          WRITE_EVALUATED_ASCII SCRIPT_OVERRIDE "%new_script%"
          SET found = 1
        END
      END
    
      PATCH_IF check_class
      BEGIN
        READ_ASCII SCRIPT_CLASS script
    
        PATCH_IF ("%script%" STRING_EQUAL_CASE "%old_script%")
        BEGIN
          WRITE_EVALUATED_ASCII SCRIPT_CLASS "%new_script%"
          SET found = 1
        END
      END
    
      PATCH_IF check_race
      BEGIN
        READ_ASCII SCRIPT_RACE script
    
        PATCH_IF ("%script%" STRING_EQUAL_CASE "%old_script%")
        BEGIN
          WRITE_EVALUATED_ASCII SCRIPT_RACE "%new_script%"
          SET found = 1
        END
      END
    
      PATCH_IF check_general
      BEGIN
        READ_ASCII SCRIPT_GENERAL script
    
        PATCH_IF ("%script%" STRING_EQUAL_CASE "%old_script%")
        BEGIN
          WRITE_EVALUATED_ASCII SCRIPT_GENERAL "%new_script%"
          SET found = 1
        END
      END
    
      PATCH_IF check_default
      BEGIN
        READ_ASCII SCRIPT_DEFAULT script
    
        PATCH_IF ("%script%" STRING_EQUAL_CASE "%old_script%")
        BEGIN
          WRITE_EVALUATED_ASCII SCRIPT_DEFAULT "%new_script%"
          SET found = 1
        END
      END
    END
    

     

     

  5. A small cosmetic one for your consideration:

     

    The Boots of the North (boot03) display the Resist Fire/Cold icon (#26), but Protection from Cold (#25) would be much more appropriate since thet don't give fire resistance and the protection against cold they give is quite significant.

     

    Compare the Ring of Fire Resistance (ring02), and the Potion of Cold Resistance (potn22) which both use the protection icons. This is also the way these boots work in IWD1 (with G3 fixpack).

     

    (Personally I also don't like the Resist Fire/Cold icon, it looks to much like the Protection from Fire icon and it feels redundant to me.)

  6.  

    Prevent a spell from stacking with itself. Does not work with vanilla BG1 since it lacks opcode 206, but it does work with IWD1. Has to be given a match_opcode to find a suitable header to clone.

    I'd like to offer two refinements here, if I may. Both IWD1 and the EEs have superior ways of handling spell stacking, namely the 'Remove effects by resource' opcode (IIRC 254 for IWD, and 321 for EEs). Put it first in the effects stack (timing mode 0, duration 0) and you'll have a vastly superior stacking solution for the engines that support it. Second, I'd set the default match_opcode to 142--Fixpack patches 20+ spells to not self-stack, and 142 works for all but three of them.

     

    Heh, you certainly may! I've only recently begun to extend my meddlings to IWD1, so I have yet to learn all the subtleties of it. (Not that I claim to know them for BG, mind you!) As for the EE games, I have yet to touch them at all. It's on my to-do list, just hesitant to spend more money on games I already own. But knowing myself, I'll probably give in sooner or later. :-)

     

    I checked IESDP and it looks like you got the codes exactly right, so here's the adapted version:

     

     

     

    DEFINE_PATCH_FUNCTION prevent_spell_effect_stacking
      INT_VAR
      match_opcode        = 142
    BEGIN
      PATCH_IF ENGINE_IS "iwd1 how totlm"
      BEGIN
        LAUNCH_PATCH_FUNCTION CLONE_EFFECT
          INT_VAR
          match_opcode
          multi_match    = 1
          silent        = 1    // Don't care about warnings
          opcode        = 254    // Remove effects by resource
          timing        = 0    // Duration
          duration        = 0
          parameter1    = 0
          parameter2    = 0
          STR_VAR
          insert        = "first"
          resource        = "%SOURCE_RES%"
        END
      END
    
      PATCH_IF ENGINE_IS "bgee bg2ee"
      BEGIN
        LAUNCH_PATCH_FUNCTION CLONE_EFFECT
          INT_VAR
          match_opcode
          multi_match    = 1
          silent        = 1    // Don't care about warnings
          opcode        = 321    // Remove effects by resource
          timing        = 0    // Duration
          duration        = 0
          parameter1    = 0
          parameter2    = 0
          STR_VAR
          insert        = "first"
          resource        = "%SOURCE_RES%"
        END
      END
    
      PATCH_IF ENGINE_IS "bg2 tob"
      BEGIN
        LAUNCH_PATCH_FUNCTION CLONE_EFFECT
          INT_VAR
          match_opcode
          multi_match    = 1
          silent        = 1    // Don't care about warnings
          opcode        = 206    // Spell Effect: Immunity Spell
          parameter1    = RESOLVE_STR_REF ("Multiple castings of this spell have no effect.")
          parameter2    = 0    // Default (IWD1)
          STR_VAR
          insert        = "last"
          resource        = "%SOURCE_RES%"
        END
      END
    END
    
    

     

     

  7. My version of the "extend-o-matic", written for two personal mods, one that makes healing spells scale with level and the other to make Flame Blade behave as the 3E version. I'll probably switch to CamDawg's since it is superior. This one only works with spells that have a single header and does not update them in any way.

     

    EDIT: Forget mine, CamDawg's version is superior in every way. It even has a much cooler name. ^^

     

    Add a level-drain effect to an item or spell, and patch in a simulate for games that don't support opcode 216 (vanilla BG and IWD). The simulate lowers THAC0 by 2 and max. HP by 5 for 8 hours. Written for a personal mod to make Wraith Spiders more like their PnP version.

     

    EDIT: Turns out that in BG2, the level drain icon is set by the engine when opcode 216 is used. So, don't set it ourselves as it won't be removed.

     

     

    DEFINE_PATCH_FUNCTION add_energy_drain
    INT_VAR
    levels_drained			= 1
    BEGIN
      READ_ASCII 0x0000 signature (4)
      PATCH_MATCH "%signature%"
      WITH
      "ITM " WHEN ENGINE_IS "bg1 totsc iwd1 how totlm"
      BEGIN
        LAUNCH_PATCH_FUNCTION ADD_ITEM_EFFECT
          INT_VAR
          type			= 1	// Melee
          opcode			= 18	// HP: Maximum HP Modifier
          target			= 2	// Pre-target
          duration			= 2400
          parameter1		= ((0 - 5) * levels_drained)
        END
    
        LAUNCH_PATCH_FUNCTION ADD_ITEM_EFFECT
          INT_VAR
          type			= 1	// Melee
          opcode			= 54	// Stat: THAC0 Modifier
          target			= 2	// Pre-target
          duration			= 2400
          parameter1		= ((0 - 2) * levels_drained)
        END
    
        LAUNCH_PATCH_FUNCTION ADD_ITEM_EFFECT
          INT_VAR
          type			= 1	// Melee
          opcode			= 142	// Graphics: Display Special Effect Icon
          target			= 2	// Pre-target
          duration			= 2400
          parameter2		= 53
        END
      END
    
      "ITM "
      BEGIN
        LAUNCH_PATCH_FUNCTION ADD_ITEM_EFFECT
          INT_VAR
          type			= 1	// Melee
          opcode			= 216	// Spell Effect: Level Drain
          target			= 2	// Pre-target
          timing			= 1	// Permanent
          parameter1		= levels_drained
        END
      END
    
      "SPL " WHEN ENGINE_IS "bg1 totsc iwd1 how totlm"
      BEGIN
        LAUNCH_PATCH_FUNCTION ADD_SPELL_EFFECT
          INT_VAR
          opcode			= 18	// HP: Maximum HP Modifier
          target			= 2	// Pre-target
          duration			= 2400
          parameter1		= ((0 - 5) * levels_drained)
        END
    
        LAUNCH_PATCH_FUNCTION ADD_SPELL_EFFECT
          INT_VAR
          opcode			= 54	// Stat: THAC0 Modifier
          target			= 2	// Pre-target
          duration			= 2400
          parameter1		= ((0 - 2) * levels_drained)
        END
    
        LAUNCH_PATCH_FUNCTION ADD_SPELL_EFFECT
          INT_VAR
          opcode			= 142	// Graphics: Display Special Effect Icon
          target			= 2	// Pre-target
          duration			= 2400
          parameter2		= 53
        END
      END
    
      "SPL "
      BEGIN
        LAUNCH_PATCH_FUNCTION ADD_SPELL_EFFECT
          INT_VAR
          type			= 1	// Melee
          opcode			= 216	// Spell Effect: Level Drain
          target			= 2	// Pre-target
          timing			= 1	// Permanent
          parameter1		= levels_drained
        END
      END
      DEFAULT
        PATCH_FAIL "add_energy_drain() used on incompatible file!"
      END
    END
    

     




    Add magic missile immunity to an item or spell. Has to be given match_opcode to determine which effect header will be cloned.

    First, have this in your ALWAYS block somewhere. This finds 'Magic Missile'-like spells in BG1, BG2 and IWD1.
    ('Improved Magic Missile' is from a personal mod of mine, it's a third level version that shoots up to 11 missiles. Yes, the magic missile projectile actually goes that high in the BG and IWD engines. ^^).

     

      // List of spells to be blocked by the Shield spell, like Magic Missile, Mordenkainen's Force Missiles, etc.
    
      ACTION_FOR_EACH spell_name IN
       "WIZARD_MAGIC_MISSILE"
       "WIZARD_IMPROVED_MAGIC_MISSILE"
       "WIZARD_MORDENKAINENS_FORCE_MISSILES"
       "GORION_MAGIC_MISSILE"
       "BEHOLDER_MAGIC_MISSILE"
       "TRAP_MAGIC_MISSILE"
       "TRAP_MAGIC_MISSILE_5"
      BEGIN
        ACTION_IF IDS_OF_SYMBOL ("spell" "%spell_name%") >= 0
        BEGIN
          LAUNCH_ACTION_FUNCTION RES_NUM_OF_SPELL_NAME
            STR_VAR
            spell_name
            RET
            spell_num
            spell_res
          END
    
          PRINT "Found %spell_name% as %spell_res%"
    
          ACTION_DEFINE_ASSOCIATIVE_ARRAY magic_missiles
          BEGIN
            "%spell_name%" => "%spell_res%"
          END
        END
      END
    

     



    And the actual function:

     

    DEFINE_PATCH_FUNCTION add_magic_missile_immunity
      INT_VAR
      match_opcode		= 0	// Stat:AC against specific
    BEGIN
      PATCH_FOR_EACH projectile IN 36 67 68 69 70 71 72 73 74 75 76 77
      BEGIN
        LAUNCH_PATCH_FUNCTION CLONE_EFFECT
          INT_VAR
          match_opcode
          multi_match	= 1	// Just once, please
          silent		= 1	// Don't care about warnings
          opcode		= 83	// Protection: From Projectile
          parameter1	= 0	// Irrelevant
          parameter2	= projectile
          STR_VAR
          insert		= "last"
        END
      END
    
      PATCH_IF NOT ENGINE_IS "bg1 totsc"
      BEGIN
        PHP_EACH magic_missiles AS spell_name => spell_res
        BEGIN
          LAUNCH_PATCH_FUNCTION CLONE_EFFECT
          INT_VAR
            match_opcode
            multi_match	= 1	// Just once, please
            silent		= 1	// Don't care about warnings
            opcode		= 206	// Spell: Protection From Spell
    	parameter1	= 0
    	parameter2	= 0
            STR_VAR
            insert		= "last"
            resource	= "%spell_res%"
          END
        END
      END
    END
    

     




    Prevent a spell from stacking with itself. Does not work with vanilla BG1 since it lacks opcode 206, but it does work with IWD1. Has to be given a match_opcode to find a suitable header to clone.

     

    EDIT: Use the improved version below, it plays nicer with IWD1 and EE games.

  8. Add a new actor to an area. This is a simple wrapper around fj_area_struct that saves having to type a bunch of variables.

     

    DEFINE_PATCH_FUNCTION add_area_actor
    BEGIN
      PATCH_IF FILE_EXISTS_IN_GAME "%cre_resref%.cre"
      BEGIN
        INNER_PATCH_FILE "%cre_resref%.cre"
        BEGIN
          READ_STRREF 0x0008 cre_name
        END
      END
      ELSE
      BEGIN
        PATCH_FAIL "Adding non-existent actor %cre_resref% to area!"
      END
    
      LAUNCH_PATCH_FUNCTION fj_are_structure
        INT_VAR
        fj_loc_x                    = x_position
        fj_loc_y                    = y_position
        fj_dest_x                   = x_position
        fj_dest_y                   = y_position
        fj_orientation              = orientation
        STR_VAR
        fj_structure_type           = "actor"
        fj_name                     = "%cre_name%"
        fj_cre_resref               = "%cre_resref%"
      END
    END
    

     



    Clear all actors from an area. Useful if you want to give a generic house in BG1 some new purpose.

     

    DEFINE_PATCH_MACRO remove_all_area_actors
    BEGIN
      FOR (i = SHORT_AT 0x0058; i > 0; --i)
      BEGIN
        LAUNCH_PATCH_FUNCTION fj_are_structure
          INT_VAR
          fj_delete_mode            = i - 1
          STR_VAR
          fj_structure_type         = "actor"
        END
      END
    END
    

     



    Add a simple trap to an area. Care should be taken that the trap form a long thin rectangle, or thieves may not be able to get close enough to disarm it. Another wrappper around fj_area_struct to save typing because I'm lazy. :-)

     

    DEFINE_PATCH_FUNCTION add_simple_trap
      INT_VAR
      trap_detect           = 10
      trap_remove           = 10
      STR_VAR
      trap_script           = "gtar"
    BEGIN
      PATCH_IF ll_x < ul_x
      BEGIN
        SET min_x = ll_x
      END
      ELSE
      BEGIN
        SET min_x = ul_x
      END
    
      PATCH_IF lr_x > ur_x
      BEGIN
        SET max_x = lr_x
      END
      ELSE
      BEGIN
        SET max_x = ur_x
      END
    
      PATCH_IF ul_y < ur_y
      BEGIN
        SET min_y = ul_y
      END
      ELSE
      BEGIN
        SET min_y = ur_y
      END
    
      PATCH_IF ll_y > lr_y
      BEGIN
        SET max_y = ll_y
      END
      ELSE
      BEGIN
        SET max_y = lr_y
      END
    
      LAUNCH_PATCH_FUNCTION fj_are_structure
        INT_VAR
        fj_type             = 0    // Trap
        fj_box_left         = min_x
        fj_box_top          = min_y
        fj_box_right        = max_x
        fj_box_bottom       = max_y
        fj_trap_active      = 1
        fj_loc_x            = (min_x + max_x) / 2
        fj_loc_y            = (min_y + max_y) / 2
        fj_alt_x            = (min_x + max_x) / 2
        fj_alt_y            = (min_y + max_y) / 2
        fj_trap_detect      = trap_detect
        fj_trap_remove      = trap_remove
        fj_flags            = BIT3
        fj_vertex_0         = ul_x + (ul_y << 16)
        fj_vertex_1         = ur_x + (ur_y << 16)
        fj_vertex_2         = lr_x + (lr_y << 16)
        fj_vertex_3         = ll_x + (ll_y << 16)
        STR_VAR
        fj_structure_type   = "region"
        fj_name             = "%trap_name%"
        fj_reg_script       = "%trap_script%"
      END
    END
    

     



    Batch-add new actors to an area from a table. Table takes the form <resref> <xpos> <ypos> <orientation>. Uses add_area_actor().

     

    DEFINE_PATCH_FUNCTION add_area_actors_from_2da
      STR_VAR
      path_to_2da           = "none"
    BEGIN
      PATCH_IF FILE_EXISTS "%path_to_2da%"
      BEGIN
        INNER_PATCH_FILE "%path_to_2da%"
        BEGIN
          COUNT_2DA_COLS cols
          COUNT_2DA_ROWS cols rows
          READ_2DA_ENTRIES_NOW __actor_data cols
        END
    
        FOR (i = 0; i < rows; ++i)
        BEGIN
          READ_2DA_ENTRY_FORMER __actor_data i 0 cre_resref
          READ_2DA_ENTRY_FORMER __actor_data i 1 x_position
          READ_2DA_ENTRY_FORMER __actor_data i 2 y_position
          READ_2DA_ENTRY_FORMER __actor_data i 3 orientation
    
          LAUNCH_PATCH_FUNCTION add_area_actor
            INT_VAR
            x_position
            y_position
            orientation
            STR_VAR
            cre_resref
          END
        END
      END
      ELSE
      BEGIN
        PATCH_FAIL "add_area_actors_from_2da called with invalid path %path_to_2da%!"
      END
    END
    

     

     

  9. Okay, I have NO idea what I'm doing wrong, but I just can't get this to work. I got this script, for a friendly cleric who wants to help the party:

    BEGIN_ACTION_DEFINITION
    Name(Heal_PC)
    TRIGGER
    !GlobalTimerNotExpired("heal_pc", "LOCALS")
    HaveSpell(scsargument1)
    Allegiance(Myself, NEUTRAL)
    ACTION
    RESPONSE #scsprob1
    SetGlobalTimer("heal_pc", "LOCALS", ONE_ROUND)
    Spell(scstarget, scsargument1)
    END
    
    IF TRIGGER
    TargetBlock(PCsInOrder)
    StateCheck(scstarget, STATE_POISONED)
    THEN DO
    Action(Heal_PC, CLERIC_NEUTRALIZE_POISON)
    Action(Heal_PC, CLERIC_SLOW_POISON)
    END
    
    [...]
    

    But when I try to compile it, I get this:

    angel@phoenix /virtual/warbler/baldur $ perl ssl.pl mh#cath.ssl -l library.slb
    This is Stratagems Scripting Language
    
    
     Input file is mh#cath.ssl
    Unrecognised TargetBlock (PCsInOrder) near line 14 at ssl.pl line 252.

    The library.slb file is an unaltered copy of the one in SCS (stratagems/ssl/library.slb) and it has the TARGET=PCsInOrder right there at line 300.

     

    Does anyone have any idea what I am doing wrong? (By the way, the above is done on Linux, but I get the same on Windows as well.)

     

     

    Btw, it also took me way too long to figure out BEGIN_ACTION_DEFINITION is supposed to have underscores, the tutorial makes it look like they are three separate words with spaces.

  10. Oh heh, I totally forgot about stoneskin. I remember seeing that a long time ago and I guess I never remembered to drop it into the Fixpack.

     

     

     

    The game is actually a bit schizophrenic about whether this is a true quest or not. In udduer01.d it sets it as an UNSOLVED_JOURNAL in state 10, but as a regular old JOURNAL in state 17 (triggered if you already have Adalon's drow illusion cast on you).

    Well spotted; it definitely needs to be consistent between the two states. I'm leaning towards a bogstandard journal entry.

     

    Fixed and fixed, as well as another batch of area orientation fixes.

     

    Again, thanks. And I agree, standard journal entry seems best to me since "Tracking Irenicus" takes pretty much all of the Shadows of Amn part of BG2. :-)

     

    I spotted a bundle of inconsistencies while I was doing stuff for my own mod and for Unfinished Business, but my notes on them are scattered all about. I might come up with a few more things as I remember/find them.

     

    I have at times considered doing my own fixpack, indeed I might actually do one for the BG1 portion of BGT. I just spent three days correcting alignments on BG1 critters so my paladin's HoW-style Smite Evil (and BG2's Holy Smite) will actually affect gnolls and Sarevok's assassins. Hope you don't mind me borrowing your code to correct creature alignments from an editable file. ;-)

  11.  

    Wow, that must have been a lot of work! I was going to reinstall BGT to update a couple of mods after I finish my current IWD game, this one will go right in.

     

    By the way, does this version fix the illegal dual-wielding in ar18prie.cre? This one can cause a CTD with SCS. More details here:

    http://gibberlings3.net/forums/index.php?showtopic=27035&p=252697

    For this guy in particular, when he runs out of spells he's supposed to use his sling (if nearest enemy is > 4 feet away) or go to melee. He also had the superior weapon in his offhand (mace +1 vs. mace +0), so Fixpack now moves his mace +1 to the main hand and then drops in a shield in the offhand. This allows him to use his scripted ranged and/or melee attacks.

     

    Oh, and as or beta 2's code name...

     

     

    Thanks for addressing this one, it has caused quite a bit of grief. I can't install it on my main BGT as I'm in the middle of a new game now and don't want to install all my 70+ mods again, but I'll be sure to test it on a backup I have. EDIT: Done, no new issues found so far.

     

     

    Here's another small fix for your consideration: For a level 7 caster, Stoneskin creates too many skins. (More than for a level 8 caster!) Details and suggested fix here: http://gibberlings3.net/forums/index.php?showtopic=28798

     

     

    Also, regarding this:

     

     

    The 'Tracking Irenicus' journal entry never goes away

     

     

    The game is actually a bit schizophrenic about whether this is a true quest or not. In udduer01.d it sets it as an UNSOLVED_JOURNAL in state 10, but as a regular old JOURNAL in state 17 (triggered if you already have Adalon's drow illusion cast on you).

  12.  

    Problem is, the BGT-weidu won't probably ever be updated. A64 has not been in SHS for a long time(last post, October 2013).

    So it's like ALIEN said...

     

     

    Heh, normally I'd be happy to do a little maintenance on a "dead" mod. But BGT? Eh, I wouldn't even know where to start on that one. :-)

     

    Well, installing BGT before the fixpack seems to work fine so I guess I'll go that way.

  13. And here is the first bug: With ToBex installed, the beta core fixes fail to install due to a missing file, spcl741d.spl. Debug file attached.

     

    Problem seems to start in this block, which creates spcl741d.spl but is skipped if ToBEx is installed:

    ACTION_IF NOT FILE_EXISTS_IN_GAME ~tobex_ini/tobexcore.ini~ BEGIN // skip this song and dance if TobEx is present
    
      // MMM APR fixes; shuffle APR to shell spell for easier blockage (see also spcl521.spl, spcl521d.spl, spcl741.spl, melfmet.itm)
      COPY_EXISTING ~spcl741.spl~ ~override/spcl741d.spl~
        LPF DELETE_EFFECT END // delete all existing effects
        SAY NAME1 #-1
        SAY NAME2 #-1 // erase the name of the secondary spells to prevent feedback duplication
        WRITE_ASCIIT  0x10   ~~  // completion sound
        WRITE_SHORT   0x22  0x00 // casting graphics
        READ_SHORT 0x68 abil_num
        FOR (index = 1 ; index < (abil_num + 1) ; ++index) BEGIN
          LPF ADD_SPELL_EFFECT INT_VAR header = index opcode =   1 target = 1 parameter1 =    1 duration = (54 + (6 * index)) power = 4 resist_dispel = 3 END // +1 apr
          LPF ADD_SPELL_EFFECT INT_VAR header = index opcode = 206 target = 1 parameter1 = "-1" duration = (54 + (6 * index)) power = 4 resist_dispel = 3 STR_VAR resource = spwi325 END // block MMM
        END
        BUT_ONLY
     
    

    But then further ahead, this block goes and tries to copy spcl741d.spl anyway:

    // boon of lathander missing headers
    COPY_EXISTING ~spcl741.spl~  ~override~
                  ~spcl741d.spl~ ~override~
      LPF CD_MISSING_SPELL_HEADERS INT_VAR first_missing = 2 last_missing = 10 END // adds headers 2-10
      READ_SHORT 0x68 abil_num
      FOR (index = 1 ; index < (abil_num + 1) ; ++index) BEGIN
        LPF ALTER_SPELL_EFFECT INT_VAR silent = 1 check_globals = 0 header_type = 1 header = index duration_high = (index * 6) END // one round/level
      END
      BUT_ONLY
    
    

    I hotfixed this by adding an IF_EXISTS like so:

    // boon of lathander missing headers
    COPY_EXISTING ~spcl741.spl~  ~override~
                  ~spcl741d.spl~ ~override~
      LPF CD_MISSING_SPELL_HEADERS INT_VAR first_missing = 2 last_missing = 10 END // adds headers 2-10
      READ_SHORT 0x68 abil_num
      FOR (index = 1 ; index < (abil_num + 1) ; ++index) BEGIN
        LPF ALTER_SPELL_EFFECT INT_VAR silent = 1 check_globals = 0 header_type = 1 header = index duration_high = (index * 6) END // one round/level
      END
      IF_EXISTS
      BUT_ONLY
     
    

    But I'm not sure if this the correct permanent solution.

    setup-bg2fixpack.debug.gz

  14. Indeed, it appears to be hardcoded. All the ZZ* weapons lack anything extra, but have the bonus in the description. There are several hits for ZZ in the exe, of course, but it'd be the place to start looking.

     

    Yeah, that's what I thought too. And .exe hacking is beyond my current skills I'm afraid. (Is there even a guide to it?)

     

    No item or spell in IWD uses opcodes 177, 178 or 179, and there isn't a single .eff file in the game so my guess is they won't work at all. But I can give it a try, who knows, maybe they did carry over from BG. :-)

  15. I'm currently looking at using some of my own mods with Icewind Dale (the original, not EE), and ran into something.

     

    Icewind Dale has several weapons that are supposed to a special to-hit bonus against a certain creature type, for example Conlan's Hammer (+1, +5 vs. Iron Golems), Giant Killer (+1, +4 vs. Giants), Inconsequence (+4, +5 vs. Good and Evil), The Axe of Caged Souls (+3, +5 vs. Cadaverous Undead) and Pale Justice +4, +7 vs. Evil). However, when I look at the item definitions of such items, I do not see any effects that give such a bonus.

     

    So, does anyone know, how do such bonuses for these items work in the original Icewind Dale? Do they even work at all?


  16.  

    Hello,

     

    I just want to ask if someone knows, which mods are Planned to be converted ?

     

    I am looking especially for:

    [...]

    Dingos tweak Pack

     

    I volunteered to maintain D0Tweak, the current version is v23 and available from PPG.

     

    However, I do not own any of the EE games, is there a problem with D0Tweak on those?

     

     

  17. I think it is pretty safe to consider the BG2 Fixpack as no longer maintained by anyone.

     

    Mm. Well I suppose I could edit the Fixpack to include this fix, it would be three, four lines at max. I think the BWP people are doing something with it though, the version of BWP Fixpack I have patches the BG2 Fixpack to "v11 Alpha 1". Maybe I'll drop a message on the Fixpack forum later, see if anyone responds.

  18. I don't know. It's not exactly a new problem, I have encountered messages about it over at SHS as well. I'm not even sure who, if anyone, is maintaining the BG2 Fixpack, it doesn't seem to have been updated in a long time.

×
×
  • Create New...