Jump to content

Recommended Posts

Posted (edited)

I am confused - the freeze occurs in DDCTestZone only, I placed some poles in Solitude - they work. I'll test now if the freeze occurs indoors only.

No, only DDCTestZone. But another crash

 

CALL STACK ([P]robable / [S]tack scan):
	[ 0][P] 0x7FFE49F42EFD        LeashFramework.dll+0002EFD	movsd xmm0, qword ptr [rbx+0xA0] |  L:\skyrim_projects\lf\src\Animation\PullPoseController.cpp:263 void LeashFramework::Animation::PullPoseController::CaptureDeferredPose(LeashFramework::Animation::PullPoseController::State &,RE::NiAVObject &,unsigned __int64 &) [?CaptureDeferredPose@PullPoseController@Animation@LeashFramework@@AEAAXAEAUState@123@AEAVNiAVObject@RE@@AEA_K@Z] | params: a_state: LeashFramework::Animation::PullPoseController::State*, a_object: RE::NiAVObject*, a_index: uint64_t*
	[ 1][P] 0x7FFE49F4235C        LeashFramework.dll+000235C	lea r14, [rdi+0x60] |  L:\skyrim_projects\lf\src\Animation\PullPoseController.cpp:190 void LeashFramework::Animation::PullPoseController::Apply(LeashFramework::Animation::PullPoseController::State &,RE::Actor &) [?Apply@PullPoseController@Animation@LeashFramework@@AEAAXAEAUState@123@AEAVActor@RE@@@Z] | params: a_state: LeashFramework::Animation::PullPoseController::State*, a_actor: RE::Actor*
	[ 2][P] 0x7FFE49F65492        LeashFramework.dll+0025492	mov rdx, [rbx+0x2A8] |  L:\skyrim_projects\lf\src\Leash\LeashManager.cpp:430 void LeashFramework::LeashManager::ApplyDeferredPoses(void) [?ApplyDeferredPoses@LeashManager@LeashFramework@@QEAAXXZ]
	[ 3][P] 0x7FF7497D6881              SkyrimSE.exe+0646881 -> 36564+0x9E1	cmp byte ptr [0x00007FF74C33F6E0], 0x00
	[ 4][P] 0x7FFE468F8EE3            OverlayFix.dll+0008EE3	xor edi, edi |  D:\a\OverlayFix\OverlayFix\src\GameEventHandler.cpp:74 RE::TESObjectREFR * GetUserDataFixed(RE::NiAVObject *) [?GetUserDataFixed@@YAPEAVTESObjectREFR@RE@@PEAVNiAVObject@2@@Z] D:\a\OverlayFix\OverlayFix\src\GameEventHandler.cpp:80 RE::TESObjectREFR * GetUserDataFixed(RE::NiAVObject *) [?GetUserDataFixed@@YAPEAVTESObjectREFR@RE@@PEAVNiAVObject@2@@Z] | params: main: void*, arg2: void*, arg3: void*, arg4: void*
	[ 5][P] 0x7FFE4B33395E              hdtsmp64.dll+004395E	mov edx, 0x10 |  D:\a\hdtSMP64\hdtSMP64\src\Hooks.cpp:213 static void Hooks::MainHooks::Update(RE::Main * const) [?Update@MainHooks@Hooks@@SAXQEAVMain@RE@@@Z] | params: a_this: const RE::Main*
	[ 6][P] 0x7FFE4C6D52B4             DebugMenu.dll+01652B4	call 0x00007FFE4C58C2A1 |  C:\Me\my mods\Skyrim\DebugMod\src\Interface\InputHandler.h:95 static void ScaleformUI::Hook_MainUpdate::Update(RE::Main *,float) [?Update@Hook_MainUpdate@ScaleformUI@@CAXPEAVMain@RE@@M@Z] | params: a_this: RE::Main*, a_2: float
	[ 7][P] 0x7FF7497CEAD5              SkyrimSE.exe+063EAD5 -> 36544+0x165	test bl, bl
	[ 8][P] 0x7FF74A6CBB8E              SkyrimSE.exe+153BB8E -> 109636+0x106	mov ebx, eax
	[ 9][P] 0x7FFF4E45E957              KERNEL32.DLL+002E957
	[10][P] 0x7FFF4F46AD6C                 ntdll.dll+00AAD6C
	[11][S] 0x7FFF4C5FC11F            KERNELBASE.dll+001C11F
	[12][S] 0x7FFF4C62186D            KERNELBASE.dll+004186D
	[13][S] 0x7FFE31BFA9F3 gameoverlayrenderer64.dll+00AA9F3
	[14][S] 0x7FFE31C0B96D gameoverlayrenderer64.dll+00BB96D
	[15][S] 0x7FFE4C750BB8             DebugMenu.dll+01E0BB8	mov rax, rbx |  C:\Program Files\Microsoft Visual Studio\18\Community\VC\Tools\MSVC\14.51.36231\include\functional:1283 std::function<void (void)>::function<void (void)>(std::function<void (void)> &&) [??0?$function@$$A6AXXZ@std@@QEAA@$$QEAV01@@Z] | params: _Right: std::function<void __cdecl(void)>*
	[16][S] 0x7FFE31BF8D3B gameoverlayrenderer64.dll+00A8D3B
	[17][S] 0x7FFF4E0C36B9                USER32.dll+00136B9
	[18][S] 0x7FFE31BEB18A gameoverlayrenderer64.dll+009B18A
	[19][S] 0x7FFF4CAA432B              ucrtbase.dll+008432B
	[20][S] 0x7FFF4C6EF350            KERNELBASE.dll+010F350

 

Looks like a problem with Overlay Fixes: https://www.nexusmods.com/skyrimspecialedition/mods/138586

Unfortunately the overlay fixes are important for modders who works with overlays 😞

Edited by zaira
Posted
1 hour ago, zaira said:

With help of @audhol - unfortunately the default chain is not being attached at the last link - so you see some weird links hanging around...
Released in LoreFriendlyToys for early adopter modders.

wall-leash.jpg

Yea, found out why when I was trying to make the backwards connected leash. 

There is no bone at the end, Leash1_1_12 is actually right where the leash crosses the bottom of the ring in your screenshot.

The backwards leash I added a 13th bone to the very end of the leash to avoid just this issue when the end was connected to a neck.

Posted (edited)
50 minutes ago, lordbuttcheese said:

Yea, found out why when I was trying to make the backwards connected leash. 

There is no bone at the end, Leash1_1_12 is actually right where the leash crosses the bottom of the ring in your screenshot.

The backwards leash I added a 13th bone to the very end of the leash to avoid just this issue when the end was connected to a neck.

 

 

I'm guessing from looking at it that the chain part after the last bone 1_1_12 is meant to be hidden by the hand of the leasher, the anchor point iiuc is the origin of that bone attached to the relevant bone of the npc or in the case of the ring, the centre of the collision mesh.

 

Screenshot2026-08-09214226.thumb.png.090913e5af594bac3467eaa21c0c300e.png

 

 

Maybe @zaira we could modify the coordinates of the collision relevant to the displayed mesh of the attach point  to remove the overlap?

 

Like @lordbuttcheese says adding a 13th bone at the tip of the chain could also work but it would need to be declared in the .xml and whatever voodoo is contained in the skse plugin would need to be altered too right for the anchor to be 1_1_13 instead of 1_1_12?

 

 

 

 

 

 

Edit,

 

Upon reflection, simply deleting the links after the location of 1_1_12 as an alt .nif would serve the same purpose.

Edited by audhol
Posted
2 hours ago, zaira said:

When you sent "Sent LeashFramework_OnActorPulled for 00000014 at distance 120.7" PlayerRef freezes.

I have to call Game.EnablePlayerControls() to continue movement

 

Now crashes as well:

CALL STACK ([P]robable / [S]tack scan):
	[ 0][P] 0x7FFE51D82EFD        LeashFramework.dll+0002EFD	movsd xmm0, qword ptr [rbx+0xA0] |  L:\skyrim_projects\lf\src\Animation\PullPoseController.cpp:263 void LeashFramework::Animation::PullPoseController::CaptureDeferredPose(LeashFramework::Animation::PullPoseController::State &,RE::NiAVObject &,unsigned __int64 &) [?CaptureDeferredPose@PullPoseController@Animation@LeashFramework@@AEAAXAEAUState@123@AEAVNiAVObject@RE@@AEA_K@Z] | params: a_state: LeashFramework::Animation::PullPoseController::State*, a_object: RE::NiAVObject*, a_index: uint64_t*
	[ 1][P] 0x7FFE51D8235C        LeashFramework.dll+000235C	lea r14, [rdi+0x60] |  L:\skyrim_projects\lf\src\Animation\PullPoseController.cpp:190 void LeashFramework::Animation::PullPoseController::Apply(LeashFramework::Animation::PullPoseController::State &,RE::Actor &) [?Apply@PullPoseController@Animation@LeashFramework@@AEAAXAEAUState@123@AEAVActor@RE@@@Z] | params: a_state: LeashFramework::Animation::PullPoseController::State*, a_actor: RE::Actor*
	[ 2][P] 0x7FFE51DA5492        LeashFramework.dll+0025492	mov rdx, [rbx+0x2A8] |  L:\skyrim_projects\lf\src\Leash\LeashManager.cpp:430 void LeashFramework::LeashManager::ApplyDeferredPoses(void) [?ApplyDeferredPoses@LeashManager@LeashFramework@@QEAAXXZ]
	[ 3][P] 0x7FF7497D6881              SkyrimSE.exe+0646881 -> 36564+0x9E1	cmp byte ptr [0x00007FF74C33F6E0], 0x00
	[ 4][P] 0x7FFE4E518EE3            OverlayFix.dll+0008EE3	xor edi, edi |  D:\a\OverlayFix\OverlayFix\src\GameEventHandler.cpp:74 RE::TESObjectREFR * GetUserDataFixed(RE::NiAVObject *) [?GetUserDataFixed@@YAPEAVTESObjectREFR@RE@@PEAVNiAVObject@2@@Z] D:\a\OverlayFix\OverlayFix\src\GameEventHandler.cpp:80 RE::TESObjectREFR * GetUserDataFixed(RE::NiAVObject *) [?GetUserDataFixed@@YAPEAVTESObjectREFR@RE@@PEAVNiAVObject@2@@Z] | params: main: void*, arg2: void*, arg3: void*, arg4: void*
	[ 5][P] 0x7FFE5317395E              hdtsmp64.dll+004395E	mov edx, 0x10 |  D:\a\hdtSMP64\hdtSMP64\src\Hooks.cpp:213 static void Hooks::MainHooks::Update(RE::Main * const) [?Update@MainHooks@Hooks@@SAXQEAVMain@RE@@@Z] | params: a_this: const RE::Main*
	[ 6][P] 0x7FFE544E52B4             DebugMenu.dll+01652B4	call 0x00007FFE5439C2A1 |  C:\Me\my mods\Skyrim\DebugMod\src\Interface\InputHandler.h:95 static void ScaleformUI::Hook_MainUpdate::Update(RE::Main *,float) [?Update@Hook_MainUpdate@ScaleformUI@@CAXPEAVMain@RE@@M@Z] | params: a_this: RE::Main*, a_2: float
	[ 7][P] 0x7FF7497CEAD5              SkyrimSE.exe+063EAD5 -> 36544+0x165	test bl, bl
	[ 8][P] 0x7FF74A6CBB8E              SkyrimSE.exe+153BB8E -> 109636+0x106	mov ebx, eax
	[ 9][P] 0x7FFF4E45E957              KERNEL32.DLL+002E957

 

And this isn't true

 

Both pull events use the leashed Actor as sender
RegisterForModEvent("LeashFramework_OnActorPulled","HandleActorPulled")


Event HandleActorPulled(string eventName, string strArg, float numArg, Form sender)


actually the sender is an object reference and not an actor

 

 

 

Can you show a bigger crashlog? The registers part is one of the most important

Posted (edited)
40 minutes ago, audhol said:

would serve the same purpose

I can control which leash to use, I can do some raycast magic to spawn things where I want them.

But I am bad in editing nifs and even more bad in editing smp XML files. A cobbler should stick to his last

Edited by zaira
Posted (edited)
7 hours ago, zaira said:

I can control which leash to use, I can do some raycast magic to spawn things where I want them.

But I am bad in editing nifs and even more bad in editing smp XML files. A cobbler should stick to his last

Here you go. Edited the chain_leash in two different ways.
One has an extra bone at the end of the leash keeping it the same length as before, making it 13 bones.
The other I just lopped off the last few links to make the 12th bone right above the last link.
The shorter one is definitely safe with the other leashes as I didnt touch the xml.
The longer one is probably fine. But if you have issues with it and still want to use it, the nif needs renaming in the esm and the xml entry for "NiStringExtraData" updated for a changed xml name.

I was also thinking, These leashes have been sized like this to only just drag on the ground, there's potentially more leeway right?
If anyone knows what the limit is, I'm willing to go back in and try to make an extra-extra long leash to make the more sane lengths of 400-600 not stretch. 
I'm seeing a limit of 80 bones and there's maybe only ~14 being used...


 

 

EDIT: Oh whoops, just realized these kept my edits of moving them to the amulet slot. Will fix them briefly.
Fixed, reverted them back to the original slot 45. Should work with a normal drop in replacement now.

 

extra bone.zip shorter.zip

Edited by lordbuttcheese
Posted
10 hours ago, DonQuiWho said:

 

If you mean that the hand devices disappear when leashed, have a look at the DD Device Hider settings.  I found that the first one on the MCM 1st Device Hider Menu could be changed so that both would be visible

 

DQW

No I meant the leash disappear when the dd hand restraint is equipped, but this also doesn't happen for zaz restraints 

Also are any of the dd collar comparable with the leashes? 

Posted (edited)

Answering years of degenerate prayers in one glorious drop, the legendary asdt123123 graces us with another must-have. I will never have enough time to mod FO4 again lol.


Anyway, I wanted to make a small contribution to this new milestone, so find below an OAR version of the "Pet Ring" by trasberny that forces the wearing actor to crawl. To get the ring just search for "Pet Ring"/"PetRing.esp" using a flavor of AddItemMenu or get a mod that allows EditorID in console and "player.additem c_petring 1". Check -Notes- below for more details. Naturally, https://www.nexusmods.com/skyrimspecialedition/mods/92109 is a requirement.
 

-Rambling-

Spoiler

I've used many iterations of crawling animations that replace the crouching when sneaking. It always bothered me that followers would "sneak" with the PC when I just wanted my character to crawl, not sneak. As such, I always craved for a way to make followers to stop mirroring the sneaking state; but kept postponing it. Leash Framework has reignited that will. I did consider a ring/keyword that changes walk/run animations before, but I was stubborn and AI did encourage me to try finding a native solution in CK by duplicating and changing the Follower's vanilla package and creating a quest/dialogue to alternate between no-sneaking and vanilla packages.. Luckily I've reached MayDayCray comment in this thread, decided to not overcomplicate things and to make do with what I already know.


-Notes-

Spoiler

I've remade the original "Pet Ring" from scratch, leveraging the "CrawlingAccessory" keyword. Unfortunately, the original DAR was not working for me, probably due to the low priority. Using Gunslicer's sneaking animations as base, I've copied and made them the animations for walking/running too. Sneaking/walking/running will change -only- when the ring is equipped. They look weird at baseline movement speed though, so the ring also comes with a movement speed debuff when the actor is not sprinting/sneaking nor has weapons unsheathed. Only works for females. Leash Framework is not actually a requirement but is a perfect theme match.
 

Additionally, in the original "Pet Ring" thread, Jack005 had suggested a different animation for the idle. This ships with 100% crawling but, if you prefer the submissive paws idle, just work with the backups "notsubmissive-mt_idle.hkx.mohidden" and "submissive-mt_idle.hkx.mohidden" in

meshes\actors\character\animations\OpenAnimationReplacer\PetRing\Crawling\female

You'd need to copy and rename either to "mt_idle.hkx" and then replace the existing hkx there.
 

You could delete the "36 - Ring" flag from both the ARMA and ARMO records in xedit, so you get the debuff/animations without using a slot. To be even more minimalist, you could just add the keyword "CrawlingAccessory" with https://www.nexusmods.com/skyrimspecialedition/mods/55728 to any armor piece and the animations should work but their timing might be wacky due to the not-reduced movement speed.
 

I had planned to use Khajiit Ring from https://www.nexusmods.com/skyrimspecialedition/mods/166460 or Ring of Hircine from https://www.nexusmods.com/skyrimspecialedition/mods/102226 for the meshes/textures. Just pointing to the assets, mind you, not actually shipping them here. But I didn't want to step on any permission toes, so I went with vanilla Ring of Hircine instead. If you know your way around xedit, I do recommend downloading either of them and changing how Pet Ring looks.


-Credits-

Spoiler

trasberny for the original idea https://www.loverslab.com/topic/153174-pet-ring-crawl-on-all-fours/
MayDayCray for linking the original, which convinced me to not reinvent the wheel https://www.loverslab.com/topic/268950-leash-framework/page/5/#findComment-7357571
Jack005 for the submissive idle suggestion https://www.loverslab.com/topic/153174-pet-ring-crawl-on-all-fours/#findComment-7154419


Gunslicer. As mentioned before, the animations are made by the legendary Gunslicer. They are fine about sharing their assets if they are credited. I've used all of "Sneak Animation 2" from https://www.nexusmods.com/skyrimspecialedition/mods/61159 and "GS170" from https://www.patreon.com/Gunslicer/posts/pose-mod-23-02-151456501 as the submissive idle alternative.


contentcat. Finally, I've only noticed later, but it seems "Sneak Animation 2" was missing some "turn" animations, which I've found in https://www.nexusmods.com/skyrimspecialedition/mods/123949 . It's an amazing AIO for most Gunslicer animations, I can't recommend it enough.

 

 

PetRing OAR.7z

Edited by Heirloom
small condition fix on esp
Posted (edited)
5 hours ago, lordbuttcheese said:

Looooooong Loooooong Leeeeeeeeeeeaaash!

 

That I gonna use for a riding leash master 🙂
May I put your leashes into LoreFriendlyToys for deployment?

I would also try to split collar and leash and create a real DD NG collar - so there is no need to swap the collar when changing the leash.

I am too dumb for that - loaded into blender and simply don't know what I can delete and what not 😞

Edited by zaira
Posted
7 hours ago, natybs said:

No I meant the leash disappear when the dd hand restraint is equipped, but this also doesn't happen for zaz restraints 

Also are any of the dd collar comparable with the leashes? 

 

Sorry.  Should have made it clear that it was both ways .....

 

Add Cuffs etc: Leash disappeared

Add Leash: Cuffs disappeared

 

..... with both still showing in Equipment

 

Changing DD Hider settings fixed this for me 

 

DQW

Posted (edited)
7 hours ago, zaira said:

That I gonna use for a riding leash master 🙂
May I put your leashes into LoreFriendlyToys for deployment?

I would also try to split collar and leash and create a real DD NG collar - so there is no need to swap the collar when changing the leash.

I am too dumb for that - loaded into blender and simply don't know what I can delete and what not 😞

Im still using @krzp's textures and just editing them so would be up to them. If crediting enough then go for it.


As for turning the collars into dd collars, I could do that. For the slot the leashes take up, is there one that you would want? I think the amulet slot would work fine as DD devices dont usually use it. But it also often gets hidden by armor.

The leashes may also need a generic restraint package as the framework's non-teleport movement restrictions don't seem to work when the leash isn't equipped and could be used as an escape method. 

When the framework is more mature, leash-specific locking scripts could be cool "This leash is made out of rope, it can possibly be cut with something sharp. The knot tying it to you is pretty tight but is a simple, you may be able to untie it. The knot is too tight, struggling out of it will be impossible."

I'll have to make a new esl that uses DD NG (or zaz) as a master for the locking scripts, or did you just want the files and stuff to add them to something else?

Edited by lordbuttcheese
Posted

I need the assets only

20 minutes ago, lordbuttcheese said:

Im still using @krzp's textures and just editing them so would be up to them. If crediting enough then go for it.


As for turning the collars into dd collars, I could do that. For the slot the leashes take up, is there one that you would want? I think the amulet slot would work fine as DD devices dont usually use it. But it also often gets hidden by armor.

The leashes may also need a generic restraint package as the framework's non-teleport movement restrictions don't seem to work when the leash isn't equipped and could be used as an escape method. 

When the framework is more mature, leash-specific locking scripts could be cool "This leash is made out of rope, it can possibly be cut with something sharp. The knot tying it to you is pretty tight but is a simple, you may be able to untie it. The knot is too tight, struggling out of it will be impossible."

I'll have to make a new esl that uses DD NG (or zaz) as a master for the locking scripts, or did you just want the files and stuff to add them to something else?

I need the assets only

 

Posted
1 hour ago, lordbuttcheese said:

As for turning the collars into dd collars, I could do that. For the slot the leashes take up, is there one that you would want? I think the amulet slot would work fine as DD devices dont usually use it. But it also often gets hidden by armor.
 

 

FWIW, @TrollAutokill 's Diary of Mine 8.5.1b currently uses the 'Amulet' slot for his 'Steel Slave Collar of Leashing' and the latest DOM version has integrated Leash Framework to use that.  It's not a DD collar, though.

 

Being very very non techie, I don't know if that's help or hindrance but, FWIW, here's what it looks like in the Console.

 

Hope that's of interest./help/whatever

 

DQW

 

     SkyrimSE2026-08-1016-35-58-54.jpg.fa580a01d450ade64dc751a09433b7a3.jpg

 

SkyrimSE2026-08-1016-37-07-00.jpg.8e801f9827d21351d8a1a223605db8dc.jpg

 

SkyrimSE2026-08-1016-38-00-69.jpg.db0e37bfcfea70c39a5d98b9932f7384.jpg

 

SkyrimSE2026-08-1016-38-07-58.jpg.3287e83abc06d1a0b977ab8ccc1a741e.jpg

Posted

I'll put the leash onto amulet slot. More important is the collar, as it would collide with DD when choosing a wrong slot. If we see that amulet is bad we can adapt easily...

Posted (edited)

Or no slot at all for the leash as it has limited connection to body anyway when collar is split 

Edited by zaira
Posted

1.1.0 preview:

 

This adds the ability for the leasher to "own" the leash. In other words, have it equipped. So 's leash will properly work now. Added it in the API too:

holderBone: Exact node name on the holder. This attachment does not alter the holder's hand pose.
offsetX, offsetY, offsetZ: Optional local-space offset from holderBone. The offset follows the bone's
translation, rotation, and scale, but does not add an attachment rotation.
All other arguments and replacement behavior match ApplyLeash.

Returns true when the arguments are valid and the leash is accepted.
/;
Bool Function ApplyLeashToBone(Actor holder, Actor leashed, String holderBone, String parentBone, String leashBoneMatch, Float minLength, Float maxLength, Bool persistent, Float offsetX = 0.0, Float offsetY = 0.0, Float offsetZ = 0.0) Global Native

;/
Connects a leash mesh equipped by the holder to an exact bone on the leashed actor.

The first ordered leash bone remains in its neutral animated pose on the holder. The last ordered leash
bone attaches to leashedAttachmentBone.

leashParentBone: Exact node name to find on the holder before searching its descendants for leash bones.
leashedAttachmentBone: Exact node name on the leashed actor.
attachmentOffsetX, attachmentOffsetY, attachmentOffsetZ: Optional local-space offset from
leashedAttachmentBone. The offset follows the bone's translation, rotation, and scale, but does not add
an attachment rotation.
closedHand: Applies the closed-fist pose to the holder. 1 closes the right hand, 2 closes the left hand,
and every other value leaves both hands unchanged.
All other arguments and replacement behavior match ApplyLeash.

Returns true when the arguments are valid and the leash is accepted.
/;
Bool Function ApplyHolderOwnedLeashToBone(Actor holder, Actor leashed, String leashedAttachmentBone, String leashParentBone, String leashBoneMatch, Float minLength, Float maxLength, Bool persistent, Float attachmentOffsetX = 0.0, Float attachmentOffsetY = 0.0, Float attachmentOffsetZ = 0.0, Int closedHand = 0) Global Native

 

The menu is a bit convoluted now, so I'll need to sort that out. I need to also improve body collisions too so they don't vibrate much, likely just need to persist the collision contact(s) through a larger margin, should be simple. 

 

 

LeashFramework 1.1.1.7z

Posted
Just now, zaira said:

Or no slot at all for the leash as it has limited connection to body anyway when collar is split 

So I tried it first with no slot, yet nothing happened. DD works that way for the inventory items, but equipping those runs a script that equips the actual item which does have a slot.
Additionally I made a mistake with leash_13bones and didn't swap the nif's partition back to amulet to match my test esl listing, this resulted in the leash just falling through the floor with no collision on load. Which means that if there's a mismatch the physics fail and I do not know of a way to not select a partition for the mesh (would probably still break physics).

Anyway here are the updated nifs with the collar separated from the leash.
Collar is slot 45 (conflict with other DD collars).
Leashes are slot 35, separated into shorter, medium, and long.

screenshots show the differences between each.

 

The leashes are lined up with the provided collar (neck_chain from the framework) but could theoretically line up with any collar, would just need to use outfit studio (though its cumbersome)

I also included my testing esl if anyone else wanted to fiddle with them.
Items are named: 
Leashing Collar
Leash Shorter
Leash Medium
Leash Long

I did not make them DD collars, I have some more reading to do before I'm successful.

20260810023655_1.jpg

20260810023714_1.jpg

20260810023733_1.jpg

collar and leashes.zip

Posted
Just now, asdt123123 said:

1.1.0 preview:

 

This adds the ability for the leasher to "own" the leash. In other words, have it equipped. So 's leash will properly work now. Added it in the API too:

holderBone: Exact node name on the holder. This attachment does not alter the holder's hand pose.
offsetX, offsetY, offsetZ: Optional local-space offset from holderBone. The offset follows the bone's
translation, rotation, and scale, but does not add an attachment rotation.
All other arguments and replacement behavior match ApplyLeash.

Returns true when the arguments are valid and the leash is accepted.
/;
Bool Function ApplyLeashToBone(Actor holder, Actor leashed, String holderBone, String parentBone, String leashBoneMatch, Float minLength, Float maxLength, Bool persistent, Float offsetX = 0.0, Float offsetY = 0.0, Float offsetZ = 0.0) Global Native

;/
Connects a leash mesh equipped by the holder to an exact bone on the leashed actor.

The first ordered leash bone remains in its neutral animated pose on the holder. The last ordered leash
bone attaches to leashedAttachmentBone.

leashParentBone: Exact node name to find on the holder before searching its descendants for leash bones.
leashedAttachmentBone: Exact node name on the leashed actor.
attachmentOffsetX, attachmentOffsetY, attachmentOffsetZ: Optional local-space offset from
leashedAttachmentBone. The offset follows the bone's translation, rotation, and scale, but does not add
an attachment rotation.
closedHand: Applies the closed-fist pose to the holder. 1 closes the right hand, 2 closes the left hand,
and every other value leaves both hands unchanged.
All other arguments and replacement behavior match ApplyLeash.

Returns true when the arguments are valid and the leash is accepted.
/;
Bool Function ApplyHolderOwnedLeashToBone(Actor holder, Actor leashed, String leashedAttachmentBone, String leashParentBone, String leashBoneMatch, Float minLength, Float maxLength, Bool persistent, Float attachmentOffsetX = 0.0, Float attachmentOffsetY = 0.0, Float attachmentOffsetZ = 0.0, Int closedHand = 0) Global Native

 

The menu is a bit convoluted now, so I'll need to sort that out. I need to also improve body collisions too so they don't vibrate much, likely just need to persist the collision contact(s) through a larger margin, should be simple. 

 

 

LeashFramework 1.1.1.7z 23.01 MB · 1 download


Awesome!

From my initial testing, things work as expected booyah. The ability to offset is really nice.
Found myself wanting a skeleton preview for both actors in the debug, but I just kept switching the leashed and doing that.

Some notes:
The screen culling doesn't seem to affect the normal leashes when the player is leashed. I guess that's cause the player owns the leash and isn't culled. Yet the other direction the leasher owns the leash and would be a victim of culling.
So it seems due to screen culling:
Player in front + leasher w/ hand leash -> no culling.
Player in front + leasher w/ normal leash -> screen culling
Player in front + leashed w/ hand leash -> screen culling
Player in front + leashed w/ normal leash -> no culling.
That makes sense, about what I would expect.

You mention at the start of the thread that screen culling is 'fixable'. What would that entail? Is there a way to exclude objects from culling?
I think a toggle in the settings could be cool. 

great work.
 

Posted
1 hour ago, lordbuttcheese said:

Some notes:
The screen culling doesn't seem to affect the normal leashes when the player is leashed. I guess that's cause the player owns the leash and isn't culled. Yet the other direction the leasher owns the leash and would be a victim of culling.

Screen culling is an easy fix, just not 100% sure the side effects so didn't bother. You can use this build, it'll correct screen culling

LeashFramework 1.1.1.7z

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...