Jump to content

SteelRook

Supporter
  • Posts

    118
  • Joined

  • Last visited

Nexus Mods Profile

About SteelRook

SteelRook's Achievements

Enthusiast

Enthusiast (6/14)

  • First Post
  • Collaborator
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

0

Reputation

  1. I've been messing around with making base-game class duplicates of the Resistance Hero classes (Reapers, Skirmishers, Templars), and it's not really working. I'm successfully able to handle ability distribution, armour-and-weapon assignment and so on, but I can't get the skills unique to the new classes to work on the old ones. http://steamcommunity.com/sharedfiles/filedetails/?id=1129907423 The above is my attempt to use the Skirmisher ability Justice on a non-skirmisher class, and it just doesn't work. I know the character rig can handle the animation because Skirmishers use the vanilla character rig, so why can't it animate Justice? If I can create a base-game class and give it Psi Operative Mindspin, then why can't I do the same with Justice?
  2. To make a long story shot, I'm trying to replace the "enemies take 33% more damage" aspect of Templar Amplify with the same "+2 damage from every attack received" effect from Demolitionist Rupture. In theory this would be simple as Rupture (technically, BulletShred) is just another aspect of the X2Effect_ApplyWeaponDamage class. However, attaching an object of that class causes the ability to deal the damage of the weapon it's attached to. The X2Effect_ApplyWeaponDamage object's "damage" statistic is only bonus damage on top of that. Setting it to 0 doesn't prevent the ability from dealing damage. So, is there any way I can make Templar Amplify rupture without dealing damage?
  3. Not quite what I had in mind, but I did run into this problem as well later on. Thank you kindly.
  4. Since posting this, I found out that there's a brand new SDK which will supposedly do this this for us. The trouble is I can't get it running. "Can't find one or more components." I was hoping I could use that to "recompile" my own mods, but it looks like that's not going to happen.
  5. War of the Chosen just dropped, and it's a mod-pocalypse. Turns out they're not handling it like previous DLCs, but rather as a whole separate game with its own executable, config files and so on. The new launcher even has an option to display which mods will be compatible with War of the Chosen and which won't be. This leads me to suspect there's something about mods that's specific to War of the Chosen - something simple that the launcher can check for. Do we have any idea what that might be yet? The only mod I'm subscribed to which got updated to War of the Chosen was the Mod Options Menu, and that's displaying as OK in the launcher, but everything else has an exclamation point next to it. I had a look at the Mod Options Menu but I can't find anything specific to it. So... What do we need to do in order to update our mods? What, specifically, when it doesn't seem like even ModBuddy itself has been updated.
  6. This will probably come across as a very simplistic question, but... How would one go about editing XCOM 2's loot tables? Say for instance I don't like how rare Repaeters are and want to make all weapon mods drop with the same rate? Here's what I know so far: Loot tables live in DefaultGameCore.ini, specifically in [XComGame.X2LootTableManager]. There are six loot tables I'm interested in when it comes to weapon mods - BasicWeaponUpgrades, AdvancedWeaponUpgrades, SuperiorWeaponUpgrades, as well as BlackMarketUpgrades_01, BlackMarketUpgrades_02, BlackMarketUpgrades_03. Each element in these tables represents one weapon mod and carries several parameters - Chance, MinCount, MaxCount, TemplateName, RollGroup. I can assume that TemplateName is the system name for the weapon mod and looking at the other tables suggests that MinCount and MaxCount define how many of that item I'm likely to get in a single drop - 1/1 for weapon mods, obviously. That's where my knowledge ends and my questions begin, however. 1. What does "chance" actually do? I know it defines the likelihood of getting that specific weapon mod every time the game rolls on a table, but based on what? It's not % chance since the numbers don't always add up to 100. Does the game combine the chance value and roll on the sum? Does chance 30 out of 150 come out to 20% (30/150 = 0.2)? I ask, because I remember looking at Insanity in the past, and the way that weighed the list of potential outcomes was weird in the extreme. 2. What's "RollGroup?" I can't really infer the meaning of this thing from looking at the code. I can see that mods are grouped somewhat "logically" in their RollGroups - one's for scopes, one's for ammo, one's for damage - but I can't glean the same rationale from any of the other tables. I suspect this affects drop chances, however, so it seems important to know. 3. How do I alter one of these drop tables? Each line starts with LootTables = (<some table>). I'm admittedly rusty on UnrealScript since last time I messed with mods, but I'm not familiar with this command at all. Is this appending a new row to a table? Does that mean I'll have to in some way remove rows from the table? Or is it enough to do a basic ini file edit with -LootTables = (<old values>) and +LootTables = (<new values>)? I have no way to actually verify loot tables that I'm aware of, so that sort of thing is useful to know. 4. Is there a good way to check that the values I'm trying to change have actually been changed to the correct ones? In the past, I've changed stats which the game already displays - damage, armour penetration, resource cost and so on. I have no easy in-game way of verifying drop tables, however. Is there an easy way to do this? --- Sorry for the long and wordy post for such a simple question, folks. I tried to do as much of the legwork as I could on my own. Thank you for your time.
  7. Actually, I take that back. I've not been able to get OnPostTemplatesCreated to work at all. It doesn't seem to trigger at any point. I put a log message in there which never shows up anywhere whatsoever. I may be checking the wrong longs (XCOM 2 SDK\XComGame\logs\Launch.log) and crucially - the changes I'm trying to make don't work. This is caused by an issue I've had before, where trying to read from configuration files when extending a class which already reads from those configuration files doesn't seem to work, and gives me no feedback as to what's going on. *edit* Never mind, figured it out. I was trying to use ini files wrong, so my value for Rupture wasn't being used, which I think caused the whole method to throw a silent exception and the template to never be finished. Now it works, and all I did was extend X2Ability_Gatekeeper. My new ability overrode the Vanilla one by itself, so now my Gatekeepers will do 2-4 damage with their mass resurrection AoE, but will shred soldiers (and Aliens and Advent) caught in the blast for 2. Cool.
  8. prowler83 explained to me how to use the OnPostTemplatesCreated method and how to reach the template for an item I'm looking for. The thing is that supposing I reach the 'AnimaInversion' ability's template, I'm not sure how to reach its X2Effect_ApplyWeaponDamage effect, which is what I need to add psychic damage to. The ability template is an object of class X2AbilityTemplate and the AddMultiTargetEffect() function adds an effect into an array called AbilityMultiTargetEffects in the template. That array is protected, meaning I can't access it directly unless my class extends X2AbilityTemplate, which X2DownloadableContentInfo_<class name> (where OnPostTemplatesCreated) doesn't. Normally there'd be a "getter" function for either the entire array or specific elements from it, but there isn't one that I can find. Basically, assuming I can find the X2AbilityTemplate of the Mass Resurrection skill, how can I "get" its AbilityMultiTargetEffects array? Once I have that, the rest should be easy. It looks like there's only one multi-target effect for that skill, so I can just draw member 0 from the array and add Rupture damage to it. Now, I presume the above will work like it would in Java where all objects references are inherently pointers. What I mean is if I draw a member from an array and alter it (add an extra damage component), the member still inside the array will also be altered since both would just be references pointing to the same object. I still have nightmares from doing C++ back in the day and having to manually specify *memory_address and &object_pointer. Incidentally, I managed to get this working through a very, very thuggish approach. I created a class which extends X2Ability_Gatekeeper and overwrites its CreateMassPsiReanimationAbility() function. XCOM 2 appears to search for classes in that inheritance tree and creates objects from them without my input. For some reason - and this may well be unreliable - modded objects which extend ability classes end up taking priority over base-game objects of the same kind, so the mod technically works. Now I COULD use OnPostTemplatesCreated to find the ability template itself in the template manager, but I'd still need a child of X2Ability_Gatekeeper or something else that's going to get pulled into the lists at run-time, which seems to do the same thing. Basically, it works for now, but I don't think that's a good way of doing it.
  9. Wait, so Ruprture is permanent? That's... Not what I was expecting to hear, but it does make sense the way you've described it. That concerns me a little, if that's the case. Suppose Gatekeepr AoE only did 2-4 damage but ruptured all targets in range. That can potentially rupture your entire squad and do even more damage to them long-term than the standard Mass Resurrection AoE. If I'm reading this correctly, then Rupture (technically) adds "rupture points" onto a target, which then get added to any damage that target receives from that point on. From looking at the Grenadier code, it... Sort of looks like all I'd need to do is grab the Gatekeeper damage effect and append WeaponDamageEffect.EffectDamageValue.Rupture = <shred value> to it - literally one added line of code. I mean from your description, it sounds like it's literally as simple as that since the weapon damage effect is already part of the skill. That's... A lot simpler than I was expecting, but it gives me something to go on :) That still leaves the question of how to overwrite or append the ability, however. I found the RiftKeeper (turns out it's one word) mod, but that adds an entire new enemy, rather than replacing existing enemy skills. I was given an interesting approach to modding skills at runtime in another thread which I can probably use here, but that's predicated on there being just one copy of that skill. Do alien skills get replicated for all difficulty settings like weapons do, or do their templates exist as a single instance of the ability template? Because if the latter is the case, I can just pull out reanimation ability by its ability name ('AnimaInversion' if I'm not mistaken), access its PsiDamageEffect... Though I'm not entirely positive how that might work. The effect is added via the AddMultiTargetEffect() method, meaning it's adding something to an array that I'd then need to fish effects out of, and THOSE don't seem to be identified by a unique name. I mean worse come to worst, I can probably just create another instance of the Mass Reanimation ability with the same name, which SOMETIMES manages to overwrite the existing ability at start-up, but that would mean copy-pasting the entire body of code to add one line.
  10. Gatekeepers are pure cheese and I hate them for it. That massive unavoidable AoE means either you kill the Gatekeeper on its own turn or you're losing soldiers, which makes for uninspired gameplay in my eyes. At the very least for my own game, I want to drop the Gatekeeper's damage on the Mass Reanimation attack considerably, down to something like 2-4. The problem with that is it basically takes the teeth out of the unit all but entirely, so I'd need to add something back. So... How about Shred? I tracked the ability itself down to X2Ability_Gatekeeper in its own CreateMassPsiReanimationAbility() function. So far, so good. I figured I could copy the design of either Schism (which is just a check to enable additional effects in Insanity and Void Rift) or Rupture (which seems to be called Bullet Shred in the game files). This faces me with several problems, however. And yes, this one I do fully intend to finish, unlike the Death From Above thing :) Problem #1: I don't actually know how "rupture" works. I haven't the slightest idea how Schism manages to "rupture" targets since all it seems to do is apply weapon damage via the standard X2Effect_ApplyWeaponDamage. class. Bullet Shred, aka Rupture, does use its own custom X2Effect_Shredder class which inherits X2Effect_ApplyWeaponDamage, but I'm not sure how that works. All it does is override the GetBonusEffectDamageValue function in that class which... What does that do? From everything I understand of X2Effect_ApplyWeaponDamage is it's a single-run class, meaning you run it once to apply damage without leaving any persistent effects on the enemy. Rupture, I thought, would be some variety of the X2Effect_Persistent class since it's... You know, a persistent effect, but I clearly don't know what's going on. How DOES the "rupture effect" work? Problem #2: I don't know how to actually introduce a new aspect to the Gatekeeper's Mass Reanimation ability without screwing it up majorly. The skill definition is full of very scary comments to the tune of "// DO NOT CHANGE THE ORDER OF THE DAMAGE AND THIS EFFECT" which make me reluctant to touch... Really any part of that skill. There must be a reason for the programmer to be this loud. If the Rupture effect is indeed some variety of X2Effect_ApplyWeaponDamage, then I can probably piggy-back it onto the already-existing Mass Reanimation damage by just altering that one effect, but... Can I be positive that won't mess something up? Problem #3: I don't know if aliens have separate variants per difficulty setting. Soldiers don't (luckily) which means I can theoretically just create a single new ability and jam that in the template manager at game launch and it will work. In fact, my Blademaster Enhancement mod just creates a child of the Ranger class and it seems to work fine. Difficulty-specific templates, however, get split into several versions of the same template and need to be fished out of the template manager one by one. I don't know if aliens and their skills require this or not. Any help on the matter would be greatly appreciated. Sorry to be needy like this, but I've done about as much of the legwork as my skills will allow me to.
  11. Having looked into the matter more thoroughly, I've given up on my aspirations for this specific mod. The UnrealScript coding necessary to make it work is beyond my capability and I've actually changed my mind on the merits of Death From Above. While it used to bother me how Squad Sight is handled in XCOM 2, I've grown to realise that that's a good thing. While it's handy to plant a sniper on a perch and get sight on literally the entire map, it's also a really boring way to play. I've had a lot of experience with Gunslinger sharpshooters and found that to be a more enjoyable way to play the game in the first place, which has in turn caused me to start moving my Sniper Sharpshooter more rather than camping her on a deerhunter tower all game. Basically, having the Squad Sight aim penalty makes the game more fun and I've changed my mind on removing it. Besides, the ability to reload your gun after scoring a kill has proven to be more useful than I originally gave it credit for. Call it lazy or call it inept, but I'm shelving this idea. Still, thank you kindly for your help in identifying the new skill hook :)
  12. I see. No, I can't do what I need to do by adding stuff to the existing template. Death From Above currently refunds a single action on a sniper kill with height advantage. I need it to not do that, but instead do something else completely, which is to add extra Aim based on distance to target. I wasn't aware of OnPostTemplatesCreated() though. So that's what - just a method which runs for the mod immediately after templates have been created? I can work with that, I think. That's a good time to create my new ability and put it into the template manager at that point. Thank you. With that sorted, the real hard part begins - how to add aim based on target distance if a shot is taken from height advantage :smile: I should be able to pull the "has height advantage when <event> happens" conditional from the old Death From Above skill since it's already tagged like that, but I'll need to swap out (i.e. remove) the event check so that the skill is active for all shots taken with height advantage. The extra aim might be difficult, though, since I'm not sure how to pull distance to target or how to add extra aim. Are there any skills out there which scale with distance or such that add aim?
  13. How would I go about modifying the existing template if not by overriding it, though? I'm not sure how that works. The only thing I could figure out to do for Blademaster was create a "child" class of X2Ability_RangerAbilitySet, override the Blademaster() function with my own and keep my fingers crossed. Since all that method does is return a template, I don't really know how to access the AbilityTemplateManager to begin with, and I'm worried about messing with core classes where that might show up. If I could just "inject" my code into the method which creates the ability, this would be much much easier.
  14. How did you accomplish that? I can't even find the correct executable.
×
×
  • Create New...