mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
174 lines
5.7 KiB
Lua
174 lines
5.7 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
--
|
|
-- These are the physics bone numbers
|
|
--
|
|
local PLVS = 0
|
|
-- coord
|
|
local RTHY = 2
|
|
local RCLF = 3
|
|
local RFOT = 4
|
|
local LTHY = 5
|
|
local LCLF = 6
|
|
local LFOT = 7
|
|
|
|
local SPNE = 8
|
|
local RSLD = 9
|
|
local RARM = 10
|
|
local LSLD = 11
|
|
local LARM = 12
|
|
local LHND = 13
|
|
local NECK = 14
|
|
local HEAD = 15
|
|
local RHND = 16
|
|
|
|
|
|
|
|
local Builder =
|
|
{
|
|
PrePosition = function( self, sensor )
|
|
|
|
local spinestretch = ( sensor[SENSORBONE.SHOULDER] - sensor[SENSORBONE.SPINE] ) * 0.6
|
|
|
|
local acrossshoulders = ( sensor[SENSORBONE.SHOULDER_RIGHT] - sensor[SENSORBONE.SHOULDER_LEFT] ):GetNormal() * 0.08
|
|
|
|
sensor[SENSORBONE.SHOULDER]:Add( spinestretch * 0.7 )
|
|
sensor[SENSORBONE.SHOULDER_RIGHT]:Add( spinestretch + acrossshoulders )
|
|
sensor[SENSORBONE.SHOULDER_LEFT]:Add( spinestretch - acrossshoulders )
|
|
sensor[SENSORBONE.ELBOW_LEFT]:Add( spinestretch - acrossshoulders )
|
|
sensor[SENSORBONE.ELBOW_RIGHT]:Add( spinestretch + acrossshoulders )
|
|
sensor[SENSORBONE.WRIST_LEFT]:Add( spinestretch - acrossshoulders )
|
|
sensor[SENSORBONE.WRIST_RIGHT]:Add( spinestretch + acrossshoulders )
|
|
sensor[SENSORBONE.HAND_LEFT]:Add( spinestretch - acrossshoulders )
|
|
sensor[SENSORBONE.HAND_RIGHT]:Add( spinestretch + acrossshoulders )
|
|
sensor[SENSORBONE.HEAD]:Add( spinestretch * 0.9 )
|
|
|
|
local acrosships = ( sensor[SENSORBONE.HIP_LEFT] - sensor[SENSORBONE.HIP_RIGHT] ):GetNormal() * 0.06
|
|
|
|
sensor[SENSORBONE.HIP_LEFT]:Add( spinestretch * -0.1 + acrosships )
|
|
sensor[SENSORBONE.HIP_RIGHT]:Add( spinestretch * -0.1 + acrosships * -1 )
|
|
|
|
sensor[SENSORBONE.KNEE_LEFT]:Add( ( sensor[SENSORBONE.KNEE_LEFT]-sensor[SENSORBONE.HIP_LEFT] ) * 0.0 + acrosships )
|
|
sensor[SENSORBONE.KNEE_RIGHT]:Add( ( sensor[SENSORBONE.KNEE_RIGHT] - sensor[SENSORBONE.HIP_RIGHT] ) * 0.0 - acrosships )
|
|
|
|
sensor[SENSORBONE.FOOT_LEFT]:Add( ( sensor[SENSORBONE.ANKLE_LEFT] - sensor[SENSORBONE.KNEE_LEFT] ) * 0.2 + acrosships )
|
|
sensor[SENSORBONE.FOOT_RIGHT]:Add( ( sensor[SENSORBONE.ANKLE_RIGHT] - sensor[SENSORBONE.KNEE_RIGHT] ) * 0.2 - acrosships )
|
|
|
|
sensor[SENSORBONE.ANKLE_LEFT]:Add( ( sensor[SENSORBONE.ANKLE_LEFT] - sensor[SENSORBONE.KNEE_LEFT] ) * 0.2 + acrosships )
|
|
sensor[SENSORBONE.ANKLE_RIGHT]:Add( ( sensor[SENSORBONE.ANKLE_RIGHT] - sensor[SENSORBONE.KNEE_RIGHT] ) * 0.2 - acrosships )
|
|
|
|
end,
|
|
|
|
--
|
|
-- Which on the sensor should we use for which ones on our model
|
|
--
|
|
PositionTable =
|
|
{
|
|
[PLVS] = SENSORBONE.HIP,
|
|
[RSLD] = SENSORBONE.SHOULDER_RIGHT,
|
|
[LSLD] = SENSORBONE.SHOULDER_LEFT,
|
|
[LARM] = SENSORBONE.ELBOW_LEFT,
|
|
[LHND] = SENSORBONE.WRIST_LEFT,
|
|
[RARM] = SENSORBONE.ELBOW_RIGHT,
|
|
[RHND] = SENSORBONE.WRIST_RIGHT,
|
|
[LTHY] = SENSORBONE.HIP_LEFT,
|
|
[RTHY] = SENSORBONE.HIP_RIGHT,
|
|
[RCLF] = SENSORBONE.KNEE_RIGHT,
|
|
[LCLF] = SENSORBONE.KNEE_LEFT,
|
|
[RFOT] = SENSORBONE.ANKLE_RIGHT,
|
|
[LFOT] = SENSORBONE.ANKLE_LEFT,
|
|
[HEAD] = SENSORBONE.HEAD,
|
|
[NECK] = SENSORBONE.HEAD,
|
|
[SPNE] = { type = "lerp", value = 0.8, from = SENSORBONE.SHOULDER, to = SENSORBONE.SPINE }
|
|
},
|
|
|
|
--
|
|
-- Which bones should we use to determine our bone angles
|
|
--
|
|
AnglesTable =
|
|
{
|
|
[PLVS] = { from = PLVS, to = SPNE, up = "hips_back" },
|
|
[SPNE] = { from = PLVS, to = SPNE, up = "chest_bck" },
|
|
[HEAD] = { from = SPNE, to = HEAD, up = "head_back" },
|
|
|
|
[RSLD] = { from = RARM, to = RSLD, up_rgt = SPNE },
|
|
[RARM] = { from = RHND, to = RARM, up_rgt = RSLD },
|
|
[RHND] = { from_sensor = SENSORBONE.HAND_RIGHT, to_sensor = SENSORBONE.WRIST_RIGHT, up_fwd = RARM },
|
|
|
|
[LSLD] = { from = LARM, to = LSLD, up_lft = SPNE },
|
|
[LARM] = { from = LHND, to = LARM, up_up = LSLD },
|
|
[LHND] = { from_sensor = SENSORBONE.WRIST_LEFT, to_sensor = SENSORBONE.HAND_LEFT, up_bck = LARM },
|
|
|
|
[RTHY] = { from = RCLF, to = RTHY, up_dn = PLVS },
|
|
[RCLF] = { from = RFOT, to = RCLF, up_up = RTHY },
|
|
[RFOT] = { from = RCLF, to = RFOT, up_up = RTHY },
|
|
|
|
[LTHY] = { from = LCLF, to = LTHY, up_dn = PLVS },
|
|
[LCLF] = { from = LFOT, to = LCLF, up_up = LTHY },
|
|
[LFOT] = { from = LFOT, to = LCLF, up_up = LTHY },
|
|
},
|
|
|
|
--
|
|
-- Any polishing that can't be done with the above tables
|
|
--
|
|
Complete = function( self, player, sensor, rotation, pos, ang )
|
|
|
|
--
|
|
-- Feet are insanely spazzy, so we lock the feet to the angle of the calf
|
|
--
|
|
ang[RFOT]:RotateAroundAxis( ang[RFOT]:Up(), -90 )
|
|
ang[RFOT]:RotateAroundAxis( ang[RFOT]:Forward(), 180 )
|
|
ang[LFOT]:RotateAroundAxis( ang[LFOT]:Up(), 90 )
|
|
|
|
ang[LFOT]:RotateAroundAxis( ang[LFOT]:Forward(), -45 )
|
|
ang[RFOT]:RotateAroundAxis( ang[LFOT]:Forward(), -45 )
|
|
|
|
ang[PLVS]:RotateAroundAxis( ang[PLVS]:Up(), -90 )
|
|
ang[SPNE]:RotateAroundAxis( ang[SPNE]:Up(), -90 )
|
|
ang[HEAD]:RotateAroundAxis( ang[HEAD]:Up(), -90 )
|
|
|
|
ang[NECK] = ang[HEAD]
|
|
|
|
pos[1] = pos[PLVS]
|
|
ang[1] = ang[PLVS] * -1
|
|
ang[1]:RotateAroundAxis( ang[1]:Right(), 90 )
|
|
pos[17] = pos[PLVS]
|
|
ang[17] = ang[PLVS] * -1
|
|
ang[17]:RotateAroundAxis( ang[1]:Right(), 90 )
|
|
|
|
--
|
|
-- AGH HANDS
|
|
--
|
|
ang[LHND] = ang[LARM] * 1
|
|
ang[LHND]:RotateAroundAxis( ang[LHND]:Up(), 90 )
|
|
ang[RHND] = ang[RARM] * 1
|
|
ang[RHND]:RotateAroundAxis( ang[RHND]:Up(), -90 )
|
|
|
|
ang[RHND]:RotateAroundAxis( ang[RHND]:Right(), 180 )
|
|
|
|
end,
|
|
|
|
IsApplicable = function( self, ent )
|
|
|
|
local mdl = ent:GetModel()
|
|
|
|
if ( mdl:EndsWith( "models/player/engineer.mdl" ) ) then return true end
|
|
if ( mdl:EndsWith( "models/player/hwm/engineer.mdl" ) ) then return true end
|
|
if ( mdl:EndsWith( "models/bots/engineer/bot_engineer.mdl" ) ) then return true end
|
|
if ( mdl:EndsWith( "models/bots/demo_engineer/bot_demo_engineer.mdl" ) ) then return true end
|
|
|
|
return false
|
|
|
|
end,
|
|
}
|
|
|
|
list.Set( "SkeletonConvertor", "TF2_engineer", Builder )
|