CamDawg Posted April 7, 2005 Posted April 7, 2005 Bioware got really lazy when it came to spells that have abilities dependent on caster level. Call Lightning (sppr302) is a good example: damage is supposed to be 2d8 + 1d8/caster level. However, looking at the spell you'll notice that the spell has ability headers for level 1 and then skips to levels 6-18. The level 1 ability actually does 7d8 damage (i.e. level 5 equivalent). Since characters begin the game at 89000 or 161000 XP, Bioware never planned for characters to be casting spells at low levels. Because of this, many spells lack low-level headers. However, this does not account for characters that dual-class or characters that have been level-drained. In this example, any cleric below level 6 would use the level 1 header, which would cast Call Lightning at the equivalent of a level 5 caster. (Call Lightning is also missing its level 19 and 20 headers, but that's a different bugfix. ) As an aside, this is especially acute when these spell files are used in Tutu, so this is something that should be dropped into Tutufix. We need someone to peruse the spell files and check the available headers to see where else Bioware has been lazy.
devSin Posted April 7, 2005 Posted April 7, 2005 Who loves WeiDU? Barkskin [SPPR202.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 4 Goodberry [SPPR207.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 6 Spiritual Hammer [SPPR213.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 4 Draw Upon Holy Might [SPPR214.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 6 Animate Dead [SPPR301.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 10 Call Lightning [SPPR302.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Glyph of Warding [SPPR304.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Holy Smite [SPPR313.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Unholy Blight [SPPR314.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Free Action [SPPR403.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Protection from Lightning [SPPR407.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Protection from Evil 10' Radius [SPPR408.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Death Ward [SPPR409.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Poison [SPPR411.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 10 Holy Power [SPPR412.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Flame Strike [SPPR503.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Iron Skins [SPPR506.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 8 Champion's Strength [SPPR507.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Chaotic Commands [SPPR508.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Magic Resistance [SPPR509.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Greater Command [SPPR512.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Righteous Magic [SPPR513.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Mass Cure [SPPR514.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Slay Living [SPPR599.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Aerial Servant [SPPR601.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 12 Conjure Fire Elemental [SPPR605.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 12 Shield of the Archons [SPPR701.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Conjure Earth Elemental [SPPR702.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Fire Storm [SPPR705.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Symbol, Fear [SPPR706.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Sunray [SPPR707.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Finger of Death [SPPR708.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Confusion [SPPR709.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 16 Regeneration [SPPR711.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Symbol, Stun [SPPR718.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Summon Deva [SPPR726.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 14 Summon Fallen Deva [SPPR727.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 14 Aura of Flaming Death [SPPR730.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 14 Friends [SPWI107.SPL]: Apparent spell level: 1 Initial ability level: 1 Second ability level: 3 Magic Missile [SPWI112.SPL]: Apparent spell level: 1 Initial ability level: 1 Second ability level: 3 Blur [SPWI201.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 4 Melf's Acid Arrow [SPWI211.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 6 Mirror Image [SPWI212.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 4 Strength [SPWI214.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 4 Ray of Enfeeblement [SPWI221.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 4 Chaos Shield [SPWI222.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 5 Mirror Image [SPWI298.SPL]: Apparent spell level: 2 Initial ability level: 1 Second ability level: 4 Flame Arrow [SPWI303.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 10 Fireball [SPWI304.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Haste [SPWI305.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Lightning Bolt [SPWI308.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Monster Summoning I [SPWI309.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Skull Trap [SPWI313.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Vampiric Touch [SPWI314.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Minor Spell Deflection [SPWI318.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Protection from Fire [SPWI319.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Protection from Cold [SPWI320.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Hold Undead [SPWI324.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Melf's Minute Meteors [SPWI325.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Lightning Bolt [SPWI399.SPL]: Apparent spell level: 3 Initial ability level: 1 Second ability level: 6 Confusion [SPWI401.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 6 Fire Shield (Blue) [SPWI403.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Improved Invisibility [SPWI405.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Minor Globe of Invulneribility [SPWI406.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Monster Summoning II [SPWI407.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Stoneskin [SPWI408.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Emotion [SPWI411.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Greater Malison [SPWI412.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Polymorph Self [SPWI416.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Fire Shield (Red) [SPWI418.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Spider Spawn [SPWI423.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Farsight [SPWI424.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Wizard Eye [SPWI425.SPL]: Apparent spell level: 4 Initial ability level: 1 Second ability level: 8 Animate Dead [SPWI501.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Cone of Cold [SPWI503.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 11 Monster Summoning III [SPWI504.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Shadow Door [SPWI505.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Hold Monster [SPWI507.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Protection from Normal Weapons [SPWI511.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Protection from Electricity [SPWI512.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Lower Resistance [SPWI514.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Conjure Lesser Fire Elemental [SPWI516.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Protection from Acid [SPWI517.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Phantom Blade [SPWI518.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Conjure Lesser Air Elemental [SPWI520.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Conjure Lesser Earth Elemental [SPWI521.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Sunfire [SPWI523.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Abjuration [SPWI590.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Conjuration [SPWI591.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Divination [SPWI592.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Enchantment [SPWI593.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Illusion [SPWI594.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Evocation [SPWI595.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Necromancy [SPWI596.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Immunity: Alteration [SPWI597.SPL]: Apparent spell level: 5 Initial ability level: 1 Second ability level: 10 Globe of Invulnerability [SPWI602.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Tenser's Transformation [SPWI603.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Protection from Magic Energy [SPWI606.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Mislead [SPWI607.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Pierce Magic [SPWI608.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Improved Haste [SPWI613.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Chain Lightning [SPWI615.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 14 Contingency [SPWI617.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 15 Spell Deflection [SPWI618.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Wyvern Call [SPWI619.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Conjure Fire Elemental [SPWI620.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 12 Conjure Air Elemental [SPWI621.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 15 Conjure Earth Elemental [SPWI622.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 15 Carrion Summons [SPWI623.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 12 Summon Nishruu [SPWI624.SPL]: Apparent spell level: 6 Initial ability level: 1 Second ability level: 13 Spell Turning [SPWI701.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Protection from the Elements [SPWI702.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Project Image [SPWI703.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Mordenkainen's Sword [SPWI716.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Summon Efreeti [SPWI717.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Summon Djinni [SPWI718.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Summon Hakeashar [SPWI719.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 16 Control Undead [SPWI720.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Mass Invisibility [SPWI721.SPL]: Apparent spell level: 7 Initial ability level: 1 Second ability level: 15 Protection from Energy [SPWI803.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 17 Simulacrum [SPWI804.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 17 Pierce Shield [SPWI805.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 17 Incendiary Cloud [SPWI810.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 17 Symbol, Fear [SPWI811.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 18 Abi-Dalzim's Horrid Wilting [SPWI812.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 17 Symbol, Stun [SPWI816.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 18 Symbol, Stun [SPWI898.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 17 Symbol, Fear [SPWI899.SPL]: Apparent spell level: 8 Initial ability level: 1 Second ability level: 17 Summon Planetar [SPWI923.SPL]: Apparent spell level: 9 Initial ability level: 1 Second ability level: 18 Summon Dark Planetar [SPWI924.SPL]: Apparent spell level: 9 Initial ability level: 1 Second ability level: 18 I'll whip up something to compare to the actual required caster level if I get the time or there's sufficient interest. Regardless, this probably won't be a bug in most cases (helping Tutu is nowhere near sufficient as a reason to start patching files in a BG2 bug fix-pack, IMO).
SimDing0 Posted April 7, 2005 Posted April 7, 2005 It's a BG2 bugfix too though, because you can easily end up casting at low levels if you dual-class or are level-drained.
CamDawg Posted April 7, 2005 Author Posted April 7, 2005 Cool, thanks devSin. Now it's just the easy part of fixing them. It's a BG2 bugfix too though, because you can easily end up casting at low levels if you dual-class or are level-drained. However, this does not account for characters that dual-class or characters that have been level-drained.
devSin Posted April 7, 2005 Posted April 7, 2005 The code: COPY_EXISTING_REGEXP ~^SPPR[1-7].+\.SPL$~ ~OVERRIDE~  READ_STRREF 0x08 ~spellName~ READ_LONG 0x34 ~apparentSpellLevel~ ELSE 0x01  READ_LONG 0x64 ~abilitiesOffset~ ELSE 0x72  READ_SHORT 0x68 ~numberOfAbilities~ ELSE 0x00  PATCH_IF (~%numberOfAbilities%~ > 0x01)  BEGIN   READ_SHORT ~%abilitiesOffset%~ + 0x10 ~spellLevel1~ ELSE 0x01   READ_SHORT ~%abilitiesOffset%~ + 0x38 ~spellLevel2~ ELSE 0x02   SET ~requiredLevel~ = (~%apparentSpellLevel%~ = 0x01) ? 1 :              (~%apparentSpellLevel%~ = 0x02) ? 3 :              (~%apparentSpellLevel%~ = 0x03) ? 5 :              (~%apparentSpellLevel%~ = 0x04) ? 7 :              (~%apparentSpellLevel%~ = 0x05) ? 9 :              (~%apparentSpellLevel%~ = 0x06) ? 11 : 14   PATCH_IF (~%spellLevel2%~ != (~%spellLevel1%~ + 0x01))     AND (~%spellLevel2%~ > (~%requiredLevel%~ + 0x01))   BEGIN    PATCH_PRINT ~%spellName% [%SOURCE_FILE%]:  Apparent spell level: %apparentSpellLevel%  Required caster level: %requiredLevel%  Initial ability level: %spellLevel1%  Second ability level: %spellLevel2%~   END  END BUT_ONLY_IF_IT_CHANGES COPY_EXISTING_REGEXP ~^SPWI[1-9].+\.SPL$~ ~OVERRIDE~  READ_STRREF 0x08 ~spellName~ READ_LONG 0x34 ~apparentSpellLevel~ ELSE 0x01  READ_LONG 0x64 ~abilitiesOffset~ ELSE 0x72  READ_SHORT 0x68 ~numberOfAbilities~ ELSE 0x00  PATCH_IF (~%numberOfAbilities%~ > 0x01)  BEGIN   READ_SHORT ~%abilitiesOffset%~ + 0x10 ~spellLevel1~ ELSE 0x01   READ_SHORT ~%abilitiesOffset%~ + 0x38 ~spellLevel2~ ELSE 0x02   SET ~requiredLevel~ = (~%apparentSpellLevel%~ = 0x01) ? 1 :              (~%apparentSpellLevel%~ = 0x02) ? 3 :              (~%apparentSpellLevel%~ = 0x03) ? 5 :              (~%apparentSpellLevel%~ = 0x04) ? 7 :              (~%apparentSpellLevel%~ = 0x05) ? 9 :              (~%apparentSpellLevel%~ = 0x06) ? 12 :              (~%apparentSpellLevel%~ = 0x07) ? 14 :              (~%apparentSpellLevel%~ = 0x08) ? 16 : 18   PATCH_IF (~%spellLevel2%~ != (~%spellLevel1%~ + 0x01))     AND (~%spellLevel2%~ > (~%requiredLevel%~ + 0x01))   BEGIN    PATCH_PRINT ~%spellName% [%SOURCE_FILE%]:  Apparent spell level: %apparentSpellLevel%  Required caster level: %requiredLevel%  Initial ability level: %spellLevel1%  Second ability level: %spellLevel2%~   END  END BUT_ONLY_IF_IT_CHANGES And the list: Goodberry [SPPR207.SPL]:  Apparent spell level: 2  Required caster level: 3  Initial ability level: 1  Second ability level: 6 Draw Upon Holy Might [SPPR214.SPL]:  Apparent spell level: 2  Required caster level: 3  Initial ability level: 1  Second ability level: 6 Animate Dead [SPPR301.SPL]:  Apparent spell level: 3  Required caster level: 5  Initial ability level: 1  Second ability level: 10 Poison [SPPR411.SPL]:  Apparent spell level: 4  Required caster level: 7  Initial ability level: 1  Second ability level: 10 Confusion [SPPR709.SPL]:  Apparent spell level: 7  Required caster level: 14  Initial ability level: 1  Second ability level: 16 Friends [SPWI107.SPL]:  Apparent spell level: 1  Required caster level: 1  Initial ability level: 1  Second ability level: 3 Magic Missile [SPWI112.SPL]:  Apparent spell level: 1  Required caster level: 1  Initial ability level: 1  Second ability level: 3 Melf's Acid Arrow [SPWI211.SPL]:  Apparent spell level: 2  Required caster level: 3  Initial ability level: 1  Second ability level: 6 Chaos Shield [SPWI222.SPL]:  Apparent spell level: 2  Required caster level: 3  Initial ability level: 1  Second ability level: 5 Flame Arrow [SPWI303.SPL]:  Apparent spell level: 3  Required caster level: 5  Initial ability level: 1  Second ability level: 10 Cone of Cold [SPWI503.SPL]:  Apparent spell level: 5  Required caster level: 9  Initial ability level: 1  Second ability level: 11 Chain Lightning [SPWI615.SPL]:  Apparent spell level: 6  Required caster level: 12  Initial ability level: 1  Second ability level: 14 Contingency [SPWI617.SPL]:  Apparent spell level: 6  Required caster level: 12  Initial ability level: 1  Second ability level: 15 Conjure Air Elemental [SPWI621.SPL]:  Apparent spell level: 6  Required caster level: 12  Initial ability level: 1  Second ability level: 15 Conjure Earth Elemental [SPWI622.SPL]:  Apparent spell level: 6  Required caster level: 12  Initial ability level: 1  Second ability level: 15 Summon Hakeashar [SPWI719.SPL]:  Apparent spell level: 7  Required caster level: 14  Initial ability level: 1  Second ability level: 16 Symbol, Fear [SPWI811.SPL]:  Apparent spell level: 8  Required caster level: 16  Initial ability level: 1  Second ability level: 18 Symbol, Stun [SPWI816.SPL]:  Apparent spell level: 8  Required caster level: 16  Initial ability level: 1  Second ability level: 18
devSin Posted April 7, 2005 Posted April 7, 2005 It's a BG2 bugfix too though, because you can easily end up casting at low levels if you dual-class or are level-drained.But you still have to be the minimum caster level, no? So if you have to be level n to cast a spell, and the spell effects change every three levels, then you'll only need a level 1 (acts as level n, since you can't even cast the spell until level n), and then n + [3,6,9,...]. BioWare always started spell abilities at level 1 (perhaps this is required for ForceSpell() type actions or creatures that have non-player classes; most likely it was just the logical thing to do). It's not a bug unless the player can actually cast the spell where the effects would be applied at an inappropriate level (if you could actually cast Call Lightning at level 1, for instance, but it was doing level 5 damage until level 6, then that would be a bug). At least, that's the way I understand it.
devSin Posted April 7, 2005 Posted April 7, 2005 Scrolls should either be cast instantly (using the level 1 ability, which is the level n ability), in which case the spell is cast with the minimum effect parameters (as appropriate for the spell level and the required caster level), or at a pre-determined level (I think BioWare used level 10 for all of these, so about half will use the level 1 ability effects anyway). There is no contingency for having spells a player is unable to cast (so there is no "real" level 1 ability for Symbol, Death, for instance); any allowed class can cast a scroll of any level, and the effects will most likely be the minimum level at which the spell can legitimately be cast. This is the same for other types of items that have cast spell effects; I do not believe this to be a bug (otherwise, most scrolls would be worthless). Unless your question was alluding to something other than my previous post, in which case, I'm just rambling.
devSin Posted April 7, 2005 Posted April 7, 2005 And, based on all that, my list of potential issues: Animate Dead [SPPR301.SPL]: Uses Level 9 effects for Levels 5-9 Cone of Cold [SPWI503.SPL]: Uses Level 10 effects for Level 9 and Level 10 Conjure Air Elemental [SPWI621.SPL]: Uses Level 14 effects for Levels 12-14 Conjure Earth Elemental [SPWI622.SPL]: Uses Level 14 effects for Levels 12-14 Summon Hakeashar [SPWI719.SPL]: Uses Level 15 effects for Level 14 and Level 15 Someone will need to verify, but these all look to me like bugs.
Kish Posted April 7, 2005 Posted April 7, 2005 Bioware got really lazy when it came to spells that have abilities dependent on caster level. Call Lightning (sppr302) is a good example: damage is supposed to be 2d8 + 1d8/caster level. However, looking at the spell you'll notice that the spell has ability headers for level 1 and then skips to levels 6-18. The level 1 ability actually does 7d8 damage (i.e. level 5 equivalent). Since characters begin the game at 89000 or 161000 XP, Bioware never planned for characters to be casting spells at low levels. Because of this, many spells lack low-level headers. <{POST_SNAPBACK}> devSin is correct. It has more to do with "below fifth level no one can cast a third level druid spell." Although my observations are far from comprehensive, of the spells I looked at, that was always the case--first an effect for level 1 which applies to the lowest level at which it's possible to cast the spell, then effects for each level at which something about the spell changed. Scrolls are supposed to function as if cast by the wizard/sorcerer/cleric/druid who created them, at the time they were created (so if you create a scroll at level 10 and then gain five levels, it still works as if cast by a 10th-level caster, it doesn't track your rising level and become more powerful).
Ghreyfain Posted April 9, 2005 Posted April 9, 2005 All scrolls are intended to be cast at level 10, unless there's either a bug anywhere, or it's specifically intended otherwise. And yeah, if you take a look at any spell; fireball, skull trap, lightning bolt, their first usable incarnation is at level 5, so why bother making an effect for levels 1-4? I think the reason they make the first usable effect work for level 1 is in case they mistakenly code an enemy as level 1. An ogre-mage, say, who has fireball manually added to his repertoire, or perhaps cast via script. I put forward that making fixes for instances in which it will never ever have an effect should not have effort wasted on it. Much like writing content for the CG Korgan, or the Romanced Valygar. I forget who did that, and which one it was. Quitch and Korgan, I think? Anyways, the point still stands.
Kish Posted April 10, 2005 Posted April 10, 2005 I put forward that making fixes for instances in which it will never ever have an effect should not have effort wasted on it. Much like writing content for the CG Korgan, or the Romanced Valygar. I forget who did that, and which one it was. Quitch and Korgan, I think? Anyways, the point still stands. <{POST_SNAPBACK}> Yes, I agree.
devSin Posted April 10, 2005 Posted April 10, 2005 The 5 I listed are legitimate bugs that need fixing, though. EDIT: My patches COPY_EXISTING ~SPPR301.SPL~ ~OVERRIDE~ WRITE_EVALUATED_ASCII 0x9e ~%SOURCE_RES%B~ #8 WRITE_EVALUATED_ASCII 0xc6 ~%SOURCE_RES%B~ #8 WRITE_EVALUATED_ASCII 0xee ~%SOURCE_RES%B~ #8 WRITE_EVALUATED_ASCII 0x0116 ~%SOURCE_RES%B~ #8 WRITE_EVALUATED_ASCII 0x013e ~%SOURCE_RES%B~ #8 WRITE_EVALUATED_ASCII 0x0166 ~%SOURCE_RES%B~ #8 WRITE_BYTE 0x018d 0x03 WRITE_BYTE 0x019c 0x37 WRITE_BYTE 0x01cd 0x38 WRITE_BYTE 0x01fd 0x38 WRITE_BYTE 0x02bc 0x2d READ_LONG 0x64 ~abilitiesOffset~ ELSE 0x72 READ_SHORT 0x68 ~numberOfAbilities~ ELSE 0x00 READ_ASCII ~%abilitiesOffset%~ ~cloneAbility~ ELSE ~~ (40) FOR (index = 0x04; index > 0x00; index = index - 0x01) BEGIN INSERT_BYTES ~%abilitiesOffset%~ + 0x28 0x28 WRITE_EVALUATED_ASCII ~%abilitiesOffset%~ + 0x28 ~%cloneAbility%~ #40 WRITE_SHORT ~%abilitiesOffset%~ + 0x38 ~%index%~ + 0x05 END WRITE_LONG 0x6a ~%effectsOffset%~ + 0xa0 WRITE_SHORT 0x68 ~%numberOfAbilities%~ + 0x04 READ_LONG 0x6a ~effectsOffset~ ELSE 0x72 READ_SHORT 0x70 ~numberOfEffects~ ELSE 0x00 READ_ASCII ~%effectsOffset%~ ~cloneEffect~ ELSE ~~ (144) READ_SHORT ~%abilitiesOffset%~ + 0x1e ~numberOfAbilityEffects~ ELSE 0x00 SET ~numberOfEffects~ = ~%numberOfEffects%~ + ~%numberOfAbilityEffects%~ FOR (index = 0x04; index > 0x00; index = index - 0x01) BEGIN INSERT_BYTES ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) 0x90 WRITE_EVALUATED_ASCII ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) ~%cloneEffect%~ #144 END SET ~probability~ = 0x4b FOR (READ_SHORT 0x68 numberOfAbilities ELSE 0x00; numberOfAbilities > 0x01; numberOfAbilities = numberOfAbilities - 0x01) BEGIN FOR (index = numberOfEffects; index > 0x00; index = index - 0x01) BEGIN READ_BYTE ~%effectsOffset%~ + 0x12 ~probabilityOne~ ELSE 0x00 READ_BYTE ~%effectsOffset%~ + 0x13 ~probabilityTwo~ ELSE 0x00 WRITE_BYTE ~%effectsOffset%~ + 0x12 (~%probabilityTwo%~ = 0x00) ? ~%probability%~ : ~%probabilityOne%~ WRITE_BYTE ~%effectsOffset%~ + 0x13 (~%probabilityOne%~ = 0x64) ? ~%probability%~ + 0x01 : ~%probabilityTwo%~ SET ~effectsOffset~ = ~%effectsOffset%~ + 0x30 END SET ~probability~ = ~%probability%~ - 0x05 END BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~SPWI503.SPL~ ~OVERRIDE~ WRITE_SHORT 0x80 0x0c READ_LONG 0x64 ~abilitiesOffset~ ELSE 0x72 READ_SHORT 0x68 ~numberOfAbilities~ ELSE 0x00 READ_ASCII ~%abilitiesOffset%~ ~cloneAbility~ ELSE ~~ (40) INSERT_BYTES ~%abilitiesOffset%~ + 0x28 0x28 WRITE_EVALUATED_ASCII ~%abilitiesOffset%~ + 0x28 ~%cloneAbility%~ #40 WRITE_SHORT ~%abilitiesOffset%~ + 0x38 0x0a WRITE_LONG 0x6a ~%effectsOffset%~ + 0x28 WRITE_SHORT 0x68 ~%numberOfAbilities%~ + 0x01 READ_LONG 0x6a ~effectsOffset~ ELSE 0x72 READ_SHORT 0x70 ~numberOfEffects~ ELSE 0x00 READ_ASCII ~%effectsOffset%~ ~cloneEffect~ ELSE ~~ (96) READ_SHORT ~%abilitiesOffset%~ + 0x1e ~numberOfAbilityEffects~ ELSE 0x00 SET ~numberOfEffects~ = ~%numberOfEffects%~ + ~%numberOfAbilityEffects%~ INSERT_BYTES ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) 0x60 WRITE_EVALUATED_ASCII ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) ~%cloneEffect%~ #96 WRITE_LONG 0x0286 0x04 WRITE_LONG 0x029e 0x04 WRITE_LONG 0x032e 0x06 WRITE_LONG 0x035e 0x05 BUT_ONLY_IF_IT_CHANGES COPY_EXISTING_REGEXP ~^SPWI62[12]\.SPL$~ ~OVERRIDE~ READ_LONG 0x64 ~abilitiesOffset~ ELSE 0x72 READ_SHORT 0x68 ~numberOfAbilities~ ELSE 0x00 READ_ASCII ~%abilitiesOffset%~ ~cloneAbility~ ELSE ~~ (40) INSERT_BYTES ~%abilitiesOffset%~ + 0x28 0x28 WRITE_EVALUATED_ASCII ~%abilitiesOffset%~ + 0x28 ~%cloneAbility%~ #40 WRITE_SHORT ~%abilitiesOffset%~ + 0x38 0x0e INSERT_BYTES ~%abilitiesOffset%~ + 0x28 0x28 WRITE_EVALUATED_ASCII ~%abilitiesOffset%~ + 0x28 ~%cloneAbility%~ #40 WRITE_SHORT ~%abilitiesOffset%~ + 0x38 0x0d WRITE_LONG 0x6a ~%effectsOffset%~ + 0x50 WRITE_SHORT 0x68 ~%numberOfAbilities%~ + 0x02 READ_LONG 0x6a ~effectsOffset~ ELSE 0x72 READ_SHORT 0x70 ~numberOfEffects~ ELSE 0x00 READ_ASCII ~%effectsOffset%~ ~cloneEffect~ ELSE ~~ (288) READ_SHORT ~%abilitiesOffset%~ + 0x1e ~numberOfAbilityEffects~ ELSE 0x00 SET ~numberOfEffects~ = ~%numberOfEffects%~ + ~%numberOfAbilityEffects%~ INSERT_BYTES ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) 0x0120 WRITE_EVALUATED_ASCII ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) ~%cloneEffect%~ #288 INSERT_BYTES ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) 0x0120 WRITE_EVALUATED_ASCII ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) ~%cloneEffect%~ #288 SET ~effectLength~ = 0x02d0 FOR (READ_SHORT 0x68 numberOfAbilities ELSE 0x00; numberOfAbilities > 0x00; numberOfAbilities = numberOfAbilities - 0x01) BEGIN FOR (index = numberOfEffects; index > 0x00; index = index - 0x01) BEGIN READ_LONG ~%effectsOffset%~ + 0x0e ~currentLength~ ELSE 0x00 WRITE_LONG ~%effectsOffset%~ + 0x0e (~%currentLength%~ > 0x3c) ? ~%effectLength%~ : ~%currentLength%~ SET ~effectsOffset~ = ~%effectsOffset%~ + 0x30 END SET ~effectLength~ = ~%effectLength%~ + 0x3c END BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~SPWI719.SPL~ ~OVERRIDE~ READ_LONG 0x64 ~abilitiesOffset~ ELSE 0x72 READ_SHORT 0x68 ~numberOfAbilities~ ELSE 0x00 READ_ASCII ~%abilitiesOffset%~ ~cloneAbility~ ELSE ~~ (40) INSERT_BYTES ~%abilitiesOffset%~ + 0x28 0x28 WRITE_EVALUATED_ASCII ~%abilitiesOffset%~ + 0x28 ~%cloneAbility%~ #40 WRITE_SHORT ~%abilitiesOffset%~ + 0x38 0x0f WRITE_LONG 0x6a ~%effectsOffset%~ + 0x28 WRITE_SHORT 0x68 ~%numberOfAbilities%~ + 0x01 READ_LONG 0x6a ~effectsOffset~ ELSE 0x72 READ_SHORT 0x70 ~numberOfEffects~ ELSE 0x00 READ_ASCII ~%effectsOffset%~ ~cloneEffect~ ELSE ~~ (48) READ_SHORT ~%abilitiesOffset%~ + 0x1e ~numberOfAbilityEffects~ ELSE 0x00 SET ~numberOfEffects~ = ~%numberOfEffects%~ + ~%numberOfAbilityEffects%~ INSERT_BYTES ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) 0x30 WRITE_EVALUATED_ASCII ~%effectsOffset%~ + (~%numberOfEffects%~ * 0x30) ~%cloneEffect%~ #48 WRITE_LONG 0x0198 132 BUT_ONLY_IF_IT_CHANGES You can tell when I start getting tired of Baldur's Gate II bugs when my patches come out half-assed like this. Hopefully, this will give enough info to Cam for him to whip up razzle-dazzle patches without having to troll throught the individual spells.
SimDing0 Posted April 10, 2005 Posted April 10, 2005 So I open up NI to look at the SPLs, and the very first thing I encounter is Grease's duration not accurately reflecting the description (it says 3 rounds + 1/level, but you actually get a duration of 10). Off to a good start!
CamDawg Posted April 10, 2005 Author Posted April 10, 2005 I had bumbled across one of the legit ones a long time ago, and vaguely remembered it. I starting thumbing through the files, not even considering that a third level spell can't even be cast by someone below fifth level, which is a rather embarassing oversight. In a vague attempt to actually spot in a wolf amidst my cries, the PC's innate Vampiric Touch and DUHM need some low-level headers as well.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.