Larian Banner: Baldur's Gate Patch 9
Previous Thread
Next Thread
Print Thread
Page 1 of 2 1 2
#581270 10/04/16 04:44 PM
Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
Hi there, I'm trying to make a small, concise mod to buff the Scoundrel skills to be a bit more on par with other builds. Really just buffing the master skills, making the eye gouge skillbook buyable (think I've got that done already), flattening all the dagger-debuff skills to 3ap, slightly reducing the cooldown on Walk in Shadows so you can feasibly use it twice in a combat and a qol buff by making lacerate, and eye gouge not self-targetable (all done).

I really feel like the core mechanics of Coup De Grace and Shadow Step just aren't very useful most of the time. Shadow step just seems like a way to make up for having really low movement, which I'd think most rogues wouldn't have. Coup De Grace seems like it has one use case given the high ap requirement: cheese the last bit of health on a boss/really-high-hp-enemy, otherwise you're going to do wayyyy more damage using 9 of that 10 ap to backstab 3 times.

I'm thinking I'll set Coup De Grace to be a massive nuke on an enemy that has a status effect that thematically would make them vulnerable (Knocked Down, Stunned, Blind, Crippled, Weak, Slowed, Feared, not Frozen or Petrified though, wouldn't really make sense) - making Coup De Grace a skill about mercilessly striking at a helpless enemy (like going for vitals). Changes the gameplay pattern to something actually viable in most encounters.

I only have one problem with that, changing the conditional to be a check for status effects. I would think I could base it off the bully talent, but I can't find anywhere that the behaviour for bully is specified. The target conditions specified in ValueLists.txt seem to have the actual behaviour being set automagically (NonSelf, Enemy, LowHP is the only one that seems to be taking a parameter, but I don't see how it's being applied as a Vitality percentage). As well, I'm not sure if it's possible to have more than one conditional (ie. Helpless and NonSelf).

Shadow Step is a fair bit more complicated though... I think it'd be easy to buff it to just have more range, less cost, maybe less cooldown but that just allows the rogue to play pseudo-range. I'd like to make it a point blank area of effect where you backstab all enemies in the aoe with shadow versions of yourself, maybe applying bleed. I'm thinking I'd make the damage comparable to rain of arrows, a bit less on the initial hit, but more after the bleed ticks

I'm guessing it wouldn't be too bad to get the skill functional - but would it be possible to get the animation to just function as it does now, and instead of just going to one target, have the rogue appear behind everyone who gets hit? Or failing that; show a smoke cloud over the aoe after the rogue descends into the ground, then dissipate after everyone gets shanked?

Any advice or direction would be greatly appreciated!

Here are my current attempts with the changes (no idea how to debug them in the engine, and don't have access to saves with the skills unlocked currently)

-=-=-=-=-=-=-

new entry "Target_Fatality"
type "SkillData"
data "SkillType" "Target"
data "Ability" "Rogue"
data "Element" "None"
data "Tier" "Master"
data "Requirement" "DaggerWeapon"
data "ActionPoints" "8"
data "Cooldown" "8"
data "CooldownReduction" "20"
data "ChargeDuration" "0"
data "Damage Multiplier" "500"
data "Damage Range" "10"
data "DamageType" "Piercing"
data "TargetRadius" "1"
data "AddWeaponRange" "Yes"
data "DeathType" "Explode"
data "CanTargetCharacters" "Yes"
data "CanTargetItems" "No"
data "CanTargetTerrain" "No"
data "Magic Cost" "0"
data "TargetConditions" "Helpless;NonSelf" **** (How to set helpless?)
data "UseCharacterStats" "yes"
data "UseWeaponDamage" "Yes"
data "Icon" "Skill_Rogue_Fatality"
data "DisplayName" "Target_Fatality_DisplayName"
data "DisplayNameRef" "Coup De Grace"
data "Description" "Target_Fatality_Description"
data "DescriptionRef" "Deal [2] damage to a helpless target."
data "StatsDescription" "Target_Fatality_StatsDescription"
data "StatsDescriptionRef" "Range: [1]"
data "StatsDescriptionParams" "TargetRadius;Damage"
data "FXScale" "100"
data "PrepareAnimationInit" "skill_fatality_start"
data "PrepareAnimationLoop" "skill_fatality_loop"
data "PrepareEffect" "FX_Skills_Rogue_Fatality_Prepare_DWSML_A"
data "CastAnimation" "skill_fatality_cast"
data "CastTextEvent" "cast"
data "CastEffect" "FX_Skills_Rogue_Fatality_Cast_DWSML_A"
data "Accuracy" "Accurate"

new entry "Target_Fatality_18"
type "SkillData"
using "Target_Fatality"
data "Level" "18"

-=-=-=-=-=-=-

new entry "Target_ShadowStep"
type "SkillData"
data "SkillType" "Shout"
data "Ability" "Rogue"
data "Element" "None"
data "Tier" "Master"
data "Requirement" "DaggerWeapon"
data "ActionPoints" "8"
data "Cooldown" "8"
data "CooldownReduction" "20"
data "ChargeDuration" "0"
data "Damage Multiplier" "250"
data "DamageType" "Piercing"
data "SkillProperties" "AlwaysBackstab;Bleeding,120,3"
data "CanTargetCharacters" "Yes"
data "CanTargetItems" "No"
data "CanTargetTerrain" "No"
data "Magic Cost" "1"
data "TargetConditions" "Enemy"
data "UseCharacterStats" "Yes"
data "UseWeaponDamage" "Yes"
data "AreaRadius" "8"
data "Icon" "Skill_Rogue_ShadowStep"
data "DisplayName" "Target_ShadowStep_DisplayName"
data "DisplayNameRef" "Shadow Step"
data "Description" "Target_ShadowStep_Description"
data "DescriptionRef" "Step through the shadows and attack surrounding enemies from behind, dealing [2] weapon damage. Then go back to where you came from."
data "StatsDescription" "Target_ShadowStep_StatsDescription"
data "StatsDescriptionRef" "Range: [1]<br>Damage dealt depends on your weapon's damage rating."
data "StatsDescriptionParams" "TargetRadius;Damage"
data "FXScale" "100"
data "PrepareAnimationInit" "skill_shadowstrike_start" **** (Not sure how this will work out)
data "PrepareAnimationLoop" "skill_shadowstrike_loop"
data "PrepareEffect" "FX_Skills_Rogue_ShadowStrike_Prepare_A"
data "CastAnimation" "skill_shadowstrike_cast"
data "CastTextEvent" "cast"
data "CastEffect" "FX_Skills_Rogue_ShadowStrike_Cast_A"
data "TargetCastEffect" "FX_Skills_Rogue_ShadowStrike_Impact_Male_A"

new entry "Target_ShadowStep_16"
type "SkillData"
using "Target_ShadowStep"
data "Level" "16"

Joined: Jul 2014
R
addict
Offline
addict
R
Joined: Jul 2014
I took a stab at the Shadow Step skill for Enhanced Edition, and was semi-successful...

[Linked Image]


The animation didn't work (the character just raised their dagger and everything was hit simultaneously), but it did backstab all targets in range.

From what I can recall from when I made skills in Classic edition, you can't change the pre-existing skills directly. Instead you need to create a new skill with the modified parameters and change all references from the old skill to the new.

Here's my Skilldata entry:

Code
new entry "CHANGED_ShadowStep"
type "SkillData"
data "SkillType" "Shout"
data "Ability" "None"
data "Element" "None"
data "Requirement" "DaggerWeapon"
data "ActionPoints" "8"
data "Cooldown" "8"
data "CooldownReduction" "20"
data "ChargeDuration" "0"
data "Damage Multiplier" "250"
data "DamageType" "Piercing"
data "SkillProperties" "AlwaysBackstab;Bleeding,120,3"
data "CanTargetCharacters" "Yes"
data "CanTargetItems" "No"
data "CanTargetTerrain" "No"
data "Magic Cost" "1"
data "TargetConditions" "Enemy"
data "UseCharacterStats" "Yes"
data "UseWeaponDamage" "Yes"
data "AreaRadius" "8"
data "Icon" "Skill_Rogue_ShadowStep"
data "DisplayName" "Target_ShadowStep_DisplayName"
data "DisplayNameRef" "Shadow Step"
data "Description" "Target_ShadowStep_Description"
data "DescriptionRef" "Step through the shadows and attack surrounding enemies from behind, dealing [2] weapon damage. Then go back to where you came from."
data "StatsDescription" "Target_ShadowStep_StatsDescription"
data "StatsDescriptionRef" "Range: [1]<br>Damage dealt depends on your weapon's damage rating."
data "StatsDescriptionParams" "TargetRadius;Damage"
data "FXScale" "100"
data "PrepareAnimationInit" "skill_shadowstrike_start"
data "PrepareAnimationLoop" "skill_shadowstrike_loop"
data "PrepareEffect" "FX_Skills_Rogue_ShadowStrike_Prepare_A"
data "CastAnimation" "skill_shadowstrike_cast"
data "CastTextEvent" "cast"
data "CastEffect" "FX_Skills_Rogue_ShadowStrike_Cast_A"
data "TargetCastEffect" "FX_Skills_Rogue_ShadowStrike_Impact_Male_A"

new entry "CHANGED_ShadowStep_1"
type "SkillData"
using "CHANGED_ShadowStep"
data "Level" "1"



For debugging purposes, it's important to make your skill low-level until you get it working correctly. Thus I removed the "Tier" data point and changed the "Ability" field to "None", so that it won't be removed due to insufficient skill points. You can change the requirements later once the skill works properly.

I also had this story script to give the skill at the start for me to test:

Code
IF
DB_CYSDoTutorial(_)
THEN
CharacterAddSkill(CHARACTER_Player1, "CHANGED_ShadowStep");
PartyAddGold(CHARACTER_Player1,1000);


The 1000 gold is just to check that the skill should have been added.


For more information on changing skills, it might be helpful to take a look at my stickied topic "Main Campaign Modding" (specifically the "Adding new skills/items to the game" in the first post). Although the thread was made for Classic edition, a lot of the information still works for Enhanced Edition modding.

Last edited by Rhidian; 10/04/16 11:03 PM.
Joined: Aug 2014
old hand
Offline
old hand
Joined: Aug 2014
You can modify the skills directly, no need to create a new version.

Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
Update: I got access to my save files and have been able to test. I've cranked the numbers down on both a fair bit.

Coup De Grace
Still no leads on how I'd go about creating a "helpless" target condition. I guess there's always the honour system, but it'd be nice to get it working.

Shadow Step
1) Animation: I've got shadowstep functional, but I've got a bit of a stumbling block with the animation. If I set FX_Skills_Rogue_ShadowStrike_Impact_Male_A to be a hit effect: it shows up on all the enemies, well after they've taken damage. If I set it to a cast effect, the animation is in sync with the damage, but the shadow shows up over where my character was before descending into the ground. Is there any way to get TargetCastEffect to work with a shout?

2) Status effect: I'd like less of the damage on Shadow Step to be frontloaded; I'd like the bleed to do more damage but I have no idea how to create a "Severe Bleed" status effect, I can't even find how the current bleed is working, or how damage per turn is determined.

Both
The DescriptionRef and StatusDescriptionRef fields seem to be ignored by the game, and it just shows the default descriptions.

And a more limiting, but likely much more readily addressed issue: I can't get my mod to import properly. If I go through the mod loader it simply returns to the main menu when I create a game. I'd like to be able to apply this mod to a current playthrough, but it's still concerning for workshop publishing potential.

I've mimicked the installation of the Scales mod, by placing my shared folder in [Divinity Install Folder]/Data/Public and I can get my mod to function, and I can test it - but it warns me that there are invalid files in main and I won't be able to play multiplayer.

(Update on skill entries)
Coup De Grace

new entry "Target_Fatality"
type "SkillData"
data "SkillType" "Target"
data "Ability" "Rogue"
data "Element" "None"
data "Tier" "Master"
data "Requirement" "DaggerWeapon"
data "ActionPoints" "8"
data "Cooldown" "8"
data "CooldownReduction" "20"
data "ChargeDuration" "0"
data "Damage Multiplier" "200"
data "Damage Range" "10"
data "DamageType" "Piercing"
data "TargetRadius" "1"
data "AddWeaponRange" "Yes"
data "DeathType" "Explode"
data "CanTargetCharacters" "Yes"
data "CanTargetItems" "No"
data "CanTargetTerrain" "No"
data "Magic Cost" "0"
data "TargetConditions" "Enemy"
data "UseCharacterStats" "yes"
data "UseWeaponDamage" "Yes"
data "Icon" "Skill_Rogue_Fatality"
data "DisplayName" "Target_Fatality_DisplayName"
data "DisplayNameRef" "Coup De Grace"
data "Description" "Target_Fatality_Description"
data "DescriptionRef" "Deal [2] damage to an incapacitated target."
data "StatsDescription" "Target_Fatality_StatsDescription"
data "StatsDescriptionRef" "Range: [1]"
data "StatsDescriptionParams" "TargetRadius;Damage"
data "FXScale" "100"
data "PrepareAnimationInit" "skill_fatality_start"
data "PrepareAnimationLoop" "skill_fatality_loop"
data "PrepareEffect" "FX_Skills_Rogue_Fatality_Prepare_DWSML_A"
data "CastAnimation" "skill_fatality_cast"
data "CastTextEvent" "cast"
data "CastEffect" "FX_Skills_Rogue_Fatality_Cast_DWSML_A"
data "Accuracy" "Accurate"

new entry "Target_Fatality_18"
type "SkillData"
using "Target_Fatality"
data "Level" "18"


Shadow Step

new entry "Target_ShadowStep"
type "SkillData"
data "SkillType" "Shout"
data "Ability" "Rogue"
data "Element" "None"
data "Tier" "Master"
data "Requirement" "DaggerWeapon"
data "ActionPoints" "8"
data "Cooldown" "8"
data "CooldownReduction" "20"
data "ChargeDuration" "0"
data "Damage Multiplier" "150"
data "DamageType" "Piercing"
data "SkillProperties" "AlwaysBackstab;Bleeding,140,4"
data "CanTargetCharacters" "Yes"
data "CanTargetItems" "No"
data "CanTargetTerrain" "No"
data "Magic Cost" "1"
data "TargetConditions" "Enemy"
data "UseCharacterStats" "Yes"
data "UseWeaponDamage" "Yes"
data "AreaRadius" "8"
data "Icon" "Skill_Rogue_ShadowStep"
data "DisplayName" "Target_ShadowStep_DisplayName"
data "DisplayNameRef" "Shadow Step"
data "Description" "Target_ShadowStep_Description"
data "DescriptionRef" "Step through the shadows and attack surrounding enemies from behind, dealing [2] weapon damage. Then go back to where you came from."
data "StatsDescription" "Target_ShadowStep_StatsDescription"
data "StatsDescriptionRef" "Radius: [1]<br>Damage dealt depends on your weapon's damage rating."
data "StatsDescriptionParams" "AreaRadius;Damage"
data "FXScale" "100"
data "PrepareAnimationInit" "skill_shadowstrike_start"
data "PrepareAnimationLoop" "skill_shadowstrike_loop"
data "PrepareEffect" "FX_Skills_Rogue_ShadowStrike_Prepare_A"
data "CastAnimation" "skill_shadowstrike_cast"
data "CastTextEvent" "cast"
data "CastEffect" "FX_Skills_Rogue_ShadowStrike_Cast_A;FX_Skills_Rogue_ShadowStrike_Impact_Male_A"
data "HitEffect" "FX_Skills_Rogue_ShadowStrike_Impact_Male_A"

new entry "Target_ShadowStep_16"
type "SkillData"
using "Target_ShadowStep"
data "Level" "16"

Last edited by SwiftSwrd; 11/04/16 12:18 AM. Reason: Wouldn't let me update the OP
Joined: Aug 2014
old hand
Offline
old hand
Joined: Aug 2014
I posted on your steam thread which hopefully will answer some of your additional questions and help you with your conditions issue. Regarding that warning of invalid files in main and not being able to play multiplayer, that error is meaningless. Just make sure both you and your friend have the files. Now if you want to publish a mod to the workshop, you'll have to make a .pak with the editor. Have you set the Module Settings (under Modding tab at top) right? I think you have to set the "StartUp Level" to CharacterCreation and MenuLevel to "Menuscreen_Cyseal." I'm not sure if you can use the mod menu to activate a mod on an existing playthrough. The unpacked method of installing like with Scales lets you do that though.

The DescriptionRef/StatsDescriptionRef are just references, not actual data. The StatsDescription, and Description entries are the real entries, which you then have to translate with a Translated Key file.
This guide might be helpful regarding that and the process in general, also.

http://steamcommunity.com/sharedfiles/filedetails/?id=310635729

Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
Thanks a bunch for all your help, I'll check out the steam thread and that custom skill guide.

Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
Alright, I got the in-game strings working, and I read through your scripting suggestion. If I understand right the idea is to apply a debuff to them that on application checks their other statuses, and if they have the statuses I'm trying to limit to, explodes them. Convenient that you brought up custom status effects, I looked for that and didn't find anything about them. The problem I have with that implementation of Coup De Grace, though, is there doesn't seem to be room to have the damage scale based on the character that applied it. Would there be some way to pass a damage value to the debuff as it is applied?

I'm guessing if I tried just using "UseWeaponDamage" it'd scale of the weapon of the enemy being hit (wouldn't that be an interesting bug?). It seems bleeding doesn't have an entry, and burning certainly doesn't have the damage specified in potion.txt.

However, if it's possible to create a severe-bleeding effect that scales with the attacker, it would allow me to move a lot of damage from the initial hit of Shadow Step (or should I call it Shadow Assault?) to a DoT. Could also fix the issue of bleed-immunity and body-building saves, I'd just like the real damage of the ability to be the DoT rather than the hit. I actually really dislike that the current DoT is beholden to the limitations of any given status. Hell, it'd be pretty cool to have the shadow backstab animation play as they take a tick of damage from the DoT. I'm just really reluctant to make the damage flat by making it a potion.

A more minor question - what does damage range do? I would've guessed it was how much a roll can influence the damage, but setting it to 0 on random skills, or up to 100 seems to do nothing when I load the game and test.

Joined: Aug 2014
old hand
Offline
old hand
Joined: Aug 2014
Bleeding and burning damage are actually defined the weapon.txt. Regarding scaling the effect, that is an issue. I'm not sure how exactly you want to scale it (by weapon damage I assume), but that will definitely take some clever thinking. Scaling it by a stat would be possible if you took a measure of the character's dexterity, for example (CharacterGetStat), and then apply a stronger version of the super-bleed effect depending on your dexterity (that is, you'd make like 5 different massive bleeding statuses with different damage totals). One interesting idea would be to scale it based on how many points in the nasty deeds stat you have. Every 3 points in Sneak, lockpicking or pickpocket would get you a stronger bleed effect.

I would think damage range would basically increase the variability of the damage by X percentage, with 10 being like 90-110, and 30 being 70-140 or something, but I haven't looked into it that much. I tend to prefer lower variability in that respect.

Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
Custom status effect seems to be a no-go. I tried throwing this on Shadow Step's SkillProperties:

Consume,100,3,SevereBleeding

With this potions.txt entry:

new entry "SevereBleeding"
type "Potion"
using "_SkillBoost"
data "Duration" "1"
data "StatusEffect" "FX_GP_Status_Bleeding_A_Effect1"
data "StatusIcon" "statIcons_Bleeding"
data "Damage" "3"
data "Damage Multiplier" "100"
data "Damage Range" "1"
data "DamageType" "Shadow"
data "StackId" "SevereBleedingStatus"


And I get an icon that lasts 3 turns but doesn't actually do anything.
I tried mimicking other entries in potions.txt: changing/removing the using field, adding act and act part fields, removing/changing damageType and damage multiplier... nothing seemed to get it to actually function.

Joined: Aug 2014
old hand
Offline
old hand
Joined: Aug 2014
Hmm, that's weird the damage isn't functioning, really can't figure out why that would be. You could try doing a negative "VitalityPercentage" for a percentage of health damage, but unfortunately that only seems to activate on the first tick.


Last edited by Baardvark; 12/04/16 01:45 AM.
Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
I thought of trying that, I just really don't like %maxhp true damage. It's weakish on low hp targets, absurd on high hp targets. As well, if it only ticks one turn I can't get that delayed damage effect that I want so that I can put more damage in the skill without making it OP by doing so.

I'll probably experiment some more once I've gotten enough time with Dark Souls 3 to be able to put the game down.

Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
Alright, so I've given an earnest crack at reverse engineering some scripts, and this is where I've gotten so far. I've commented out some functions I'd like to use but if the behaviour of the function is even possible, I have no idea which functions I would use to achieve them. I potentially could try to find such functions through calling the names I'd think they'd have, then do trial and error; but trial and error with the txt files where I was simply interchanging values that I knew were valid was bad enough. Trial and error here would be pretty much unfeasible due to the time required.

(I think the problem before was that no matter what I do, the effect of the damage entry in potions is only applied when the CONSUME happens)

Shadow Mark:
Base.charScript

EVENT Severe_Bleeding_Tick
ON
OnTurn()
VARS
CHARACTER:_StatusSource
//INT:_Damage
ACTIONS
IF "c1&c2"
CharacterHasStatus(__Me,CONSUME,SevereBleeding)
CharacterGetStatusSourceCharacter(__Me,CONSUME,_StatusSource)
THEN
PlayEffectAt(__Me,"FX_Skills_Rogue_ShadowStrike_Impact_Male_A")
CharacterConsume(__Me,SevereBleedingDamage,1,1) //would like to remove
//CharacterGetDamage(_StatusSource, _Damage) //***
//Multiply(_Damage,x)
//CharacterTakeDamage(__Me, _Damage, "(Shadow/Piercing/None)")
ENDIF


Potions.txt

new entry "ShadowMark"
type "Potion"
data "DamageType" "Piercing"
data "StatusIcon" "statIcons_MarkOfDeath"
data "StackId" "SevereBleedingStatus"

new entry "ShadowMarkDamage"
type "Potion"
data "Duration" "1"
data "Damage" "10"
data "Damage Multiplier" "1175"
data "Damage Range" "0"
data "DamageType" "None"
data "StatusIcon" "statIcons_Remorse"


***Perhaps just dex scaling with CharacterGetStat(_StatDexterity, _StatusSource, Damage)? I'm also considering trying to store the damage dealt by the initial shadow step through an OnDamage(_,Damage,_,_) - but I'm not sure if I'm able to store variables with a global scope


As for the Coup de Grace, I'm wondering if an earlier idea I had that I wrote off as un-implementable would actually be more feasible? Just a quick yes or no if you think this is possible, you've already put so much time into helping me.

I wanted to have stacks build up on an enemy as I backstab them, and when at 3 stacks I could coup de grace them - same problem of having a non-scaling massive damage effect after the coup de grace goes off. If I change the perspective and have it say... Build up stacks on my character as I backstab and then at 5 stacks unlocks coup de grace for casting - I know I could get the stacks to build up, the problem is if:
1) I can identify backstabs, I don't see even a way to identify crits anywhere
2) Set coup-de-grace to castable after 5 stacks

I'm thinking maybe I could set the AP cost to what I want it to be onturn if there are 5 stacks, then remove the stacks once it is cast, and have an onturn that if <5 stacks, it's 99 AP. Or set the damage to 0 if less than 5 stacks. I'm not sure if I'm able to manipulate the damage multiplier of an ability, or the ap cost in a script is the problem. I don't see a way to, and I definitely don't see a way to flat out disable the skill.

Joined: Aug 2014
old hand
Offline
old hand
Joined: Aug 2014
I use http://divinityengine.wikia.com/wiki/Scripting for referencing scripting commands. It's for the original, but everything seems to work. I'd recommend you use the editor to edit the scripts which will autocomplete commands and might help you find things easier and point out errors.

Some comments on script.

You may be aware, but damage takes a FLOAT (a percentage of health), not an INT.

Another thing to point out that's really annoying is that "CharacterGetStatusSourceCharacter(__Me,CONSUME,SevereBleeding) is going to get the status source of ANY CONSUME status (e.g., potions or the like) and might give you the wrong character. I haven't found a way around this.

Also I've realized that CharacterConsume only takes the two parameters of the character and the status effect (durat is in the status effect, and force is always 1, basically), not duration and force like CharacterApplyStatus does (but that only works with hardcoded statuses like BURNING, BLEEDING, etc. However, just a thought, you could force, say, burning, bleeding, and poisoned with, for example

CharacterApplyStatus(__Me,BLEEDING,3,1) // the "1" is the force, and 1 will let you bypass immunities.)

All 3 would be pretty significant damage, but obviously some enemies would heal from poison and burning. You could possibly do a check for resistances there and only apply if poison/burning resist is less than 100.

You might want to try CharacterApplyDamage(CHAR,INT_Damage,String_DAMAGETYPE). I don't think it will work since it's a story script, but you never know. Worst comes to worst, you could use story scripting (or a combination of story/character scripting) to make the damage apply.

I think you can store global variables by storing the variables at the top of the script before any events with % signs before the variable. For example, in the "Base" script, you got:

CHARACTER:%LookAtChar
CHARACTER:%AttackOfOpportunity
ITEM:%LookAtItem
INT:%FearFlee
INT:%Following = 0
FIXEDSTRING:%PrevIdleAnim = ""
FIXEDSTRING:%CrawInfest_Faction = ""
EXTERN INT:%SayBlindedText = 1

I don't think that's possible, since as you said, there doesn't seem to be a way to count backstabs or even crits.

Another possible idea is to measure a character's constitution when they have the CoupDeGrace status and use a negative value for "CharacterHeal" to damage them for a percentage that depends inversely on their constitution. That would kind of get around the issue of enemies with high health being affected more by percentage damage than low health ones, since low health ones would take higher percentage ticks than high health ones. Just a possibility.

So, overall, yeah, scripting can be frustrating sometimes. I've found it's best to use the tools available and compromise with their capabilities instead of trying to impose a specific concept on them.



Joined: Sep 2015
A
addict
Offline
addict
A
Joined: Sep 2015
Quote
1) I can identify backstabs, I don't see even a way to identify crits anywhere

I don't think that's possible, since as you said, there doesn't seem to be a way to count backstabs or even crits.


Didn't read the whole thread and the context, so maybe I got you wrong:

But counting critical hits is possible in EE. There is an event OnCriticalHit now.


My mods for DOS 1 EE: FasterAnimations - QuietDay - Samaritan
Joined: Apr 2016
S
stranger
OP Offline
stranger
S
Joined: Apr 2016
Update:
I think I might be alright with shadow strike now - I'd still like a DoT that scales off of the person using it, but I've currently got it so that I have a flat base damage + %missing hp true damage. I'd like to make the %missing hp damage into physical damage but I'm using CharacterHeal() to do it, and have no idea how I'd change that.

As for Coup De Grace, I've found OnSkillCast(). I'm trying to use it so that I can specify a skill in skillData.txt that you can't learn, but I would call UseSkill() if the target of CoupDeGrace meets the weak/stunned/etc. conditions. This would let me effectively check for conditions before casting a skill on the target that scales off my character as I want it to, letting the regular skill handling code handle it. The problem I've got there is that I can't figure out how to find out who the target of the skill is in an OnSkillCast() block. I've tried using the LookAtChar variable in basechar, thinking it might reflect who the script holder is looking at during an attack, but even after commenting out the line that resets it to null I got nothing. I tried using skilltargetchar_$1 from skill_basechar, injecting Target_Fatality at the end but it seems that variable is only used and generated when ai is controlling a character.

Is there any way I might be able to figure out who I'm targetting in the same function block of OnSkillCast()?

SideNotes:
Using a status as a flag, and using CharacterGetStatusSource() has seemed to never work with a CONSUME, not even pull a wrong character; just always returns null. I'm confident there'd be some pretty silly bugs if I tried using one of the existing statuses to do it (add and immediately remove to find who I casted on - oops, I grabbed the other guy with "Mark of Death" and then removed the status for him).
OnCriticalHit is pretty nice - and I appreciate the suggestion, but I realised trying to use it that backstabs in and of themselves don't actually count as crits (for the buildup approach I considered), and there's nothing like it for backstabs.

Joined: Jan 2015
member
Offline
member
Joined: Jan 2015
Ok, that thread's a bit old, but given the the general activity in this forum I'll still post it here.

So... fiddling with modding for a couple of days now doin the standard stuff I now wanted to shift to something slightly more fancy.
My problem right now is just that I can't seem to find where exactly the scripts can be found that handle the onturn aspects of status effects as well as their interactions/combinations/"recipes".
So far I only found the special event scripts for stuff like crawling infestation etc.

Anyone here with a spare remove blindness potion for me? smile


Think for yourself! Or others will do it...
Joined: Sep 2015
A
addict
Offline
addict
A
Joined: Sep 2015
I think some things you are looking for are hardcoded (e. g. status interactions). The status stats are in the Potion.txt/Potion.xlsm files in Data\Editor\Templates\Stats\Main\ and ...\Stats\Shared\ and their subfolders. A few more options to change stats can be found in the magical Data.txt/Data.xlsm file in ...\Stats\Shared\ ; I really wish there was more in it!

With 'special event scripts' you probably mean the Base char script. Beside Potion and Data this is the third option I know of to modify or add a status: a lot of things are possible with char scripting. Unfortunately the most important functions to handle potions (a new status for example) are partly broken or incomplete. Some more information about the potions problem related to char scripting can be found here:
http://larian.com/forums/ubbthreads.php?ubb=showflat&Number=581127#Post581127 (number 9 and 17 and the following information from Baardvark who had a hard time with Potions).

For more information just ask. I'm sure some of the other active modders will answer your questions, too.


My mods for DOS 1 EE: FasterAnimations - QuietDay - Samaritan
Joined: Jan 2015
member
Offline
member
Joined: Jan 2015
Yeah, tinkered with that already. Somewhat disappointing tbh. Was afraid that stuff like the interactions may be hardcoded.
Well, will try some ideas I had to do what I want with charscripts.


Think for yourself! Or others will do it...
Joined: Jan 2015
member
Offline
member
Joined: Jan 2015
Well, dp, but...

Anyone with experience with the CharacterUseSkill command? Can't get this one to work properly, or at all...

One thing I want to achieve with my changes is to fuse the gameplay aspects together in a better way (items, skills, areas...). You know, having the ensemble to be more than just the sum of its parts.

Right now I reworked necromancy part of the witchcraft school by creating an expansive "animate dead" spell, that raises different undead dependent on the target the spell is cast on. That worked well with the use of the SpawnCharacter command. The only inconvenience is that the spawned creatures act like charmed enemies, which means they cannot be controlled. Not what I had in mind. So far I did not find a way to turn them into proper controllable summons.
That's why I wanted to use the useskill command instead and trigger another direct summoning spell.
But seems I'm doing it wrong.

Any other restrictions to use that command?

Last edited by Seelenernter; 22/06/16 04:22 PM.

Think for yourself! Or others will do it...
Joined: Jun 2013
old hand
Offline
old hand
Joined: Jun 2013
Originally Posted by Seelenernter

That's why I wanted to use the useskill command instead and trigger another direct summoning spell.
But seems I'm doing it wrong.

Any other restrictions to use that command?


Not 100% sure what you're trying to do here, but for the CharacterUseSkill script, here is an example from my mod Dunamis.

And just to make sure, you are trying to do this in charScript right? Because in the story editor there is no functionality for this AFAIK.


Code
INIT

CHARACTER:__Me
EXTERN CHARACTER:%AttackTarget = null
EXTERN SKILL:%SkillToUse = null

BEHAVIOUR 

REACTION SkillOnReaction, 1100
	USAGE ALL
	ACTIONS 
		CharacterUseSkill(%SkillToUse,CHARACTER:%AttackTarget)
		SetPriority(SkillOnReaction,0)
	
EVENTS
	
EVENT AttackFort
ON
	OnCharacterEvent(__Me,"KillHighway")
ACTIONS
	CharacterAddSkill(%SkillToUse)
	SetPriority(SkillOnReaction,1100)


So the trick is you have to have some sort of event trip the Behavior so the character will cast the skill. In my script above I run the character event "KillHighway" from the story editor. Also you have to actually add the skill to the character. So in the script here When the Character Event "KillHighway" happens to __Me, the skill gets added and then I set the priority of SkillOnReaction to 1100 which will make it run.

Then the Reaction itself actually uses the skill based on the parameters set in the sidebar (everything that = null) and the character will cast Poison dart at %Attacktarget. After that the priority gets set to 0 again so it doesn't keep repeating.


Now if you are actually trying to do this in combat, you'd want to script it a bit differently. You could copy one of the skill scripts like Skill_Summmon_EnemyAir and bolt on your skill information in it. CMB_GiantCrab would also be one to look at since they summon little baby crabs at the start of each combat. I'm not the greatest in the world with charscripts so you'd have to do some digging on those.

Or if you want to roll your own, One quick and dirty way to do this would be to have the script run based on turn, similar to the tutorial skeletons in Cyseal.

Code
INIT

CHARACTER:__Me
EXTERN CHARACTER:%AttackTarget = null
EXTERN SKILL:%SkillToUse = null
INT:%CurrentRound = 0

BEHAVIOUR

REACTION InitialTurn,1000 
USAGE COMBAT
CHECK "c1"
	IsEqual(%CurrentRound,1)
ACTIONS
    CharacterAddSkill(%SkillToUse)
	CharacterUseSkill(%SkillToUse,CHARACTER:%AttackTarget)
	Sleep(2)
	CharacterEndTurn()
	SetPriority("InitialTurn",0)
	
	
EVENTS

EVENT Round1
ON
	OnTurn()
ACTIONS 
	Add(%CurrentRound,1)
	SetPriority(InitialTurn,1000)



So here they would cast your spell on turn 1 and then go back to normal behavior.

Also one thing I'm not sure on is how summons work with "AttackTarget". So I just left it how I had it with PoisonDart, which is an attack spell of course so it functions differently. So you might have to play around with it a bit.



Page 1 of 2 1 2

Link Copied to Clipboard
Powered by UBB.threads™ PHP Forum Software 7.7.5