Skip to content

General mod Questions thread

1353638404170

Comments

  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    edited December 2018
    Separately: as you know, opcode #172 (Remove Spell) and opcode #171 (Give Innate Ability) allow you to create infinite SPLs.

    However, if a character is killed when one of these SPLs is active, then that SPL is lost forever :( (due to the timing mode of opcode #172 being set to 9.....) Is there a way to avoid this issue?
  • The user and all related content has been deleted.
  • kjeronkjeron Member Posts: 2,367
    edited December 2018
    Luke93 said:

    However, if a character is killed when one of these SPLs is active, then that SPL is lost forever :( (due to the timing mode of opcode #172 being set to 9.....) Is there a way to avoid this issue?

    Opcodes 171 and 172 do not use timing mode 9. They have only 3 functional timing modes: 1/4/7.
    Instant, Delayed(seconds), Delayed(ticks). All others effectively convert to one of these. Any delayed opcode 171 effect will be removed by death, and has nothing to do with opcode 172. As for workarounds, no, I don't know of any safeguard to delaying opcode 171.

    As useful as the IESDP is, I have to agree with @subtledoctor , here's some missing information for just the first 15 opcodes EE behavior.
    • Opcode 0: Each modifier type to AC from this opcode is capped to the range [-20, 20]. Each AC type total is capped to the range [-32768,32767].
    • Opcode 1: -1 = -1, -2 = -2, -3 = -3, -4 = -4, -5 = -5, -6 = -1/2, -7 = -3/2, -8 = -5/2, -9 = -7/2, -10 = -9/2. Number of attacks are cumulative, not key values.
    • Opcode 2: Removes opcode 39 effects and STATE_SLEEPING. Can remove opcode 177 effects targeting an EFF with opcode 39. Does not always work when delayed.
    • Opcode 3: Missing "Type" information. In Combat(0) = Only berserk while in combat. Constant(1) = always berserk, sets SPELLSTATE 39. Usable against party members and non-party members. Forces creature to use a melee weapon if possible. (*) Can set base STATE.
    • Opcode 4: Removes opcode 3 effects and STATE_BERSERK. Does not remove opcode 246, 247, or 248 effects. Can remove opcode 177 effects targeting an EFF with opcode 3.
    Opcode 5: Charm types are woefully undetailed.
    (Parameter2)[LONG]: Charm Type
    0 : Neutral Charm
    • Does not alter targets allegiance stat.
    • Maintains EA[7][REALLYCHARMED] on the target if the caster is EA[30][GOODCUTOFF].
    • Maintains EA[254][EVILBYCHARM] on the target if the caster is EA[31][NOTGOOD].
    • Maintains Portrait Icon STATDESC[0]['Charm'] on the target.
    • Effect ends if the creature is attacked by EA[30][GOODCUTOFF].
    • Target displays string ENGINEST[STRREF_EFFECT_CHARMED](#).
    1000 : Neutral Charm (no Feedback)
    • Same as 0, but target does not display any string.
    1 : Hostile Charm
    • Sets targets allegiance to EA[30][GOODCUTOFF] if the caster is EA[200][EVILCUTOFF].
    • Sets targets allegiance to EA[200][EVILCUTOFF] if the caster is EA[199][NOTEVIL].
    • Maintains EA[7][REALLYCHARMED] on the target if the caster is EA[30][GOODCUTOFF].
    • Maintains EA[254][EVILBYCHARM] on the target if the caster is EA[31][NOTGOOD].
    • Maintains Portrait Icon STATDESC[0]['Charm'] on the target.
    • Effect ends if the creature is attacked by EA[30][GOODCUTOFF].
    • Target displays string ENGINEST[STRREF_EFFECT_CHARMED](#).
    1001 : Hostile Charm (no Feedback)
    • Same as 1, but target does not display any string.
    2 : Neutral Dire Charm
    • Does not alter targets allegiance stat.
    • Maintains EA[5][CONTROLLED] on the target if the caster is EA[30][GOODCUTOFF].
    • Maintains EA[255][ENEMY] on the target if the caster is EA[31][NOTGOOD].
    • Maintains Portrait Icon STATDESC[1]['Dire Charm'] on the target.
    • Effect ends if the creature is attacked by EA[30][GOODCUTOFF].
    • Target displays string ENGINEST[STRREF_EFFECT_DIRECHARMED](#).
    1002 : Neutral Domination
    • Same as 2, except:
    • Maintains Portrait Icon STATDESC[43]['Domination''] on the target.
    • Target does not display any string.
    3 : Hostile Dire Charm
    • Sets targets allegiance to EA[30][GOODCUTOFF] if the caster is EA[200][EVILCUTOFF].
    • Sets targets allegiance to EA[200][EVILCUTOFF] if the caster is EA[199][NOTEVIL].
    • Maintains EA[5][CONTROLLED] on the target if the caster is EA[30][GOODCUTOFF].
    • Maintains EA[255][ENEMY] on the target if the caster is EA[31][NOTGOOD].
    • Maintains Portrait Icon STATDESC[1]['Dire Charm'] on the target.
    • Effect ends if the creature is attacked by EA[30][GOODCUTOFF].
    • Target displays string ENGINEST[STRREF_EFFECT_DIRECHARMED](#).
    1003 : Hostile Domination
    • Same as 3, except:
    • Maintains Portrait Icon STATDESC[43]['Domination''] on the target.
    • Target does not display any string.
    4 : Controlled by Cleric
    • Sets targets allegiance to EA[30][GOODCUTOFF] if the caster is EA[200][EVILCUTOFF].
    • Sets targets allegiance to EA[200][EVILCUTOFF] if the caster is EA[199][NOTEVIL].
    • Maintains EA[5][CONTROLLED] on the target if the caster is EA[30][GOODCUTOFF].
    • Maintains EA[255][ENEMY] on the target if the caster is EA[31][NOTGOOD].
    • Target displays string ENGINEST[STRREF_EFFECT_TURNED](#).
    1004 : Controlled (no Feedback)
    • Same as 4, but target does not display any string.
    5 : Thrull Charm
    • Does not alter targets allegiance stat.
    • Maintains EA[255][ENEMY] on the target (regardless of casters Allegience).
    • Maintains STATS[149][THRULLCHARM] to 1.
    • Maintains Portrait Icon STATDESC[0]['Charm'] on the target.
    • Target displays string ENGINEST[STRREF_EFFECT_CHARMED](#).
    1005 : Thrull Charm (no Feedback)
    • Same as 5, but target does not display any string.
    (# Dice Thrown)[LONG]{EFF:V2}: Override Maintained EA Value

    If this effect turns a party member hostile, it will disable all of their scripts.
    • Opcode 6: (*) Can modify base stat.
    • Opcode 10: (*) Can modify base stat.
    • Opcode 11: Remove opcode 25 effects and STATE_POISON. Can remove opcode 177 effects targeting an EFF with opcode 25.
    • Opcode 12: Damage types "Magic Fire" and "Magic Cold" do not crash. Damage type "Poison" automatically uses save flag "Bypass Mirror Image".
      BIT3 flag: Drain HP to caster's Maximum HP, applying Opcode[#18], HP: Maximum HP Modifier to caster equal to damage dealt, inheriting the specified duration.
      BIT4 flag: Drain HP to caster's Maximum HP, applying Opcode[#18], HP: Maximum HP Modifier to caster equal to damage dealt, inheriting the specified duration.
      BIT5 flag: Suppress combat log feedback string.
      If effect reduces target to -20(PC) or -9(other) hit points, it also applies opcode 13 of the specified type:
      • Crushing/Slashing/Piercing: Exploding Death
      • Acid/Unlisted: Acid Death
      • Cold/Magic Cold: Frozen Death
      • Fire/Magic Fire: Burning Death
      • Electricity: Electrified Death
      • Magic/Missile/Poison: (normal)
      Dice Number capped to the range [0,255]. Final values for damage are capped to the range [-32767, 32768].
    Opcode 13: Again woefully undetailed.
    0 : Acid death
    • Sets STATE[0x00000400][STATE_ACID_DEATH], STATE[0x00000800][STATE_DEAD]
    • Kicked from Party, Drops Inventory
    1 : Burning death
    • Sets STATE[0x00000200][STATE_FLAME_DEATH], STATE[0x00000800][STATE_DEAD]
    • Character Tint Solid, Character Color, ~[0x00404040] (Darkens avatar).
    • Kicked from Party, Drops Inventory
    2 : Crushed death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Kicked from Party, Drops Inventory
    4 : Normal death / Abilty Drain death
    • Sets STATE[0x00000800][STATE_DEAD]
    • Drops Inventory
    8 : Chunked death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x230][EXPLODING_TORSO]
    • Plays sound ("GORE.WAV")/("GORE2.WAV")
    • Kicked from Party, Drops Inventory, Sets all Color indexes to 70
    16 : Stone death
    • Sets STATE[0x00000080][STATE_STONE_DEATH]
    • - Any hostile action against the creature applies an Exploding Stoned Death to them.
    • Kicked from Party, Retains Inventory, Overlay's Color Index 72
    32 : Freezing death
    • Applies Exploding Freezing Death to the target with a (random) 0-5 second delay.
    • Sets STATE[0x00000040][STATE_FROZEN_DEATH]
    • - Any hostile action against the creature applies an Exploding Freezing Death to the target.
    • Kicked from Party, Retains Inventory, Overlay's Color Index 71
    64 : Exploding stoned death / Level Drain death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x100][CHUNKS]
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 72
    128 : Exploding freezing death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x100][CHUNKS]
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 71
    256 : Electrified death
    • Sets STATE[0x00000200][STATE_FLAMING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Character Tint Solid, Character Color, ~[0x00404040] (Darkens avatar).
    • Kicked from Party, Drops Inventory
    512 : Disintegration death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x100][CHUNKS]
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 72
    1024 : Destruction death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x230][EXPLODING_TORSO]
    • Plays sound ("GORE.WAV")/("GORE2.WAV")
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 70
    (Other) :
    • Removes all death states, but does not restore HP.
    • Drops Inventory.
    (Any) : Removes death states that they do not set. (A normal Death will remove STATE_FROZEN_DEATH).
    Opcode 14: Restores creature to 1 HP. Does not affect creatures without STATE_FROZEN_DEATH.
    Opcode 15: (*) Can modify base stat.
    (*) Several: Used with timing modes 1/4/7 results in modifying a creatures base stat when it triggers, rather than attaching a removable effect.
    (*) Several: Used with timing modes 1/4/7 results in setting STATE_(state) when it triggers (and using it's default behavior), rather than attaching a removal effect with selected behavior.
  • GwendolyneGwendolyne Member Posts: 461
    Do these info apply also to classical BG2, or only EE engine?
  • kjeronkjeron Member Posts: 2,367
    Some likely do (AC, charm, kill, defrost, base stats). Some won't (damage flags).
  • The user and all related content has been deleted.
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535

    Luke93 said:

    Separately: as you know, opcode #172 (Remove Spell) and opcode #171 (Give Innate Ability) allow you to create infinite SPLs.

    However, if a character is killed when one of these SPLs is active, then that SPL is lost forever :( (due to the timing mode of opcode #172 being set to 9.....) Is there a way to avoid this issue?

    Try delaying the 172 effect by the exact same amount as the 171 effect.
    Yeah, I guess this is the only possibility. I set their timing modes to 1: as soon as you activate your ability, this will be removed forever and will be given to you at the same time.....

    If you think about it, there's no need to delay opcode #171 (I did that because I didn't want to be able to spam my ability.....): there's opcode #206 for that......
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    edited January 2019
    Inspired by @Ardanis CREATE_SPELL/CREATE_EFFECT, I made CREATE_ITEM, CREATE_STORE, CREATE_CREATURE and CREATE_AREA. Could someone check if everything is OK? Thanks in advance...

    EDIT: CREATE_CREATURE and CREATE_AREA don't work (something is missing.......)


    EDIT2: Nevermind, there's already a TP2 action (namely CREATE) for that.........
    Post edited by _Luke_ on
  • UlbUlb Member Posts: 295
    edited December 2018
    How do I get a script to cast a spell at an object's location but not target the object?

    Using ReallyForceSpellRES or any of those script actions will cast the spell with the object as a target, even if the spell itself has "Any Point" or something else set as target parameter.

    I tried using 'SaveObjectLocation' with 'ForceSpellPointRES' but it seems the later will not accept a token as its target coordinates, so that doesn't work?

    To elaborate on what I need the script to do: I want it to cast a spell at the target's current location but not have the spell actually follow if the target moves away.

    *Edit* I'm currently trying to work around that by having helper creatrures jump to the target locations and cast the spells on themselves but somehow I'm having trouble getting the creatures to jump right into the targets (so they jump right next to it.)

    MoveGlobalObject puts the object right on the target but JumpToObject seems to put it next to the target. The helpers all have null_animation and have their personal space set to 0 for good measure but that doesn't help with the displacement...


    Nevermind, got the helper workaround working, had just set the wrong timing mode for the personal space removal opcode.

    Would still be interested in knowing if it is possible to do this via script only...


    *edit2* Nope, the invisible creature doesn't work either. It works most of the time but sometimes it will still shove either the target or other nearby characters aside, which isn't acceptable.
    Post edited by Ulb on
  • BubbBubb Member Posts: 1,000
    @Ulb: The only way I've found to do this is via opcode #148 (Cast spell at point). You need an instant-cast spell that contains the opcode, with the real spell to be cast in the resource field. You can then use the "container" spell to cast the real spell at a target's point...

    Sadly, the downside to doing it this way is that the opcode always invokes ForceSpell, so the spell can never be disrupted. Looks like you wanted to force the spell anyways, so this method might actually work for you.
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    edited December 2018
    kjeron said:

    Opcode 3: Missing "Type" information. In Combat(0) = Only berserk while in combat. Constant(1) = always berserk, sets SPELLSTATE 39. Usable against party members and non-party members. Forces creature to use a melee weapon if possible. (*) Can set base STATE.
    [Berserk Type] What is the difference between constant(1) and blood rage(2)? I guess the answer holds for opcode #247 too, right (i.e., param2 has the same functionality)? Moreover:
    1. Does opcode #3 (or #247) alter the allegiance stat?
    2. Can I charm (via opcode #5) a CRE affected by opcode #3 or (#247)?
  • kjeronkjeron Member Posts: 2,367
    Luke93 said:

    [Berserk Type] What is the difference between constant(1) and blood rage(2)?

    The "Blood Rage" mode isn't implemented AFAIK. It likely would have performed the same function as SPELLSTATE 35 - SUPRESS_HP_INFO.
    Luke93 said:

    Does opcode #3 (or #247) alter the allegiance stat?

    No
    Luke93 said:

    Can I charm (via opcode #5) a CRE affected by opcode #3 or (#247)?

    They will still be uncontrollable while the berserk state is active. You can technically still charm them, and if they are using the "in-combat" mode of berserk then charming them can end combat and snap them out of it, at least until the charm expires. For example, if you Charm Brage once he goes hostile and avoid getting hit by him for a round then combat and his berserk will end. (It doesn't make a difference for the plot, as he's not scripted to handle this situation, but it can be done.)
  • UlbUlb Member Posts: 295
    @Bubb thanks a lot! Gonna try that. :)
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    edited December 2018
    kjeron said:


    Opcode 13: Again woefully undetailed.

    0 : Acid death
    • Sets STATE[0x00000400][STATE_ACID_DEATH], STATE[0x00000800][STATE_DEAD]
    • Kicked from Party, Drops Inventory
    1 : Burning death
    • Sets STATE[0x00000200][STATE_FLAME_DEATH], STATE[0x00000800][STATE_DEAD]
    • Character Tint Solid, Character Color, ~[0x00404040] (Darkens avatar).
    • Kicked from Party, Drops Inventory
    2 : Crushed death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Kicked from Party, Drops Inventory
    4 : Normal death / Abilty Drain death
    • Sets STATE[0x00000800][STATE_DEAD]
    • Drops Inventory
    8 : Chunked death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x230][EXPLODING_TORSO]
    • Plays sound ("GORE.WAV")/("GORE2.WAV")
    • Kicked from Party, Drops Inventory, Sets all Color indexes to 70
    16 : Stone death
    • Sets STATE[0x00000080][STATE_STONE_DEATH]
    • - Any hostile action against the creature applies an Exploding Stoned Death to them.
    • Kicked from Party, Retains Inventory, Overlay's Color Index 72
    32 : Freezing death
    • Applies Exploding Freezing Death to the target with a (random) 0-5 second delay.
    • Sets STATE[0x00000040][STATE_FROZEN_DEATH]
    • - Any hostile action against the creature applies an Exploding Freezing Death to the target.
    • Kicked from Party, Retains Inventory, Overlay's Color Index 71
    64 : Exploding stoned death / Level Drain death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x100][CHUNKS]
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 72
    128 : Exploding freezing death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x100][CHUNKS]
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 71
    256 : Electrified death
    • Sets STATE[0x00000200][STATE_FLAMING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Character Tint Solid, Character Color, ~[0x00404040] (Darkens avatar).
    • Kicked from Party, Drops Inventory
    512 : Disintegration death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x100][CHUNKS]
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 72
    1024 : Destruction death
    • Sets STATE[0x00000100][STATE_EXPLODING_DEATH], STATE[0x00000800][STATE_DEAD]
    • Sets ANIMATE[0x230][EXPLODING_TORSO]
    • Plays sound ("GORE.WAV")/("GORE2.WAV")
    • Kicked from Party, Retains Inventory, Sets all Color indexes to 70
    (Other) :
    • Removes all death states, but does not restore HP.
    • Drops Inventory.
    (Any) : Removes death states that they do not set. (A normal Death will remove STATE_FROZEN_DEATH).

    Are you saying that none of those special deaths sets STATE_REALLY_DEAD? In other words: are these two pieces of code equivalent?

    IF
    	Or(6)
    		StateCheck(Myself,STATE_DEAD)
    		StateCheck(Myself,STATE_FROZEN_DEATH)
    		StateCheck(Myself,STATE_STONE_DEATH)
    		StateCheck(Myself,STATE_EXPLODING_DEATH)
    		StateCheck(Myself,STATE_FLAME_DEATH)
    		StateCheck(Myself,STATE_ACID_DEATH)
    THEN
    	RESPONSE #100
    		something...
    END
    
    /////////////////////////////////////////////////////////
    
    IF
    	StateCheck(Myself,STATE_REALLY_DEAD)
    THEN
    	RESPONSE #100
    		something...
    END

  • kjeronkjeron Member Posts: 2,367
    Luke93 said:

    Are you saying that none of those special deaths sets STATE_REALLY_DEAD?

    STATE_REALLY_DEAD isn't an actual state, it's a pseudo-state, I believe originally added by mods.
    It just checks against any of the actual death STATES, so those two script checks are functionally the same.
    STATE_REALLY_DEAD is 0xFC0
    STATE_REALLY_DEAD = STATE_FROZEN_DEATH + STATE_STONE_DEATH + STATE_EXPLODING_DEATH + STATE_FLAME_DEATH + STATE_ACID_DEATH + STATE_DEAD
    0xFC0 = 0x40 + 0x80 + 0x100 + 0x200 + 0x400 + 0x800
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    edited December 2018
    What's the problem with the following script block? Its associated actions are never executed (tested against BJORNI.cre.....)

    IF
    	!GlobalTimerNotExpired("gt_kcdw","LOCALS")
    	AttackedBy(NearestEnemyOf(Myself),DEFAULT)
    	General(NearestEnemyOf(Myself),HUMANOID)
    	!Race(NearestEnemyOf(Myself),MEPHIT)
    	!CheckSpellState(NearestEnemyOf(Myself),BERSERKER_RAGE)
    	!CheckSpellState(NearestEnemyOf(Myself),BARBARIAN_RAGE)
    	!StateCheck(NearestEnemyOf(Myself),STATE_SLEEPING)
    	See(NearestEnemyOf(Myself))
    THEN
    	RESPONSE #100
    		SetGlobalTimer("gt_kcdw","LOCALS",ONE_ROUND)
    		ForceSpellRES("GTKCDW",LastSeenBy(Myself))
    		Continue()
    END


    [AttackedBy] Moreover, is it true that the style parameter is non functional (i.e., this trigger is triggered by any attack style?)

    The problem seems to be related to this trigger:

    AttackedBy(NearestEnemyOf(Myself),DEFAULT)
    If I remove it, then everything is fine.........
  • ReddbaneReddbane Member Posts: 222
    Quick Question: what file sets the number of APR bonuses granted for weapon proficiencies? I know it is separate from the the one that delineates damage and to-hit bonuses.
  • BubbBubb Member Posts: 1,000
    @Luke93: The style parameter is indeed not currently implemented. Any action that primes the trigger will always set the field to 0.

    I've looked at the engine, and while AttackedBy() receives an Object, it only tests against object selectors.

    So, for example, AttackedBy([ANYONE],DEFAULT) will work, because the object is passed as a set of selectors. AttackedBy(NearestEnemyOf(Myself),DEFAULT) does not work, as you have not passed the object in selector format.

    It looks like most triggers that are primed, then checked later, (like AttackedBy), are prone to this behavior. Weird stuff.
  • kjeronkjeron Member Posts: 2,367
    Bubb said:

    I've looked at the engine, and while AttackedBy() receives an Object, it only tests against object selectors.

    So, for example, AttackedBy([ANYONE],DEFAULT) will work, because the object is passed as a set of selectors. AttackedBy(NearestEnemyOf(Myself),DEFAULT) does not work, as you have not passed the object in selector format.

    It also works when you use one of the static objects (Myself, Player1, Player2, Player3, Player4, Player5, Player6):
    AttackedBy(Player1,DEFAULT)
    @Luke93 Have you tried the LastAttackerOf object:
    IF
    	!GlobalTimerNotExpired("gt_kcdw","LOCALS")
    	AttackedBy([ANYONE],DEFAULT)
    	General(LastAttackerOf,HUMANOID)
    	!Race(LastAttackerOf,MEPHIT)
    	!CheckSpellState(LastAttackerOf,BERSERKER_RAGE)
    	!CheckSpellState(LastAttackerOf,BARBARIAN_RAGE)
    	!StateCheck(LastAttackerOf,STATE_SLEEPING)
    	See(LastAttackerOf)
    THEN
    	RESPONSE #100
    		SetGlobalTimer("gt_kcdw","LOCALS",ONE_ROUND)
    		ForceSpellRES("GTKCDW",LastSeenBy(Myself))
    		Continue()
    END
  • _Luke__Luke_ Member, Mobile Tester Posts: 1,535
    edited December 2018
    @Bubb, @kjeron

    Thanks, I'll try what you suggested as soon as possible.....

    1) I guess there's no difference between LastAttackerOf(Myself) and LastAttackerOf, right?

    2) What do you mean by "primed" triggers?
  • BubbBubb Member Posts: 1,000
    @Luke93: There are some triggers that are defined with much lower IDS numbers than the rest:
    0x0001 Acquired(S:ResRef*)
    0x0002 AttackedBy(O:Object*,I:Style*AStyles)
    0x0003 Help(O:Object*)
    0x0004 Joins(O:Object*)
    0x0005 Leaves(O:Object*)
    0x0006 ReceivedOrder(O:Object*,I:Order ID*)
    0x0007 Said(O:Object*,I:Dialog ID*)
    0x0008 TurnedBy(O:Object*)
    0x0009 Unusable(S:ResRef*)
    0x0020 HitBy(O:Object*,I:DameType*Damages)
    0x0021 HotKey(I:Key*HotKey)
    0x0022 TimerExpired(I:ID*)
    0x0024 Trigger(I:TriggerNum*)
    0x0025 Die()
    0x0026 TargetUnreachable(O:Object*)
    0x002F Heard(O:Object*,I:ID*SHOUTIDS)
    0x0033 BecameVisible()
    0x0036 OnCreation()
    0x004A Died(O:Object*)
    0x004B Killed(O:Object*)
    0x004C Entered(O:Object*)
    0x0052 Opened(O:Object*)
    0x0053 Closed(O:Object*)
    0x0054 Detected(O:Object*)
    0x0055 Reset(O:Object*)
    0x0056 Disarmed(O:Object*)
    0x0057 Unlocked(O:Object*)
    0x005C BreakingPoint()
    0x005D PickPocketFailed(O:Object*)
    0x005E StealFailed(O:Object*)
    0x005F DisarmFailed(O:Object*)
    0x0060 PickLockFailed(O:Object*)
    0x0070 Clicked(O:Object*)
    0x0087 TrapTriggered(O:Triggerer*)
    0x0088 PartyMemberDied(O:Object*)
    0x0091 SpellCast(O:Object*,I:Spell*Spell)
    0x0093 PartyRested()
    0x0097 Summoned(O:Object*)
    0x00A1 SpellCastOnMe(O:Caster*,I:Spell*Spell)
    0x00A6 SpellCastPriest(O:Object*,I:Spell*Spell)
    0x00A7 SpellCastInnate(O:Object*,I:Spell*Spell)
    0x00CC TookDamage()
    0x00D6 WalkedToTrigger(O:Object*)

    Most of these triggers don't evaluate alongside a script - they instead set a flag on the target creature when what they test for is true. These flags are always set, regardless if any scripts are actually using the trigger. It seems that these types of triggers go through a different processing structure, which evaluate objects differently than the rest.
  • smyth25smyth25 Member Posts: 219
    Hey, does anyone know how to script a dialogue to occur just before resting when the player decides to rest? (For example like in the romances). Preferably also need to way to make a dialogue occur after the rest is finished too. For context, I'm trying to make a dialogue for a custom npc in which they have drinks and chat when you rest at a tavern. When the rest is finished, the next bit of dialogue gives the impression they have been chatting all night.
  • ReddbaneReddbane Member Posts: 222
    Reddbane said:

    Quick Question: what file sets the number of APR bonuses granted for weapon proficiencies? I know it is separate from the the one that delineates damage and to-hit bonuses.

    Anyone?
  • kjeronkjeron Member Posts: 2,367
    @Reddbane WSPATCK.2DA
    Level (Horizontal)
    Proficiency (Vertical)
    0 = 0
    1 = +1
    2 = +2
    3 = +3
    -1 = +1/2
    -2 = +3/2
    -3 = +5/2
  • ReddbaneReddbane Member Posts: 222
    kjeron said:

    @Reddbane WSPATCK.2DA
    Level (Horizontal)
    Proficiency (Vertical)
    0 = 0
    1 = +1
    2 = +2
    3 = +3
    -1 = +1/2
    -2 = +3/2
    -3 = +5/2

    Is there a corresponding code for +7/2 and +4?
    Am I correct in assuming it is -4 ( +7/2) and 4?
  • kjeronkjeron Member Posts: 2,367
    Reddbane said:


    Is there a corresponding code for +7/2 and +4?
    Am I correct in assuming it is -4 ( +7/2) and 4?

    Yes
  • ReddbaneReddbane Member Posts: 222
    Another related question to Weapon Proficiency/APR. What do you have to change to make the APR bonuses apply to all classes rather than warriors?
  • kjeronkjeron Member Posts: 2,367
    edited December 2018
    @Reddbane "CLSWPBON.2DA", columns:
    KITNAME '0/1' 'rate' 'penalty'
    '0/1' = false/true gets proficiency APR
    'rate' = levels per unarmed 1/2APR increase (meant for monks, but affects everyone).
    'penalty' = non-proficient THAC0 penalty (the 0-proficiency row of "WSPECIAL.2da" isn't actually used)

    However, single-class kit's can only get proficiency APR if their base class also gets proficiency APR.
    Improper Multi-class kit's can only get proficiency APR if the base Multi-class and at least one of it's respective base classes gets proficiency APR.
    Proper Multi-class kit's can only get proficiency APR if at least one of their separate base classes also gets proficiency APR (the multi-class listing in CLSWPBON is not required for proper multi-class kits.)
  • The user and all related content has been deleted.
  • kjeronkjeron Member Posts: 2,367
    edited December 2018

    Unfortunately CLSWPBON.2DA is currently bugged such that C/T, M/T, and C/M cannot get the APR benefits of WSPATCK.2DA, no matter what you do. I've filed a bug report with Beamdog about this a year or two ago... it was not fixed for 2.5 but maybe, hopefully, it might be fixed for 2.6.

    They can, just not without also granting it to at least one of their base classes (which will determine which class level determines their APR).
    You have to set one of the base classes APR column to '1', and the Multi-classes's APR column to '1'.
    If using a multi-class kit, you also have to set it's APR column to '1'.

    There is a bug with the record display - it does not always update to correct values upon loading until an equipment change occurs.
Sign In or Register to comment.