Jump to content

DocClox

Members
  • Posts

    122
  • Joined

  • Last visited

Everything posted by DocClox

  1. Open the esp with zEdit, and expand the header. Find the master file out of the list and double click on the file name. It'll let you edit the name. That should work without complications, but (as ever) make sure you have a backup first. zEdit makes one automatically, but I'd take a manual one anyway.
  2. In case anyone's interested, I'm making good progress on this. I ended up with the discussion on LL, mainly because there's a linked project already there. I'd link it, but I'm not sure if LL links are allowed these days.
  3. I always thought that was so you could stack items on top of each other, It's possible I've been using it wrong. Also, I wonder if those little colored hemisphere's you see on vanilla CPs have their own collision. That could save some work, if so. Assuming the collision theory is sound, anyway.
  4. Also, if you use Mod Organizer, be aware that new files won't show up in an app's virtual filesystem until that app restarts. That means Fo4 may not see meshes and textures you add while the game is running. It also means that if you've kept the Creation Kit open for some time, it won't see new files either. Or rather it will see the filenames, but if you try and use them in the editor, it will tell you that they don't exist. Which can be incredibly frustrating.
  5. The thing is, some of the snap-on bits are furniture, so they already have collision or they couldn't be activated. But it tends to be collision from the "this wooden board is the right sort of shape" school of thought. Maybe I should whomp up some static collections and make sure the area around the snap point collides. That might do it.
  6. What the title says, basically. I have a wall that can have multiple identical items snapped to it.And it works well, except that there's a tendency to objects to snap onto points that are already in use. This clearly doesn't happen with vanilla assets. You can't hang a painting on top of another painting, for example. So how do I stop it? Collision?
  7. You could try a glow map. Set it all to black and see if that helps.
  8. Those quaternions: Does Havok expect WXYZ? Ir is it XYZW? If it was the latter, that would make a sort of sense, since the root bone exported from Max would start out with zero rotation rather than rotated 108 degrees around the Z axis. C'mon! I can't be the only person interested in making this work!
  9. Just to add to that: by default the CK strips esm flags from non esm files every time you save. It's occasionally convenient to esm-ify an esp file, but such constructs are fragile - a single edit in the CK will destroy the parent status. You can get around it, if you don't need to do anything too exotic, by using xEdit or zEdit to make you changes. Also, one of the various Creation Kit fixes or enhancement mods out there changes the CK so it doesn't remove the esm flag from esps
  10. Well, I have something in-game now, so that's progress. Admittedly it's just a scrunched up mess at the moment ... but then again, I just discovered that my test blend file had about 40 extra bones, so that can't have been helping. I know what you mean about controllers. I could just about make 'em work in Skyrim, but every file I look at in Fo4 seems to have about 8 of them to do a single thing and I get hopelessly lost.
  11. I swapped out the Spline Compression module from HCT in 3ds Max and got a hkaInterleavedUncompressedAnimation. Comparing HCT output against your guide, I think you may be missing a section: <hkobject class="hkaDefaultAnimatedReferenceFrame" name="#94" signature="0x60f8e0b8"> <!-- memSizeAndRefCount SERIALIZE_IGNORED --> <!-- frameType SERIALIZE_IGNORED --> <hkparam name="up">(0.0 0.0 1.0 0.0)</hkparam> <hkparam name="forward">(0.0 1.0 0.0 0.0)</hkparam> <hkparam name="duration">16.66666603088379</hkparam> <hkparam name="referenceFrameSamples" numelements="2">(0.0 0.0 0.0 0.0) (0.0 0.0 0.0 0.0)</hkparam> </hkobject> At least, that's what HKXPack unpacks from the HCT generated idle. It was a two frame pose, so I suspect that "referenceFrameSamples" element is going to want one tuple per animation frame, but I haven't tried that yet. [edit] And the line: <hkparam name="extractedMotion">null</hkparam>wants to point at the hkaDefaultAnimatedReferenceFrame section with the appropriate #number, rather than null. Again, that's going by what HCT generates from Max.
  12. I've written a script to walk through the armature and keyframe data in a Blender file and use it to generate HKX XML. I'm interrogating Blender base on the scripts @Anton0028's wrote for Skyrim LE, and the HKX format is working the Havok brain dump that @ajs52698 recently posted. The output is good enough for HKXPack to generate a .hkx file, and when I use simple test animations, the numbers look about as I would expect. But when I try and use the idle as a pose, I get a t-pose, and if I try and generate metadata for furniture, I crash the CK. I figure I have to be fairly close, and if I can get this to work, we all get a new way to generate Fallout 4 animation. Can anyone see what I'm missing? [edit] Turns out, you can swap out the Spline Compression module in HCT and Max. If I do that, I get an Interleaved, Uncompressed animation which is what I'm trying to generate. Turns out I'm missing a section like this. <hkobject class="hkaDefaultAnimatedReferenceFrame" name="#94" signature="0x60f8e0b8"> <!-- memSizeAndRefCount SERIALIZE_IGNORED --> <!-- frameType SERIALIZE_IGNORED --> <hkparam name="up">(0.0 0.0 1.0 0.0)</hkparam> <hkparam name="forward">(0.0 1.0 0.0 0.0)</hkparam> <hkparam name="duration">16.66666603088379</hkparam> <hkparam name="referenceFrameSamples" numelements="2">(0.0 0.0 0.0 0.0) (0.0 0.0 0.0 0.0)</hkparam> </hkobject> For anyone who has played with the animation controllers in Nifscope, that is going to look very familiar. I'm guessing this is why the game couldn't find anything to do with my idle. I'm going to make a few changes to bring my output into line with HCT output, and see where that takes me.
  13. Ooh! I can think of uses for a few of those, Nice one :D
  14. Yeah, I did that way back when the CK was first released for Skyrim. Seemed obvious really - use quests as state machines. And, like you, I found out that if you regress a quest, while it flags that the stage has been "done", the current stage stays at the largest value. I wasted a couple of weeks finding that out the hard way. Did I not say all this to you when you first asked about it? I'm fairly sure I did.
  15. Try PyNifly. I think the d/l for 0.0.27 is borked, but earlier ones should be OK. Development thread is a blog on LL
  16. I had a trolley on rails and I just wanted linear movement. TranslateTo needs angles, so I took the orientation the trolley started with and used that for the final position. Except, looking at the code there, I didn't, but rather took the rotation of the base the trolley was mounted upon. Which probably explains why it kept trying to rotate through 180 degrees when it moved. And because it was rotating, that's why I added the +180 to the Z value - good old trial and error. I did the rideable race thing too. My hapless passenger then gets strapped to a ring and rotated horizontal, and the only way I could find to make that work for everyone was to make the ring into a vehicle. It is complicated, but what I did was to take an eyebot and copy it. I also copied the race, and I gave it a new skin (which is an armor record, but acts as the skin of the race. A bit of fiddling with allowed extra races (no idea why - probably another stupid bug on my part) and I had a metal ring that thought it was an eyebot. Then I set the movement type to immobile so it wouldn't fly off, and deleted all its AI packages. The 'bot has to function as furniture, so you need an idle animation. I already had one of those from previous attempts, but if all else fails the kneeling captive pose usually works for me. Set up a furniture keyword as explained here and probably test it on a chair or a mat or something and make sure it's working. Then you need a node to attach to in the bot's skeleton. (This is why you need to copy the race - it needs an edited nif and you don't want to apply this to all existing eyebots or whatever). All you need to do, is set up a BSConnectPoint parent to the root bone. (Anywhere else and the passenger will bob with the movement that the eyebot would have been making) Call the point p-AttachPassenger. In the 'bot Actor record, you need a few things. It needs a workshopobjectactorscript and a workshopobjectscript. In the Race record you need to add some keywords. It wants ap_attachPassenger, hasPassengerMounts, ap_AttachSlot1 (maybe not needed) and the a keyword you create to identify this as a type of vehicle using the idle you set up earlier. You get all that done, the last thing is to set up a Subgraph record, like for the furniture, but also using the vehicle type keyword you created. And if you get all that right, you should be able to ride the bot. The one remaining detail is that anyone you want to ride will need the keyword p-AttachPassenger adding to the actor record. Doesn't matter how they get the keyword, but if they don't have it. it won't work. So yeah, it's complicated, even by CK standards. If you want to give it a shot, look at the Vertibird NPCs and Race in the CK and yhe Vertibird nifs. On the Nexus there's Rideable Bots which is one of the things I used as a reference when learning all this. And if you want to see how I did it (and if you don't mind some NSFW content) look at the tattoo frame in Raider Reform School over on LoversLab. And ... good luck!
  17. How does this tie in with things like furniture animation? Do we need the project and behavior file if we're planning on using a Behavior Subgraph record to attach to an existing race/behavior?
  18. Thank you for this post! Only tangentially relevant but over on LL, user Bad Dog has been developing a next gen nif import/export extension for Blender. It can already handle weighted and skinned meshes, and we were going to look at animation ... but that relied on DexesTTP's HKXAnim tool, which never actually saw release. But with information like this as a reference, it makes me wonder about the possibility of generating HKX XML directly. Tempting...
  19. I think the damaged transporter is a separate nif. The cable that breaks loose during the scene might be worth a look though.
  20. Could you give the package a parallel DoNothing branch with a timer, and set the package to finish whenever any branch completes. That way, assuming the follow package is the only valid one on the stack, the actor will follow to the old position for however long the wait is for, then the package will time out, re-evaluate, and recommence. Might save messing around with timer loops and scripts.
  21. You'd probably need to make an animation for the mesh using what they call "shape keys", and then add a Controller to the nif so you could play the animation from Papyrus
  22. That's why I suggested looking at the magazine rack script. The rack uses PlaceAtNode to attach magazines at specific nodes in the mesh. The nodes supply the position and rotation for the mags and by passing abAttach=True, you attach the mags so they move with the rack. You could do something similar with the shelf. The only potential problem being that you may not be able to pass references to PlaceAtNode. If so you'll need to pass the weapon's base form while the original is stored in the shelf's container. The script on the DLC weapon racks has to have solved this problem, so that's where to look for that one.
  23. I don't think it's possible without a specially written F4SE. Sadly, I don't think one's been written for Fo4 yet.
  24. I did exactly this just recently. Actor kneeling on a platform and the platform and actor both being translated. I seem to recall having issues with TranslateToRef, which is why I did it the long way here. function translate_to_ring() sd = servo_noise.play(self) objectreference mark = base.trolley_end_marker ; ; get the angles for shorthand ; float ax = base.getAngleX() float ay = base.getAngleY() float az = base.getAngleZ() ; ; translate the platform and actor together ; TranslateTo(mark.x, mark.y, mark.z, ax, ay, az+180, 35, 0) passenger.TranslateTo(mark.x, mark.y, mark.z, ax, ay, az+180, 35, 0) ; ; wait for the translation to end ; endfunction Event OnTranslationComplete() sound.stopInstance(sd) endevent
×
×
  • Create New...