Sclerocephalus Posted October 14, 2013 Share Posted October 14, 2013 Now working on the critter scripts and there are a couple of questions already. The script lets critters die when hit by a magic effect. Makes certainly sense for destruction spells, and it is understandable that they won't survive the magic turbulences associated with a conjuration, illusion or alteration attack, because they are tiny creatures. But what about a restoration spell ? If no one objects, I'll make them immune to "restoration attacks". Einheljar 1 Link to comment Share on other sites More sharing options...
Vardis Posted October 14, 2013 Share Posted October 14, 2013 Would that make them immune to Poison Rune? Link to comment Share on other sites More sharing options...
tyrel68 Posted October 14, 2013 Share Posted October 14, 2013 Would that make them immune to Poison Rune? Poison Rune is an adept level Restoration spell that creates a rune which will explode when enemies come near, causing them to take 3 damage per second for 30 seconds. so yes XD Link to comment Share on other sites More sharing options...
SilentSpike Posted October 14, 2013 Share Posted October 14, 2013 I could see restoration spells killing them too, no critter can survive my healing power! (It basically over-heals them ) Link to comment Share on other sites More sharing options...
Screwball Posted October 14, 2013 Share Posted October 14, 2013 Now working on the critter scripts and there are a couple of questions already. The script lets critters die when hit by a magic effect. Makes certainly sense for destruction spells, and it is understandable that they won't survive the magic turbulences associated with a conjuration, illusion or alteration attack, because they are tiny creatures. But what about a restoration spell ? If no one objects, I'll make them immune to "restoration attacks". Is this clearly and obviously a bug? If so yes, change it. If not then it seems to me that it would be a change "just for the sake of it" and is not, strictly speaking, suitable for inclusion in the USKP. There's undoubtedly a million and one things which could be changed, the question is - should they? Link to comment Share on other sites More sharing options...
Sclerocephalus Posted October 14, 2013 Author Share Posted October 14, 2013 Poison Rune is an adept level Restoration spell that creates a rune which will explode when enemies come near, causing them to take 3 damage per second for 30 seconds. so yes XD Critters are not capable of activating runes (they aren't actors). Link to comment Share on other sites More sharing options...
Sclerocephalus Posted October 14, 2013 Author Share Posted October 14, 2013 Is this clearly and obviously a bug? It is debatable. That's why I asked for opinions. There's undoubtedly a million and one things which could be changed, the question is - should they? Yes, if they clearly don't make any sense as they are. Yes also, if the code unnecessarily costs performance and memory or if it clearly doesn't do what it was intended for. Critter movement recurs to a number of geometric +/- trigonometric problems, of which not a single one has been appropriately implemented. Most of the time, variables are adapted to preset conditions by trial and error and in certain conditions, some functions never return a valid result even by chance. The critter script, for example, has a function that is supposed to let a critter fly around a spawner, but it lets the critter travel to one of the eight corners of the imaginary bounding box instead and effectively keeps it there until it gets eventually deleted. There's another example in the CritterBird script (the problem here should also be more obvious than in the last example): FUNCTION groundHop() trace(self + " beginning groundHop()") ; Set up variables to solve for right triangle ABC ; c is the hypotenuse - think of it as the path along which the bird hops ; the a and c values are going to be added to current XY to determine goal XY float aA = getAngleZ() ; B float aB ; / | float aC = 90 ; c/ |b ; we know angle C is 90 because it's a right triangle float a ; A/____|C float b ; a float c = randomFloat(fMinHop, fMaxHop) ; use an int to track the quadrant into which we're hopping (global) ; I:(+,+) II:(-,+) III:(-,-) IV:(+,-) int quadrant if (aA > 0 && aA <= 90) || aA > 360 quadrant = 1 elseif aA > 90 && aA <= 180 quadrant = 4 elseif aA > 180 && aA <= 270 quadrant = 3 elseif aA > 270 && aA <= 360 quadrant = 2 endif a = c*(cos(aB)) b = c*(cos(aA)) float newX float newY if quadrant == 1 newX = (self.x + a) newY = (self.y + b) elseif quadrant == 2 newX = (self.x - a) newY = (self.y + b) elseif quadrant == 3 newX = (self.x - a) newY = (self.y - b) elseif quadrant == 4 newX = (self.x + a) newY = (self.y - b) endif ; now use a spline to "hop" there quicky. SplineTranslateTo(newX, newY, self.z, 0, 0, self.getAngleZ(), 300, fSpeed) trace(self + "performing a short hop to: " + newX + ", " + newY + ".") ; test, but a little pause between each seems proper. wait(randomFloat(0.1, 2.0)) endFUNCTION It's no surprise that the scripts continue to spam "none" errors when the time between 3D checks is bloated by superfluous operations. This code does the same: Function GroundHop() Float AngleZ = Self.GetAngleZ() Float HopDistance = RandomFloat (fMinHop, fMaxHop) Float NewX = Self.X + HopDistance * Cos (AngleZ) Float NewY = Self.Y + HopDistance * Sin (AngleZ) SplineTranslateTo (NewX, NewY, Self.Z, 0, 0, AngleZ, 300, fSpeed) Wait (RandomFloat (0.1, 2.0)) EndFunction In other words, correcting inconsistencies like magic damage issues on the fly will take a ridiculously unimportant fraction of the time that has to be spent on the scripts anyway. When that's accomplished, I would feel extremely unhappy to modify them again for whatever reason. Therefore, I would like to get some consensus on all potential issues until I'm done. Link to comment Share on other sites More sharing options...
Screwball Posted October 14, 2013 Share Posted October 14, 2013 Point taken, I'm merely cautioning about "mission creep" - too many worthwhile projects have fallen by the wayside because of it Link to comment Share on other sites More sharing options...
tyrel68 Posted October 14, 2013 Share Posted October 14, 2013 Point taken, I'm merely cautioning about "mission creep" - too many worthwhile projects have fallen by the wayside because of it i think hes looking at it from the angle hes redoing the whole bloody thing anyway you might as well optimize as you go Link to comment Share on other sites More sharing options...
Sclerocephalus Posted October 14, 2013 Author Share Posted October 14, 2013 Thinking about it, this is another project that can be easily developed beyond a simple fix. I could add a few bugs to Skyrim's wildlife ... Link to comment Share on other sites More sharing options...
Screwball Posted October 14, 2013 Share Posted October 14, 2013 Like they don't have enough already Link to comment Share on other sites More sharing options...
DayDreamer Posted October 16, 2013 Share Posted October 16, 2013 In his Flora Respawn Fix, BlueDanieru also changed critters, added a switch from wait to an updategametime. I've looked at it an thought it wasn't done in a very backwardly compatible manner. But I'll include it here for you to gander: Scriptname FXfakeCritterScript extends ObjectReference {Make fake critters shootable} container Property myContainer Auto Flora Property myFlora Auto ingredient Property myIngredient Auto potion Property myFood Auto string Property myLocationOffset Auto string Property myFakeForceExplosionOffset Auto Explosion Property myExplosion Auto Explosion Property myFakeForceExplosion Auto objectReference myContainerRef objectReference myIngredientRef objectReference myExplosionRef objectReference myFakeForceExplosionRef objectReference myFloraRef int Property numberOfIngredientsOnCatch Auto int property hoursBeforeReset = 72 auto Event OnActivate(ObjectReference akActionRef) self.disable() if myFood game.getplayer().additem(myFood, numberOfIngredientsOnCatch) endif if myIngredient game.getplayer().additem(myIngredient, numberOfIngredientsOnCatch) endif RegisterForSingleUpdateGameTime(hoursBeforeReset) EndEvent Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) if akAggressor == game.getplayer() if myContainer myContainerRef = self.placeAtMe(myContainer, 1, false, true) utility.wait(0.01) myContainerRef.enable(false) myContainerRef.MoveToNode(self, myLocationOffset) endIf if myFlora myFloraRef = self.placeAtMe(myFlora, 1, false, true) utility.wait(0.01) myFloraRef.enable(false) myFloraRef.MoveToNode(self, myLocationOffset) endIf utility.wait(0.1) self.disable() RegisterForSingleUpdateGameTime(hoursBeforeReset) endIf EndEvent Event OnUpdateGameTime() enable() if myContainerRef myContainerRef.disable() utility.wait(0.1) myContainerRef.delete() endif if myFloraRef myFloraRef.disable() utility.wait(0.1) myFloraRef.delete() endif if myIngredientRef myIngredientRef.disable() endif endEvent Link to comment Share on other sites More sharing options...
BlackPete Posted October 16, 2013 Share Posted October 16, 2013 In his Flora Respawn Fix, BlueDanieru also changed critters, added a switch from wait to an updategametime. I've looked at it an thought it wasn't done in a very backwardly compatible manner. But I'll include it here for you to gander: .... I thought I read that this fix for the flora wasn't able to used in the USKP, due to some compatibility issues with the game engine or something like that. Sorry, maybe I'm missing something, but did someone finally find a way to integrate a fix for the flora respawn issue into the USKP without it causing other bugs? Link to comment Share on other sites More sharing options...
Arthmoor Posted October 16, 2013 Share Posted October 16, 2013 The flora fix is unsuitable for the USKP because he had to change all the animated flora objects into static tree objects to get the respawning to work. Or something like that. Not a solution we could accept. Link to comment Share on other sites More sharing options...
Sclerocephalus Posted October 16, 2013 Author Share Posted October 16, 2013 Thinking about it, this is another project that can be easily developed beyond a simple fix. I could add a few bugs to Skyrim's wildlife ... Thinking about this again, the pleasure of presenting such a mod alone would pay for the efforts of its development (after all, I would have to conceive new 3D models and textures in addition to the script). Imagine the short description on the Nexus: "Bugs" will add immersion to your game ... "Bugs" is intended as a modder's resource. Feel free to use them in your own mods ... "Bugs" comes as a false-flagged master file (this one will probably take a while to setlle) Link to comment Share on other sites More sharing options...
DayDreamer Posted October 17, 2013 Share Posted October 17, 2013 I thought I read that this fix for the flora wasn't able to used in the USKP, due to some compatibility issues with the game engine or something like that. Sorry, maybe I'm missing something, but did someone finally find a way to integrate a fix for the flora respawn issue into the USKP without it causing other bugs? Perhaps I wasn't clear. This is not about the flora respawn. This thread is about critters. He included a critter change from using OnCellAttach() to OnUpdate(). I was hoping to discuss whether that change was a good idea that should be adopted here. The flora fix is unsuitable for the USKP because he had to change all the animated flora objects into static tree objects to get the respawning to work. Or something like that. Not a solution we could accept. I concur -- although you have the details backward, he changed all the "TreeFlora" objects to new "FloraTreeFlora" objects. He had to do that in his design, because "TreeFlora" objects don't allow scripts. Regular "Flora" objects can have scripts. My biggest objection is that meant it was incompatible with every plugin that moved a "TreeFlora" -- including USKP and Touring Carriages. It also means he needs a compatibility patch for every new interior, and every DLC, etc. He promises that on the Skyrim.Nexus, but never delivered. I suggested a different approach, with a quest task monitoring the player adding to inventory, so that no new objects would be needed. Maybe I'll try to code that up, and see whether it works.... Link to comment Share on other sites More sharing options...
BlackPete Posted October 17, 2013 Share Posted October 17, 2013 Perhaps I wasn't clear. This is not about the flora respawn. This thread is about critters. He included a critter change from using OnCellAttach() to OnUpdate(). I was hoping to discuss whether that change was a good idea that should be adopted here. Sorry about that. I guess I misunderstood what was being discussed. Link to comment Share on other sites More sharing options...
zilav Posted October 17, 2013 Share Posted October 17, 2013 He had to do that in his design, because "TreeFlora" objects don't allow scripts. Regular "Flora" objects can have scripts.Actually I'm interested if it is a CK limitation or game doesn't support scripts there. Midas Magic had VMAD attached to explosions which is impossible to do in CK. I don't know if it worked at all, but there is a possibility. I can create a special version of TES5Edit which will allow to add VMAD to flora if someone is willing to test it in game. Link to comment Share on other sites More sharing options...
DayDreamer Posted October 17, 2013 Share Posted October 17, 2013 Actually I'm interested if it is a CK limitation or game doesn't support scripts there. Midas Magic had VMAD attached to explosions which is impossible to do in CK. I don't know if it worked at all, but there is a possibility. I can create a special version of TES5Edit which will allow to add VMAD to flora if someone is willing to test it in game. Sure, I'm interested! Link to comment Share on other sites More sharing options...
zilav Posted October 18, 2013 Share Posted October 18, 2013 Sure, I'm interested! https://docs.google.com/file/d/0B4rR0C-Bcx_JTXlpWURkRFhwZU0/edit?usp=sharing There is a script included that can copy VMAD from other records. So copy as override some TREE record(s), select them, apply script, enter FormID of record with VMAD data to copy from. Link to comment Share on other sites More sharing options...
Sclerocephalus Posted October 18, 2013 Author Share Posted October 18, 2013 Very slowly, the nastier bugs come to surface. Have a look at the critter kickoff, which is handled from an OnUpdate event in a state the Critter script is only in immediately after spawning (3D checks are needed so often that I have made it a new "CheckFor3D" function on the Critter script): State KickOffOnStart Event OnUpdate() GotoState("") DummyMarker = PlaceAtMe (LandingMarkerForm) LandingMarker = PlaceAtMe (LandingMarkerForm) CheckFor3D (LandingMarker) CheckFor3D (DummyMarker) OnStart() Enable() EndEvent EndState Note the Enable() command after OnStart() returns. The latter is a custom event which contains critter-specific code and is handled therefore by each critter species script individually. For dragon flies, it looks as follows: Event OnStart() SetScale (RandomFloat (fMinScale, fMaxScale)) PlayAnimation (PathStartGraphEvent) If (PlayerRef.GetDistance (Self) > fMaxPlayerDistance) DisableAndDelete() Else WarpToRandomPoint() Enable() If CheckFor3D (Self As ObjectReference) SetMotionType (Motion_Keyframed, False) RegisterForSingleUpdate (0.0) Else DisableAndDelete (False) EndIf EndIf EndEvent This event has its own Enable() command and checks subsequently whether the critter does actually load. If not, it gets deleted. When the event is done, the script returns to the OnUpdate event on the Critter main script, and this will try to enable it again (see above). Very funny, when the critter is already deleted. By the way, does anyone have an idea what sense it makes to play an animation when the critter is not yet enabled (second line in the OnStart() event) ? Link to comment Share on other sites More sharing options...
SilentSpike Posted October 18, 2013 Share Posted October 18, 2013 Depending on the animation it could be some behind the scenes trickery used by Beth Link to comment Share on other sites More sharing options...
DayDreamer Posted January 3, 2014 Share Posted January 3, 2014 Where are we on this code? Link to comment Share on other sites More sharing options...
DayDreamer Posted January 19, 2014 Share Posted January 19, 2014 Got another one: http://www.afkmods.com/index.php?/tracdown/issue/14602-critterfishonupdate-assigning-none-as-mudcrab-is-killed/ Link to comment Share on other sites More sharing options...
tyrel68 Posted January 21, 2014 Share Posted January 21, 2014 Is this project dead now that Sclero seems MIA? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now