Looking closer at Damage, it actually isn't a standalone effect. It's a class that contains a single function: SlowPoison(). This function is called by:
Looking closer at Damage, it actually isn't a standalone effect. It's a class that contains a single function: SlowPoison(). This function is called by:
Depending on the type it can modify the effect's poll frequency by a factor, and can even modify how powerful the effects are.
Interesting, as the Slow Poison opcode only interacts with Poison(op25) - though all 4 opcodes use the field it modifies in the same manner (parameter4 in v2.5, special in v2.3/earlier).
When I tested it, the Slow Poison opcode literally just overwrote that field in any Poison effects attached to the creature. It was thus useless if the Poison effect was called through op177/EFF pair. It was also useless against poison if it used p2=(0 or 1), as that mode wasn't influenced by the field it modifies (for any of the opcodes).
So I would guess that it's those opcodes calling the function based on that field (parameter4/special), and not the SlowPoison opcode.
"How do Shadowdancers have Hide in Plain Sight, and can it be duplicated?" If possible, as a HLA or at 17th circle per 3.5E for Ranger.
I know it can be done simply be Keepering a character to the Shadowdancer kit, even if not a Thief, but that eliminates the ability to take a Ranger kit, or any other kit, meaning I can't use 'Deities of Faerun' or 'Faiths and Powers'.
The engine is rigged to allow any kit with a KITIDS ending in 21 (hex) to hide in plain sight. I assume the other kits also have hardcodedness associated with their ids so I guess you can't add it to them; though it might be possible to make a new kit with shadowdancer abilities by ending it in 21.
"How do Shadowdancers have Hide in Plain Sight, and can it be duplicated?" If possible, as a HLA or at 17th circle per 3.5E for Ranger.
I know it can be done simply be Keepering a character to the Shadowdancer kit, even if not a Thief, but that eliminates the ability to take a Ranger kit, or any other kit, meaning I can't use 'Deities of Faerun' or 'Faiths and Powers'.
I think that's the only way. IIRC HiPS is hard-coded to only work for that kit, period.
You could give yourself innate at-will Sanctuary or Invisibility, or console in a crap-ton of Invisibility potions, or something like that... with sufficiently high Stealth (which you will have at HLA levels) there's no real difference.
Rangers cap at 99 Stealth @13th. It's high, but not really impossible to fail out of shadows and with armor penalties.
But that's unfortunate, because those options are less desirable than the Stealth button, because it would be clunky with the 1 spell/item per turn "aura".
Maybe an innate at-will invis with a 6 second aura-cleanse? Would that be feasible?
The engine is rigged to allow any kit with a KITIDS ending in 21 (hex) to hide in plain sight. I assume the other kits also have hardcodedness associated with their ids so I guess you can't add it to them; though it might be possible to make a new kit with shadowdancer abilities by ending it in 21.
Is there a way to ensure that a kitid will end in 21?
PATCH vs ACTION mismatch. Also I don't think you need to COPY_EXISTING_REGEXP GLOB?
This will probably compile better
ACTION_FOR_EACH label IN
~CLERIC_BLESS~
// ... spell list
BEGIN
ACTION_IF FILE_CONTAINS_EVALUATED (~SPELL.IDS~ ~[ %TAB%]%label%[ %TAB%%WNL%%LNL%%MNL%$]~) BEGIN
LAF RES_NUM_OF_SPELL_NAME STR_VAR spell_name = EVAL ~%label%~ RET spell_res END
ACTION_IF FILE_EXISTS_IN_GAME ~%spell_res%.spl~ BEGIN
COPY_EXISTING ~%spell_res%.spl~ override
WRITE_BYTE 0x19 (THIS BAND 253)
BUT_ONLY
END
END
END
Why NI can't read this .eff? The values it shows are nuts
PS: I've already tried without the ~.
Try increasing each offest by 0x10. Signature/Version come first in the file.
Also, EFF files have different field sizes that spell/item effects - most fields are 4 bytes long, and in different order. In NI, go to Options->Show Hex Offsets, to see the offset for each field.
2. How do ability modifiers get applied and how are they displayed in the NI. Specifically:
a) Is strength bonus applied in NI (THAC0 field) or does it work as some runtime effect in the game? Example: fighter level 7 has THAC0 14; if I want to create level 7 fighter with strength 17 (+1 to hit), do I set THACO 14 or 13 in NI?
The latter. Stats like STR, DEX modify things in real-time. In the .CRE file you want to set the *base* values. So in this case, 14. In the case of DEX, 10.
I guess this is true for attacks per round and opcode #233 too, right?
I was trying to make a thief who can backstab undead, but I just discovered that in IE undead can be backstabbed (at least in IWDEE)...
Damn, it was such a nice idea.
Isn't there a new backstab effect opcode? You could use some 318 trickery to have the thief do *more* damage when backstsbbing undead... or add some disabling effect, or something. Lots of possibilities.
You're right. I'll see what I can do with #340. As undead are immune to a lot of effects I'll have to be tricky.
If I use Opcode 337 (Remove Opcode), with a Duration X, will the Opcode return to the target after X or do I need to manually reapply it?
If I DO need to manually reapply it, can I do so through Opcode 321 (removing the spell that removed the opcode) or I need to reapply the hard way (Opcode 101, Opcode 267, Opcode 169...)
@Raduziel: Opcode #337 does a one-time remove of all opcodes matching the parameters and then terminates itself. Duration has no meaning to it, except to delay its execution on certain timing modes.
You'll need to reapply the Opcodes you removed the hard way. I'm not sure how you are planning on using #101, #267 and #169 in order to achieve this though... once the opcode is removed it is gone forever. You would have to reapply its original source manually, and that has the lengthy drawback of actually knowing what its source was.
@Raduziel: Opcode #337 does a one-time remove of all opcodes matching the parameters and then terminates itself. Duration has no meaning to it, except to delay its execution on certain timing modes.
You'll need to reapply the Opcodes you removed the hard way. I'm not sure how you are planning on using #101, #267 and #169 in order to achieve this though... once the opcode is removed it is gone forever. You would have to reapply its original source manually, and that has the lengthy drawback of actually knowing what its source was.
I'm reapplying what I'm removing.
Here's what I'm doing (example: Berserker for undead creatures)
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.........
huh, this sounds like an engine bug and not a small one. There are 50+ hits in vanilla BG2:EE scripts for AttackedBy(NearestEnemyOf(Myself),DEFAULT) alone, and all those blocks seems to be completly broken since AttackedBy trigger in this case always returns false.
Here is a test case:
IF
AttackedBy(NearestEnemyOf(Myself),DEFAULT)
THEN
RESPONSE #100
DisplayStringHead(LastAttackerOf(Myself),1)
DisplayStringHead(Myself,2)
Continue()
END
IF
AttackedBy([ENEMY],DEFAULT)
THEN
RESPONSE #100
DisplayStringHead(LastAttackerOf(Myself),3)
DisplayStringHead(Myself,4)
Continue()
END
Only second block dispalys meesages. No problems with See trigger. Probably worth reporting it on Beamdog redmine.
It was supposed to receive +2 (lv 1) plus +1 ST (lv 9) bonus vs. Spells and +1 AC vs. Missile every three levels, but I can't find anything in its CLAB that applies it.
It was supposed to receive +2 (lv 1) plus +1 ST (lv 9) bonus vs. Spells and +1 AC vs. Missile every three levels, but I can't find anything in its CLAB that applies it.
Compare 'SAVEMONK.2DA' to 'SAVEPRS.2DA' - the bonuses are incorporated into it's normal progression.
The AC vs. Missile bonus is hardcoded - it's only updated when a Monk levels up.
Comments
Move is constructed by Opcode #235
Looking closer at Damage, it actually isn't a standalone effect. It's a class that contains a single function: SlowPoison(). This function is called by:
CGameEffectDisease
CGameEffectPoison
CGameEffectRegeneration
CGameEffectRepeatingApplyEffect
Depending on the type it can modify the effect's poll frequency by a factor, and can even modify how powerful the effects are.
When I tested it, the Slow Poison opcode literally just overwrote that field in any Poison effects attached to the creature. It was thus useless if the Poison effect was called through op177/EFF pair. It was also useless against poison if it used p2=(0 or 1), as that mode wasn't influenced by the field it modifies (for any of the opcodes).
So I would guess that it's those opcodes calling the function based on that field (parameter4/special), and not the SlowPoison opcode.
The code now installs smoothly, but the effects are nowhere close to what I expected.
Here's the coding that adds the #326.
RAUS2 is a spell with a single effect:
Target: Creature - everything else in the header is 0.
Effect 1: Opcode 325; p1 = -2; target = 2; duration = 3000 (for testing, but I will knock it down to 1).
I'll actually trade Opcode 325 for Opcode 346 (special = 7), this way is safer to guarantee that only a necromancy spell will get this bonus.
---
Expected behavior: Target creature's STs are raised by 2 - what means a penalty (if it was 15, should go to 17).
Observed behavior: Caster's STs are raised by 4 (if it was 15 it is going to 18).
No, I'm not kidding.
Any insights?
A very reliable source told me that what I want to do can't be done. So I'm moving on and leaving this idea behind.
Thanks everyone.
"How do Shadowdancers have Hide in Plain Sight, and can it be duplicated?" If possible, as a HLA or at 17th circle per 3.5E for Ranger.
I know it can be done simply be Keepering a character to the Shadowdancer kit, even if not a Thief, but that eliminates the ability to take a Ranger kit, or any other kit, meaning I can't use 'Deities of Faerun' or 'Faiths and Powers'.
Rangers cap at 99 Stealth @13th. It's high, but not really impossible to fail out of shadows and with armor penalties.
But that's unfortunate, because those options are less desirable than the Stealth button, because it would be clunky with the 1 spell/item per turn "aura".
Maybe an innate at-will invis with a 6 second aura-cleanse? Would that be feasible?
Is there a way to ensure that a kitid will end in 21?
Thanks!
This will probably compile better
Why NI can't read this .eff? The values it shows are nuts
PS: I've already tried without the ~.
Try increasing each offest by 0x10. Signature/Version come first in the file.
Also, EFF files have different field sizes that spell/item effects - most fields are 4 bytes long, and in different order. In NI, go to Options->Show Hex Offsets, to see the offset for each field.
I was trying to make a thief who can backstab undead, but I just discovered that in IE undead can be backstabbed (at least in IWDEE)...
Damn, it was such a nice idea.
Yep, opcode #340.............
I guess this is true for attacks per round and opcode #233 too, right?
You're right. I'll see what I can do with #340. As undead are immune to a lot of effects I'll have to be tricky.
Thanks!
If I use Opcode 337 (Remove Opcode), with a Duration X, will the Opcode return to the target after X or do I need to manually reapply it?
If I DO need to manually reapply it, can I do so through Opcode 321 (removing the spell that removed the opcode) or I need to reapply the hard way (Opcode 101, Opcode 267, Opcode 169...)
Thanks!
You'll need to reapply the Opcodes you removed the hard way. I'm not sure how you are planning on using #101, #267 and #169 in order to achieve this though... once the opcode is removed it is gone forever. You would have to reapply its original source manually, and that has the lengthy drawback of actually knowing what its source was.
I'm reapplying what I'm removing.
Here's what I'm doing (example: Berserker for undead creatures)
Ignore all the p1 = 1, those are dummy values.
Thanks for the feedback @Bubb
Yeah, that should work
@Bubb
As my instructor at the boot camp used to say:
Nothing like stubbornness and brute force to compensate for the absolute lack of knowledge and talent!
Here is a test case:
Only second block dispalys meesages. No problems with See trigger. Probably worth reporting it on Beamdog redmine.
It was supposed to receive +2 (lv 1) plus +1 ST (lv 9) bonus vs. Spells and +1 AC vs. Missile every three levels, but I can't find anything in its CLAB that applies it.
The AC vs. Missile bonus is hardcoded - it's only updated when a Monk levels up.
Or a way to make this string go away while using Opcode 324?
Thanks!