Jump to content

Kregano

Premium Member
  • Posts

    154
  • Joined

  • Last visited

Nexus Mods Profile

About Kregano

Profile Fields

  • Country
    United States

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Kregano's Achievements

Collaborator

Collaborator (7/14)

  • Reacting Well Rare
  • Dedicated Rare
  • First Post
  • Collaborator Rare
  • Week One Done

Recent Badges

6

Reputation

  1. For coding, the already existing open source models seem like a good solution unless you need something very specific/obscure. That said, I do think that most people who want to make things using AI will have multiple LLMs/AI for different functions, assuming that stuff like RAG (Retrieval Augmented Generation) doesn't make training less necessary. Creatives who know how to leverage the tech can definitely get a lot of mileage out of the tech if they know how to use it. That said, some dude bro letting LLMs auto-modify themselves into some nightmare is entirely possible.
  2. I don't have a problem with modders making mods for money, but that requires one very important thing: The publisher/developer publicly laying out rules for what is and is not acceptable to monetize. Given how litigious some companies can be, having a Patreon/Ko-fi for modding can be a bad idea, especially if you're doing something like porting assets from one game into another. I feel like making and maintaining mod tools is probably the least unsafe thing anyone can monetize from modding, but it just takes one crazy publisher/developer to ruin that too.
  3. Had this happen to me a few hours ago, had like 20 notifications.
  4. Honestly, if you opened the file in a CSV editor like CSVed, it would probably show you what each field is. Doing it in Notepad++ works, but makes it harder to contextualize the values.
  5. Honestly, mod support seems to be a thing for only a few genres and studios. Strategy games and RPGs seem to be the ones where there's the most likelihood of the studios being open to official/semi-official mod support, although that tends to depend on a lot of factors. Those genres tend to benefit from mods extending the lifespan of the game. I think mod support has gone down lately because it's just plain harder to get tools, like Unreal 4 modding requiring EGS to get UE4 or using open source tools that don't support most games. That said, some times modders get hired because of their work, but that's pretty rare.
  6. I think they stopped putting the driver updates behind a log-in, but not stuff like Shadowplay.
  7. Some of the questions you should ask yourself to decide which card to get should include the following: Do I play games with raytracing? Do I use any non-gaming Nvidia software features? Do I play games with lots of texture mods? Do I play single-player or multi-player games? If you don't need/care about Nvidia features, then the RX 7800 XT is a good choice, especially since it doesn't lock a lot of driver features behind a log-in.
  8. Looking for someone with UE4.27 OR the dev skills to get UAssetGUI compatible with Aliens: Dark Descent uAssets to help me make some mods. Things I'm looking to do: Expand damage statistics for Skills (Shotgun Blast, Mines, etc...) Tweak Marine leveling curve to be a bit less steep Tweak upgrade costs Adjust ARC/APC motion tracker range Maybe make new upgrades/traits/xenotech Ideally, everything would be compatible with the r457 mod loader and its config file, which are included in the project files they've provided: https://www.nexusmods.com/aliensdarkdescent/mods/7?tab=files&BH=1
  9. I'm trying to update an older mod (AOE suppression with cone targeting) with a special reaction shot. This reaction shot is intended to have a few special features: 100% chance to hit (got this mostly working). Reduced damage. Applies a debuff (TBD). All enemies within 3 tiles of the target get hit with the debuff.So far, I've only gotten the 100% chance to hit (barring obstacles in the way) to work. For some reason, the debuff doesn't apply ever, the AOE doesn't kick in, and sometimes the damage reduction will break the aim calculations and make the shots miss. I've asked for help on Reddit, and aside from the 200% HitMod thing, they've been of little to no help. I'm hoping the Nexus forums might be more helpful. Here's my current code iteration, trying to use Walk Fire as a guide for the damage reduction: //--------------------------------------------------------------------------------------- // FILE: X2Ability_ConeOfFire.uc // AUTHOR: Kregano // DATE: // PURPOSE: Defines Cone of Fire ability. // //--------------------------------------------------------------------------------------- // //--------------------------------------------------------------------------------------- class X2Ability_ConeOfFireStuff extends X2Ability_GrenadierAbilitySet config(GameData_SoldierSkills) dependson (XComGameStateContext_Ability); static function array<X2DataTemplate> CreateTemplates() { local array<X2DataTemplate> Templates; Templates.AddItem(ConeOfFire()); Templates.AddItem(COF_ReactionShot()); return Templates; } static function X2AbilityTemplate ConeOfFire() { local X2AbilityTemplate Template; local X2AbilityCost_ActionPoints ActionPointCost; local X2AbilityCost_Ammo AmmoCost; local X2AbilityCooldown Cooldown; local X2Effect_ReserveActionPoints ReserveActionPointsEffect; local X2AbilityMultiTarget_Cone ConeMultiTarget; local X2Condition_UnitProperty UnitPropertyCondition; local X2Effect_Suppression SuppressionEffect; `CREATE_X2ABILITY_TEMPLATE(Template, 'ConeOfFire'); Template.IconImage = "img:///UILibrary_ConeOfFire.UIPerk_coneoffire"; ActionPointCost = new class'X2AbilityCost_ActionPoints'; ActionPointCost.bConsumeAllPoints = true; // this will guarantee the unit has at least 1 action point ActionPointCost.bFreeCost = true; // ReserveActionPoints effect will take all action points away Template.AbilityCosts.AddItem(ActionPointCost); AmmoCost = new class'X2AbilityCost_Ammo'; AmmoCost.iAmmo = 2; Template.AbilityCosts.AddItem(AmmoCost); Cooldown = new class'X2AbilityCooldown'; Cooldown.iNumTurns = 1; Template.AbilityCooldown = Cooldown; Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); Template.AddShooterEffectExclusions(); ReserveActionPointsEffect = new class'X2Effect_ReserveActionPoints'; ReserveActionPointsEffect.ReserveType = 'Suppression'; Template.AddShooterEffect(ReserveActionPointsEffect); Template.AbilityToHitCalc = default.DeadEye; Template.AbilityTargetConditions.AddItem(default.LivingHostileUnitDisallowMindControlProperty); Template.AbilityTargetConditions.AddItem(default.GameplayVisibilityCondition); Template.AbilityTriggers.AddItem(default.PlayerInputTrigger); Template.AbilityTargetStyle = new class'X2AbilityTarget_Cursor'; ConeMultiTarget.bIgnoreBlockingCover = true; ConeMultiTarget = new class'X2AbilityMultiTarget_Cone'; ConeMultiTarget.bUseWeaponRadius = true; ConeMultiTarget.ConeEndDiameter = 12 * class'XComWorldData'.const.WORLD_StepSize; ConeMultiTarget.bUseWeaponRangeForLength = true; Template.AbilityMultiTargetStyle = ConeMultiTarget; UnitPropertyCondition = new class'X2Condition_UnitProperty'; UnitPropertyCondition.ExcludeDead = true; UnitPropertyCondition.ExcludeFriendlyToSource = true; Template.AbilityShooterConditions.AddItem(UnitPropertyCondition); Template.AbilityTargetConditions.AddItem(UnitPropertyCondition); SuppressionEffect = new class'X2Effect_Suppression'; SuppressionEffect.BuildPersistentEffect(1, false, true, false, eGameRule_PlayerTurnBegin); SuppressionEffect.bRemoveWhenTargetDies = true; SuppressionEffect.bRemoveWhenSourceDamaged = true; SuppressionEffect.bBringRemoveVisualizationForward = true; SuppressionEffect.SetDisplayInfo(ePerkBuff_Penalty, Template.LocFriendlyName, class'X2Ability_GrenadierAbilitySet'.default.SuppressionTargetEffectDesc, Template.IconImage); SuppressionEffect.SetSourceDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, class'X2Ability_GrenadierAbilitySet'.default.SuppressionSourceEffectDesc, Template.IconImage); Template.AddMultiTargetEffect(SuppressionEffect); Template.AddTargetEffect(class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect()); Template.bAllowAmmoEffects = true; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_LIEUTENANT_PRIORITY; Template.AbilitySourceName = 'eAbilitySource_Perk'; Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow; Template.bDisplayInUITooltip = false; Template.AdditionalAbilities.AddItem('COF_ReactionShot'); Template.bIsASuppressionEffect = true; Template.AbilityConfirmSound = "TacticalUI_ActivateAbility"; Template.AssociatedPassives.AddItem('HoloTargeting'); Template.CinescriptCameraType = "StandardSuppression"; Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; Template.BuildVisualizationFn = ConeOfFireBuildVisualization; Template.BuildAppliedVisualizationSyncFn = class'X2Ability_GrenadierAbilitySet'.static.SuppressionBuildVisualizationSync; Template.TargetingMethod = class'X2TargetingMethod_Cone'; Template.bCrossClassEligible = true; return Template; } simulated function ConeOfFireBuildVisualization(XComGameState VisualizeGameState, out array<VisualizationTrack> OutVisualizationTracks) { local XComGameStateHistory History; local XComGameStateContext_Ability Context; local StateObjectReference InteractingUnitRef; local VisualizationTrack EmptyTrack; local VisualizationTrack BuildTrack; local int i; local XComGameState_Ability Ability; local X2Action_PlaySoundAndFlyOver SoundAndFlyOver; local XComUnitPawn UnitPawn; local XComWeapon Weapon; History = `XCOMHISTORY; Context = XComGameStateContext_Ability(VisualizeGameState.GetContext()); InteractingUnitRef = Context.InputContext.SourceObject; //Configure the visualization track for the shooter //**************************************************************************************** BuildTrack = EmptyTrack; BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1); BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID); BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID); // Check the actor's pawn and weapon, see if they can play the suppression effect UnitPawn = XGUnit(BuildTrack.TrackActor).GetPawn(); Weapon = XComWeapon(UnitPawn.Weapon); if (Weapon != None && !UnitPawn.GetAnimTreeController().CanPlayAnimation(Weapon.WeaponSuppressionFireAnimSequenceName) && !UnitPawn.GetAnimTreeController().CanPlayAnimation(class'XComWeapon'.default.WeaponSuppressionFireAnimSequenceName)) { // The unit can't play their weapon's suppression effect. Replace it with the normal fire effect so at least they'll look like they're shooting Weapon.WeaponSuppressionFireAnimSequenceName = Weapon.WeaponFireAnimSequenceName; } class'X2Action_ExitCover'.static.AddToVisualizationTrack(BuildTrack, Context); class'X2Action_StartSuppression'.static.AddToVisualizationTrack(BuildTrack, Context); OutVisualizationTracks.AddItem(BuildTrack); //**************************************************************************************** //Configure the visualization track for the targets for (i = 0; i < Context.InputContext.MultiTargets.Length; i++) { // Fake it out by assigning the first multi-target as the primary target if (Context.InputContext.PrimaryTarget.ObjectID == 0) Context.InputContext.PrimaryTarget = Context.InputContext.MultiTargets[i]; InteractingUnitRef = Context.InputContext.MultiTargets[i]; Ability = XComGameState_Ability(History.GetGameStateForObjectID(Context.InputContext.AbilityRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1)); BuildTrack = EmptyTrack; BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1); BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID); BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID); SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTrack(BuildTrack, Context)); SoundAndFlyOver.SetSoundAndFlyOverParameters(None, Ability.GetMyTemplate().LocFlyOverText, '', eColor_Bad); if (XComGameState_Unit(BuildTrack.StateObject_OldState).ReserveActionPoints.Length != 0 && XComGameState_Unit(BuildTrack.StateObject_NewState).ReserveActionPoints.Length == 0) { SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTrack(BuildTrack, Context)); SoundAndFlyOver.SetSoundAndFlyOverParameters(none, class'XLocalizedData'.default.OverwatchRemovedMsg, '', eColor_Bad); } OutVisualizationTracks.AddItem(BuildTrack); } } static function X2AbilityTemplate COF_ReactionShot() { local X2AbilityTemplate Template; local X2AbilityCost_ReserveActionPoints ReserveActionPointCost; local X2AbilityToHitCalc_StandardAim ToHitCalc; local X2Condition_Visibility TargetVisibilityCondition; local X2AbilityTrigger_Event Trigger; local X2Condition_UnitEffectsWithAbilitySource TargetEffectCondition; local X2Effect_RemoveEffects RemoveSuppression; local X2Effect ShotEffect; local X2AbilityCost_Ammo AmmoCost; local X2Effect_ReactionShot DamageEffect; local X2Effect_Stunned StunnedEffect; local X2AbilityMultiTarget_Radius RadiusMultiTarget; `CREATE_X2ABILITY_TEMPLATE(Template, 'COF_ReactionShot'); Template.bDontDisplayInAbilitySummary = true; ReserveActionPointCost = new class'X2AbilityCost_ReserveActionPoints'; ReserveActionPointCost.iNumPoints = 1; ReserveActionPointCost.AllowedTypes.AddItem('Suppression'); Template.AbilityCosts.AddItem(ReserveActionPointCost); AmmoCost = new class'X2AbilityCost_Ammo'; AmmoCost.iAmmo = 1; Template.AbilityCosts.AddItem(AmmoCost); ToHitCalc = new class'X2AbilityToHitCalc_StandardAim'; ToHitCalc.BuiltInHitMod = 200; ToHitCalc.bAllowCrit = false; Template.AbilityToHitCalc = ToHitCalc; Template.AbilityToHitOwnerOnMissCalc = ToHitCalc; Template.AbilityTargetStyle = default.SimpleSingleTarget; Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty); TargetEffectCondition = new class'X2Condition_UnitEffectsWithAbilitySource'; TargetEffectCondition.AddRequireEffect(class'X2Effect_Suppression'.default.EffectName, 'AA_UnitIsNotSuppressed'); Template.AbilityTargetConditions.AddItem(TargetEffectCondition); TargetVisibilityCondition = new class'X2Condition_Visibility'; TargetVisibilityCondition.bRequireGameplayVisible = true; Template.AbilityTargetConditions.AddItem(TargetVisibilityCondition); Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty); Template.bAllowAmmoEffects = true; RadiusMultiTarget = new class'X2AbilityMultiTarget_Radius'; RadiusMultiTarget.fTargetRadius = 4.5; // Units are measured in meters and each tile is 1.5 meters RadiusMultiTarget.bIgnoreBlockingCover = true; Template.AbilityMultiTargetStyle = RadiusMultiTarget; DamageEffect = new class'X2Effect_ReactionShot'; DamageEffect.BuildPersistentEffect(1, true, false, false); DamageEffect.SetDisplayInfo(ePerkBuff_Passive, Template.LocFriendlyName, Template.GetMyLongDescription(), Template.IconImage, true,,Template.AbilitySourceName); Template.AddTargetEffect(DamageEffect); StunnedEffect = class'X2StatusEffects'.static.CreateStunnedStatusEffect(2, 100); StunnedEffect.bRemoveWhenSourceDies = false; Template.AddTargetEffect(StunnedEffect); RemoveSuppression = new class'X2Effect_RemoveEffects'; RemoveSuppression.EffectNamesToRemove.AddItem(class'X2Effect_Suppression'.default.EffectName); RemoveSuppression.bCheckSource = true; RemoveSuppression.SetupEffectOnShotContextResult(true, true); Template.AddShooterEffect(RemoveSuppression); //Trigger on movement - interrupt the move Trigger = new class'X2AbilityTrigger_Event'; Trigger.EventObserverClass = class'X2TacticalGameRuleset_MovementObserver'; Trigger.MethodName = 'InterruptGameState'; Template.AbilityTriggers.AddItem(Trigger); Template.AbilitySourceName = 'eAbilitySource_Standard'; Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow; Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_supression"; Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_LIEUTENANT_PRIORITY; Template.bDisplayInUITooltip = false; Template.bDisplayInUITacticalText = false; //don't want to exit cover, we are already in suppression/alert mode. Template.bSkipExitCoverWhenFiring = true; Template.bAllowFreeFireWeaponUpgrade = true; // Put holo target effect first because if the target dies from this shot, it will be too late to notify the effect. ShotEffect = class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect(); ShotEffect.TargetConditions.AddItem(class'X2Ability_DefaultAbilitySet'.static.OverwatchTargetEffectsCondition()); Template.AddTargetEffect(ShotEffect); // Various Soldier ability specific effects - effects check for the ability before applying ShotEffect = class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect(); ShotEffect.TargetConditions.AddItem(class'X2Ability_DefaultAbilitySet'.static.OverwatchTargetEffectsCondition()); Template.AddTargetEffect(ShotEffect); Template.BuildNewGameStateFn = TypicalAbility_BuildGameState; Template.BuildVisualizationFn = TypicalAbility_BuildVisualization; return Template; } ===X2Effect_ReactionShot=== class X2Effect_ReactionShot extends X2Effect_Persistent config(WOTCskillTweaks); var config float REAC_DAMAGE_MODIFIER; function int GetAttackingDamageModifier(XComGameState_Effect EffectState, XComGameState_Unit Attacker, Damageable TargetDamageable, XComGameState_Ability AbilityState, const out EffectAppliedData AppliedData, const int CurrentDamage, optional XComGameState NewGameState) { local float ExtraDamage; if(AbilityState.GetMyTemplateName() == 'COF_ReactionShot') { if (class'XComGameStateContext_Ability'.static.IsHitResultHit(AppliedData.AbilityResultContext.HitResult)) { ExtraDamage = -1 * (float(CurrentDamage) * default.REAC_DAMAGE_MODIFIER); } } return int(ExtraDamage); }
  10. So I was doing some poking about in Frosty Editor to see if I'd suddenly gotten the meshes for some of the new MP guns when I realized I could look for the controller button prompts. I found them, but A) they're more complicated than I noticed while playing, and B) there aren't any large 2D images of them online anyway. I'm kinda mediocre at Photoshop, so I could use some help when it comes to replacing the buttons. Here's the button textures from the game in PNG format: http://i.imgur.com/rmS7yRY.png All that needs to be replaced are the A, B, X, Y, Share, and Option(?) buttons. Xbox One & Dual Shock 4 controller for reference: http://wpmedia.o.canada.com/2013/11/dsc6281-zf-0498-58860-1-008.jpg If/when somebody does this, I'll give full credit for texture work in the mod I plan to make.
  11. Here's a new FOV mod: Ultimate Combat Camera FOV Mod
  12. Already asked this on r/XCOM2mods but didn't get any help, so I'll ask this here: I'm preparing for WOTC to break some/all of my mods, so I figured it was a good time to tackle a problem I never licked. So, in two of my mods, the Grenadier and Ranger skill trees are reshuffled to accommodate new abilities, with each having a base game ability moved into the squaddie tier of skills. If you start a new game, you get those skills, but if you don't, you cannot get them. Now, I've taken a look at some of the AWC mods to see what they did, and their solutions are okay for the stock game, but obviously won't work for WOTC, since the AWC won't exist there, and would be horrifically complicated to divorce from AWC dependence. I tried using the game's own GetEarnedSoldierAbilities() function, but for whatever reason, it gives me this error: D:\SteamLibrary\SteamApps\common\XCOM 2 SDK\Development\Src\ConeofFire\Classes\X2DownloadableContentInfo_ConeofFire.uc(40) : Error, Bad or missing expression for token: GetSoldierClassTemplate, in '=' Aside from relabeling this function as a static function and adding a bracket or two, it's the same as the code in the XCOMGameState (IIRC) file I pulled it out of, so I'm not sure what's going on here. Anybody got any ideas A) on how to fix it, or B) a better way to do what I'm trying to do? The function, for reference: static function array<SoldierClassAbilityType> GetEarnedSoldierAbilities() { local X2SoldierClassTemplate ClassTemplate; local array<SoldierClassAbilityType> EarnedAbilities, AbilityTree; local SoldierClassAbilityType Ability; local int i; ClassTemplate = GetSoldierClassTemplate(); if (ClassTemplate != none) { for (i = 0; i < m_SoldierProgressionAbilties.Length; ++i) { if (ClassTemplate.GetMaxConfiguredRank() <= m_SoldierProgressionAbilties[i].iRank) continue; AbilityTree = ClassTemplate.GetAbilityTree(m_SoldierProgressionAbilties[i].iRank); if (AbilityTree.Length <= m_SoldierProgressionAbilties[i].iBranch) continue; Ability = AbilityTree[m_SoldierProgressionAbilties[i].iBranch]; EarnedAbilities.AddItem(Ability); } } }
  13. I'd love to see a mod where the squadmates have various fire-type augments installed on their guns, like the seeking plasma aug, electrical conduits, etc...
  14. This one actually makes sense and justifies why people would swap out the heat sinks for thermal clips. It probably is easier to build something to soak up a lot of heat and just get rid of it, instead of having to make it constantly absorb and radiate heat. That said, it would be great if we could create a new Remnant based heat sink that could get 80% of the ammo capacity.
×
×
  • Create New...