|
stranger
|
OP
stranger
Joined: Jul 2014
|
Hail.
The only gripe I have with EE is sneak changes. I'd like to revert them (allowing the player to decrease the cost of sneaking), but after digging through a file after file I couldn't find any way of altering it (not, say, adding recovery, just changing its cost with decrease per level).
If someone would nudge me in the right direction I'd be ever grateful.
Also would appreciate if someone could tell me where I can find Guerilla talent damage.
|
|
|
|
addict
|
addict
Joined: Sep 2015
|
The effects of Attributes, Abilities, Talents and Traits can't be modded in D:OS 1 directly. That's one of the biggest limitations, unfortunately. Baardvark (author of the mod Scales) tried his best to make sneaking viable in EE. Reducing AP cost by the Sneaking talent is impossible. You can download his mod from Nexus and have a look into the 'Base' char script (Data - Public - Shared - Scripts) and into the 'Potion' file (Data - Public - Shared - Stats - Generated - Data) which contains the sneaking buffs scripted in 'Base'. We all want to sneak as we once did in recent times but, sadly, we can't...
|
|
|
|
old hand
|
old hand
Joined: Aug 2014
|
I think I've actually kind of figured out a way to artificially reduce the sneak AP cost (which should be in next version of Scales). Basically just make a skill with the AP cost you want that sets a blank status, and then add a script that makes you sneak on this status activating. Couldn't figure out how to directly tie a skill to sneaking, but this should work fine once I solve a particular issue. I'm not going to add sneak skills for every level, but I'll probably add 2 at different levels (probably level 2 and 5), with different costs and cooldowns. IMO, it's okay if you can't sneak for 1-2 AP every turn, but every few turns might be okay.
|
|
|
|
addict
|
addict
Joined: Sep 2015
|
To make a last note on this for posterity: Scripting potions for AP recovery* (and increasing AP max for this purpose), as Baardvark did, is really the only way to get at least something similar (regarding AP costs) to sneaking of Classic Version (but be aware that a specific potion can't be unconsumed by char script, only by Osiris, and permanent potions - "Duration" "-1" - can't be unconsumed at all, unless you apply a potion with reverted values). * there's no way to refund AP for a character on active turn I tried to apply the sneak status via script yesterday and, re-reading this thread, I see Baardvark already tried that months ago. That it never made it into Scales, I suppose, (only AP recovery potions to compensate the 5 AP sneak costs did) has the simple reason that even a scripted sneak status (via char script or Osiris) consumes 5 AP in combat. I used an item (instead of a skill) to apply the sneak status via script (AP costs depending on the sneak ability level), for skills removing invisibility. Technically this works fine, but this doesn't prevent the engine from removing 5 AP when a character gets the sneak status in combat. This cannot be bypassed. For interest how this would have looked like:
INIT
INT:%APToUse
EVENTS
EVENT AddSneakItem
VARS
INT:_SneakItemAdded = 0
ON
OnInit()
ACTIONS
IF "c1&c2"
CharacterIsPlayer(__Me)
IsEqual(_SneakItemAdded,0)
THEN
Set(_SneakItemAdded,1)
CharacterAddToInventory(__Me,"Sneaking_Enable",1)
ENDIF
EVENT ApplySneaking
VARS
FLOAT:_AP
FLOAT:_APCosts
INT:_Sneaking
ITEM:_Item
ITEMTEMPLATE:_Template
ITEMTEMPLATE:_SneakTemp = "Other_SneakingActivation_28043f27-fbe6-4d0f-96f5-db78d3ca5d90"
ON
OnUseItem(__Me,_Item)
ACTIONS
IF "c1&c2"
ItemGetTemplate(_Item,_Template)
IsEqual(_Template,_SneakTemp)
THEN
IF "c1&c2"
CharacterGetAbility(_Sneaking,__Me,Sneaking)
CharacterGetStat(_AP,__Me,ActionPoints)
THEN
IF "c1"
IsEqual(_Sneaking,0)
THEN
Set(_APCosts,5)
ELIF "c1"
IsEqual(_Sneaking,1)
THEN
Set(_APCosts,4)
ELIF "c1"
IsEqual(_Sneaking,2)
THEN
Set(_APCosts,3)
ELIF "c1"
IsEqual(_Sneaking,3)
THEN
Set(_APCosts,2)
ELIF "c1"
IsEqual(_Sneaking,4)
THEN
Set(_APCosts,1)
ELIF "c1"
IsEqual(_Sneaking,5)
THEN
Set(_APCosts,1)
ELIF "c1"
IsEqual(_Sneaking,6)
THEN
Set(_APCosts,0)
ENDIF
IF "!c1&!c2"
IsLessThen(_AP,_APCosts)
CharacterHasStatus(__Me,SNEAKING)
THEN
Cast(%APToUse,_APCosts)
CharacterApplyStatus(__Me,SNEAKING,-1)
StartTimer("RemoveAP",1,0)
ELSE
DisplayText(__Me,"APTooLowOrSneakActive",2)
ENDIF
ENDIF
ENDIF
EVENT RemoveSneakingAP //a delayed sneak check before removing AP is necessary to ensure that the sneak status wasn't immediately removed after application, because of sneak spotters
ON
OnTimer("RemoveAP")
ACTIONS
IF "c1"
CharacterHasStatus(__Me,SNEAKING)
THEN
CharacterUseActionPoints(__Me,%APToUse)
ELSE
DisplayText(__Me,"SneakingFailed",2)
ENDIF
|
|
|
|
enthusiast
|
enthusiast
Joined: Jun 2015
|
That's the thing, you can never decrease actual sneak cost, the only thing you could do is refund the AP. Does not help though if a character has less than 5 AP left, because there's no way the engine would let a character sneak, it prohibits it and no script would ever receive any events.
So the only solution is to find an alternative way to enter sneaking. Of course there would have to be the chance for any item or skill to cost only 1 AP or maybe 0 AP. Both is possible, stance skills for example have no AP cost, backpacks are an example for items not costing any AP. The downside is that both would require an additional quickslot when there are too few even without any additional skill or item. Casting from inventory or the skillbook is tedious.
Sneaking is a status so maybe it works to apply it to self (data "SkillType" "Shout" via data "SkillProperties" and data "TargetConditions" "self"). Never tested it, but it would have advantages to let the engine do it because the engine might immediately remove the status if the sneaking character is seen by an enemy or friendly NPC. Might be possible to enter a -1 for duration and let the engine remove the status if appropriate.
I made the experience that manipulating statuses via character scripts can cause a game crash, at least it happened when I tried to remove a status immediately after it was applied. Means that care has to be taken with status application and removal in character scripts. Of course you would have to remove the appropriate AP in an OnSkillCast() handler, because the skill itself could only have the minimum cost. The skill's tooltip might show a wrong amount for the cost and you'd have to give many explanations why it was inaccurate. (Maybe, several hidden and empty and animation-less skills could be created that are 'cast' in the background when the Sneak skill is cast or they could be hidden in a PlayEffectAt(__Me,"Smoke_Something"). I don't know how well the engine works with script casted skills for non-engine controlled characters though. ;-)
If you change sneak cost be aware that the crafting recipes to put sneaking onto gear are still present in EE (void or shadow essences). With those recipes, Sneaking 5 is doable without putting a single point into Sneaking. To disable these recipes, a lot of changes would be required. (Well, not disable, because that's impossible, but you can make the recipes unreachable.)
|
|
|
|
addict
|
addict
Joined: Sep 2015
|
So the only solution is to find an alternative way to enter sneaking. But there doesn't seem to be any. CharacterApplyStatus(__Me,SNEAKING,-1) consumes 5 AP in combat. And Skills don't seem to accept Sneaking as Skill Property. I made the experience that manipulating statuses via character scripts can cause a game crash, at least it happened when I tried to remove a status immediately after it was applied. Means that care has to be taken with status application and removal in character scripts. Yeah, I always use a short timer in those cases.
|
|
|
|
enthusiast
|
enthusiast
Joined: Jun 2015
|
Well, a timer detaches one from the OnStatus() event. My crash might have something to do with removing the status in the handler that caught it ;-)
|
|
|
Moderated by Bvs, ForkTong, gbnf, Issh, Kurnster, Larian_QA, LarSeb, Lar_q, Lynn, Monodon, Raze, Stephen_Larian
|
|