Jump to content

WanderingScholar

Members
  • Posts

    89
  • Joined

  • Last visited

Posts posted by WanderingScholar

  1. 3 hours ago, Bartimaeus said:

    Even worse (for you, that is): Item Revisions (as well as IRR, since I didn't change this) makes Wand of Lightning the no-bounce type of lightning bolt regardless of whether you have SR/R installed or not. To be honest, I think the original lightning bolt is a hilarious part of the game, so I'm kind of tempted to make an optional .ini tweak that allows it to be changed back.

    I'm glad you mentioned this. I never looked at the wands. For some reason I assumed they just referenced the appropriate wizard spell. I've already edited out the lightning bolt from SRR so I can have the original...Now it looks like I'll need to adjust IRR's wands also.

    The .ini option for OG lightning bolt would be greatly appreciated. 

  2. 3 minutes ago, RoyalProtector said:

    Okay, but SCS also includes tweaks like these, and it has a section on power adjustment for spells, so I don't think it's out of place.

    What are those mods? I'm not interested in things like spell revisions, I'd rather have more modular options.

    Yeah many if not most of these changes are done with Spell Revisions. You can pull out the individual spell files if you want just a few changes, but just make sure you know what you're doing. It'll depend on the spell, but you'll have to make sure all the resources for it are being included. 

    Alternatively, you can edit out most spells from Spell Revisions pretty easily without issue. 

  3. Is there an easy way to revert the price changes done by item revisions? Maybe some code I can add to the setup files so I don't have to manually change the price of tons of items?

    The "Sensible Prices" really aren't very sensible in many ways. The original prices were batter balanced around the amount of gold you got in the game.

    When playing BGT, for example, you can get access to full plate almost right out of the gate since it's only 1000gp at the Thunderhammer Smithy.

  4. Is there any benefit to having the Big World Fixpack patch your mods?

    For instance, it patches the following in my current setup (BGT):

    Spoiler

    ~JONDALARFIX/SETUP-JONDALARFIX.TP2~ #0 #0 // Jondalar Fix for BGT: BWP Patching version
    ~SETUP-BGTTWEAK.TP2~ #0 #100 // Eldoth reminds of Skie's ransom: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #500 // Major locations explored upon visit: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #1000 // Bags of the Sword Coast: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #1200 // Arkion reacts to player's reputation: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2002 // Protagonist's biography modifications -> Set BG2 biography upon Shadows of Amn transition: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2100 // Exotic Weapons For Taerom: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2300 // Disable hostile reaction after charm: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2400 // Enemy items shatter: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2500 // Access Ulgoth's Beard west of Wyrm's Crossing only: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2600 // Prevent access to Durlag's Tower from adjacent areas: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2700 // Put Sword of Chaos +2 in Sarevok's inventory: 11 (5 Feb 12) BWP Fix
    ~SETUP-BGTTWEAK.TP2~ #0 #2800 // Reputation Resets at Beginning of BG2: 11 (5 Feb 12) BWP Fix
    ~KLATU/SETUP-KLATU.TP2~ #0 #1050 // Appropriate XP Rewards for Cowled Enforcers: 1.7 BWP fix
    ~KLATU/SETUP-KLATU.TP2~ #0 #2030 // Identify all store items: 1.7 BWP fix
    ~KLATU/SETUP-KLATU.TP2~ #0 #2060 // Standardize Poison Immunity: 1.7 BWP fix
    ~INFINITYANIMATIONS/SETUP-INFINITYANIMATIONS.TP2~ #0 #0 // Infinity Animations: v5 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #100 // Anomen: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #150 // Cernd: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #201 // Jaheira -> two handed weapons: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #300 // Keldorn: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #401 // Minsc -> Keep Minsc as ranger: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #500 // Nalia: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #600 // Valygar: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #700 // Viconia: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #60 // Improved (less buggy) trolls: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #70 // Improved Umberhulks: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #80 // Improved Yuan-Ti: v2.00 BWP Fix
    ~POLYTWEAK/POLYTWEAK.TP2~ #0 #83 // Improved Minotaurs: v2.00 BWP Fix
    ~SETUP-TURAMBAR_FIXES_TWEAKS.TP2~ #0 #12 // Inactive creatures fix: v1.8.1 BWP Fix
    ~SETUP-TURAMBAR_FIXES_TWEAKS.TP2~ #0 #15 // Creature fixes: v1.8.1 BWP Fix
    ~SETUP-TURAMBAR_FIXES_TWEAKS.TP2~ #0 #2000 // Give all skeleton warriors the same immunities -> BG2 immunities (suggested!): v1.8.1 BWP Fix
    ~SETUP-TURAMBAR_FIXES_TWEAKS.TP2~ #0 #2002 // Fenten buys more ankheg shells (Baldur's Gate) -> Fix only: v1.8.1 BWP Fix
    ~KLATU/SETUP-KLATU.TP2~ #0 #2110 // Treat all Innate Abilities as Non-Magical (Unaffected by Wild/Dead Magic and Silence): 1.7 BWP fix
    ~KLATU/SETUP-KLATU.TP2~ #0 #2120 // Treat all Psionic Abilities as Non-Magical (Unaffected by Wild/Dead Magic and Silence): 1.7 BWP fix
    ~KLATU/SETUP-KLATU.TP2~ #0 #2130 // Treat all Bardsong Effects as Non-Magical (Unaffected by Wild/Dead Magic): 1.7 BWP fix
    ~REZMOD/SETUP-REZMOD.TP2~ #0 #3 // Extended Visual Ioun Stones by WoRm: 2.6 BWP Fix
    ~SETUP-NSCPORTRAITS.TP2~ #0 #0 // Portraits for BG1 (BGT or EET): v3.0 BWP Fix 3
    ~SETUP-NSCPORTRAITS.TP2~ #0 #1 // Portraits for BG2 and ToB: v3.0 BWP Fix 3
    ~SETUP-NSCPORTRAITS.TP2~ #0 #300 // Portraits for BG1 Mini-Quests and Encounters: v3.0 BWP Fix 3
    ~SETUP-NSCPORTRAITS.TP2~ #0 #1380 // Portraits for Ascalon's Questpack: v3.0 BWP Fix 3
    ~SETUP-NSCPORTRAITS.TP2~ #0 #1530 // Portraits for Slandor (The Minotaur and Lilacor): v3.0 BWP Fix 3
    ~SETUP-NSCPORTRAITS.TP2~ #0 #1340 // Portraits for Big Picture: v3.0 BWP Fix 3

    Is this something I should be using outside of a Big World Project type install? Does it fix actual bugs or is it more of a compatibility thing with the BWP?

  5. Solved. Post can be removed.

    I can't seem to figure out what's causing this one. 

    I added some lines into the scripts for dw#kanga.ssl (Kagnaxx the Demi-Lich) and dw#wkdem.ssl (Watcher's Keep Demi-Lich) so that these two would get access to instant pre-buffs that mages of their level would be expected to receive. Ordinarily, they only get an initial contingency. 

    Any help is always appreciated. I've also attached the original unedited script for comparison. 

    Here's the error:

     Input file is stratagems/demilich/ssl/dw#kanga.ssl
    
     Output file is stratagems_external\workspace\ssl_out/dw#kanga.baf
    Compiling 1 script ...
    
    [tb#_compile_eval_buffer/stratagems_external/workspace\ssl_out\dw#kanga.baf] PARSE ERROR at line 105 column 1-4
    Near Text: THEN
            syntax error
    ERROR: parsing [tb#_compile_eval_buffer/stratagems_external/workspace\ssl_out\dw#kanga.baf]: Parsing.Parse_error
    ERROR: error compiling [tb#_compile_eval_buffer/stratagems_external/workspace\ssl_out\dw#kanga.baf]: Parsing.Parse_error
    ERROR: compiling [stratagems_external/workspace\ssl_out\dw#kanga.baf]!

    Here's the edited dw#kanga.ssl. All of it I just copied over from other scripts🤔 I only adjusted the spells in his CC.

    /////////////////////////////////////////////////////////////////
    /////	Block pro/undead scrolls
    /////////////////////////////////////////////////////////////////
    
    IF                                                               
           !GlobalTimerNotExpired("blockproundead","LOCALS")
           See(NearestEnemyOf(Myself))
    THEN
           RESPONSE #100
               ApplySpellRES("dw#nprun",Player1)
               ApplySpellRES("dw#nprun",Player2)
               ApplySpellRES("dw#nprun",Player3)
               ApplySpellRES("dw#nprun",Player4)
               ApplySpellRES("dw#nprun",Player5)
               ApplySpellRES("dw#nprun",Player6)
               SetGlobalTimer("blockproundead","LOCALS",300)
               Continue()
    END
    
    
    
    
    //////////////////////////////////////////////////////////////////////////////////////
    ///	I'm a lich
    ///////////////////////////////////////////////////////////////////////////////////
    
    VARIABLE(IsLich=True)
    VARIABLE(HasL1=True)
    VARIABLE(HasL2=True)
    VARIABLE(HasL3=True)
    VARIABLE(HasL4=True)
    VARIABLE(HasL5=True)
    VARIABLE(HasL6=True)
    VARIABLE(HasL7=True)
    VARIABLE(HasL8=True)
    VARIABLE(HasL9=True)
    VARIABLE(slowspell= )
    VARIABLE(IsInvoker=True)
    
    //////////////////////////////////////////////////////////////////////////////////
    ///
    ///   Define actions
    ///
    ////////////////////////////////////////////////////////////////////////////////////////
    
    BEGIN LOOP(scsspellsubstitute1|| )
    BEGIN LOOP(scsspellsubstitute2|| )
    	INCLUDE FILE(%scsroot%/mage/ssl/mage_definitions.ssl)
    END LOOP
    END LOOP
    
    ///////////////////////////////////////////////////////////////////////////////////////
    ////	Setup
    ///////////////////////////////////////////////////////////////////////////////////////
    
    INCLUDE FILE (%scsroot%/mage/ssl/bg2/generalblocks/rest.ssl)
    
    IF	
    	!Global("DMWWKangaxxWalks","GLOBAL",1)
    THEN
    	RESPONSE #100
    		SetGlobal("DMWWKangaxxWalks","GLOBAL",1)
    		MakeGlobal()
    END
    
    IF
    	!Global("chaincontingencyfired","LOCALS",1)
    	OR(7)
    		Detect(NearestEnemyOf(Myself))
    		BEGIN LOOP(scsplayer||1;2;3;4;5;6)
    			Range(Playerscsplayer,15)
    		END LOOP
    THEN
    	RESPONSE #100
    		ReallyForceSpell(Myself,WIZARD_SPELL_IMMUNITY_ABJURATION)
    		SetGlobal("chaincontingencyfired","LOCALS",1)		
    		DisplayStringHead(Myself,26328)
    		ReallyForceSpellRES("dw#sumgl",Myself)
    		ReallyForceSpell(Myself,WIZARD_SHADOW_DOOR)
    		ReallyForceSpell(Myself,WIZARD_SPELL_IMMUNITY_DIVINATION)
    		DisplayString(Myself,25942)
    		ReallyForceSpell(Myself,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
    		SetGlobal("spelltrigger","LOCALS",40)
    		SetGlobal("spellsequencer","LOCALS",2)
    		ReallyForceSpell(Myself,DEMILICH_DEATH)
    		SetGlobal("melfnum","LOCALS",10)
    		SetGlobal("seeabjuration","LOCALS",45) // this may seem long, but the demilich is likely to get several timestops off
    END
    
    /////////////////////////////////////////////////////////////////////////////
    ////	Preps
    //////////////////////////////////////////////////////////////////////////////
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/prepblocks\instantprep.ssl)
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/prepblocks\longprep.ssl)
    
    ///////////////////////////////////////////////////////////////////
    ///  Set the redefend timer, to avoid recasting everything
    ////////////////////////////////////////////////////////////////////
    
    IF
    	IgnoreBlock(IsOptionThree)
    	Global("instantprep","LOCALS",0)
    	See(NearestEnemyOf(Myself))
    THEN
    	RESPONSE #100
    		SetGlobal("instantprep","LOCALS",1)
    		SetGlobalTimer("redefend","LOCALS",5)
    		SetGlobal("nocaststoneskin","LOCALS",0)
    		Continue()
    END
    
    IF
    	RequireBlock(IsOptionThree)
    	Global("instantprep","LOCALS",0)
    	See(NearestEnemyOf(Myself))
    	CheckStatGT(Myself,17,Level)
    THEN
    	RESPONSE #100
    		SetGlobal("instantprep","LOCALS",1)
    		SetGlobalTimer("redefend","LOCALS",5)
    		Continue()
    END
    
    IF
    	RequireBlock(IsOptionThree)
    	Global("instantprep","LOCALS",0)
    	OR(2)
    		!See(NearestEnemyOf(Myself))
    		!CheckStatGT(Myself,17,Level)
    THEN
    	RESPONSE #100
    		SetGlobal("instantprep","LOCALS",1)
    		SetGlobalTimer("redefend","LOCALS",0)
    		Continue()
    END
    
    /////////////////////////////////////////////////////////////////////////////////////
    ////	Kangaxx risks Timestops before renewing defences
    /////////////////////////////////////////////////////////////////////////////////////
    
    DEFAULT TRIGGER(!GlobalTimerNotExpired("castspell","LOCALS"))
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/combatblocks/timestop.ssl)
    
    //////////////////////////////////////////////////////////////////////////////
    ////	Kangaxx summons Planetar
    //////////////////////////////////////////////////////////////////////////////
    
    IF TRIGGER
    	TargetBlock(PCsPreferringWeak)
    	TargetBlock(Celestials)
    	TriggerBlock(Enemy)
    	RequireBlock(HasL9)
    	IgnoreBlock(IsEvokerStreamline)
    	!See([ENEMY.0.DARKPLANATAR]) // only one at a time
    	!See([ENEMY.0.PLANATAR])
    THEN DO
    	Combine()
    	ActionCondition(SpellAreaRESReplace,"dw#plane",WIZARD_SUMMON_PLANATAR_EVIL;!Alignment(Myself,MASK_GOOD)|150|50)
    	ActionCondition(SpellAreaRESReplace,"dw#plane",WIZARD_SUMMON_PLANATAR_GOOD;!Alignment(Myself,MASK_GOOD)|150|50)
    	ActionCondition(SpellAreaRESReplace,"dw#plang",WIZARD_SUMMON_PLANATAR_EVIL;Alignment(Myself,MASK_GOOD)|150|50)
    	ActionCondition(SpellAreaRESReplace,"dw#plang",WIZARD_SUMMON_PLANATAR_EVIL;Alignment(Myself,MASK_GOOD)|150|50)
    END
    
    //////////////////////////////////////////////////////////////////////////////////////
    ///	Custom spell trigger
    //////////////////////////////////////////////////////////////////////////////////////
    
    IF TRIGGER	
    	!CheckStatGT(Myself,0,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS)
    	Target(Myself)
    	!GlobalTimerNotExpired("timestop","LOCALS")
    	!GlobalTimerNotExpired("DMWWTimestopRunning","GLOBAL")
    	GlobalTimerExpired("redefend","LOCALS")
    	Detect(NearestEnemyOf(Myself))
    THEN DO
    	Action(Trigger,40,WIZARD_SPELL_DEFLECTION,WIZARD_PROTECTION_FROM_MAGIC_WEAPONS,WIZARD_SPELL_IMMUNITY_ABJURATION)  // Spell Deflection, Pro/MW, SI:Abj
    	SetGlobal("redefend","LOCALS",8) // don't get stuck in a defend-defend-defend loop and forget to do any damage
    END
    
    
    ///////////////////////////////////////////////////////////////////////////
    //	Melee
    ///////////////////////////////////////////////////////////////////////////
    
    IF
    	GlobalGT("melfnum","LOCALS",0)
    	!HasItem("dw#melf",Myself)
    THEN
    	RESPONSE #100
    		IncrementGlobal("melfnum","LOCALS",-1)
    		ApplySpellRes("dw#melf",Myself)
    		Continue()
    END
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/meleeblocks/demilich.ssl)
    
    //////////////////////////////////////////////////////////////////////////
    // Renew and retreat
    //////////////////////////////////////////////////////////////////////////
    
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/generalblocks/renew.ssl)
    
    //////////////////////////////////////////////////////////////////////////
    // Look for PCs
    //////////////////////////////////////////////////////////////////////////
    
    DEFAULT TRIGGER()
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/generalblocks/mill.ssl)
    
    DEFAULT TRIGGER(!GlobalTimerNotExpired("castspell","LOCALS"))
    
    
    ////////////////////////////////////////////////////////////////////////////
    // Core magic block
    ///////////////////////////////////////////////////////////////////////////
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/magetypes/demilich.ssl)
    
    ////////////////////////////////////////////////////////////////////////////
    ////	Kill innocent people
    ////////////////////////////////////////////////////////////////////////////
    
    IF
    	!GlobalTimerNotExpired("castspell","LOCALS")
    	See([NEUTRAL])
    THEN
    	RESPONSE #100
    		SetGlobalTimer("castspell","LOCALS",6)
    		ForceSpell(LastSeenBy(Myself),DEMILICH_TRAP_SOUL)
    	RESPONSE #100
    		SetGlobalTimer("castspell","LOCALS",6)
    		SpellNoDec(LastSeenBy(Myself),WIZARD_FLAME_ARROW)
    	RESPONSE #100
    		SetGlobalTimer("castspell","LOCALS",6)
    		SpellNoDec(LastSeenBy(Myself),WIZARD_SKULL_TRAP)
    END
    
    IF
    	AreaType(OUTDOOR)
    	!See([PC])
    THEN
    	RESPONSE #100
    		RandomWalkContinuous()
    END
    
    
    ////////////////////////////////////////////////////////////////////////////
    ///// 	Chase PCs
    ////////////////////////////////////////////////////////////////////////////
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/generalblocks/chase.ssl)
    
    
    //////////////////////////////////////////////////////
    ///	If everyone is helpless, kill'em.
    //////////////////////////////////////////////////////
    
    IF
    	See(NearestEnemyOf(Myself))
    	OR(2)
    		Class(Myself,MAGE)
    		Class(Myself,MAGE_THIEF)
    
    	BEGIN LOOP(scsloopvar||1;2;3;4;5;6)
    		OR(3)
    			!See(Playerscsloopvar)
    			StateCheck(Playerscsloopvar,STATE_IMMOBILE)
    			CheckStatGT(Playerscsloopvar,0,HELD)
    	END LOOP
    THEN
    	RESPONSE #100
    		AttackReevaluate(NearestEnemyOf(Myself),15)
    END
    
    INCLUDE FILE(%scsroot%/mage/ssl/bg2/generalblocks/closedown.ssl)
    ////////////////////////////
    
    
    

     

     

  6. 16 minutes ago, DavidW said:

    EOF means end of file. It probably means you haven’t closed a loop.

    Any idea where I should start looking to narrow it down?

    Is it possible the error is in one of the setup files being included?

  7. How do I diagnose this type of error?

    What does (state 970) and [0] EOF mean? Is there an index for these codes.

    I made some edits in mage.tpa, but when I look at this file, it doesn't seem like there's anything going on at line 633.

    Spoiler

    Reading in data: stats
    Copying 1 file ...
    Copying and patching 1 file ...
    Copying and patching 1 file ...
    Appending to files ...
    Appending to files ...
    Appending to files ...
    Appending to files ...
    Copying and patching 1 file ...
    Appending to files ...

    Including and running function(s) mage
    Copying and patching 1 file ...
    In state 970, I expected one of these tokens:
      [0] EOF
    Parse error (state 970) at END

    [stratagems_external/workspace/mage.tpa] PARSE ERROR at line 633 column 1-3
    Near Text: END
            GLR parse error

    [stratagems_external/workspace/mage.tpa]  ERROR at line 633 column 1-3
    Near Text: END
            Parsing.Parse_error
    ERROR: parsing [stratagems_external/workspace/mage.tpa]: Parsing.Parse_error
    Stopping installation because of error.
    Stopping installation because of error.
    Stopping installation because of error.

    ERROR Installing [Smarter Mages -> Mages cast some short-duration spells instantly at start of combat, to simulate pre-battle casting], rolling back to previous state
    Will uninstall   7 files for [STRATAGEMS/SETUP-STRATAGEMS.TP2] component 6030.
    Uninstalled      7 files for [STRATAGEMS/SETUP-STRATAGEMS.TP2] component 6030.
    ERROR: Parsing.Parse_error

     

    mage.tpa

  8. 2 hours ago, Guest dead drunk said:

    I have a long list of suggestions. All are for BG2EE unless told otherwise, although many of the ideas can be used elsewhere as well.
    Let me first thank the maker of this mod. It is the best there is and makes BG2 a whole new game. An amateur modder myself, I have limited knowledge of the game mechanics.
    My main suggestion is to make the game consistently more challenging. At the moment even with this amazing mod there are some very easy fights even very late in the game. And as you will see I also have some ideas to make the game harder and realistic in other ways.
    Also I understand that this is mainly an AI mod, but since about everything that can be done with AI has already been done... about all the rest of the creatures can only be made more powerful by giving them better thac0, more hit points, better AC, Bigger Level etc... So I suggest a lot of these. But look further than just the "Tougher battles" before you judge my ideas not suitable for this mod. I think I have some very good ones that you like.
    I have listed some info about the files needed to be changed(not all files everytime unfortunately, but if you want to start working on some suggestion of mine and want to know the files I will try to find them to make it easier for you) and what area etc. they can be found - .CRE, .ARE, .BCS etc... hopefully it makes understanding what I want clearer and locating the files easier.
    If you want more info of any of my suggestions ask using the correct number.
    Also english is not my first language, so sorry if its not always perfect.

    I just got finished reading your list and a have some thoughts. 

    First, I suspect you might be overlooking some easier and more systematic ways to provide challenge to the player. For instance, you get an egregious amount of experience in BG2 (especially quest XP) that can boost you to high levels early if you play in any sort of completionist fashion. The enhanced editions have only made this worse, especially if you play through the whole saga (SoD included) with all the quests. 

    I think you'd find that if you simply nerf quest or creature xp by 25-50%,  and there are mods that do this, many of the encounters you face mid to late game will be on more even footing. There's really no good reason the player should be dropping HLA's, for example, before they reach ToB, if they want any semblance of challenge. Taking this type of approach is much easier than trying to manipulate the AC, THAC0, HP....etc of enemies in specific encounters. Also, if I'm not mistaken, there are still .ini options available in SCS where you can tweak the levels of enemies up or down to specified offsets. It might achieve some of the effects you are aiming for. 

    Secondly, I'd try various mod combinations like SCS + Ascension + Spell Revisions + Item Revisions, if you haven't. There are already mods that address some of the things you've mentioned if you look.

    You can also shift a lot of the challenge in the game by tweaking some of the more exploitative things the player can do . In my own game, for example, I've done things like disable area transitions during combat, with the ToBexAfterlife mod, or set a flag on Chain Contingency type spells so they can't be cast in battle. 

    Lastly, I do agree with many things in your list when it comes to spicing up encounters and various AI improvements. Even though SCS is already pushing the engine to the limits of its capabilities 😁

    I think my approach would probably be to focus more on the capstone encounters, much like SCS has already done with components such as tougher "end of chapter" battles.

    Something like the final showdown with Carston, at the end of Watcher's Keep level 4 could probably use some spicing up. Perhaps he panics before being broken from the machine, randomly pressing buttons and pulling levers which summon a random assortment of enemies that the party has to face alongside him. 

  9. Hey @DavidW, it's nice to see you back on the forums. 🙂

    It looks like you started a brief guide on the stratagems function library some time ago. Chapter 1 of this is contained in sfo.docx, but I've never been able to locate any subsequent chapters. Did you ever write or publish them?

  10. 7 minutes ago, jmerry said:

    Thus, the entry in SPELL.IDS matches a symbolic name to a number, and through that to a file name. You can't edit a spell's symbolic name directly, because it's not part of the spell's file; it's only defined indirectly through the IDS file lookup. And spells that don't have one of the 4000 possible file names this scheme encodes can't have symbolic names at all.

    If two names share the same number, they point to the same spell. For example, the vanilla version of the file (BG2EE) has this pair of lines:

    4414 SET_SPECIAL_SNARE_TRAP
    4414 THIEF_SET_SPECIAL_SNARE

    Two different names for the Bounty Hunter's special snares. If you were to use a script action such as Spell() with either of those two names, I expect it would work the same both ways. The game never needs to go the other way and turn resource IDs into symbolic names, so overlap like this should be harmless.

    Thanks, this is what I suspected. I missed the correlation to file names. 

  11. What assigns a given spell it's symbolic name and # in SPELL.IDS?

    When viewing a spell file in NI I can see the name and number listed, but there's no field referencing it under the "edits" tab. So, I'm either missing it or it can't be changed.

    What happens when two different names share the same # in SPELL.IDS? Many mods that add or edit spells append SPELL.IDS with this being the result. I have a hunch as to why this is done, but I don't want to speculate. 

  12. 8 hours ago, Bartimaeus said:

    Unholy Word: From deafness to silence? But...it's Unholy Word! The entire idea is that it's something you hear, :p. I can see where you're coming from though, the design of this spell is a bit...difficult to balance. Arcane spellcasters shouldn't be quite as affected from it if you have the 'Spell Deflection blocks AoE spells' component installed, though - sure, you can hit them with it once when their spell protections are down, but assuming you're using SCS, you can't just Holy Word right at the beginning of a fight and make a big group of mages all useless. I never really thought about the fact that a mage can vocalize through silence but not deafness.

    Spellstrike: You know, I couldn't ever really put it into words, but I never really liked the idea of Spellstrike giving spell failure, and I think you just made me realize what it is: there's no counter for it. It doesn't matter how powerful of a spellcaster you are, how high your magic resistance is, or what protections you have running*, a spellcaster is just...straight up disabled with no counter by Spellstrike, and you have to just sit there and take it, and if you're a player that can feasibly cast multiple of them in a row, an enemy spellcaster just has...no recourse whatsoever. That's not really very cool.

    *Okay, technically, I think Spell Shield will absorb a Spellstrike, but Spell Shield is so easily done away with via a Secret Word that it's barely worth mentioning. I'd actually be more in favor of making Spellstrike kill Spell Shield and the other spell protections as its "unique" factor rather than doing the silly spell failure thing...buuut I'm not sure how SCS AI feels about that.

    Dispelling Screen: Don't think this one will change, think it would make it way too unattractive. Maybe a simpler tweak would be to reduce its AoE down to 10' radius (size of a Skull Trap) from 15' (Fireball), making it a bit more difficult to effectively use in an already raging battle.

    I like this idea of making Spellstrike remove Spell Shield + all spell protections. That seems like a decent upgrade from it's vanilla without going too overboard. 

    Taking a cursory glance over the SCS combatblocks doesn't raise any apparent conflicts. I don't see any triggers that prevent Spellstrike from being cast on a SS protected target. Although, you might consider adding this if you wanted to give the AI an incentive to use it on Spell Shield protected PC's.

    Spoiler

    ////////////////////////////////////////////////////////////////////////////
    ////    Attack Spell Shield
    ///////////////////////////////////////////////////////////////////////////

    IF TRIGGER
           IgnoreBlock(Indiscriminate)
           TargetBlock(PCsInOrder)
           TriggerBlock(SpellShieldTarget|Enemy|Helpless|SRDetectInvisible)
           !GlobalTimerNotExpired("dropped_spell_shield","LOCALS")  
    THEN DO
           Combine()
           SetGlobalTimer("dropped_spell_shield","LOCALS",12)
           Action(SpellArea,WIZARD_WARDING_WHIP)
           Action(SpellArea,WIZARD_SECRET_WORD)
           Action(SpellArea,WIZARD_SPELL_THRUST)
           Action(SpellArea,WIZARD_PIERCE_MAGIC)
           Action(SpellArea,WIZARD_RUBY_RAY_OF_REVERSAL)
           Action(SpellArea,WIZARD_SPELL_STRIKE)
    END

    Worth mentioning here is that Spellstrike has to compete with other 9th level spells, such as Chain Contingency, which can release triple Pierce Shields in a single round mid-combat. This is even deadlier since SR gives Pierce Shield the ability to remove combat protections in addition to magic ones, making it potentially more powerful than Spellstrike just on it's own.

    That aside, I think some of SR's anti-magic could benefit from a bit of tweaking in general. For instance, in my own game I changed these slightly: 

    Pierce Magic-> Removed the 2 round MR nullification and replaced it with lowering MR 2% per level. Similar to vanilla

    Pierce Shield-> Removed the "breach" component and replaced it with the 2 round MR nullification that Pierce Magic had.

     

  13. What are the differences between override, class, race, general, and default scripts? Is there an order of priority? I can't seem to find any resources explaining this on IESDP

    Also, do I use something like:

    WRITE_ASCII 0x260 None //remove general script

    if I want to remove a given script.

    Thanks

  14. 19 hours ago, polytope said:

    The summoned Death Knight and Negative Plane Protection (it had such a short duration for a good reason) stand out in this respect.

    Yes, the Death Knight is very strong and could probably use some adjustments. It's a 7th level summon with 8th and 9th level spell access.

    For player use the SR demon scripts check your level and stats to determine the chance of the demon turning hostile on summon. I guess a possible way you could "balance" this is through a player imposed restriction. Instead of save scumming for a non-hostile demon you could accept the risk and consequences. 

    For enemy use, the newest versions of SCS reduces demon summoning quite significantly, restricting it to only liches and a handful of named casters. Because of this it likely won't have much of an overall impact on your game if you include it. 

    7 hours ago, Bartimaeus said:

    I was really thinking more when you run into venerated and ancient vampires, the few Bodhi fights (especially if you install the improved Bodhi from SCS...), and maybe a couple of others. No saving throw level draining in those more difficult encounters are...well, certainly quite difficult without any Negative Plane Protection, and I'd say those fights are very likely to last longer than 5 rounds. I have memories of running into those super vampires in Firkraag's lair at like level 9 or 10 and having a very bad time. The more random vampire encounters with generic vampires are obviously not nearly so big a deal.

    It's also worth mentioning that the vampires are given another trick up their sleeve in their ability to drain CON on hit from SCS.  This addition gives vampires a bit more teeth since they're a major plot monster in SoA, and the player has to stay on their toes regardless of having NPP or not. In fact, those of you that played older versions of SCS probably remember this ability got nerfed in v32 because of how deadly it was in major vampire fights. 

    Players have a massive disincentive to send unprotected party members into combat with level draining creatures given the hassle of having to restore them + the penalties of level drain itself. In the base game, most people would just pass around items that granted NPP to appropriate NPC's when the encounter called for it. If you think the duration is now too long I'd wonder what your trying to aim for. Aside from a handful of encounters like Improved Shade Lord with SCS, I doubt you'd memorize more than 1 or 2 of these anyway. 

  15. 8 hours ago, Bartimaeus said:

    Mostly, I was annoyed with inconsistent line breaks as a result of lines getting too long. And anyways, I needed to go over all the creature statistics to make sure they were 'accurate' while also re-calculating certain stats anyways (primarily to ensure that only the base values of HP, AC, THAC0, and damage were being used, not any attempt at combining HP+CON or AC+DEX or THAC0/damage+STR/proficiency, mostly because that can get pretty crazy quickly while also opening up the possibility of being very inaccurate depending on which game and with what mods a player is using).

    Just though I'd chime in here.

    I'm currently making my way through a SCS SRR+IRR install on BGT. I can confirm that those bonuses, at least with my mods, are indeed being applied. Furthermore, the increased hit point components from SCS are also stacking on top of some summons modified by SR. For example, pit fiends like "DEMPITSU.CRE" have ~270hp and -7 THACO in my game with all the bonuses applied. I have SR fiends=1 mostly because I prefer the improved stat blocks, but needless to say this could use some tweaking. The SR pit fiends also hit like trucks since they're boasting a strength of 25 (dragons), and IMO should be lowered to be more in-line with say, Balors at 21. 

    In any case, I'm actually planning to systematically re-adjust the stats of many creatures, fiends in particular, in what will hopefully be my first tweaks mod. With SR installed broad inconsistencies arise between the SR summoned creatures, and others of the same type that exist in game. I want to rectify this and make some other small stat adjustments to creatures that should probably receive some improvements, but are left out of the party. 

    When I finish my playthrough and testing I'm going to do a write up in the SRR and IRR forums, so hopefully if time allows that will be coming in the next few weeks. 

  16. This should do it

    ACTION_FOR_EACH ~file~ IN
    	~AMLICH01~
    	~CEDELICH~
    	~D0LICH02~
    	~DW#LICH1~
    	~DW#LICH2~
    	~DW#LICH3~
    	~DW#LICH4~
    	~DW#LICH5~
    	~DW#LICH6~
    	~DW#LICH7~
    	~DW#LICH8~
    	~DW#LICH9~
    	~FIRLCH01~
    	~GRVLCH01~
    	~HLKANG~
    	~HLLICH~
    	~HLSHADE~
    	~HLSHANG~
    	~JARLICH~
    	~LICHEL01~
    	~SENLICH~
    	~UDTRAP04~
    	~CELICH~
    BEGIN                                                                              
    ACTION_IF FILE_EXISTS_IN_GAME ~%file%.cre~ BEGIN             
    COPY_EXISTING ~%file%.cre~ ~override~
    	ADD_CRE_ITEM ~RING95~ #0 #0 #0 ~IDENTIFIED~ ~RING~
    	END
      BUT_ONLY
    END

    I checked each for an empty ring slot

  17. 28 minutes ago, jmerry said:

    The very first lich I checked? Zhadroth from SoD. He's absolutely one that you'd want to do this for, as he lacks any sort of poison immunity once the spectacles remove his invulnerability. And he has both ring slots filled; the left with a ring of regeneration and the right with the BDLICH immunity item. Run this, and the ring of regeneration gets bumped to the inventory.

    Also, running that ADD_CRE_ITEM will add an instance of the item even if one's already present. Changes will be made, period. BUT_ONLY doesn't help with that.

    Well I play the original BGT so no SoD, but it looks like I'll have to read both of the ring slots and use patch if neither of them contain RING95.ITM since ADD_CRE_ITEM is going to put it in regardless. I guess there are other ways I could do this like patching the opcodes for poison immunities, which are probably the most urgently needed, directly into the creatures. 

    Edit: Scratch that, it's probably better if I just list out the individual creatures that are missing it. I just found a lich with 2 rings so it's not going to work the other way

  18. @jmerryOK, are you saying that DEFINE_PATCH_FUNCTION would break the above? 

    29 minutes ago, jmerry said:

    watch out for liches that had both their ring slots filled; this would bump one of their equipped rings out and cause issues.

    I was a bit worried about this. At a cursory glance most creatures with race=lich already have either LICH.ITM as their only ring, or both. I wasn't sure how to write this to check for RING95.ITM (possibly READ_ some offsets), but I figured I should be safe about the bumping since BUT_ONLY should prevent liches with RING95.ITM from being patched at all? 

    Neither here nor there but did they ever fix this in the EE editions? I don't have them installed but you can check if you look at HLSHANG.CRE or HLKANG.CRE. It's rather embarrassing to die from poison as a lich. 

  19. This may be a bit elementary, but is there an easy rule of thumb to differentiate between using DEFINE_ACTION_FUNCTION or DEFINE_PATCH FUNCTION?

    From what I understand WeiDU goes from patch and action context depending on the command it encounters. For instance, I wrote this bit of code below to ensure that all liches in my game receive their undead immunities through RING95.ITM. 

    //// liches should have undead immunities
    
    DEFINE_ACTION_FUNCTION minor_lich
    	STR_VAR race=""
    
    BEGIN 
    	COPY_EXISTING_REGEXP ".*\.cre" ~override~ 
    	 PATCH_IF ~%race%~ STRING_EQUAL_CASE LICH BEGIN
    	   ADD_CRE_ITEM ~RING95~ #0 #0 #0 ~IDENTIFIED~ ~RING~
    	END
      BUT_ONLY
    END

    I used DAF here so I can easily append the top of this setup file with: 

    Quote

    ACTION_FOR_EACH func IN compound grove cult talos elemental nyalee lava muggers lich BEGIN
             LAF ~minor_%func%~ END
          END

    Could I just have easily used DPF in this instance? I've see plenty examples of mods using patch functions like COPY_EXISTING under both. 

  20. @jmerry Thanks, that's just what I was looking for! Sure enough, LPF ALTER_SPELL_EFFECT is under the macro section in WeiDU doc, totally missed that. 

    8 hours ago, jmerry said:

    Also, there is no spwi911d.spl in the vanilla game, so you're looking at a modified spell already with that - which mod? The standard version of the spell doesn't have any subspells, and the damage effects belong to the main spell.

    This is more concerning to me. Maybe I should mention the full context of what I'm trying to do. Spell Revisions makes changes to meteor swarm that I don't like so I've gone and edited out all the lines in spell_rev\components\main_component.tpa which add the new meteor swarm into the game. As well as the projectile change. That being done I'd like to make my own changes to the vanilla spell that remains.  

    /*ADD_PROJECTILE ~spell_rev\projectles\dvmswarm.pro~
    COPY ~spell_rev\spwi9##\spwi911.spl~     ~override~  // Meteor Swarm
      SAY NAME1 @825    SAY UNIDENTIFIED_DESC @826
      WRITE_SHORT 0x98 %dvmswarm%
    COPY ~spell_rev\spwi9##\scrl9t.itm~      ~override~
      SAY NAME2 @825    SAY IDENTIFIED_DESC   @826
    COPY ~spell_rev\spwi9##\dvmeteor.vvc~    ~override~*/

    spwi911d.spl is in my game despite this being edited out. Indeed, it is a subspell with the damage effect for spwi911.spl. Now, I'm modding the originals so maybe this is a discrepancy between them and EE editions, but I doubt it. Else I'll have to figure out where spwi911d.spl is coming from. Here are some clues

    Mods affecting SPWI911.SPL:
    00000: /* created or unbiffed */ ~SPELL_REV/SETUP-SPELL_REV.TP2~ 0 20 // Mirror Image Fixv4 Beta 18 (Revised v1.3.900)
    00001:  ~SPELL_REV/SETUP-SPELL_REV.TP2~ 0 55 // Spell Deflection blocks AoE spellsv4 Beta 18 (Revised v1.3.900)
    00002:  ~STRATAGEMS/SETUP-STRATAGEMS.TP2~ 0 1000 // Initialise mod (all other components require this)v31 RC3 + kreso's Spell Revisions compatibility
    00003: /* acted upon in an undefined manner */ ~GENERALIZED_BIFFING/GENERALIZED_BIFFING.TP2~ 0 1 // Generalized BiffingBiff all files (recommended by the Big World Dudes)v2.6
    PS C:\Games\GOG\Baldurs Gate 2>

    Well, my best guess is that the spell deflection component of spell_rev is editing meteor swarm (the vanilla in my case) so that it allows spell deflection to absorb it since "spwi911" is listed in spell_rev\components\nwn_spell_deflection.tpa. I'm still too green to understand how this setup file works, but if this is the case then I do indeed need to edit "spwi911d". I just need to make sure my code is executed after it's been created. Holy smokes, glad you caught that.  

    Edit: Disregard this last part. I still suspect it's part of the spell deflection component. 

  21. I'm new to WeiDU and I'm looking for the easiest way to edit existing spells. This is the first bit of code I wrote to edit Meteor Swarm so that it does 12d6 damage and bypasses MR. Then I change it's description to match. 

    Spoiler

    ACTION_IF (FILE_EXISTS_IN_GAME "spwi911d.spl") BEGIN
        COPY_EXISTING "spwi911d.spl" override
          WRITE_BYTE 0x0a7 2
          WRITE_LONG 0x0b6 12
          WRITE_LONG 0x0ba 6
        BUT_ONLY
      END
        COPY_EXISTING 
        "spwi911.spl" override
        "scrl9t.itm" override
          SAY NAME1 @825    SAY UNIDENTIFIED_DESC @826
    END

    I'll admit, I'm still getting confused on the correct "WRITE_X" syntax to use and how to write the offset location in WeiDU. I think I've deduced that the size column in NI corresponds to the syntax. 1 for BYTE, 2 for SHORT, 4 for LONG, and 8+ ASCII. The offset part is also tripping me up. When using the Find tool in NI and searching for hex values I can't get anything to return so I must be entering something wrong. My best effort is that start offset | A7h (167) is written as 0x0a7. 

    I see many mods using "LAF edit_spell STR_VAR..." which looks like a much cleaner and easier way to do this, but I couldn't find the right examples to feel confident enough.  

  22. 7 hours ago, Bartimaeus said:

    So that raises three questions:
    1. Does SCS ever put SR's Waves of Fatigue into spellbooks? I thought it did, or at least at one point that it did, but I can't rightly say for certain right now.
    2. If so, why isn't the original Chaos being put into spellbooks right now when it uses the same/expected identifier?
    3. If not, then is there a way we can change SCS's mind so that it does get into spellbooks from the point of SRR? Would not doing the REPLACE_TEXTUALLY to WIZARD_WAVES_OF_FATIGUE (or changing it into an APPEND) actually accomplish anything, or would SCS still not care and skip it over thinking Chaos should not ever exist in an SR game?

    Ok it looks like SR uses REPLACE_TEXTUALLY ~^2508[ %TAB%]+WIZARD_CHAOS to change the original entry to WAVES_OF_FATIGUE because it later appends CLERIC_CHAOS and WIZARD_CHAOS into spell.ids for the 7th level sphere of chaos and there needs to be differentiation? 

    cleric sphere of chaos

    Spoiler

    ADD_PROJECTILE ~spell_rev\projectles\dvschaos.pro~
    COPY ~spell_rev\sppr7##\sppr709.spl~     ~override~  // Sphere of Chaos (replaces Confusion)
      SAY NAME1 @297    SAY UNIDENTIFIED_DESC @298
      WRITE_SHORT 0x98 %dvschaos%
    APPEND ~spell.ids~ ~1709 CLERIC_CHAOS~

    wizard sphere of chaos

    Spoiler

    COPY ~spell_rev\spwi7##\spwi711.spl~     ~override~  // Sphere of Chaos
      SAY NAME1 @737    SAY UNIDENTIFIED_DESC @738
      WRITE_SHORT 0x98 %dvschaos%
    COPY ~spell_rev\spwi7##\scrl8m.itm~      ~override~
      SAY NAME2 @737    SAY IDENTIFIED_DESC   @738
    APPEND ~spell.ids~ ~2711 WIZARD_CHAOS~

    I think I can remedy this by removing the cleric APPEND line to

    Spoiler

    COPY_EXISTING ~spell.ids~ ~override~
      REPLACE_TEXTUALLY ~^1709[ %TAB%]+CLERIC_CONFUSION~ ~1709 CLERIC_SPHERE_OF_CHAOS~

    and then remove the append line from the wizard since 2711 WIZARD_SPHERE_OF_CHAOS already exists in spell.ids. 

    My confusion comes from my ignorance of how WeiDU code identifies spells in game and the inner workings of SCS. "CHAOS" and "SPHERE_OF_CHAOS" is referenced in many of the SCSv31 .tpa/tph files concerning mages. If I don't do the above edits, but simply replace CHAOS with WAVES_OF FATIGUE in the spellchoices\demivrgvs .2da's won't that still lead to problems? I suppose in that regard I'd also have to update all CLERIC_CHAOS and WIZARD_CHAOS references in SR's setup files if I did do these edits. Something could break.

    @subtledoctorI see your comments while I'm writing this. Sorry to drag you guys into this. Yes, if memory serves I do believe this specific problem is corrected with the latest version of SCS. Only the latest version has other problems which likely won't be resolved until David returns from his hiatus. 

×
×
  • Create New...