-
Posts
12 -
Joined
-
Last visited
Everything posted by EtherealCoder
-
Oh awesome! Heck yeah, I'd be happy to give it a shot! :)
-
Ah neat! Yeah, having guard "clones" in every city, acting the same way, with the same equipment, was pretty meh -- why would every Hold do things the same way? If you wanted to have some added flair for leaders, it would be easy enough to include some Enhanced AI for them -- they can tell nearby soldiers to retreat if outmatched, etc.. With or without EAI, you can also set up "strategic awareness" just using Triggers and Packages, so guards know to hold an enemy at a given choke point, instead of mindlessly charging in and giving away a tactical advantage.
-
Hey folks! Yeah, unfortunately, this was confirmed as a "broken" feature of Skyrim by everyone I met both here and on Reddit. My guess is it's possible to "cheat" by creating a Rune somewhere else, and then moving it into position using MoveTo. Alternatively, you could try to use PlaceAtMe by casting the prefabbed Rune ref as a Form, and seeing if that worked -- but it would likely blow up for the Caster as well. I gave up on this and instead used Wall of Fire / Frost / Shock for area control, and that worked out pretty darned good. I'd encourage others to do the same, probably a big savings on sanity. :)
-
Heya! Thanks for sharing your reflections! Hah and your English is fine, no worries. :) Glad you like the concept. My thoughts below: 1. Organic Factions could really work well with the remnants of the Dark B. Faction, and perhaps a rivalry with the Morag Tong. 2. Yep, an more dynamic Thieve's Guild would have been nice. Honestly the current Thieve's Guild isn't TOO bad, just a little monotonous with some of those "job" quests. 3 & 4. It would have been totally badass / creepy if the vampires in DawnGuard actually started taking over castles and stuff. THAT would have been one hell of a DLC. 5. Hahah yep, some recognition would be NICE!! :) Jerk NPC's! 6. I'll leave that part open to other modders; I'll be working on the core framework. 7. That's the idea -- Factions will grow and shrink on their own. Sometimes they may pick up special "named" NPC's, other times it'll just be generically-named followers. Once the Framework is done, I'm as eager to see what people do with this stuff as you are! :) There are a LOT of awesome modders here, I be they'd crank out some absolute gems. Have a good one!
- 2 replies
-
- ai
- artificial intelligence
-
(and 2 more)
Tagged with:
-
Hi folks! I have a new video out which covers the idea of “Organic Factions” – in-game groups which grow and change independent of the player, though the player may decide to interact with them as they rise in power and influence. This system would also let the player create a faction of their own – allowing them to set up patrols, negotiate alliances, and crush enemies. I’ve been working on this system for not just Skyrim, but with the anticipation that it may be adapted for Fallout 4 as well. The video also has several details about my “Shadow of the Dragon God” mod here on the Nexus, as well as the AI Framework I’ve been working on. One of the reasons I really like the Nexus is it’s so much better than Steam for fostering collaboration between modders and players. A big thanks to everyone here for all the inspiring conversations and feedback. I’ve been building and testing to create the most flexible and efficient means to make these changes in Skyrim. This is what “next gen” could be, instead of just fancy graphics and effects -- if this is what you want for the future, I’d love to hear from you! :D Thanks!! Video link: https://www.youtube.com/watch?v=zCXEsoDA5Cc Shadow of the Dragon God on the Nexus: http://www.nexusmods.com/skyrim/mods/68924/?
- 2 replies
-
- ai
- artificial intelligence
-
(and 2 more)
Tagged with:
-
New Artificial Intelligence Mod
EtherealCoder replied to EtherealCoder's topic in Skyrim's Skyrim LE
Thanks for the feedback! My short-term goal is to duplicate a current dungeon in the game, and then give all enemies in there a revised AI -- that way, players can do a "side-by-side" comparison between the vanilla AI and the new stuff, and we can all discuss some further potential improvements. Eventually that might scale up to followers and dragons -- though I'm more focused on adversaries to the player than allies for now. I feel that's where we can see the greatest improvements in the player's experience -- but we'll see as things evolve. -
Greetings all! I'm pleased to announce the first in a line of mods dedicated to improving the player experience of Skyrim through improved Artificial Intelligence. The Nexus download page can be found here: http://skyrim.nexusmods.com/mods/41364/? For a preview of the new features, and a general review of gaming AI, please refer to the following video: This mod file contains a small combat-test dungeon with a handful of opponents. Players are encouraged to try it out and share their reflections and experiences. Note that there is no map-based entry point -- to enter the arena, open the Console menu (using the ~ key) and type: coc NewAITestDungeon03 Also note that enemies will auto-resurrect after 45 seconds, so there is no need to re-load. Feedback on the AI changes is welcome as I prepare a set of full dungeons. I look forward to hearing from you!
-
Hi all I've been trying to get NPC's to lay boobytraps -- however, they fail to cast Runes when told to do so via a multitude of ways. The following examples do not work: Method 1 of 2: This works fine when making someone Summon a Storm Atronach. ; Force equip the spell. (akActionRef as Actor).EquipSpell(RuneSpellRef, 0) ; Force cast the spell. RuneSpellRef.Cast(akActionRef) Method 2 of 2: Using AI Procedures Similarly, I've made a Procedure based on UseMagic which also fails. The condition for casting is the Spell being equipped in the left hand -- which is forced by another Script. In both of these cases, I can hear the spell being charged, but it's always followed by the "fizzle" noise. So, it appears as if the system is struggling to cast as desired, but it can't aim at the correct target (nearby surface). To try and engineer around this, I made a copy of the ShockRune Spell and related MagicEffect, but changed the type to Aimed. The Rune was successfully cast, though it would manifest in thin air and then change its Alpha to 0. When I walked by, it detonated -- however, I couldn't get the NPC's to aim at the ground, and SnapToNavmesh didn't work to reign in the abberant behavior. Either way, I just want this spell to cast correctly. Ideally, it should do the usual: drain Magicka from the spellcaster; and only allow 1 or 2 Runes at a time depending on the Perks of the caster; etc.. Suggestions appreciated!
-
Updated 2013-08-01 Solved -- used the below methodology, but tied a Fear spell to the Enemy Trigger instead of trying to force the execution of an AI Package or other pathed behavior. Will post scripts and videos soon. ----------------------- Hi all! I'm working on a mod that's mainly for modders -- that is, I want to make a new toolset that will help the modding community create more sophisticated enemy AI a little easier. Less work, more payoff. While I love Skyrim, I noticed that most humanoid NPC's have some very basic, predictable behaviors -- melee folks rush, and archers / mages all hang around the exact same distance away. The game does some nice basic stuff with cover, but there's very little variance unless the modder goes in and makes extensive, explicit changes to behavior using a whole bunch of Packages with conditionals, etc.. That is very time consuming. I want to change that. Super quick synopsis of my tool: I've built a logging system that automatically clusters where all player and enemy hits take place in a dungeon -- i.e. when the player is within region A, s/he tends to deal a lot of damage to enemies in regions B, C, and D, etc.. The size and coordinates of each region are automatically calculated, honed down from hundreds or thousands of data points. The final outcome I want is: When the player enters Region A, the NPC's know to FleeFrom Regions B, C, and D. This will force the player to move around more, as the NPC's won't be "suckers" and all sit and die in the same spot. Ideally, I want to make my system translate the clustered region information into scripts automatically, so there is absolutely minimal work on the part of the developer. I would very much appreciate advice that would lead to the most efficient means of achieving the above goal. I tried the following methodology, but it doesn't work thus far, and I believe it's not optimal: I've made a dungeon with Triggers for each Player and Enemy Region -- I tried to set it up so when the player enters Region A, it would change a value in a Script attached to Trigger Regions B, C, and D, etc..Each NPC would also have a new Script attached, which would just create two new Properties -- a Boolean for "ShouldFlee", and an ObjectReference for the Object to FleeFrom(). Default Boolean value is False.If an NPC entered Region B, C, or D while the player is in Region A, a Script attached to the Trigger in Regions B, C, and D would do three things: 1. Set the NPC Script's Boolean Property to True. 2. Set the NPC Script's ObjectReference Property to itself (the Trigger Box). 3. Force a re-evaluation of the NPC's Package Stack. There would be a single conditional in the Package Stack to check the Script Boolean Property, and then flee from the ObjectReference if the Boolean is True. Again, I'm not quite sure if this is the most efficient means of executing what I'd like. It depends a lot on Triggered Events (which is good...), but I haven't been able to get the code to work thus far. The Package Conditional fails to allow me to try and GetScriptVariable from my NPC, even when it has an explicit name / ID. The only other alternative which I can think of at the moment is making a HUGE series of Package Conditionals that emulate these Trigger Boxes -- that is, they would constantly check the Player and NPC positions. However, I believe that would be a HUGE hindrance to performance, since GetPos would likely be checked every "tick" of the engine. Again, I want to make my system translate the clustered region information into scripts automatically, so there is absolutely minimal work on the part of the developer -- so, if there's a way to get most of this behavior out of some Scripts with minimal use of the GUI, all the better! Your sage advice much appreciated!
-
- ai
- artificial intelligence
-
(and 2 more)
Tagged with:
-
BTW, got the code working -- though I want to tweak a few things. This is the Papyrus script I've directly attached to my NPC's. Scriptname NAITD03S01 extends ObjectReference {Used for logging the locations of attackers and targets.} Event OnHit(ObjectReference akAggressor, Form akSource, \ Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, \ bool abBashAttack, bool abHitBlocked) if akAggressor == game.getPlayer() Debug.Trace("<EventOnHit><Aggressor><ID>Player</ID><Location>" \ + akAggressor.GetPositionX() + "," \ + akAggressor.GetPositionY() + "," \ + akAggressor.GetPositionZ() \ + "</Location></Aggressor><Target>" \ + "<ID>" + Self \ + "</ID><Location>" \ + Self.GetPositionX() + "," \ + Self.GetPositionY() + "," \ + Self.GetPositionZ() \ + "</Location></Target></EventOnHit>") else Debug.Trace("<EventOnHit><Aggressor><ID>" + akAggressor + "</ID><Location>" \ + akAggressor.GetPositionX() + "," \ + akAggressor.GetPositionY() + "," \ + akAggressor.GetPositionZ() \ + "</Location></Aggressor><Target>" \ + "<ID>" + Self \ + "</ID><Location>" \ + Self.GetPositionX() + "," \ + Self.GetPositionY() + "," \ + Self.GetPositionZ() \ + "</Location></Target></EventOnHit>") endif EndEvent
-
Hi all BotOwned: Thank you for the link! Instead of using a quest to attach the script to both the NPC's and the player, I've just directly attached them to the NPC's. The link you sent should help for an easy attach to the player, thank you very much! GrimyBunyip: Good guess -- the idea is to record spots where the AI is hit relative to player position. I can then use some clustering tecniques to collapse a huge set of data points down to a few dozen -- so when the player is at Point A, the AI knows to avoid Points B, C, and D. When the player moves, the "areas to avoid" change as well. However, I don't want this to be a static solution for just my little mod. The idea is to provide a tool / service for all modders and maps. So, anyone can make a new dungeon, and then use my tool to enhance their AI without having to hard-code in anything themselves. The system will be dynamic and just rely on recorded data from the log.
-
Hi all I'm new to the Skyrim modding scene, though I've done some mods of FPS games in the past (UT2004, etc.). I would like to tweak some of the AI behavior in the game to make it more strategic and challenging. To achieve this goal, I need to collect some data from the game -- specifically, the location of the Aggressor and Target every time an attack lands successfully. I've sketched up a script to save this information as XML in the log so I can parse it later -- however, I'm not sure how to exactly phrase the new OnHit method to get the info I want. I was thinking of setting things up so when the Player enters my target Location, a Quest is started, which would run the following script in the background: Scriptname NewAITestDungeon03Script01 extends ObjectReference Event OnHit(ObjectReference akAggressor, Form akSource, \ Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, \ bool abBashAttack, bool abHitBlocked) if akAggressor == game.getPlayer() Debug.Trace("<EventOnHit><Aggressor><ID>Player</ID><Location>" \ + akAggressor.GetPos axis + "</Location></Aggressor><Target>" \ + "<ID>" + **Reference to Target Actor needed here ** \ + "</ID><Location>" + ** Reference to Target Location needed here ** \ + "</Location></Target></EventOnHit>") else Debug.Trace("<EventOnHit><Aggressor><ID>" + akAggressor \ + "</ID><Location>" + akAggressor.GetPos axis \ + "</Location></Aggressor><Target>" \ + "<ID>Player</ID><Location>" \ + game.getPlayer().GetPos axis \ + "</Location></Target></EventOnHit>") endif EndEvent I just need to know how to reference the Target when the Aggressor is the Player. Note I'm hypothesizing that running the Papyrus script from a Quest will render the results I want for all Actors. If this isn’t the Best Practice way of doing things, a pointer or web link in the right direction would be much appreciated! Thanks all! E.C.