Jump to content

ocelotter

Members
  • Posts

    42
  • Joined

  • Last visited

Everything posted by ocelotter

  1. Here's the (decompiled) source: [PreferenceScript("Find Best Current Threat", "Preferences\\Targeting")] public static void FindBestEngager() { // ISSUE: reference to a compiler-generated field if (Preferences.\u003C\u003Ef__mg\u0024cache1B == null) { // ISSUE: reference to a compiler-generated field Preferences.\u003C\u003Ef__mg\u0024cache1B = new Preferences.GetTraitDelegate(Preferences.GetThreateningScore); } // ISSUE: reference to a compiler-generated field Preferences.FindTargetWhereTraitIs(FindType.Highest, Preferences.\u003C\u003Ef__mg\u0024cache1B); } private static float? GetThreateningScore(Faction target) { if (!Preferences.AttackingAIController.IsThreatenedBy(target.AIController)) return new float?(0.0f); if (Object.op_Equality((Object) Preferences.AttackingAIController.CurrentTarget, (Object) ((Component) target).get_gameObject())) return new float?(2f); return new float?(1f); } So I think "Best Current Threat" is your current target if it's engaging or attacking you back, otherwise it's a (random?) character that is engaging or attacking you. Which is slightly funny, because it indicates that there is indeed code to determine a character's current target in the source, they just don't give that as a targeting option for whatever reason.
  2. Once the character is out of Zeal, wouldn't he revert back to spamming Crippling Strike on everyone without an affliction in melee again? As far as I know, "Prioritize By" is used to choose among eligible targets, and anyone that already has an affliction would be ineligible per the conditionals.
  3. I think the best you can do is to set a cooldown on the Crippling Strike behavior equal to its total duration (including modifiers) and setup your targeting priorities so that they're all aligned (e.g. "Best Current Threat"). Obviously if the target removes the affliction or your character for some reason acquires a new target then there will be a delay in applying the affliction, but the concept of a current target is not really one this game uses.
  4. I haven't tested this specific interaction, but since most (all?) status effects tick immediately upon receipt of the effect, this should already work this way. So the aforementioned change would not really alter this interaction. Blood Sacrifice randomly selects to restore a tier 1-3, 1-6, or 1-9 spell each time you use it. If all you have used is a level 6 spell (SoT), then this form of Brilliant would have a 2/3 chance to restore it. Edit: giving Brilliant a chance to restore a completely random spell level is a good idea, but I'm not sure how feasible it is. The AddResource StatusEffectType that all of these spells use restores a missing resource up to a certain level. Blood Sacrifice circumvents this a bit by having three different status effects, but it still isn't 1-3/4-6/7-9, it's 1-3/1-6/1-9. If you made 9 brackets, SoT would still be restored four out of nine times. So another implementation would need to be found.
  5. Just for fun, I tried implementing the time limit on PreventDeath effects, and it worked pretty much as expected. Here's the code: (Not sure why the indentation is all messed up here, oh well) I put a fairly generous 30 second cap on all of the effects except Resurrection, to which I gave a 60 second cap. That way, non-abusive SoT, Wall of Draining, and Intelligence still benefit the effects. The only problem is, I'm not sure how to fix the UI display for this; it's probably not relevant unless you're really trying to push it, but it is a bit weird to just have an effect drop off with time still remaining on the buff.
  6. Maybe I'm misunderstanding you, but Brilliant restores exactly one spell each tick to a (single-class) caster, of a random spell level. So if all nine of your spell tiers are depleted, it will still only restore one spell, not nine of them. The problem lies in that this can be controlled by only casting a single spell, so if you only cast Salvation of Time (and Barring Death's Door, which is conveniently in the same tier) or Missile Salvo, you always get that spell slot back. I think it's actually a pretty cool mechanic that you can control what Brilliant restores if you plan ahead a bit, but it's definitely abusable with some abilities. I still think that Barring Death's Door is at least as problematic; it's an effect that makes you immune to death, which has its duration affected by Intelligence and which can be extended by more effects than just Salvation of Time (notably Wall of Draining). I think at the very least effects that can destroy targets with less than 25% health should counter it, e.g. Death Ring, though I'm not certain the AI would take advantage of them in its current state. Abilities that break the game's fundamental conceit, health loss results in death, should be incredibly limited or have more counters than just Arcane Dampener/Arcane Cleanse. Just imagine the frustration if an enemy encounter in the game used these shenanigans on the player; suddenly it's impossible to win unless you interrupt the Cipher's first Brilliant cast, stunlock the Priest (quickly) or have a Wizard to dampen or repeatedly cleanse the buffs. Back to the topic at hand, I'm biased but I think halving the tick rate of Brilliant merely ameliorates the issue rather than solving it, and hurts people that don't abuse it in the process. Now, instead of just needing one Priest to secure immortality, you need two! To be fair they'd both need Brilliant, but if you give the Cipher immortality while acquiring it (or the Priest with Shroud of the Phantasm), everything works out. It certainly helps make it more difficult, though. Another solution that would work for both Brilliant and Barring Death's Door is to give them a cap on their maximum length. I think this can be done using status effect triggers, e.g. "TriggerOnEvent": "OnInterval", "MaxTriggerCount": "5", "RemoveEffectAtMax": "true". Would probably have to give Barring Death's Door a child status effect that ticks for this to work though, or maybe just use the dreaded "ApplyOverTime" ApplicationType. I would also like to hear more opinions on this. Thankfully, we can each opt-out of certain modifications we particularly don't like, but there is some value in consensus.
  7. The duration of Brilliant would be as significant as the duration of the other tier 3 inspirations, particularly if the power level bonus was slightly buffed as suggested. It still provides a layer of safety from afflictions, and a persistent PL bonus. I'd take a +1-2 PL bonus (relative to Acute) over 25% hit to crit (Intuitive, relative to Aware), for example.
  8. I thought of another idea for "adjusting" Brilliant to be a bit less abusable, if there's any interest in such a thing. Instead of restoring one of each class resource once every six seconds, make it restore one (or two) of each class resource immediately upon receiving the buff, but none thereafter. Additionally, let the buff give +2-3 PL instead of just +1--as I believe Boeroer suggested before--so extending its duration still feels powerful. I think this should be pretty easy to do (just change "ApplicationType" to "ApplyOnStart" for "INS_Brilliant_SE_AddResources", maybe?), I might try implementing it if no one else has the inclination. On a side note, has anyone tried adjusting the enemy AI at all? Looking through the files, it seems like the only way to make serious changes would be to create an application to read in "aidecisiontrees.aidecisiontreebundle", present it in an interactable format, and then export it with proper formatting, but creating that seems like an awful lot of effort. Is there perhaps some Unity program that the developers made use of to create the decision trees? Or maybe some way to translate the custom AI file format to the expanded decision tree format, so I can mostly use the in-game editor with manual changes for specific enemy-only abilities? It just feels like the game handcuffs most of the enemy characters with horrible AI, like the lich in Flooded Cave who just sits there auto-attacking instead of casting spells because his AI keeps randoming the Fighter decision tree.
  9. I cannot reproduce this. Performing the same actions: resting with Hylea's on world map, zone load, then drinking Luminous Adra Potion results in the Luminous Adra Potion being suppressed for me. Furthermore, loading the autosave after the transition, but before drinking the potion, *still* results in suppression. If I save/load after drinking the potion, though, then they stack. This would suggest that all of Hylea's Bounty is considered an active effect, but that is not so, as the +skill bonus stacks with other active skill buffs like Thief's Putty. So... ¯\_(ツ)_/¯ Edit: note that I am testing this using iRoll20s to get Hylea's Bounty, and my transitions are to/from the Crucible in SSS and the world map around it.
  10. Testing this out you are correct, Hylea's bounty's defense bonus is suppressed by Moonwell's active effect both before and after a save-cycle. Which is odd to say the least, since all the other food buffs I tested seemed to become passive after save/load. Edit: it even behaves as anticipated (passive after save cycle) with Hot Razor Skewers / Potion of Piercing Strikes, which is another buff I would expect to behave quite rigidly (weapon penetration). So I'm not sure what the deal is with Hylea's Bounty.
  11. Maybe this is common knowledge, but this extends to all resting buffs in the game as far as I can tell; they count as active bonuses until you save/load, then they count as passive bonuses. For example, Candied Nuts Dexterity bonus stacks with Alacrity after a save/load cycle. Spaghetti code.
  12. As far as I can tell, no characters summoned by the party use their active abilities via the AI system except for "Substantial Phantom". Examples I've tested include Tekehu's "Ondra's Whip", "Watery Double", "Conjure Greater Blight", and "Lashing Vine"; Xoti's "Spiritual Ally"; and the pet summon "Visage of Concelhaut". I don't think it's just me, judging by similar posts like this one: However, it has been awhile, so if someone else is not experiencing this issue I'd be glad to hear about it. Reproduction: 1. Have Tekehu in the party with access to "Ondra's Whip". 2. Cast "Ondra's Whip" in combat in a position where it is unable to attack an enemy. 3. Ensure the AI is on for the summoned character. 3. Observe as the character refrains from using its "Dissolve" ability to get into melee range of an enemy. Looking through some of the game files, it's clear to see that many summonable entities do in fact have decision tables listed containing their active abilities. Continuing the example from above, in progressiontables.gamedatabundle, Ondra's Whip has the following progression data: The default decision tree listed above ("1b0dd299-2753-4688-8e69-93dfd950445d", found in aidecisiontrees.aidecisiontreebundle) does in fact contain conditionals suggesting that when the whip is not in melee range of an enemy, it should cast Dissolve to approach such an enemy. I briefly looked at the AIController.cs code to see if I could spot the problem, but I don't really have the familiarity needed to do so. I think this could potentially be an easy bug fix that could provide a lot of value to the game; instead of having to micromanage every summon to use their active abilities, or simply avoiding summons with actives as I currently do, they could automatically use them in most combat scenarios. Furthermore, most of them already have the decision trees in place to do it, they are simply not enabled correctly! For some summons, like Watery Double, the spell becomes entirely worthless without the decision tree, since it is not controllable and refuses to use any of its supposed abilities. I assume something special was done with "Substantial Phantom" to make it actually recognize its decision tree, so if anyone has any idea what it is, I'd love to hear it to know if I could implement the fix myself with a small mod. Anyways, thanks for reading.
  13. In general, "conversion" bonuses (miss to graze, graze to hit, etc.) are much worse than they seem, as Enoch has been alluding to. To compare, 3 accuracy (equivalent to a single level-up) is effectively 12.5% miss to CRIT against enemies with parity defense. I think the mistake you may be making is giving your tank both high armor and high deflection. Pick one, not both, and you'll be in a better position to have a durable character that can still lay down some pain. Edit: though as a Crusader, you may not need either if you take some of the tanky passives in both of the trees.
  14. From the previous thread, it seems like the reasoning was to give situations where it's preferable to use the modal rather than switching to another weapon type, at least from a purely offensive perspective. But if that's the case, then...why just sabres? Why not all of the other weapons with that same modal? And then shouldn't swords get something to compensate such that they are still a worthwhile option? Besides, there are already reasons not to switch: switching weapons causes recovery, you may not have the appropriate damage type available, you may have a defensive weapon switch instead of an offensive option, and so on. Anyways, since it seems like there's already been ample discussion of this I doubt anything will really change their minds. Fortunately, the creators of the patch made it extremely easy to modify to personal taste, so I'll probably just remove that component and leave it at that unless something is off in my reasoning. Now if only I could modify the AI behavior routines to switch modals on/off automatically in slight underpenetration situations...
  15. I don't seem to have this problem in my game. Speaking of the sabre modal, though, I don't quite understand why it was changed. Sabres seem like a much better version of swords: they exchange a second (often weak) damage type, Pierce, for +10% damage/+1 Penetration, and have the same powerful modal with less downside (-10 Deflection instead of the sword's -15). Furthermore, why change only sabres and not all of the "weak" offensive modals: stilettos, war hammers, maces, rapiers... Seems out of balance. On a different note, any thoughts about changing another abusable item: Lethandria's Devotion? Since the first tick of healing happens instantly when you switch this in, you can spam switch with this to have effectively infinite healing. I know it's easily avoidable, but if it's an easy fix somehow it might be a nice tweak. Finally, has anyone else experienced my issue with Chain Lightning refusing to bounce back to targets it's already hit? Still curious if a mod I'm using changed the ability somehow or if it's an intentional limitation by the developers.
  16. Is Chain Lightning supposed to be unable to bounce back to targets it's already hit once? It seems like other bounce spells (e.g. Minoletta's Bounding Missiles) can bounce back, but I can't get CL to do so. It's a shame, because being able to hit a target several times seemed like the main reason to cast it. Edit: I suspect this is a bug, or maybe it's something specifically wrong with my game that could be fixed somehow. In attacks.gamedatabundle, "Chain_Lightning_Ranged" has the following component: "BounceData": { "Bounces": 4, "Multiplier": 0.9, "Range": 7, "InRangeOrder": "true", "NoRepeatTargets": "false", "AlwaysBounceAtEnemies": "true", "Delay": 0, "NeverBounce": "false" }, Meanwhile, "Minolettas_Bounding_Missiles_Ranged" has the following: "BounceData": { "Bounces": 2, "Multiplier": 1.2, "Range": 2, "InRangeOrder": "false", "NoRepeatTargets": "false", "AlwaysBounceAtEnemies": "true", "Delay": 0, "NeverBounce": "false" So I think CL is supposed to be able to bounce back to targets already hit once ("NoRepeatTargets": "false"), but perhaps is unable to do so because it has to hit targets in range order ("InRangeOrder": "true"). Edit2: assuming you consider this behavior unintentional, the following code "fixes" this "InRangeOrder": "true", "NoRepeatTargets": "false"" issue in all the spots I found it by removing the range order requirement: Only tested it on the Wizard's version of Chain Lightning though.
  17. I just checked and it's 20%, just like Concelhaut's Parasitic Quarterstaff. It's kind of a cool spell; requires the Wizard to enter melee, targets Will(!) instead of Deflection, and is a source of single target damage and self healing. But as it stands right now you're far better off just summoning the staff, which is a level one spell with higher penetration and a substantial duration. If it were me, I think I'd try increasing the life steal to 100% of damage dealt and making the damage type Raw instead of Corrode (it targets Will after all). Also, I would remove the interaction with Essential/Substantial Phantom, which is clearly just an unintended side effect that can't really persist with an interesting version of this spell. Just extending the duration to a few more attacks keeps it much too similar to the staff, in my opinion.
  18. I'm not sure this is the right approach for increasing build diversity. If you create trinkets that provide a lot of the situational spells, then isn't there even less reason to choose them at level-up than without the trinkets? In my opinion, the better solution is to increase the applicability of the situational spells, or buff redundant (e.g. Blessing/Dire Blessing) or underpowered spells. Let's take your example of the decay Druid. It sounds like it would be nice for people to be able to choose decay spells at level-up and feel like they made a good decision. Creating a decay trinket that hosts a variety of those spells feels bad unless you are specifically metagaming towards it: suddenly you've found a trinket that replaces all the spells you already wanted to pick! If the trinkets are intended to be frequently swapped, wouldn't it be better if the decay spells were the ones chosen by the decay Druid, not put on the trinket? In this case, I would argue that the solution is to provide the support for those spells that you deem to be lacking; a subclass with a bonus for decay spells and some itemization to boost their power level. Not a trinket that supplants the build and even further reduces the incentive to choose those spells.
  19. Would you look at that. I was just going by the ability descriptions and tooltips, but the game data bundles prove you correct. It looks like it's still missing from Concelhaut's Draining Touch though.
  20. Wouldn't Concelhaut's Draining Touch fit into the Kalakoth's Minor Blights / Firebrand category? It does exclusively Corrode damage, so the Acid keyword wouldn't cause any problems. This could also apply to Caedebald's Blackbow and the Acid keyword, thought it's less clear that it deserves the keyword: a bolt of negative energy might be tough to describe as acidic even if it does cause Corrode damage. Of course, if it's a matter of balance that's a different story. I was mostly thinking that there were a lot of abilities in the Wizard tree that seemed to fit the Spirit of Decay mold but were missing the keywords, and it seemed a shame. Anyways, I'll stop derailing the more productive discussion now. Thanks for humoring me.
  21. Fair enough. Thank you for all of your work on this. Is there a limit to the number of keywords you can add with modding? Or is it just a general desire not to add too much complexity to individual spells?
×
×
  • Create New...