@quenty/ragdoll 15.22.1 → 15.22.3-canary.544.be5badf.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/package.json +32 -32
- package/src/Shared/Rigging/RagdollMotorUtils.lua +91 -107
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [15.22.3-canary.544.be5badf.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/ragdoll@15.22.2...@quenty/ragdoll@15.22.3-canary.544.be5badf.0) (2025-03-28)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @quenty/ragdoll
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [15.22.2](https://github.com/Quenty/NevermoreEngine/compare/@quenty/ragdoll@15.22.1...@quenty/ragdoll@15.22.2) (2025-03-21)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* Fix ragdolls showing issues on other people's characters ([#523](https://github.com/Quenty/NevermoreEngine/issues/523)) ([df18a8c](https://github.com/Quenty/NevermoreEngine/commit/df18a8cc97b0845f5dd620b66345badcbb0a6596))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
## [15.22.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/ragdoll@15.22.0...@quenty/ragdoll@15.22.1) (2025-03-21)
|
|
7
26
|
|
|
8
27
|
**Note:** Version bump only for package @quenty/ragdoll
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/ragdoll",
|
|
3
|
-
"version": "15.22.
|
|
3
|
+
"version": "15.22.3-canary.544.be5badf.0",
|
|
4
4
|
"description": "Quenty's Ragdoll system for Roblox - Floppy fun ragdolls",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,39 +25,39 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/adorneedata": "
|
|
29
|
-
"@quenty/attributeutils": "
|
|
30
|
-
"@quenty/baseobject": "
|
|
31
|
-
"@quenty/binder": "
|
|
32
|
-
"@quenty/brio": "
|
|
33
|
-
"@quenty/camera": "
|
|
34
|
-
"@quenty/cancellabledelay": "
|
|
35
|
-
"@quenty/characterutils": "
|
|
36
|
-
"@quenty/draw": "
|
|
37
|
-
"@quenty/enumutils": "
|
|
38
|
-
"@quenty/hapticfeedbackutils": "
|
|
39
|
-
"@quenty/instanceutils": "
|
|
40
|
-
"@quenty/loader": "
|
|
41
|
-
"@quenty/maid": "
|
|
42
|
-
"@quenty/motor6d": "
|
|
43
|
-
"@quenty/physicsutils": "
|
|
44
|
-
"@quenty/playerhumanoidbinder": "
|
|
45
|
-
"@quenty/promise": "
|
|
46
|
-
"@quenty/qframe": "
|
|
47
|
-
"@quenty/r15utils": "
|
|
48
|
-
"@quenty/remoting": "
|
|
49
|
-
"@quenty/rx": "
|
|
50
|
-
"@quenty/rxbinderutils": "
|
|
51
|
-
"@quenty/rxsignal": "
|
|
52
|
-
"@quenty/spring": "
|
|
53
|
-
"@quenty/steputils": "
|
|
54
|
-
"@quenty/table": "
|
|
55
|
-
"@quenty/tie": "
|
|
56
|
-
"@quenty/valuebaseutils": "
|
|
57
|
-
"@quenty/valueobject": "
|
|
28
|
+
"@quenty/adorneedata": "7.17.2-canary.544.be5badf.0",
|
|
29
|
+
"@quenty/attributeutils": "14.16.2-canary.544.be5badf.0",
|
|
30
|
+
"@quenty/baseobject": "10.8.0",
|
|
31
|
+
"@quenty/binder": "14.18.2-canary.544.be5badf.0",
|
|
32
|
+
"@quenty/brio": "14.16.2-canary.544.be5badf.0",
|
|
33
|
+
"@quenty/camera": "14.19.2-canary.544.be5badf.0",
|
|
34
|
+
"@quenty/cancellabledelay": "3.5.0",
|
|
35
|
+
"@quenty/characterutils": "12.17.2-canary.544.be5badf.0",
|
|
36
|
+
"@quenty/draw": "7.8.1",
|
|
37
|
+
"@quenty/enumutils": "3.4.0",
|
|
38
|
+
"@quenty/hapticfeedbackutils": "3.2.0",
|
|
39
|
+
"@quenty/instanceutils": "13.16.2-canary.544.be5badf.0",
|
|
40
|
+
"@quenty/loader": "10.8.0",
|
|
41
|
+
"@quenty/maid": "3.4.0",
|
|
42
|
+
"@quenty/motor6d": "7.19.2-canary.544.be5badf.0",
|
|
43
|
+
"@quenty/physicsutils": "8.16.2-canary.544.be5badf.0",
|
|
44
|
+
"@quenty/playerhumanoidbinder": "14.18.2-canary.544.be5badf.0",
|
|
45
|
+
"@quenty/promise": "10.10.1",
|
|
46
|
+
"@quenty/qframe": "10.10.1",
|
|
47
|
+
"@quenty/r15utils": "13.16.2-canary.544.be5badf.0",
|
|
48
|
+
"@quenty/remoting": "12.17.2-canary.544.be5badf.0",
|
|
49
|
+
"@quenty/rx": "13.16.2-canary.544.be5badf.0",
|
|
50
|
+
"@quenty/rxbinderutils": "14.18.2-canary.544.be5badf.0",
|
|
51
|
+
"@quenty/rxsignal": "7.16.2-canary.544.be5badf.0",
|
|
52
|
+
"@quenty/spring": "10.8.1",
|
|
53
|
+
"@quenty/steputils": "3.5.3",
|
|
54
|
+
"@quenty/table": "3.7.1",
|
|
55
|
+
"@quenty/tie": "10.19.2-canary.544.be5badf.0",
|
|
56
|
+
"@quenty/valuebaseutils": "13.16.2-canary.544.be5badf.0",
|
|
57
|
+
"@quenty/valueobject": "13.16.2-canary.544.be5badf.0"
|
|
58
58
|
},
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "be5badf29efa649b387206e1b44d9939cdffe7dc"
|
|
63
63
|
}
|
|
@@ -26,94 +26,94 @@ local RagdollMotorUtils = {}
|
|
|
26
26
|
|
|
27
27
|
local R6_MOTORS = {
|
|
28
28
|
{
|
|
29
|
-
partName = "Torso"
|
|
30
|
-
motorName = "Root"
|
|
31
|
-
isRootJoint = true
|
|
32
|
-
}
|
|
29
|
+
partName = "Torso",
|
|
30
|
+
motorName = "Root",
|
|
31
|
+
isRootJoint = true,
|
|
32
|
+
},
|
|
33
33
|
{
|
|
34
|
-
partName = "Torso"
|
|
35
|
-
motorName = "Neck"
|
|
36
|
-
}
|
|
34
|
+
partName = "Torso",
|
|
35
|
+
motorName = "Neck",
|
|
36
|
+
},
|
|
37
37
|
{
|
|
38
|
-
partName = "Torso"
|
|
39
|
-
motorName = "Left Shoulder"
|
|
40
|
-
}
|
|
38
|
+
partName = "Torso",
|
|
39
|
+
motorName = "Left Shoulder",
|
|
40
|
+
},
|
|
41
41
|
{
|
|
42
|
-
partName = "Torso"
|
|
43
|
-
motorName = "Right Shoulder"
|
|
44
|
-
}
|
|
42
|
+
partName = "Torso",
|
|
43
|
+
motorName = "Right Shoulder",
|
|
44
|
+
},
|
|
45
45
|
{
|
|
46
|
-
partName = "Torso"
|
|
47
|
-
motorName = "Left Hip"
|
|
48
|
-
}
|
|
46
|
+
partName = "Torso",
|
|
47
|
+
motorName = "Left Hip",
|
|
48
|
+
},
|
|
49
49
|
{
|
|
50
|
-
partName = "Torso"
|
|
51
|
-
motorName = "Right Hip"
|
|
52
|
-
}
|
|
50
|
+
partName = "Torso",
|
|
51
|
+
motorName = "Right Hip",
|
|
52
|
+
},
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
local R15_MOTORS = {
|
|
56
56
|
{
|
|
57
|
-
partName = "LowerTorso"
|
|
58
|
-
motorName = "Root"
|
|
59
|
-
isRootJoint = true
|
|
60
|
-
}
|
|
57
|
+
partName = "LowerTorso",
|
|
58
|
+
motorName = "Root",
|
|
59
|
+
isRootJoint = true,
|
|
60
|
+
},
|
|
61
61
|
{
|
|
62
|
-
partName = "UpperTorso"
|
|
63
|
-
motorName = "Waist"
|
|
64
|
-
}
|
|
62
|
+
partName = "UpperTorso",
|
|
63
|
+
motorName = "Waist",
|
|
64
|
+
},
|
|
65
65
|
{
|
|
66
|
-
partName = "Head"
|
|
67
|
-
motorName = "Neck"
|
|
68
|
-
}
|
|
66
|
+
partName = "Head",
|
|
67
|
+
motorName = "Neck",
|
|
68
|
+
},
|
|
69
69
|
{
|
|
70
|
-
partName = "LeftUpperArm"
|
|
71
|
-
motorName = "LeftShoulder"
|
|
72
|
-
}
|
|
70
|
+
partName = "LeftUpperArm",
|
|
71
|
+
motorName = "LeftShoulder",
|
|
72
|
+
},
|
|
73
73
|
{
|
|
74
|
-
partName = "LeftLowerArm"
|
|
75
|
-
motorName = "LeftElbow"
|
|
76
|
-
}
|
|
74
|
+
partName = "LeftLowerArm",
|
|
75
|
+
motorName = "LeftElbow",
|
|
76
|
+
},
|
|
77
77
|
{
|
|
78
|
-
partName = "LeftHand"
|
|
79
|
-
motorName = "LeftWrist"
|
|
80
|
-
}
|
|
78
|
+
partName = "LeftHand",
|
|
79
|
+
motorName = "LeftWrist",
|
|
80
|
+
},
|
|
81
81
|
{
|
|
82
|
-
partName = "RightUpperArm"
|
|
83
|
-
motorName = "RightShoulder"
|
|
84
|
-
}
|
|
82
|
+
partName = "RightUpperArm",
|
|
83
|
+
motorName = "RightShoulder",
|
|
84
|
+
},
|
|
85
85
|
{
|
|
86
|
-
partName = "RightLowerArm"
|
|
87
|
-
motorName = "RightElbow"
|
|
88
|
-
}
|
|
86
|
+
partName = "RightLowerArm",
|
|
87
|
+
motorName = "RightElbow",
|
|
88
|
+
},
|
|
89
89
|
{
|
|
90
|
-
partName = "RightHand"
|
|
91
|
-
motorName = "RightWrist"
|
|
92
|
-
}
|
|
90
|
+
partName = "RightHand",
|
|
91
|
+
motorName = "RightWrist",
|
|
92
|
+
},
|
|
93
93
|
{
|
|
94
|
-
partName = "LeftUpperLeg"
|
|
95
|
-
motorName = "LeftHip"
|
|
96
|
-
}
|
|
94
|
+
partName = "LeftUpperLeg",
|
|
95
|
+
motorName = "LeftHip",
|
|
96
|
+
},
|
|
97
97
|
{
|
|
98
|
-
partName = "LeftLowerLeg"
|
|
99
|
-
motorName = "LeftKnee"
|
|
100
|
-
}
|
|
98
|
+
partName = "LeftLowerLeg",
|
|
99
|
+
motorName = "LeftKnee",
|
|
100
|
+
},
|
|
101
101
|
{
|
|
102
|
-
partName = "LeftFoot"
|
|
103
|
-
motorName = "LeftAnkle"
|
|
104
|
-
}
|
|
102
|
+
partName = "LeftFoot",
|
|
103
|
+
motorName = "LeftAnkle",
|
|
104
|
+
},
|
|
105
105
|
{
|
|
106
|
-
partName = "RightUpperLeg"
|
|
107
|
-
motorName = "RightHip"
|
|
108
|
-
}
|
|
106
|
+
partName = "RightUpperLeg",
|
|
107
|
+
motorName = "RightHip",
|
|
108
|
+
},
|
|
109
109
|
{
|
|
110
|
-
partName = "RightLowerLeg"
|
|
111
|
-
motorName = "RightKnee"
|
|
112
|
-
}
|
|
110
|
+
partName = "RightLowerLeg",
|
|
111
|
+
motorName = "RightKnee",
|
|
112
|
+
},
|
|
113
113
|
{
|
|
114
|
-
partName = "RightFoot"
|
|
115
|
-
motorName = "RightAnkle"
|
|
116
|
-
}
|
|
114
|
+
partName = "RightFoot",
|
|
115
|
+
motorName = "RightAnkle",
|
|
116
|
+
},
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
local ROOT_JOINT_CACHE = {}
|
|
@@ -193,19 +193,12 @@ function RagdollMotorUtils.setupRagdollRootPartMotor(motor, part0, part1)
|
|
|
193
193
|
|
|
194
194
|
-- Inserted C1/C0 here
|
|
195
195
|
weldMaid:GiveTask(Rx.combineLatest({
|
|
196
|
-
C0 = RxInstanceUtils.observeProperty(motor, "C0")
|
|
197
|
-
Transform = RxInstanceUtils.observeProperty(transformValue, "Value")
|
|
196
|
+
C0 = RxInstanceUtils.observeProperty(motor, "C0"),
|
|
197
|
+
Transform = RxInstanceUtils.observeProperty(transformValue, "Value"),
|
|
198
198
|
}):Subscribe(function(innerState)
|
|
199
199
|
weld.C0 = innerState.C0 * innerState.Transform
|
|
200
200
|
end))
|
|
201
201
|
|
|
202
|
-
if weld:IsA("Motor6D") then
|
|
203
|
-
-- Suppress animations on any weld connection
|
|
204
|
-
weldMaid:GiveTask(RunService.Stepped:Connect(function()
|
|
205
|
-
weld.Transform = CFrame.new()
|
|
206
|
-
end))
|
|
207
|
-
end
|
|
208
|
-
|
|
209
202
|
weldMaid:GiveTask(RxInstanceUtils.observeProperty(motor, "C1"):Subscribe(function(c1)
|
|
210
203
|
weld.C1 = c1
|
|
211
204
|
end))
|
|
@@ -225,18 +218,8 @@ function RagdollMotorUtils.setupRagdollRootPartMotor(motor, part0, part1)
|
|
|
225
218
|
maid._weld = setupWeld("Weld")
|
|
226
219
|
end
|
|
227
220
|
|
|
228
|
-
maid:GiveTask(ragdollMotorData.RagdollSpringReturnSpeed:Observe()
|
|
229
|
-
|
|
230
|
-
lastTransformSpring.s = speed
|
|
231
|
-
end))
|
|
232
|
-
|
|
233
|
-
-- Lerp smoothly to 0 to avoid jarring camera.
|
|
234
|
-
maid:GiveTask(RunService.Stepped:Connect(function()
|
|
235
|
-
local target = QFrame.toCFrame(lastTransformSpring.p)
|
|
236
|
-
if target then
|
|
237
|
-
transformValue.Value = target
|
|
238
|
-
motor.Transform = target
|
|
239
|
-
end
|
|
221
|
+
maid:GiveTask(ragdollMotorData.RagdollSpringReturnSpeed:Observe():Subscribe(function(speed)
|
|
222
|
+
lastTransformSpring.s = speed
|
|
240
223
|
end))
|
|
241
224
|
|
|
242
225
|
motor.Enabled = false
|
|
@@ -280,12 +263,12 @@ function RagdollMotorUtils.suppressJustRootPart(character, rigType)
|
|
|
280
263
|
local ragdollMotorData = RagdollMotorData:Create(motor)
|
|
281
264
|
|
|
282
265
|
return Rx.combineLatest({
|
|
283
|
-
motor = motor
|
|
284
|
-
part0 = RxInstanceUtils.observeProperty(motor, "Part0")
|
|
285
|
-
part1 = RxInstanceUtils.observeProperty(motor, "Part1")
|
|
286
|
-
isAnimated = ragdollMotorData.IsMotorAnimated:Observe()
|
|
266
|
+
motor = motor,
|
|
267
|
+
part0 = RxInstanceUtils.observeProperty(motor, "Part0"),
|
|
268
|
+
part1 = RxInstanceUtils.observeProperty(motor, "Part1"),
|
|
269
|
+
isAnimated = ragdollMotorData.IsMotorAnimated:Observe(),
|
|
287
270
|
})
|
|
288
|
-
end)
|
|
271
|
+
end),
|
|
289
272
|
})
|
|
290
273
|
|
|
291
274
|
local topMaid = Maid.new()
|
|
@@ -324,12 +307,12 @@ function RagdollMotorUtils.suppressMotors(character, rigType, velocityReadings)
|
|
|
324
307
|
local ragdollMotorData = RagdollMotorData:Create(motor)
|
|
325
308
|
|
|
326
309
|
return RxBrioUtils.flatCombineLatest({
|
|
327
|
-
motor = motor
|
|
328
|
-
part0 = RxInstanceUtils.observeProperty(motor, "Part0")
|
|
329
|
-
part1 = RxInstanceUtils.observeProperty(motor, "Part1")
|
|
330
|
-
isAnimated = ragdollMotorData.IsMotorAnimated:Observe()
|
|
310
|
+
motor = motor,
|
|
311
|
+
part0 = RxInstanceUtils.observeProperty(motor, "Part0"),
|
|
312
|
+
part1 = RxInstanceUtils.observeProperty(motor, "Part1"),
|
|
313
|
+
isAnimated = ragdollMotorData.IsMotorAnimated:Observe(),
|
|
331
314
|
})
|
|
332
|
-
end)
|
|
315
|
+
end),
|
|
333
316
|
})
|
|
334
317
|
|
|
335
318
|
topMaid:GiveTask(observable:Subscribe(function(brio)
|
|
@@ -348,7 +331,8 @@ function RagdollMotorUtils.suppressMotors(character, rigType, velocityReadings)
|
|
|
348
331
|
motorMaid._current = RagdollMotorUtils.setupAnimatedMotor(character, state.part1)
|
|
349
332
|
else
|
|
350
333
|
if data.isRootJoint then
|
|
351
|
-
motorMaid._current =
|
|
334
|
+
motorMaid._current =
|
|
335
|
+
RagdollMotorUtils.setupRagdollRootPartMotor(state.motor, state.part0, state.part1)
|
|
352
336
|
else
|
|
353
337
|
motorMaid._current = RagdollMotorUtils.setupRagdollMotor(state.motor, state.part0, state.part1)
|
|
354
338
|
end
|
|
@@ -417,10 +401,10 @@ function RagdollMotorUtils.promiseVelocityRecordings(character, rigType)
|
|
|
417
401
|
local part1 = motor.Part1
|
|
418
402
|
if part0 and part1 then
|
|
419
403
|
parts[data] = {
|
|
420
|
-
motor = motor
|
|
421
|
-
part0 = part0
|
|
422
|
-
part1 = part1
|
|
423
|
-
relCFrame = initialRootPartCFrame:toObjectSpace(part1.CFrame)
|
|
404
|
+
motor = motor,
|
|
405
|
+
part0 = part0,
|
|
406
|
+
part1 = part1,
|
|
407
|
+
relCFrame = initialRootPartCFrame:toObjectSpace(part1.CFrame),
|
|
424
408
|
}
|
|
425
409
|
end
|
|
426
410
|
end
|
|
@@ -434,9 +418,9 @@ function RagdollMotorUtils.promiseVelocityRecordings(character, rigType)
|
|
|
434
418
|
local newRootPartCFrame = rootPart.CFrame
|
|
435
419
|
|
|
436
420
|
local result = {
|
|
437
|
-
readingTimePhysics = time()
|
|
438
|
-
linear = {}
|
|
439
|
-
rotation = {}
|
|
421
|
+
readingTimePhysics = time(),
|
|
422
|
+
linear = {},
|
|
423
|
+
rotation = {},
|
|
440
424
|
}
|
|
441
425
|
|
|
442
426
|
for data, info in pairs(parts) do
|
|
@@ -445,7 +429,7 @@ function RagdollMotorUtils.promiseVelocityRecordings(character, rigType)
|
|
|
445
429
|
-- Validate all the same
|
|
446
430
|
if info.motor == motor and info.part0 == motor.Part0 and info.part1 == motor.Part1 then
|
|
447
431
|
local linear = newRootPartCFrame:pointToObjectSpace(info.part1.Position) - info.relCFrame.p
|
|
448
|
-
result.linear[data] = newRootPartCFrame:vectorToWorldSpace(linear/dt)
|
|
432
|
+
result.linear[data] = newRootPartCFrame:vectorToWorldSpace(linear / dt)
|
|
449
433
|
|
|
450
434
|
local change = info.relCFrame:toObjectSpace(newRootPartCFrame:toObjectSpace(info.part1.CFrame))
|
|
451
435
|
|
|
@@ -453,7 +437,7 @@ function RagdollMotorUtils.promiseVelocityRecordings(character, rigType)
|
|
|
453
437
|
local x, y, z = change:ToEulerAnglesXYZ()
|
|
454
438
|
|
|
455
439
|
local vector = newRootPartCFrame:vectorToWorldSpace(Vector3.new(x, y, z))
|
|
456
|
-
result.rotation[data] = vector/dt
|
|
440
|
+
result.rotation[data] = vector / dt
|
|
457
441
|
end
|
|
458
442
|
end
|
|
459
443
|
|
|
@@ -473,4 +457,4 @@ function RagdollMotorUtils.yieldUntilStepped()
|
|
|
473
457
|
return dt
|
|
474
458
|
end
|
|
475
459
|
|
|
476
|
-
return RagdollMotorUtils
|
|
460
|
+
return RagdollMotorUtils
|