Skip to content

NPC innate abilities should behave correctly

HurricaneHurricane Member, Translator (NDA) Posts: 730
1. Start a new game.
2. C:CreateCreature("safana").
3. Make Safana join the party (Ctrl-Q).
3. Do a quick save (Q).
4. Select Safana's Charm Person ability (2 > F12 > F1) and target the nearby tutor.
5. Notice how Safana walks towards the target and touches it. If successful, the target stays charmed for 100 seconds.
6. Reload (L).
7. Right-click Safana's Charm Person ability.

*Observed*
The innate ability uses the description of the wizard spell, stating that it is a ranged spell that lasts only 5 rounds (30 seconds).

*Expected*
All innate abilities should have correct properties and descriptions that match those intended properties.

*Note*
A number of innate abilities have errors. I compiled the following list containing all inconsistencies that should be addressed.

Minsc's Berserk (spin117.spl)
- includes 6 Disable String effects with a deviating duration of 30 seconds, should be 120 seconds

Yeslick's Dispel Magic (spin112.spl)
- casting speed is 4, should be 1 due to innate ability
- casting range is 30, should be 40 according to description

Safana's Charm Person (spin119.spl)
- uses the wizard spell's description (@12165) but is purposely different from the spell (range, duration, saving throw) because it is a kiss, should therefore have a unique description stating the correct properties

Branwen's Spiritual Hammer (spin113.spl)
- minimum casting level for creating the +2 hammer is 6, should be 7
- duration is 10 turns at all levels, should be progressive according to description (3 rounds + 1 round/level)
N.B.: The spell's duration currently cannot be tested correctly in-game due to this bug.

Faldorn's Summon Dread Wolf (spin114.spl)
- casting speed is 5, should be 1 due to innate ability
- duration is 10 turns, should be 1 turn according to description

Tiax' Summon Ghast (spin115.spl)
- casting speed is 5, should be 1 due to innate ability
- duration is 10 turns, should be 1 turn according to description

Quayle's Invisibility (spin118.spl)
- casting speed is 3, should be 1 due to innate ability
- duration is 10 turns, should be 24 in-game hours according to description

Comments

  • CrevsDaakCrevsDaak Member Posts: 7,155
    edited October 2014
    WeiDU scripts for fixing for everyone!
    For Yeslick's dispel magic innate:
    COPY_EXISTING spin112.spl override
    READ_LONG 0x64 ex_h_of
    READ_SHORT 0x68 ex_h_c
    FOR (i=0;i < ex_h_c;++i) BEGIN
    READ_SHORT (ex_h_of + 0x0e + (i*0x28)) range
    PATCH_IF range != 40 BEGIN
    WRITE_SHORT (ex_h_of + 0x0e + (i*0x28)) 40
    END
    READ_SHORT (ex_h_of + 0x12 + (i*0x28)) cast_time
    PATCH_IF cast_time != 1 BEGIN
    WRITE_SHORT (ex_h_of + 0x12 + (i*0x28)) 1
    END
    END
    BUT_ONLY
    For Faldorn's and Tiax's abilties:
    DEFINE_PATCH_FUNCTION 7C#ten_turns_to_one
    INT_VAR
    ten_turns = 600
    one_turn = 60
    BEGIN
    READ_LONG 0x64 ex_h_of
    READ_SHORT 0x68 ex_h_c
    FOR (index_func_7C#ten_turns_to_one=0;index_func_7C#ten_turns_to_one < ex_h_c;++index_func_7C#ten_turns_to_one) BEGIN
    READ_LONG (ex_h_of + 0x1e +(index_func_7C#ten_turns_to_one*0x28)) cfb_c
    READ_LONG (ex_h_of + 0x20 +(index_func_7C#ten_turns_to_one*0x28)) cfb_of
    FOR (j=0;j < cfb_c; ++j) BEGIN
    READ_LONG (ex_h_of + (cfb_of + 0x0e + (j * 0x30)) +(index_func_7C#ten_turns_to_one*0x30) 7C#ten_turn_duration
    PATCH_IF 7C#ten_turn_duration == ten_turns BEGIN
    WRITE_LONG (ex_h_of + (cfb_of + 0x0e + (j * 0x30)) +(index_func_7C#ten_turns_to_one*0x30)) "%one_turn%"
    END
    END
    END
    END

    DEFINE_PATCH_FUNCTION 7C#cast_time_to_one BEGIN
    READ_LONG 0x64 ex_h_of
    READ_LONG 0x68 ex_h_c
    FOR (i=0;i < ex_h_c;++i) BEGIN
    READ_SHORT (ex_h_of + 0x12 + (i*0x28)) cast_time
    PATCH_IF cast_time != 1 BEGIN
    WRITE_SHORT (ex_h_of + 0x12 + (i*0x28)) 1
    END
    END
    END

    COPY_EXISTING spin114.spl override
    LPF 7C#ten_turns_to_one END
    LPF 7C#cast_time_to_one END
    BUT_ONLY

    COPY_EXISTING spin115.spl override
    LPF 7C#ten_turns_to_one END
    LPF 7C#cast_time_to_one END
    BUT_ONLY
    Post edited by CrevsDaak on
  • HurricaneHurricane Member, Translator (NDA) Posts: 730
    @CrevsDaak‌ Seems like you are looking to do Beamdog's work now. :) But I just want this to get logged so they can take care of it.

    BTW, I think your ten_turns_to_one function is not quite correct. Ten turns = 600 seconds and one turn = 60 seconds (not 10 and 1), plus the function does not reach the spell's ability's effects.
  • JalilyJalily Member Posts: 4,681
    In this case, if there's a difference between the description and the ability, it's probably the description that should change.
  • HurricaneHurricane Member, Translator (NDA) Posts: 730
    Jalily said:

    if there's a difference between the description and the ability, it's probably the description that should change.

    No, not necessarily. For most of the listed abilities it's the other way around. In my judgement, Safana's Charm Person is the only case where we need a new, unique description to match the current behavior of the ability. In the other cases I can see that the description defines the intended behavior, and it's the properties that should be corrected.
  • JalilyJalily Member Posts: 4,681
    The descriptions weren't present in the original, as players would never see them without examining the game files. The Enhanced Editions added them because of the new right-click functionality. When there are differences, the mistake is usually in the new description.
  • HurricaneHurricane Member, Translator (NDA) Posts: 730
    Jalily said:

    The descriptions weren't present in the original, as players would never see them without examining the game files. The Enhanced Editions added them because of the new right-click functionality.

    I know. :) And you're right of course: If, for example, the developers actually intended for Quayle's invisibility to last 10 turns, then there's no need to change the current duration, and instead we need an altered description. All I'm saying is it makes more sense to me the other way around because I imagine that players, by default, would expect Quayle's invisibility to behave the same as the wizard spell, therefore the current description is the right fit to make it that way.
  • HurricaneHurricane Member, Translator (NDA) Posts: 730
    Quick reminder: This bug report hasn't been put onto the List of Known Issues yet.

    All of the listed problems need to be fixed. In those cases where the ability doesn't match the description, the developers have to decide which way to go, but these inconsistencies need to be addressed either way. And please don't forget that the other issues have nothing to do with descriptions at all (casting speeds, Minsc's Berserk, Branwen's casting level).
  • HurricaneHurricane Member, Translator (NDA) Posts: 730
    Reviewing this report again, I see that I've lumped together some issues that shouldn't have been lumped together. I will make individual reports. This thread can be closed.
This discussion has been closed.