Jump to content

Angel

Modders
  • Posts

    729
  • Joined

  • Last visited

Posts posted by Angel

  1. 12 hours ago, WanderingScholar said:

    @Angel

    I just stumbled upon this forum. I have Ascension 2.0.23 and  Wheels 8.5 installed for BGT. Did your fixes ever make it into the official version?

    I noticed your fork is no longer up. 

    I dread trying to debug this mod myself, as there are still reports of major issues from what I can see. 

    If you have a working fork, I'd be delighted. 

    I'm not Wheels' author, that would be @DavidW.  Back then I only got permission to make one update to fix one issue, an incompatibility with the new WeiDU version, which is in 8.5 (otherwise you wouldn't have been able to install it).  I'm not touching it any further, so there was no need to keep that fork up.

    I know of the Wheels/Ascension issue (kinda hard not to, it keeps popping up everywhere) but I have no idea what causes it or how to fix it.  I never could trigger it in my own non-Ascension games no matter which path I took, which leads me to think it's a bad interaction between Wheels and Ascension, not a bug specific to Wheels.

  2. I thought it best to start a new thread since I updated the version of SFO2E I use to SCS 35.6.  And do I have a bag of bugs for you already. 🙂

    lib_spl, line 99: Thanks for the force_class flag, but it doesn't work properly.  You do a string comparison of %type% to "class", but type here comes from struct_get, which returns a numerical value.  So this condition always fails.

    Thoughts: Do we really need this test?  What's wrong with class abilities having wizard- or priest type?  Maybe I want to use them for specialty wizards/priests...  Perhaps it would be better to give an option to set the spell type and only derive it from the spell file if none is given?

    --- a/mih_fr/third_party/sfo2e/lib_spl.tph
    +++ b/mih_fr/third_party/sfo2e/lib_spl.tph
    @@ -96,7 +96,7 @@ BEGIN
                                    LPF struct_get STR_VAR arguments=level RET level=value END
                                    LPF struct_get STR_VAR arguments=type RET type=value END
                                    PATCH_IF force_class BEGIN
    -                                       PATCH_IF "%type%" STR_EQ "innate" BEGIN
    +                                       PATCH_IF type = 4 BEGIN
                                                    SPRINT type "class"
                                            END ELSE BEGIN
                                                    PATCH_WARN "spl_copy warning: you set force_class=1, but this spell is type %type%"

    lib_spl, lines 110, 115, 117, 121 and 158: At these points the variable spl has been altered by either the call to return_first_pair (line 58) or return_first_entry (line 60) at the start of the function, and the warning prints no useful information.  Using %ids% for the former four and %spell_resref% for the latter fixes the issue.

    Note: I did not check if spl_make has similar issues.

                            OUTER_SET proceed=1
                            ACTION_IF already_present BEGIN
                                    ACTION_IF overwrite BEGIN
    -                                       LAF warning STR_VAR warning="%spl% is already present; overwriting." END
    +                                       LAF warning STR_VAR warning="%ids% is already present; overwriting." END
                                    END ELSE
                                    ACTION_IF mismatch BEGIN
                                            ACTION_IF overwrite_on_mismatch BEGIN
                                                    LAF spl_resolve_ids INT_VAR level force_extended replace_on_mismatch=1 STR_VAR type ids RET spell_resref=resref END
    -                                               LAF warning STR_VAR warning="%spl% is already present, but at the wrong level/the wrong type; overwriting." END
    +                                               LAF warning STR_VAR warning="%ids% is already present, but at the wrong level/the wrong type; overwriting." END
                                            END ELSE BEGIN
    -                                               LAF warning STR_VAR warning="%spl% is already present, although at at the wrong level/the wrong type; aborting spl_copy." END
    +                                               LAF warning STR_VAR warning="%ids% is already present, although at at the wrong level/the wrong type; aborting spl_copy." END
                                                    OUTER_SET proceed=0
                                            END
                                    END ELSE BEGIN
    -                                       LAF warning STR_VAR warning="%spl% is already present; aborting spl_copy." END
    +                                       LAF warning STR_VAR warning="%ids% is already present; aborting spl_copy." END
                                            OUTER_SET proceed=0
                                    END
                            END
    
    @@ -155,7 +155,7 @@ BEGIN
                                            END
                                    END ELSE
                                    ACTION_IF "%icon_base_name%" STR_CMP "" BEGIN
    -                                       WARN "spl_copy WARNING (%spl%): you have specified icon_base_name but have not told sfo where to find the icon"
    +                                       WARN "spl_copy WARNING (%spell_resref%): you have specified icon_base_name but have not told sfo where to find the icon"
                                    END
                            END ELSE BEGIN
                                    OUTER_SPRINT spell_resref ""


    lib_struct, line 3594: Again, thanks for the new feature, but it is bugged.  Variable %label% is undefined here and should be %arguments%.

    --- a/stratagems/sfo2e/lib_struct.tph
    +++ b/stratagems/sfo2e/lib_struct.tph
    @@ -3590,7 +3590,7 @@ BEGIN
                            READ_STRREF offset value
                    END
                    flag BEGIN
    -                       n=$"SFO_%strtype%_flags"("%label%")
    +                       n=$"SFO_%strtype%_flags"("%arguments%")
                            READ_BYTE offset byte
                            value = (byte BAND (2**n)) >> n
                    END
    @@ -4187,4 +4187,4 @@ BEGIN
            BUT_ONLY
    

     

  3. On 1/2/2024 at 6:09 PM, DavidW said:

    I think there are quite a few things struct_get doesn't recognize, but I've added that one.

    I realized that when I was comparing code for struct_get and struct_read, but this was a particular case that I needed.  I wanted to find stores that sell cures.   Thanks!

  4. lib_bam:

    The function to recenter bam frames went missing between SFO and SFO2E.  I'd write my own, but I'm uncertain about BAM v2 trickery for EE.

    I used this one to restore misc9k (Third Journal of Irenicus) in BG2, which has a way off center description image.  Not a biggy as I can do the fix in a different way, but it would be a nice to have, please? 😁

  5. 1 hour ago, Trouveur80 said:

    I'm struggling to kill flesh golems. 

    Readme says they can be killed with fire or acid, but they still have their 100% magic resistance, so spells, potion of fire breath, fire arrows and even flame sword don't work. 

    I can't go seek the Burning Earth now, so I wonder how I'm supposed to kill them. 

    Yes, I may have overdone them a notch, they won't be in the next version.

    Anyway, fire- or acid arrows, Flame Blade, Melf's Minute Meteors or the Alchemist Fire- and Acid Flasks from my item pack should all work, at least they do in my game.  MR only protects against spells, not against hits from enchanted weapons.

    However, there is a bug with the golem in SoD, that one is unkillable due to a scripting issue.

  6. lib_struct

    Function struct_get fails to fetch fields of type 'flag', such as the can_buy or can_buy_cures flags of a store.  Suggested fix:

    --- a/mih_fr/third_party/sfo2e/lib_struct.tph
    +++ b/mih_fr/third_party/sfo2e/lib_struct.tph
    @@ -3583,6 +3583,11 @@ BEGIN
                    strref BEGIN
                            READ_STRREF offset value
                    END
    +               flag BEGIN
    +                       n=$"SFO_%strtype%_flags"("%arguments%")
    +                       READ_BYTE offset byte
    +                       value = (byte BAND (2**n)) >> n
    +               END
                    DEFAULT
                            PATCH_WARN "unrecognized type %type% in struct_get"
                    END

     

  7. 20 hours ago, Connelly said:

    Much appreciated. A grenade being far too enthusiastic even for a fire resistant tank is quite the scare!

    Indeed, although it did give me an idea on how to properly implement a P&P-friendly version of Meteor Swarm. ^^

    I'm currently rewriting MiH F&R from the ground up in the new SFO version.  I *should* have something in a few days, but no guarantees there. NB: The new version will require EE Fixpack.

  8. 6 hours ago, Connelly said:

    Something else I stumbled upon with Fixes, the main component in particular:

    -The text for Stinking Cloud becomes simply "dummy".
    -The potions of elemental resistance flat out don't work.
    -Potion of Explosions and Oil of Fiery Burning are launching several fireballs, instead of one. At best about four, at worst one fireball *at* each creature in the target area.

    I just ran into that last one myself.  Unfortunately that's a library bug and not so easily fixed, it'll have to wait until I get around to rewriting F&R in SFO2E.  (Hot fixing it in DLTCEP/NI: Edit potn13/potn26 item, change projectile to 1, opcode of the effect to 148 and target of the effect to 1.)

    I'll see what I can do about the others.

  9. str_cre_v1

    Combined fields "ac" and "level_all" do not actually work due to missing commas.

    --- a/mih_eq/third_party/sfo2e/structures/str_cre_v1.2da
    +++ b/mih_eq/third_party/sfo2e/structures/str_cre_v1.2da
    @@ -6,8 +6,8 @@ name_short                              0xc                     strref
     both_names                             -1                      multiple_name_long,name_short
     both_names-strref              -1                      multiple_name_long-strref,name_short-strref
     hp                                             -1                      multiple_hp_current,hp_max
    -level_all                              -1                      multiple_level1_level2_level3
    -ac                                             -1                  multiple_ac_natural_ac_effective
    +level_all                              -1                      multiple_level1,level2,level3
    +ac                                             -1                  multiple_ac_natural,ac_effective
     show_longname                  0x10            flag_0
     no_corpse                              0x10            flag_1
     permanent_corpse               0x10            flag_2

     

  10. On 12/26/2023 at 3:35 PM, CamDawg said:
    BHAAL1B: (BG2EE) The duration is +1 round every 2 levels, but at some point the spell goes from level 18 to 21 instead of level 20.
    BHAAL3B: (BG2EE) Opcode 248, refers to a BH3B1(.eff) resource that doesn't exist (the .spl does exist though)

    Both Ascension and UB restore these.  I think the necessary fixes are in there, but I'll have to double-check.

  11. str_eff_v2:

    Offset for dicesize is off; should be 0x3c, not 0x34.  This one requires regenerating auto_struct.tpc

    --- a/mih_sp/third_party/sfo2e/structures/str_eff_v2.2da
    +++ b/mih_sp/third_party/sfo2e/structures/str_eff_v2.2da
    @@ -14,7 +14,7 @@ probability1[100]             0x2c            short
     probability2                    0x2e           short
     resource                               0x30            ascii_8
     dicenumber                     0x38            long
    -dicesize                               0x34            long
    +dicesize                               0x3c            long
     save_vs_spells                         0x40            flag_0
     save_vs_breath                         0x40            flag_1
     save_vs_poison                         0x40            flag_2

     

  12. I checked the P&P version.  There is a case to be made for either; the P&P version does mention a +2 to hit and damage, but only if the wizard is using a staff as their weapon.  When using a dagger, the wizard gets only the +2 to damage, but gets two attacks per round instead of one.  The spell description does not say what happens if any other weapon is used.

  13. I have yet been unable to figure out whether the bug is in SFO2E or there is a peculiarity in this specific file, but are_edit chokes on AR5500 of BGEE (Gibberling Mountains).  The area is unmodded, and can be modded normally with standard WeiDU functions and with the previous SFO version.

    This is my specific test case, but I tested a few other edits and got the same result:

      are.edit[%GibberlingMountains%]
      [
        m.container_item.alter{s_resref := "ring17"|match=~"%s_resref%" == "ring02"~}
      ]

    The same code, just with different items, does work on other area files.  DLCTEP reports that this area file has "non-standard order" but even if I save the area with DLCTEP the code still fails on it.

  14. str_sto_v1:

    A couple of fields are missing that were editable in the first version of SFO: buy_markup, sell_markup, deprecation_rate and capacity.

     

    Suggested fix.  This requires regenerating auto_struct.tpc of course.
     

    diff --git a/stratagems/sfo2e/structures/str_sto_v1.2da b/stratagems/sfo2e/structures/str_sto_v1.2da
    index d689550..55c20de 100644
    --- a/stratagems/sfo2e/structures/str_sto_v1.2da
    +++ b/stratagems/sfo2e/structures/str_sto_v1.2da
    @@ -17,6 +17,10 @@ fence                                0x11            flag_4
     ignore_reputation      0x11            flag_5
     toggle_recharge                0x11            flag_6
     can_sell_critical      0x11            flag_7
    +sell_markup            0x14            long
    +buy_markup             0x18            long
    +deprecation_rate       0x1c            long
    +capacity               0x22            short
     lore                           0x3c            long
     cost_to_identify       0x40            long
     rumors_drinks          0x44            resref_dlg
    
    [Click and drag to move] 

     

  15. 3 hours ago, DavidW said:

    That's not the correct syntax. 'match' is applied to the level of structure currently being patched, i.e. ability effects, and so isn't meaningful for struct_add. You want match_parent, which is applied to the parent of the structure currently being patched.

    Ah, that explains it.  Logical when you think about it, but a bit counter-intuitive when "translating" from the previous SFO version which didn't make this distinction. 🙂

    4 hours ago, DavidW said:

    I'm slightly surprised that doesn't throw an install-time warning, since 'match' isn't an argument for struct_add; are you using the fun_args MODDER flag?

    I don't normally have that on as it tends to throw false positives, especially with the fj_ area structures.  But I guess it's a good idea to turn it on while I'm making this transition.

  16. When adding new effects to an ability, the match= option seems to get silently ignored.  For example, the following code will add thew new effects to all ability headers, not just to the ones that have a certain minimum level as was intended.

      spl.edit[%BHAALSPAWN_SLOW_POISON%]
      [
        m_name:=@1
        m_icon:="rr#bp2g"
        m.ab.delete{s_level > 1}
        m.ab.alter{s_icon:="rr#bp2g"}
        m.ab.clone{s_level=(entry_index * 5 + 5)|number:i=4}
        m.ab_fx.add{s_opcode=(entry_index = 0 ? 75 : 81) s_target=2 s_timing=1 s_power=2|match="p_level > 4" number:i=2}
        m.ab_fx.add{s_opcode=(entry_index = 0 ? 77 : 79) s_target=2 s_timing=1 s_power=2|match="p_level > 9" number:i=2}
        m.ab_fx.add{s_opcode=43 s_target=2 s_timing=1 s_power=2|match="p_level > 14"}
        m.ab_fx.add{s_opcode=224 s_target=2 s_timing=1 s_power=2|match="p_level > 19"}
      ]

     

  17. 20 minutes ago, Trouveur80 said:

    I encountered a small glitch with IP : when I bought the shadow armor from Lily, the price was doubled and after doing the transaction, I indeed had two shadow armors in my inventory.

    Confirmed, it's a rather stupid logical error on my part (the other item is supposed to be the Dagger of Venom).  Will be fixed when I get to converting mih_ip to the new SFO version.

  18. 2 hours ago, Trouveur80 said:

    It's nice to see basiliks having some tricks against low level farming.

    That was mostly the idea, along with wanting some more challenging battles.

    36 minutes ago, Trouveur80 said:

    Did you also allow to speak to the hamadryad in wyverns part cloakwood ? It was nice not to have to kill her with my druid.

    Yes, that one is mine.  I never liked having to kill her, especially compared to the Dryad of the Cloud Peaks encounter.

  19. 31 minutes ago, Trouveur80 said:

    Also, greater basiliks are immune to normal arrows, but there is no display of this immunity in the text box or a warning from the attacking character. If I didn't read the readme, I could have thought it was a bug instead of a feature. ^^

    The arrow immunity is provided by dragring.itm, an in-game pseudo-item worn by all dragons.  I don't think it's possible to make it display a message, just like you don't get a message from someone protected by Protection from Normal Missiles.  Or if you are fool enough to go after a dragon without enchanted arrows. ^^

  20. lib_spl:
    Not a bug per se but rather inconvenient compared to the previous version: Currently there seems to be no way to coerce spl_copy to reserve a new IDS in the class namespace (SPCLxxx).  I have to work around it by manually doing it through spl_resolve_ids, which does have this option.

×
×
  • Create New...