Jump to content

Things I think should be considered for Fixpack 10


Wisp

Recommended Posts

While you're at fixing Hendak, you might consider to fix Lehtinan's HP too. He's 4HD human fighter with 15 con, but have only 6 hit points in vanilla, probably to ensure the outcome of the argument with Hendak, but it's just rediculous. I think he should be able to win the fight. He also have some dialogue lines juggesting he's the winner. So I suggest we give him hp according to his stats, I think it's perfectly legit.

 

I would argue that it's pretty obvious the developers intended him to lose the fight unless you intervened, or they wouldn't have done it like that.

 

I like the idea of Lehtinan winning, but I think it's more of a BG2 Tweak or Unfinished Business component.

Link to comment
B13. Magical bows and THAC0

Some longbows don't have the THAC0 bonuses they should have. Nythrun posted a fix to the issue here, but note that this fix conflicts with the GTUL since it changes string references to unpredictable values.

There's more than just long bows. Here is a list of inconsistencies with rules I've obtained with IR's code.

 

 

Hangard's Axe +2, Rifthome Axe +3, K'logarath +4, Dwarven Thrower +3, Hammer of Thunderbolts +3, Runehammer +4, Runehammer +5 - increase damage by 1

Blackblood +3, Club of Detonation +3 - reduce SF by 3

Bone Club +2, Gnasher +2, Short Bow of Gesen, Bow of Arvoreen, Erinne Sling +4 - reduce SF by 2

Mace of Disruption +2, Boomerang Dagger +2, Fire Tooth +3, Crom Faeyr, Erinne Sling +5, Staff of the Magi, Staff of the Woodlands +4, Staff of Rynn +4, Staff of the Ram +4, Staff of the Ram +6, Dart +5, Cutthroat +4, The Equalizer, Lilarcor, Defender of Easthaven +2, Firetooth +5 - reduce SF by 1

Club of Detonation +5 - reduce SF by 4

Ripper +2, Mana Bow +4, Long Bow +2, Taralash +4, Taralash +5, Long Bow +3 - increase thaco by 1

Drow Crossbow of Speed, War Hammer +1 vs Giantkin, Staff of Command, Staff of Power, Flame Tongue, Sling of Everard +5, Staff of Arundel, Light Crossbow of Speed - increase SF by 1

Staff Spear +2 - reduce damage by 1

Albruin +1, Namarra +2 - reduce damage by 2

Sling of Everard +5 - increase damage by 4

Heavy Crossbow of Accuracy - increase SF by 3

Crossbow of Affliction +4 - reduce SF by 5

Ripper +2, Heartseeker +3, Tuigan Bow +1, Drow Bolt of Sleep, Drow Bolt of Stunning, Drow Bolt +1 - reduce damage by 1

Crom Fayer - increase damage by 3

 

Also:

Shadow Thief Dagger - increase SF by 1

Strong Arm +2, Short Bow of Gesen - reduce damage by 2, but perhaps not?

Link to comment

Crom Fayer - increase damage by 3

 

Are you sure? It already does an extra +5 electrical damage; like with the Dragon's Breath halberd, some of the enchantment bonus is pure elemental damage.

 

In addition to the SF changes, I'd support increasing the range of planetar's and solar's swords, and Melissan's spear to 2 (as with all other 2-handed swords and spears).

Link to comment

I'm not sure where typos in setup.tra are visible.. but surely all instances of THACO that shows up in game should be changed to THAC0?

 

They should.

 

THAC0 is an acronym and means "To Hit Armor Class 0". Any instances of THAC0 containing the letter "O" instead of the number "0" (zero) need to be corrected.

Link to comment

I'm not sure where typos in setup.tra are visible.. but surely all instances of THACO that shows up in game should be changed to THAC0?

 

They should.

 

THAC0 is an acronym and means "To Hit Armor Class 0". Any instances of THAC0 containing the letter "O" instead of the number "0" (zero) need to be corrected.

 

THACO is fixed by the GTUL.

Link to comment

Ever since the "Monks can't use items restricted to Priests" change was deprecated in v9, some parts of the Fixpack's hidden component are redundant.

 

By comparing the commented lines from the Core Fixes ...

 

COPY_EXISTING ~amul16.itm~   ~override~ // metaspell influence amulet
             ~amul21.itm~   ~override~ // Amulet of power
             ~brac17.itm~   ~override~ // gloves of pickpocketing
             ~brac21.itm~   ~override~ // guantlets of ex specialization
             ~clck29.itm~   ~override~ // robe of apprenti
             ~dwshld01.itm~ ~override~ // drow shield +3
             ~dwsw1h01.itm~ ~override~ // drow scimitar +3
             ~misc5t.itm~   ~override~ // shaman's staff
             ~misc9o.itm~   ~override~ // staff
             ~misca6.itm~   ~override~ // patrol leader helmet
             ~npplat.itm~   ~override~ // Firecam Full-Plate Armor
             ~potn36.itm~   ~override~ // potion of master thievery
             ~ring22.itm~   ~override~ // ring o' holiness
             ~ring35.itm~   ~override~ // ring of lock picking
             ~ring40.itm~   ~override~ // ring of acuity
             ~rods01.itm~   ~override~ // rod of absorption
             ~rods04.itm~   ~override~ // rod of smiting
             ~rods05.itm~   ~override~ // rod of terror
             ~rods06.itm~   ~override~ // rod of reversal
             ~npsw03.itm~   ~override~ // hallowed redeemer
             ~scrl3g.itm~   ~override~ // vocalize
//              ~scrl56.itm~   ~override~ // cure serious wounds (Monks should be able to use Priest-only scrolls according to Bioware)
//              ~scrl58.itm~   ~override~ // free action
//              ~scrl59.itm~   ~override~ // neutralize poison
//              ~scrl5a.itm~   ~override~ // mental domination
//              ~scrl5b.itm~   ~override~ // defensive harmony
//              ~scrl5c.itm~   ~override~ // protection from lightning
//              ~scrl5d.itm~   ~override~ // protection from evil 10'
//              ~scrl5e.itm~   ~override~ // champion's strength
//              ~scrl5f.itm~   ~override~ // chaotic commands
//              ~scrl5g.itm~   ~override~ // remove curse
//              ~scrl61.itm~   ~override~ // cure critical wounds
//              ~scrl62.itm~   ~override~ // flame strike
//              ~scrl63.itm~   ~override~ // raise dead
             ~scrl8b.itm~   ~override~ // summon nishruu
             ~scrl8c.itm~   ~override~ // stone to flesh
//              ~wa2amu.itm~   ~override~ // sensate amulet (Monks should be able to use Priest-only items according to Bioware)
             ~wa2ring.itm~  ~override~ // mercykiller ring
             ~wand02.itm~   ~override~ // wand of fear
             ~wand04.itm~   ~override~ // wand of paralyzation
             ~wand05.itm~   ~override~ // wand of fire
             ~wand06.itm~   ~override~ // wand of frost
             ~wand07.itm~   ~override~ // wand of lightning
             ~wand09.itm~   ~override~ // wand of polymorphing
             ~wand10.itm~   ~override~ // wand of monster summoning
//              ~wand11.itm~   ~override~ // wand of the heavens (Monks should be able to use Priest-only items according to Bioware)
             ~wand13.itm~   ~override~ // wand of cloudkill
             ~wand14.itm~   ~override~ // web sack
             ~wand15.itm~   ~override~ // wand of apprenti
 PATCH_IF (SOURCE_SIZE > 0x71) THEN BEGIN // protects against invalid files
   READ_BYTE  0x21 "use"
   WRITE_BYTE 0x21 ("%use%" BOR 0b00100000) // adds monk flag
 END
 BUT_ONLY_IF_IT_CHANGES

 

... to the lines that let you remove the unusability again ...

 

// lets monks use all those cleric goodies again
/*
COPY_EXISTING ~amul21.itm~   ~override~ // Amulet of power
             ~brac21.itm~   ~override~ // gauntlets of ex specialization
             ~ring22.itm~   ~override~ // ring o' holiness
             ~ring35.itm~   ~override~ // ring of lock picking
             ~ring40.itm~   ~override~ // ring of acuity
             ~scrl56.itm~   ~override~ // cure serious wounds
             ~scrl58.itm~   ~override~ // free action
             ~scrl59.itm~   ~override~ // neutralize poison
             ~scrl5a.itm~   ~override~ // mental domination
             ~scrl5b.itm~   ~override~ // defensive harmony
             ~scrl5c.itm~   ~override~ // protection from lightning
             ~scrl5d.itm~   ~override~ // protection from evil 10'
             ~scrl5e.itm~   ~override~ // champion's strength
             ~scrl5f.itm~   ~override~ // chaotic commands
             ~scrl5g.itm~   ~override~ // remove curse
             ~scrl61.itm~   ~override~ // cure critical wounds
             ~scrl62.itm~   ~override~ // flame strike
             ~scrl63.itm~   ~override~ // raise dead
             ~scrl8c.itm~   ~override~ // stone to flesh
             ~wa2amu.itm~   ~override~ // sensate amulet
             ~wa2ring.itm~  ~override~ // mercykiller ring
             ~wand11.itm~   ~override~ // wand of the heavens
 PATCH_IF (%SOURCE_SIZE% > 0x71) THEN BEGIN
   READ_BYTE  0x21 "mu"
   WRITE_BYTE 0x21 ("mu" & (` 0xdf)) // removes monk unusability flag
 END
 BUT_ONLY_IF_IT_CHANGES
*/

 

... I conclude that the Seekrit lines can be reduced to:

 

// lets monks use all those cleric goodies again
/*
COPY_EXISTING ~amul21.itm~   ~override~ // Amulet of power
             ~brac21.itm~   ~override~ // gauntlets of ex specialization
             ~ring22.itm~   ~override~ // ring o' holiness
             ~ring35.itm~   ~override~ // ring of lock picking
             ~ring40.itm~   ~override~ // ring of acuity
             ~scrl8c.itm~   ~override~ // stone to flesh
             ~wa2ring.itm~  ~override~ // mercykiller ring
 PATCH_IF (%SOURCE_SIZE% > 0x71) THEN BEGIN
   READ_BYTE  0x21 "mu"
   WRITE_BYTE 0x21 ("mu" & (` 0xdf)) // removes monk unusability flag
 END
 BUT_ONLY_IF_IT_CHANGES
*/

 

The describing line should also be changed, because apart from ring22, none of the remaining reversals are "cleric goodies" anymore.

 

On a different note, I'm wondering why scrl5g is commented out in the core fix. It's not a priest scroll, is it?

Link to comment

The fixpack introduced a somewhat dubious change way back in v6. It causes all the elves in Elhan's camp to go hostile if the player (accidentally) attacks one of the elves who are fighting the Drow below the Underdark exit (AR2401). This is contrary to Bioware's original coding.

 

I believe that Bioware's designers deliberately made the elves in AR2401 set the Global("GoodElfKill","GLOBAL",1) variable to 1 (and not 2) as it's pretty easy to accidentally attack one of them especially when the Drow Priestess that the elves are fighting casts Mental Domination on someone. To clarify, if that variable gets set to 2 it means game over for the player once he meets up with Elhan (cutscene death).

 

As far as I can tell, the original idea behind this change was to fix a bug which prevented the elves in Elhan's camp from going hostile after being attacked in case the player had also attacked some of their brethren in AR2401 beforehand. This could not occur in the original game since the relevant script blocks were checking for Global("GoodElfKill","GLOBAL",0) while attacking the elves in AR2401 set that variable to 1. A better way to fix this would be to replace several instances of Global("GoodElfKill","GLOBAL",0) with GlobalLT("GoodElfKill","GLOBAL",2) like so:

 

// Killing war elves while escaping Underdark let's you kill the surface elves (revised by aVENGER)
COPY_EXISTING  ~c6elf.bcs~ ~override~
		 ~c6elhan.bcs~ ~override~
		 ~c6extra.bcs~ ~override~
		 ~c6gener.bcs~ ~override~
		 ~warsage.bcs~ ~override~
 DECOMPILE_BCS_TO_BAF
 REPLACE_TEXTUALLY ~Global("GoodElfKill","GLOBAL",0)~ ~GlobalLT("GoodElfKill","GLOBAL",2)~
 COMPILE_BAF_TO_BCS
 BUT_ONLY_IF_IT_CHANGES

 

The scripts of the elves in AR2401 don't need to be changed.

Link to comment

In the interest of an open discussion, I have the following fixes to report:

 

First, the bug that came up here. Basically, a simple case of not updating a variable value correctly.

 

Second, the arcane spells "Protection from Fire" and "Protection from Cold" are missing ability headers for caster levels 19 and 20. The code to correct this was really rickety and could produce incorrect results under a number of circumstances. I took the liberty of replacing the fix with a more robust solution.

 

Third, beta fixes would misindex ipsion.itm by adding new on-equip effects without updating the effect index on the ability. I changed the fix to use standard WeiDU functions for adding the effects.

 

Fourth, the revised fix for Azuredge has been revised, because it also misindexed the item. Revised fix is functionally equivalent but uses standard WeiDU functions.

 

Fifth, chevil04.cre, who shows up during the first pocketplane challenge, is a sahuagin with a gnoll soundset. Other sahuagin have no soundset, so I removed the gnoll sounds.

 

Code can be had here.

 

There will probably be one or two more fixes posted soon, because it looks like there is some code that can potentially misindex Chant and Grease.

Link to comment

Sound good all around.

 

On a slightly related note, I've discovered that shell spells which are erroneously set to cast themselves (this can happen if you install the fixpack on a non-clean install) can cause freezes and CTDs when cast. For an example see here. The obvious solution would be to always install the fixpack on a clean install, but in practice, not everyone follows that suggestion which leads to spurious bug reports. As tedious as it sounds, it might be the best to wrap all shell spell creation blocks in ACTION_IF tags.

Link to comment

On a slightly related note, I've discovered that shell spells which are erroneously set to cast themselves (this can happen if you install the fixpack on a non-clean install) can cause freezes and CTDs when cast. For an example see here. The obvious solution would be to always install the fixpack on a clean install, but in practice, not everyone follows that suggestion which leads to spurious bug reports. As tedious as it sounds, it might be the best to wrap all shell spell creation blocks in ACTION_IF tags.

I'm not sure I understand. How do the shell spells end up being set to cast themselves and what condition(s) do you have in mind for the ACTION_IFs?

 

 

Regarding Chant and Grease: the bugs were simple mistakes. The chant fix would alter the number of effects on ability N and then decrement the index on the same ability, instead of starting at ability N + 1. The grease fix had a loop across all abilities that always read from the first ability. Neither bug was causing any problems under normal circumstances because vanilla Chant and Grease both have only 1 ability header.

 

Code.

Link to comment

I'm not sure I understand. How do the shell spells end up being set to cast themselves and what condition(s) do you have in mind for the ACTION_IFs?

 

If players somehow install the fixpack twice (i.e. by not cleaning the override) they'll end up with shell spells that are set to cast themselves thereby causing freezes/CTDs. See the attached SPIN997A.SPL for more details.

 

The suggestion concerning ACTION_IF was to prevent all blocks which create shell spells from running twice. The filename of the resulting shell spell could be used as a check.

spin997a.zip

Link to comment

Okay, I see. SPIN997a is created from SPIN997 and then SPIN997 is made to cast SPIN997a, so if you do that twice you end up with a SPIN997a that casts itself.

 

But I think I would like a comment from DevSin or Cam, or whoever will eventually be vetting the changes for v10. Presumably these sorts of issues have come up before and if the answer was along the lines of "then don't raise your arm like that," I imagine it may be again.

But then, we have this BG2EE potentially making all sorts of fixes, so non-cumulativity matters.

Link to comment
The fixpack introduced a somewhat dubious change way back in v6. It causes all the elves in Elhan's camp to go hostile if the player (accidentally) attacks one of the elves who are fighting the Drow below the Underdark exit (AR2401). This is contrary to Bioware's original coding.
I don't have a problem if you want to change these.

 

But I think I would like a comment from DevSin or Cam, or whoever will eventually be vetting the changes for v10. Presumably these sorts of issues have come up before and if the answer was along the lines of "then don't raise your arm like that," I imagine it may be again.
I never paid much attention to the details when it came to implementation. Unless you can find a similar block in the current TP2, I'd say to just make sure that whatever you add does what it's supposed to and doesn't break a normal install.

 

Truthfully, my solution would be to revert the shell spells. Because anybody who was here years and years ago knows that I hate the shell spell fixes. I hate them! :-)

Link to comment

Archived

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

×
×
  • Create New...