Jump to content

Detectable Spells in other mods


Miloch

Recommended Posts

So Ascension (even erebusant's latest edit) looks like it uses rather an older version of DS than what SCS(2) uses. I suppose I may as well standardise/update it as long as I'm in there. What all do I need to include? Seems to be something like this:

INCLUDE ~ascension/ds/ds.tph~
INCLUDE ~ascension/ds/detectcloud.tph~
INCLUDE ~ascension/ds/detecttrap.tph~

OUTER_SPRINT ~detectfile~ ~ascension/ds/cddetect.2da~
OUTER_SPRINT ~statsfile~ ~ascension/ds/stats.2da~
OUTER_SPRINT ~khelbenfile~ ~ascension/ds/spwi705.spl~

LAUNCH_ACTION_MACRO ~detectable_spells~

INCLUDE ~ascension/ds/ds_oldscript.tph~

OUTER_SPRINT ~oldswapfile~ ~ascension/ds/oldds_swap.2da~

OUTER_SPRINT ~marker~ ~dw#fixasc.mrk~
OUTER_SPRINT ~oldfiles~ ~ascension/ds/oldfiles_asc.2da~
LAUNCH_ACTION_MACRO ~fix_old_DS_scripts~ 

OUTER_SPRINT ~marker~ ~dw#fixkelsey.mrk~
OUTER_SPRINT ~oldfiles~ ~ascension/ds/oldfiles_kelsey.2da~
LAUNCH_ACTION_MACRO ~fix_old_DS_scripts~ 

APPEND ~stats.ids~ ~109 WEAPON_ENCHANTMENT~ UNLESS ~109 WEAPON_ENCHANTMENT~
// for the moment, we use "CLERIC_HALLOW" for enchanted weapons

But I'm not sure if it's all necessary. What are detectcloud.tph and detecttrap.tph - part of DS or specific to SCS(2)? Also, what is label_weapons.tph? If it's something separate, no worries. But if it's supposed to be part of DS, it looks like it should go toward the *end* of an install, as it appears to operate on all existing items (or weapons at least). Ascension probably gets installed fairly early (at least that's how it is currently).

 

Finally, there seems to be a list of Ascension files (oldfiles_asc.2da) the new DS "breaks" that it has to rebuild or something. Would it make sense to fix these up front so that retrofixing isn't necessary?

Link to comment

In my installation it (the version I've sent you) goes after the SCS and before the Longer Road (basing on BWP guide and "Ascension-related mods" there). I believe that's the correct place in the install order for the updated mod.

Link to comment
What are detectcloud.tph and detecttrap.tph - part of DS or specific to SCS(2)?
SCS-only.

 

Also, what is label_weapons.tph?
SCS- and RR-only, allows for detection of equipped weapon enchantment (for the purpose of attacking Mantled/PFMWed creatures).

 

Finally, there seems to be a list of Ascension files (oldfiles_asc.2da) the new DS "breaks" that it has to rebuild or something. Would it make sense to fix these up front so that retrofixing isn't necessary?
Certainly so. Although dw#fixasc.mrk should then be shipped along with Ascension, at least for some time.

 

I suppose I may as well standardise/update it as long as I'm in there.
Sounds good, I wanted to say the same thing :)

 

I've done some updates to DS's code for RTW, in particular fixing a bug/oversight which resulted in DS being unable to deal with 146 shells.

 

There're another improper thing in there - the detection of level drain isn't working as it's been expected by whoever has coded it. Can only be fixed by utilizing a custom sectype, I believe, some unpretty work to do. I'm unsure if it's even used anywhere, perhaps just kill it off?

 

Lastly, since we now have ToBEx, I guess support for it can be added as well. I'm claiming several stats for potions, any objections?

 

PS Some mods (SR in particular) may utilize a heavy use of 146 shells, making it almost impossible to track down automatically. I think it's fine for those mods to DS such changes themselves, without having to update the database in AI mods.

Link to comment

While I'm here, check it out. I've tested it fairly extensively, but one can never be sure. Also, some optimization, etc. may be needed.

//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

// This is mostly a copypaste from DavidW's version
//
// I've only fixed two typos in cleaning global effects; remove, rather than nullify,
// effects from Lathander Boon and Melissan's Blade Barrier; ship vanilla Khelben, rather
// than already patched

DEFINE_ACTION_MACRO setup BEGIN

ACTION_IF NOT FILE_EXISTS_IN_GAME ~cddetect.spl~ BEGIN
 COPY_EXISTING ~SPWI103.SPL~ ~override/cddetect.spl~

// check if Khelben's Warding Whip is broken
COPY_EXISTING ~spwi705.spl~ ~override~
 READ_SHORT 0x68 ~num_ab~
 READ_LONG 0x64 ~ab_off~
 READ_LONG 0x6a ~eff_off~
 SET ~efftotal~=0
 FOR (i=0;i<~%num_ab%~;i=i+1) BEGIN
   READ_SHORT 0x90+~%i%~*0x28 ~num_eff_here~
   SET ~efftotal~=~%efftotal%~+~%num_eff_here%~
 END
 PATCH_IF !(~%SOURCE_SIZE%~=0x30*~%efftotal%~+~%eff_off%~) THEN BEGIN
   SET ~khelben_broken~=1
 END
BUT_ONLY_IF_IT_CHANGES

ACTION_IF (~%khelben_broken%~=1) THEN BEGIN
 COPY ~%path%/spwi705.spl~ ~override~
END

//first, special patches. We need to remove melis02's existing script state modifier
ACTION_FOR_EACH ~spellfile~ IN ~melis02.spl~ ~spcl741.spl~ BEGIN
ACTION_IF FILE_EXISTS_IN_GAME ~%spellfile%~ BEGIN
 COPY_EXISTING ~%spellfile%~ ~override~
 LPF DELETE_SPELL_EFFECT INT_VAR opcode_to_delete=282 END
   BUT_ONLY_IF_IT_CHANGES
 END
END

// clean up old versions
COPY_EXISTING_REGEXP ~^.+\.itm$~ ~override~  // deliberately "regexp", not "regexp glob". BP uses the same .IDS and
                    ~^.+\.spl$~ ~override~  // has lots of custom spells; we don't want to break them
 PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN // protects against invalid files
   READ_LONG  0x64 "ab_off"
   READ_SHORT 0x68 "abil_num"
   READ_LONG  0x6a "fx_off"

   // set the only difference between ITM and SPL files.
   READ_ASCII 0 first_chars (3)
   PATCH_IF ~%first_chars%~ STRING_COMPARE_CASE ~SPL~ BEGIN // if it's an ITM (_not_ a SPL)
     SET extended_size = 0x38
   END ELSE BEGIN
     SET extended_size = 0x28
   END

   // clean out any previous versions; while I'm at it, try to look out for major corruption issues
   READ_SHORT 0x70 ~eff_num~  // <----- should have been 0x70, not 0x6e

   // start with global effects
   SET ~totalnumdeleted~=0
   SET ~isbroken~=0
   SET ~i~=0
     WHILE (~%i%~<~%eff_num%~ AND ~%isbroken%~=0) BEGIN
     READ_SHORT ~%fx_off%~+~%i%~*0x30 ~efftype~ ELSE 999999
     READ_LONG ~%fx_off%~+~%i%~*0x30+0x8 ~effcode~ ELSE 999999
     PATCH_IF ~%efftype%~=999999 OR ~%effcode%~=999999 THEN BEGIN
       SET ~isbroken~=1
     END ELSE BEGIN
       PATCH_IF ((~%efftype%~=233 AND ~%effcode%~>115) OR (~%efftype%~=282 AND ~%effcode%~>6)) THEN BEGIN
         DELETE_BYTES ~%fx_off%~+~%i%~*0x30 0x30
         SET ~eff_num~=~%eff_num%~-1
         SET ~totalnumdeleted~=~%totalnumdeleted%~+1
       END ELSE BEGIN
         SET ~i~=~%i%~+1
       END
     END
   END
   WRITE_SHORT 0x70 ~eff_num~   // <----- this line was missing, but fortunately nothing came wrong so far

   // now do ability-specific effects
   PATCH_IF ~%isbroken%~=0 THEN BEGIN
     FOR (j=0;j<~%abil_num%~;j=j+1) BEGIN
       READ_SHORT ~%ab_off%~+ 0x20 +~%extended_size%~*~%j%~ ~ind_here~ ELSE 999999
       SET ~ind_here~=~%ind_here%~-~%totalnumdeleted%~
       PATCH_IF ~%ind_here%~=999999 THEN BEGIN
         SET ~isbroken~=1
       END ELSE BEGIN
         WRITE_SHORT ~%ab_off%~+ 0x20 +~%extended_size%~*~%j%~ ~%ind_here%~
         READ_SHORT ~%ab_off%~ + 0x1e+~%extended_size%~*~%j%~ ~num_here~
       END      
       SET ~i~=0
       WHILE (~%i%~<~%num_here%~ AND ~isbroken~=0) BEGIN
         READ_SHORT ~%fx_off%~+~%ind_here%~*0x30+~%i%~*0x30 ~efftype~ ELSE 999999
         READ_LONG ~%fx_off%~+~%ind_here%~*0x30+~%i%~*0x30+0x8 ~effcode~ ELSE 999999
         PATCH_IF ~%efftype%~=999999 OR ~%effcode%~=999999 THEN BEGIN
           SET ~isbroken~=1
         END ELSE BEGIN
           PATCH_IF ((~%efftype%~=233 AND ~%effcode%~>115) OR (~%efftype%~=282 AND ~%effcode%~>6)) THEN BEGIN
             DELETE_BYTES ~%fx_off%~+~%ind_here%~*0x30+~%i%~*0x30 0x30
             SET ~num_here~=~%num_here%~-1
             SET ~totalnumdeleted~=~%totalnumdeleted%~+1
           END ELSE BEGIN
             SET ~i~=~%i%~+1
           END
         END    
       END
       PATCH_IF ~%isbroken%~=0 THEN BEGIN
         WRITE_SHORT ~%ab_off%~ + 0x1e+~%extended_size%~*~%j%~ ~%num_here%~
       END
     END
   END

 END
BUT_ONLY_IF_IT_CHANGES

END // ag#DS_x1.mrk

END // end of macro

//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////

// Last edition by Ardanis
//
// Now using intelligent compatibility-friendly check:
//   we start by looking for existing 233/282 (with parameters matching CDDETECT.2DA) and opcode-to-be-detected
//   - if both are present, we check if 233/282 has correct settings (timing, power, etc.)
//     -- if yes, we do nothing
//     -- if not, we delete 233/282 and generate new effect via cloning o-t-b-d
//   - if o-t-b-d is present and 233/282 is not, we generate new effect via cloning o-t-b-d
//   - if 233/282 is present and o-t-b-d is not, we delete 233/282
//   - if neither is present, we do nothing
//   - if both are present and 233/282s are greater in number than corresponding o-t-b-d then excessive 233/282s are deleted


DEFINE_ACTION_MACRO detectable_spells BEGIN

COPY - ~%path%/cddetect.2da~ ~override~
 COUNT_2DA_ROWS 8 rows
 FOR (table=0;table<rows;table+=1) BEGIN
   READ_2DA_ENTRY table 0 8 file
   READ_2DA_ENTRY table 1 8 new_op
   READ_2DA_ENTRY table 2 8 value
   READ_2DA_ENTRY table 3 8 prof
   READ_2DA_ENTRY table 4 8 clone_op
   READ_2DA_ENTRY table 5 8 type
   INNER_ACTION BEGIN ACTION_IF FILE_EXISTS_IN_GAME EVAL ~%file%~ BEGIN 
     COPY_EXISTING ~%file%~ ~override~ PATCH_IF SOURCE_SIZE > 0x71 BEGIN
       PATCH_INCLUDE ~%path%/fj_spl_itm_reindex_v2.tph~ // run Nythrun's reindexing code, it will save us time

       READ_LONG  0x64 ab_off
       READ_SHORT 0x68 ab_num
       READ_LONG  0x6a ef_off
       READ_SHORT 0x70 global
       PATCH_IF ~%SOURCE_EXT%~ STRING_EQUAL_CASE ~spl~ BEGIN size=0x28 END // if spell
                                                  ELSE BEGIN size=0x38 END // if not spell, then it's item
       delta=0

       // run through global effects
       PATCH_IF ~%type%~ STRING_EQUAL_CASE ~g~ BEGIN
         CLEAR_ARRAY clonable
         CLEAR_ARRAY detectable
         CLEAR_ARRAY auxil
         // look for existing effects
         FOR (i=0;i<global;i+=1) BEGIN
           offset=ef_off+(i+delta)*0x30
           READ_SHORT offset opcode
           PATCH_IF opcode=clone_op BEGIN // if clonable opcode exists
             READ_ASCII offset cloned_effect (0x30)
             INNER_PATCH_SAVE $clonable("%i%") ~%cloned_effect%~ BEGIN
               WRITE_SHORT 0 new_op
               WRITE_LONG  4 value
               WRITE_LONG  8 prof
             END
           END
           PATCH_IF opcode=new_op BEGIN // if detectable stat exists
             READ_LONG offset+4 par1
             READ_LONG offset+8 par2
             PATCH_IF (par1=value) && (par2=prof) BEGIN
               READ_ASCII offset $detectable("%i%") (0x30)
             END
           END
         END
         // evaluate the gathered data
         PHP_EACH detectable AS i2 => r2 BEGIN
           SET $auxil("%i2%") = 0
         END
         exists1=0                                     // ***
         PHP_EACH clonable AS i1 => r1 BEGIN
 //          exists1=0                                 // ***
           exists2=0
           PHP_EACH detectable AS i2 => r2 BEGIN
             PATCH_IF (~%r2%~ STRING_EQUAL ~%r1%~) && (exists2=0) BEGIN
               SET $auxil("%i2%") = 1
               exists1=1
               exists2=1
             END
           END
           PATCH_IF exists1=0 BEGIN
             SPRINT $auxil("%i%") ~%r1%~
             i+=1
             exists1=1
           END
         END
         // insert or delete
         PHP_EACH auxil AS ind => res BEGIN
           // 0 = delete, 1 = ignore, anything else = insert
           PATCH_IF ~%res%~ STRING_EQUAL ~0~ BEGIN
             DELETE_BYTES ef_off+(ind+delta)*0x30 0x30
             delta -= 1
           END
           PATCH_IF !(~%res%~ STRING_EQUAL ~0~) && !(~%res%~ STRING_EQUAL ~1~) BEGIN
             INSERT_BYTES ef_off+(global+delta)*0x30 0x30
             WRITE_ASCIIE ef_off+(global+delta)*0x30 ~%res%~ (0x30)
             delta += 1
           END
         END
         // finally, adjust the header info
         WRITE_SHORT 0x70 global+delta
       END

       // run through ability headers
       PATCH_IF ~%type%~ STRING_EQUAL_CASE ~a~ BEGIN
        FOR (j=0;j<ab_num;j+=1) BEGIN
         READ_SHORT ab_off+j*size+0x1e ef_num
         READ_SHORT ab_off+j*size+0x20 ef_ind
         WRITE_SHORT ab_off+j*size+0x20 ef_ind+delta
         CLEAR_ARRAY clonable
         CLEAR_ARRAY detectable
         CLEAR_ARRAY auxil
         // look for existing effects
         FOR (i=0;i<ef_num;i+=1) BEGIN
           offset=ef_off+(ef_ind+i+delta)*0x30
           READ_SHORT offset opcode
           PATCH_IF opcode=clone_op BEGIN // if clonable opcode exists
             READ_ASCII offset cloned_effect (0x30)
             INNER_PATCH_SAVE $clonable("%i%") ~%cloned_effect%~ BEGIN
               WRITE_SHORT 0 new_op
               WRITE_LONG  4 value
               WRITE_LONG  8 prof
             END
           END
           PATCH_IF opcode=new_op BEGIN // if detectable stat exists
             READ_LONG offset+4 par1
             READ_LONG offset+8 par2
             PATCH_IF (par1=value) && (par2=prof) BEGIN
               READ_ASCII offset $detectable("%i%") (0x30)
             END
           END
         END
         // evaluate the gathered data
         PHP_EACH detectable AS i2 => r2 BEGIN
           SET $auxil("%i2%") = 0
         END
         exists1=0                                     // ***
         PHP_EACH clonable AS i1 => r1 BEGIN
 //          exists1=0                                 // ***
           exists2=0
           PHP_EACH detectable AS i2 => r2 BEGIN
             PATCH_IF (~%r2%~ STRING_EQUAL ~%r1%~) && (exists2=0) BEGIN
               SET $auxil("%i2%") = 1
               exists1=1
               exists2=1
             END
           END
           PATCH_IF exists1=0 BEGIN
             SPRINT $auxil("%i%") ~%r1%~
             i+=1
             exists1=1
           END
         END
         // insert or delete
         local_delta=0
         PHP_EACH auxil AS ind => res BEGIN
           // 0 = delete, 1 = ignore, anything else = insert
           PATCH_IF ~%res%~ STRING_EQUAL ~0~ BEGIN
             DELETE_BYTES ef_off+(ef_ind+ind+delta)*0x30 0x30
             delta -= 1
             local_delta -= 1
           END
           PATCH_IF !(~%res%~ STRING_EQUAL ~0~) && !(~%res%~ STRING_EQUAL ~1~) BEGIN
             INSERT_BYTES ef_off+(ef_ind+ef_num+delta)*0x30 0x30
             WRITE_ASCIIE ef_off+(ef_ind+ef_num+delta)*0x30 ~%res%~ (0x30)
             delta += 1
             local_delta += 1
           END
         END
         // finally, adjust the header info
         WRITE_SHORT ab_off+j*size+0x1e ef_num+local_delta
        END
       END

     END BUT_ONLY // PATCH_IF SOURCE_SIZE
   END END // INNER_ACTION, FILE_EXISTS_IN_GAME
 END
BUT_ONLY

// *** - if you feel, in case several instances of o-t-b-d are present (with different timing, etc.), that
//       each one of them should be copied over as 233/282 then reverse the code commenting in these lines

END // end of macro

//////////////////////////////////////////////////////////////////////////////////////

Link to comment
In my installation it (the version I've sent you) goes after the SCS and before the Longer Road (basing on BWP guide and "Ascension-related mods" there). I believe that's the correct place in the install order for the updated mod.
So after SCS but before SCS2 and LR? I guess that should be ok. The current version I'm working on still overwrites a few scripts (finsol04, itfpool1-3). But on BWP only the Fixpack and SCS2 touch the first, and only Wheels of Prophecy the last three (which I'm assuming gets installed later) and LR the last itfpool3. The reason it overwrites is because the Ascension scripts are totally different, so it's kind of hard to patch a script when you're replacing all the content. Still there is reason to do that to avoid overwriting another mod's content if it makes sense (maybe rcmp will make that easier).

 

Incidentally, the version you have uses REPLACE_BCS_BLOCK which will not work (in most cases it will do nothing at all, which might make bits of the mod nonfunctional).

Sounds good, I wanted to say the same thing
Oh, I didn't mean I was going to update the DS code, just the Ascension code that references it. But if you've got bits you've updated, feel free to share (here I suppose if there's not a better place). I know very little about this code (i.e. nothing really). Edit: I see you ninja-posted it... I wouldn't plan on "optimising" or gods-forbid "testing" it (except that it installs) so if it does need anything, feel free to comment.

 

So what would be involved in updating the oldfiles_asc.2da files - just let DS do it and then backport them? Might involve some diffing since we've already updated a lot of scripts, but probably won't be tougher than anything else.

Link to comment
Finally, there seems to be a list of Ascension files (oldfiles_asc.2da) the new DS "breaks" that it has to rebuild or something. Would it make sense to fix these up front so that retrofixing isn't necessary?
Certainly so. Although dw#fixasc.mrk should then be shipped along with Ascension, at least for some time.

For reference, what this stuff actually does is rewire Ascension's DS to use the same codes as the "new" DS. And yes, "dw#fixasc.mrk" is a marker to tell versions of DS in other mods that this has already been done, so no need to do it twice.

 

Lastly, since we now have ToBEx, I guess support for it can be added as well. I'm claiming several stats for potions, any objections?

This isn't something that needs to be centralised (well, choice of particular stats does, possibly, but not actual inclusion of the code into DS). DS is codes so that it can be run multiple times with multiple control files. Just ship and install an extra control file with whatever mod you write needs potion detection. (I don't need it, so I don't really want to take on the burden of maintaining it inside SCS's DS.)

 

PS Some mods (SR in particular) may utilize a heavy use of 146 shells, making it almost impossible to track down automatically. I think it's fine for those mods to DS such changes themselves, without having to update the database in AI mods.

Agreed. (I've been telling Demi for a while that he needs to manage his own DS in SR.)

 

In my installation it (the version I've sent you) goes after the SCS and before the Longer Road (basing on BWP guide and "Ascension-related mods" there). I believe that's the correct place in the install order for the updated mod.
So after SCS but before SCS2 and LR? I guess that should be ok. The current version I'm working on still overwrites a few scripts (finsol04, itfpool1-3). But on BWP only the Fixpack and SCS2 touch the first, and only Wheels of Prophecy the last three (which I'm assuming gets installed later) and LR the last itfpool3. The reason it overwrites is because the Ascension scripts are totally different, so it's kind of hard to patch a script when you're replacing all the content. Still there is reason to do that to avoid overwriting another mod's content if it makes sense (maybe rcmp will make that easier).

I really strongly recommend holding on to Ascension's traditional position at or near the beginning of an install order. By virtue of both its age and its nature as a self-contained rewrite of chapter 10, it doesn't need to make many allowances for other mods. By contrast, the space near the end of the install order is crowded. (SCS, for instance, likes going quite late so as to detect newly added items.) In particular, nothing in DS requires it to be anything other than first. (label_weapons.tph is SCS-specific, and doesn't have anything to do with DS proper.) And there is a very longstanding tradition of other mods assuming Ascension will be installed first or nearly so, which shouldn't be upset without a very good reason.

 

So what would be involved in updating the oldfiles_asc.2da files - just let DS do it and then backport them? Might involve some diffing since we've already updated a lot of scripts, but probably won't be tougher than anything else.

Nothing. If you compile Ascension's existing BAF scripts in a new-DS environment, they work fine. They only need to be corrected because they're originally compiled in an old-DS environment, so the stat descriptions end up pointing to the wrong stacks.

 

SCS- and RR-only, allows for detection of equipped weapon enchantment (for the purpose of attacking Mantled/PFMWed creatures).

DS and this should be in the Fixpack, or Tweaks at least. i don't how people can stand vanilla A(un-)I.

No point, it only does anything in the context of an AI mod. (Unless you're saying that the Fixpack should improve AI?!)

Link to comment

So basically I would just need this then?

INCLUDE ~ascension/ds/ds.tph~

OUTER_SPRINT ~detectfile~ ~ascension/ds/cddetect.2da~
OUTER_SPRINT ~statsfile~ ~ascension/ds/stats.2da~
OUTER_SPRINT ~khelbenfile~ ~ascension/ds/spwi705.spl~

LAUNCH_ACTION_MACRO ~detectable_spells~

INCLUDE ~ascension/ds/ds_oldscript.tph~

OUTER_SPRINT ~oldswapfile~ ~ascension/ds/oldds_swap.2da~

OUTER_SPRINT ~marker~ ~dw#fixkelsey.mrk~
OUTER_SPRINT ~oldfiles~ ~ascension/ds/oldfiles_kelsey.2da~
LAUNCH_ACTION_MACRO ~fix_old_DS_scripts~ 

APPEND ~stats.ids~ ~109 WEAPON_ENCHANTMENT~ UNLESS ~109 WEAPON_ENCHANTMENT~
// for the moment, we use "CLERIC_HALLOW" for enchanted weapons

Do I need that last bit for weapon enchantment, or is that just for SCS/RR?

 

Also, do you see any immediate problems with using GeN1e's (er Ardanis's) revision?

Link to comment

Looks fine.

Also, do you see any immediate problems with using GeN1e's (er Ardanis's) revision?
Caution - just don't go blindly copypasting it :) It only shows the change in main patching code. I'd want to investigate the level drain stuff first, before calling it a day.

 

Lastly, since we now have ToBEx, I guess support for it can be added as well.
In fact, the answer is yes - the latest DS crops stats.ids at 200, killing new stuff.
Link to comment
Caution - just don't go blindly copypasting it
Eh, you seem to be labouring under the misapprehension that I might actually test your code :). Believe me, I've got enough on my hands with validating Ascension to go doing that. So use DavidW's version then until your code is validated?

 

I guess TobEx support would be good, as long as it still also supports "Luddites" as the bigg would say (i.e. non-TobEx users).

Link to comment
Caution - just don't go blindly copypasting it
Eh, you seem to be labouring under the misapprehension that I might actually test your code :). Believe me, I've got enough on my hands with validating Ascension to go doing that. So use DavidW's version then until your code is validated?

 

I guess TobEx support would be good, as long as it still also supports "Luddites" as the bigg would say (i.e. non-TobEx users).

 

Let's keep this modular. Existing DS works fine. So Ascension can be updated using existing DS. If at some subsequent point we want to update DS itself, also fine.

Link to comment

If Asc is willing to code opcode checks like

ImmuneToOpcode(O:Object*,I:OpcodeNum)
ReflectsOpcode(O:Object*,I:OpcodeNum)
ReflectsSpellLevel(O:Object*,I:SpellLevel)
ImmuneToSpell(O:Object*,I:Spell*Spell)
ImmuneToSpellRES(O:Object*,S:ResRef*)
SpellIsActive(O:Object*,I:Spell*Spell)
SpellRESIsActive(O:Object*,S:ResRef*)
ItemIsActive(O:Object*,S:ResRef*)
ImmuneToSectype(O:Object*,I:Sectype)
ImmuneToSchool(O:Object*,I:Sectype)
ImmuneToWeaponType(O:Object*,I:Type)
ImmuneToMyWeaponType(O:Object*)
// and so on

then it'd be unnecessary to worry about nesting ToBEx support for DS, or even worrying about DS for non ToBEx users. The expanded stats could be reserved for hardcoded stats or special cases.

 

-Galactygon

Link to comment

Wait!

 

If Ascension goes the first with updated DS, it should then NOT leave cddetect.spl marker - if Kelsey or else is installed afterwards, they'll break it, but RR/SCS will think it's okay.

 

1) Update all mods shipping DS. Is there a list anywhere? I know of SCS/RR (the latest version), Questpack/Oversight (with broken Khelben), Ascension/Kelsey/Kiara-Zaiya (ancient version), BP (new, but with hardcoded settings), RTW (unreleased yet).

 

2) Until then, include erasing of the old version into the main 'multiple run' code. Seeing how the difference between old and new is the moving of twenty stats from scripting states to proficiencies (and two 282 swaps), that should be rather easy.

 

I'd be inclined to combine both, on the occasion that somebody will manage to install outdated DS.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...