mirror of
https://github.com/JonnyBro/beatrun-anims.git
synced 2025-01-01 15:03:01 +05:00
1722 lines
No EOL
41 KiB
Lua
1722 lines
No EOL
41 KiB
Lua
local animtable = {
|
|
lockang = false,
|
|
allowmove = true,
|
|
followplayer = true,
|
|
ignorez = false,
|
|
BodyAnimSpeed = 1,
|
|
deleteonend = false,
|
|
BodyLimitX = 90,
|
|
AnimString = "jumpslow",
|
|
CamIgnoreAng = true,
|
|
animmodelstring = "climbanim",
|
|
BodyLimitY = 180,
|
|
usefullbody = 2
|
|
}
|
|
|
|
fbanims = {
|
|
ladderexittoplefthand = true,
|
|
runfwdstart = true,
|
|
vaultkong = true,
|
|
walktostandleft = true,
|
|
wallrunverticalstart = true,
|
|
meleeair = true,
|
|
vaultonto = true,
|
|
fallinguncontrolled = true,
|
|
stand = true,
|
|
meslideend = true,
|
|
walkbalancefwd = true,
|
|
meleewrleft = true,
|
|
runfwd = true,
|
|
jumpzipline = true,
|
|
springboardleftleg = true,
|
|
jumpcoilend = true,
|
|
hangstraferight = true,
|
|
hangfoldedstart = true,
|
|
jumpslow = true,
|
|
hangheaveup = true,
|
|
jumpwrright = true,
|
|
meleeairhit = true,
|
|
vaultover = true,
|
|
jumpstill = true,
|
|
dodgejumpright = true,
|
|
jumpturnflyidle = true,
|
|
ladderclimbdownfast = true,
|
|
ladderclimbuprighthand = true,
|
|
wallrunverticalturn = true,
|
|
jumpturnlandidle = true,
|
|
hanghardstart = true,
|
|
hangstrafeleft = true,
|
|
walkfwd = true,
|
|
jumpfast = true,
|
|
meslidestart45 = true,
|
|
hangfoldedendhang = true,
|
|
wallrunleft = true,
|
|
zipline = true,
|
|
wallrunleftstart = true,
|
|
sprintfwd = true,
|
|
walkbalancelosebalanceright = true,
|
|
jumpwrleft = true,
|
|
grapplecenter = true,
|
|
swingstraight = true,
|
|
jumpcoil = true,
|
|
hang = true,
|
|
runland = true,
|
|
crouchfwd = true,
|
|
crouchbwd = true,
|
|
meslideloop = true,
|
|
crouchstill = true,
|
|
snatchsniper = true,
|
|
meslidestart = true,
|
|
ladderclimbuplefthandstill = true,
|
|
bargein = true,
|
|
meslideendprone = true,
|
|
diveidle = true,
|
|
diveslidestart = true,
|
|
diveslideidle = true,
|
|
wallrunright = true,
|
|
diveslideend = true,
|
|
vaultontohigh = true,
|
|
divestart = true,
|
|
hangfoldedheaveup = true,
|
|
vaultoverhigh = true,
|
|
ziplinestart = true,
|
|
dodgejumpleft = true,
|
|
evaderoll = true,
|
|
hanghardstart2 = true,
|
|
diestand = true,
|
|
jumpturnlandstand = true,
|
|
runbwd = true,
|
|
hanghardstartvertical = true,
|
|
walkbalancestill = true,
|
|
ladderenterbottom = true,
|
|
wallrunrightstart = true,
|
|
walkbalancefalloffleft = true,
|
|
wallrunvertical = true,
|
|
ladderclimbhangstart = true,
|
|
jumpturnland = true,
|
|
jumpturnlandstandgun = true,
|
|
meleewrright = true,
|
|
diestandlong = true,
|
|
ladderclimbuplefthand = true,
|
|
walkbalancelosebalanceleft = true,
|
|
jumpturnfly = true,
|
|
meslideloop45 = true,
|
|
meleeslide = true,
|
|
stepuprightleg = true,
|
|
ladderexittoprighthand = true,
|
|
ladderclimbuprighthandstill = true,
|
|
jumpidle = true,
|
|
jumpair = true,
|
|
walkbalancefalloffright = true,
|
|
meleeairstill = true,
|
|
swingjumpoff = true,
|
|
snatchscar = true
|
|
}
|
|
|
|
local jumpanims = {
|
|
jumpwrleft = true,
|
|
jumpfast = true,
|
|
jumpslow = true,
|
|
jumpwrright = true,
|
|
jumpstill = true,
|
|
jumpidle = true,
|
|
jumpair = true,
|
|
jumpcoil = true,
|
|
jumpzipline = true
|
|
}
|
|
|
|
local jumpanims2 = {
|
|
jumpfast = true,
|
|
jumpslow = true,
|
|
jumpstill = true
|
|
}
|
|
|
|
local runanims = {
|
|
crouchfwd = true,
|
|
crouchbwd = true,
|
|
walktostandleft = true,
|
|
stand = true,
|
|
runfwd = true,
|
|
walkfwd = true,
|
|
crouchstill = true,
|
|
sprintfwd = true,
|
|
runbwd = true
|
|
}
|
|
|
|
local events = {
|
|
ladderenter = true,
|
|
divestart = true,
|
|
fall = true,
|
|
ladderclimbleft = true,
|
|
jumpwallrun = true,
|
|
vaultonto = true,
|
|
ziplinestart = true,
|
|
hangstrafeleft = true,
|
|
hangstraferight = true,
|
|
climbhard = true,
|
|
walkbalancefwd = true,
|
|
hangfoldedheaveup = true,
|
|
jumpturnlandstand = true,
|
|
swingjump = true,
|
|
sidestepleft = true,
|
|
swingpiperight = true,
|
|
jumpfar = true,
|
|
hangfoldedstart = true,
|
|
jumpslide = true,
|
|
swingpipeleft = true,
|
|
ladderenterhang = true,
|
|
vault = true,
|
|
disarmsniper = true,
|
|
jumpstill = true,
|
|
climb = true,
|
|
stepup = true,
|
|
ladderclimbdownfast = true,
|
|
sidestepright = true,
|
|
jumpwallrunleft = true,
|
|
meleeslide = true,
|
|
meleeair = true,
|
|
disarmscar = true,
|
|
falluncontrolled = true,
|
|
meleewrright = true,
|
|
meleewrleft = true,
|
|
meleeairhit = true,
|
|
climbhard2 = true,
|
|
walkbalancestill = true,
|
|
hangfoldedendhang = true,
|
|
walkbalancefalloffleft = true,
|
|
walkbalancefalloffright = true,
|
|
swingbar = true,
|
|
jump = true,
|
|
jumpwallrunright = true,
|
|
coil = true,
|
|
ladderexittoplefthand = true,
|
|
climbheave = true,
|
|
diveslidestart = true,
|
|
bargedoor = true,
|
|
hangjump = true,
|
|
diveslideend = true,
|
|
landcoil = true,
|
|
ladderexittoprighthand = true,
|
|
hangend = true,
|
|
springboard = true,
|
|
vaultkong = true,
|
|
ladderclimbright = true,
|
|
meleeairstill = true,
|
|
vaultontohigh = true
|
|
}
|
|
|
|
local eventslut = {
|
|
ladderenter = "ladderenterbottom",
|
|
divestart = "divestart",
|
|
jumpwallrunright = "jumpwrleft",
|
|
hangfoldedheaveup = "hangfoldedheaveup",
|
|
jumpwallrun = "jumpfast",
|
|
hangstrafeleft = "hangstrafeleft",
|
|
ziplinestart = "ziplinestart",
|
|
climbhard2 = "hanghardstart2",
|
|
vaultonto = "vaultonto",
|
|
climbhard = "hanghardstart",
|
|
walkbalancefwd = "walkbalancefwd",
|
|
jumpwallrunleft = "jumpwrright",
|
|
jumpturnlandstand = "jumpturnlandstand",
|
|
swingjump = "swingjumpoff",
|
|
sidestepleft = "dodgejumpleft",
|
|
vaulthigh = "vaultoverhigh",
|
|
hangstraferight = "hangstraferight",
|
|
hangfoldedstart = "hangfoldedstart",
|
|
ladderexittoprighthand = "ladderexittoprighthand",
|
|
swingpipeleft = "stand",
|
|
ladderenterhang = "ladderclimbhangstart",
|
|
vault = "vaultover",
|
|
disarmsniper = "snatchsniper",
|
|
jumpstill = "jumpstill",
|
|
climb = "hanghardstartvertical",
|
|
stepup = "stepuprightleg",
|
|
springboard = "springboardleftleg",
|
|
ladderexittoplefthand = "ladderexittoplefthand",
|
|
slide45 = "meslidestart45",
|
|
sidestepright = "dodgejumpright",
|
|
meleeslide = "meleeslide",
|
|
disarmscar = "snatchscar",
|
|
falluncontrolled = "fallinguncontrolled",
|
|
meleewrright = "meleewrright",
|
|
meleeairhit = "meleeairhit",
|
|
meleewrleft = "meleewrleft",
|
|
meleeair = "meleeair",
|
|
jumpslide = "jumpfast",
|
|
hangfoldedendhang = "hangfoldedendhang",
|
|
walkbalancestill = "walkbalancestill",
|
|
walkbalancefalloffleft = "walkbalancefalloffleft",
|
|
walkbalancefalloffright = "walkbalancefalloffright",
|
|
swingbar = "swingstraight",
|
|
ladderclimbleft = "ladderclimbuplefthand",
|
|
coil = "jumpcoil",
|
|
fall = "jumpair",
|
|
climbheave = "hangheaveup",
|
|
slide = "meslidestart",
|
|
bargedoor = "bargein",
|
|
hangjump = "jumpfast",
|
|
diveslidestart = "diveslidestart",
|
|
landcoil = "jumpcoilend",
|
|
diveslideend = "diveslideend",
|
|
hangend = "jumpair",
|
|
ladderclimbdownfast = "ladderclimbdownfast",
|
|
swingpiperight = "stand",
|
|
vaultkong = "vaultkong",
|
|
ladderclimbright = "ladderclimbuprighthand",
|
|
meleeairstill = "meleeairstill",
|
|
vaultontohigh = "vaultontohigh"
|
|
}
|
|
|
|
local armfollowanims = {
|
|
stand = true,
|
|
diveslideidle = true,
|
|
walktostandleft = true,
|
|
diestandlong = true,
|
|
diveslidestart = true,
|
|
vaultoverhigh = true,
|
|
walkfwd = true
|
|
}
|
|
|
|
local armlock = {
|
|
meleeairhit = true,
|
|
bargein = true,
|
|
wallrunverticalstart = true,
|
|
ladderexittoprighthand = true,
|
|
meleeair = true,
|
|
ladderclimbuplefthand = true,
|
|
ladderexittoplefthand = true,
|
|
ladderenterbottom = true,
|
|
snatchsniper = true,
|
|
ladderclimbuplefthandstill = true,
|
|
ladderclimbuprighthandstill = true,
|
|
wallrunvertical = true,
|
|
ladderclimbdownfast = true,
|
|
ladderclimbuprighthand = true,
|
|
ladderclimbhangstart = true,
|
|
vaultontohigh = true,
|
|
snatchscar = true
|
|
}
|
|
|
|
local stillanims = {
|
|
jumpturnlandstandgun = true,
|
|
meslideloop = true,
|
|
jumpturnlandidle = true,
|
|
snatchsniper = true,
|
|
meslidestart = true,
|
|
meslideloop45 = true,
|
|
meslidestart45 = true,
|
|
bargein = true,
|
|
jumpturnflyidle = true,
|
|
jumpturnfly = true,
|
|
jumpturnlandstand = true,
|
|
jumpturnland = true,
|
|
meleeslide = true,
|
|
snatchscar = true
|
|
}
|
|
|
|
local arminterrupts = {
|
|
punchright = true,
|
|
doorbash = true,
|
|
punchmid = true,
|
|
punchleft = true
|
|
}
|
|
|
|
local transitionanims = {
|
|
hanghardstart = "hang",
|
|
divestart = "diveidle",
|
|
ladderexittoplefthand = "runfwd",
|
|
walktostandleft = "stand",
|
|
fallinguncontrolled = "runfwd",
|
|
vaultoverhigh = "runfwd",
|
|
vaultonto = "runfwd",
|
|
hangstrafeleft = "hang",
|
|
ladderclimbhangstart = "ladderclimbuprighthandstill",
|
|
hanghardstart2 = "hang",
|
|
meslideend = "runfwd",
|
|
hangfoldedheaveup = "runfwd",
|
|
jumpturnlandstand = "stand",
|
|
ziplinestart = "zipline",
|
|
springboardleftleg = "runfwd",
|
|
hanghardstartvertical = "hang",
|
|
hangstraferight = "hang",
|
|
zipline = "jumpzipline",
|
|
ladderenterbottom = "ladderclimbuplefthandstill",
|
|
hangheaveup = "runfwd",
|
|
dodgejumpleft = "stand",
|
|
walkbalancefalloffleft = "jumpair",
|
|
vaultover = "jumpair",
|
|
meleeairhit = "jumpair",
|
|
dodgejumpright = "stand",
|
|
meleeair = "jumpair",
|
|
walkbalancefalloffright = "jumpair",
|
|
swingjumpoff = "jumpslow",
|
|
wallrunverticalstart = "wallrunvertical",
|
|
jumpturnland = "jumpturnlandidle",
|
|
jumpcoilend = "runfwd",
|
|
bargeout = "runfwd",
|
|
jumpturnlandstandgun = "stand",
|
|
meleewrright = "jumpair",
|
|
diveslidestart = "diveslideidle",
|
|
diveslideend = "runfwd",
|
|
hangfoldedendhang = "hang",
|
|
ladderclimbuplefthand = "ladderclimbuplefthandstill",
|
|
jumpturnfly = "jumpturnflyidle",
|
|
meleewrleft = "jumpair",
|
|
vaultkong = "runfwd",
|
|
meleeslide = "meslideloop",
|
|
stepuprightleg = "runfwd",
|
|
snatchsniper = "stand",
|
|
ladderexittoprighthand = "runfwd",
|
|
meslideendprone = "jumpturnlandidle",
|
|
wallrunverticalturn = "jumpslow",
|
|
ladderclimbuprighthand = "ladderclimbuprighthandstill",
|
|
meleeairstill = "jumpair",
|
|
vaultontohigh = "runfwd",
|
|
snatchscar = "stand"
|
|
}
|
|
|
|
local nospinebend = {
|
|
ladderclimbuplefthand = true,
|
|
divestart = true,
|
|
hang = true,
|
|
hangfoldedheaveup = true,
|
|
ladderexittoprighthand = true,
|
|
ziplinestart = true,
|
|
hangfoldedendhang = true,
|
|
hangstrafeleft = true,
|
|
zipline = true,
|
|
hanghardstart2 = true,
|
|
snatchsniper = true,
|
|
grapplecenter = true,
|
|
hanghardstart = true,
|
|
ladderexittoplefthand = true,
|
|
diveidle = true,
|
|
hanghardstartvertical = true,
|
|
hangstraferight = true,
|
|
hangfoldedstart = true,
|
|
ladderenterbottom = true,
|
|
hangheaveup = true,
|
|
diveslidestart = true,
|
|
ladderclimbuplefthandstill = true,
|
|
ladderclimbuprighthandstill = true,
|
|
diveslideidle = true,
|
|
diveslideend = true,
|
|
wallrunvertical = true,
|
|
ladderclimbdownfast = true,
|
|
ladderclimbuprighthand = true,
|
|
ladderclimbhangstart = true,
|
|
vaultontohigh = true,
|
|
snatchscar = true
|
|
}
|
|
|
|
local worldarm = {
|
|
ladderclimbuplefthand = true,
|
|
ladderclimbuplefthandstill = true,
|
|
hanghardstart = true,
|
|
hangfoldedheaveup = true,
|
|
hang = true,
|
|
snatchsniper = true,
|
|
hangfoldedendhang = true,
|
|
hangstrafeleft = true,
|
|
bargein = true,
|
|
hanghardstart2 = true,
|
|
grapplecenter = true,
|
|
diveslidestart = true,
|
|
diveslideidle = true,
|
|
ladderexittoplefthand = true,
|
|
diveslideend = true,
|
|
hanghardstartvertical = true,
|
|
hangstraferight = true,
|
|
hangfoldedstart = true,
|
|
ladderenterbottom = true,
|
|
hangheaveup = true,
|
|
ladderexittoprighthand = true,
|
|
ladderclimbuprighthandstill = true,
|
|
ladderclimbdownfast = true,
|
|
ladderclimbuprighthand = true,
|
|
ladderclimbhangstart = true,
|
|
snatchscar = true
|
|
}
|
|
|
|
local ignorezarm = {
|
|
wallrunvertical = true,
|
|
hangfoldedstart = true,
|
|
hangfoldedendhang = true,
|
|
hangfoldedheaveup = true,
|
|
wallrunverticalstart = true,
|
|
diestandlong = true,
|
|
vaultontohigh = true
|
|
}
|
|
|
|
local nocyclereset = {
|
|
jumpwrright = true,
|
|
jumpwrleft = true,
|
|
meslidestart = true
|
|
}
|
|
|
|
local ignorebac = {
|
|
evaderoll = true,
|
|
meroll = true
|
|
}
|
|
|
|
local customspeed = {
|
|
vaultonto = 1.15,
|
|
vaultontohigh = 1
|
|
}
|
|
|
|
local vaultoverhighcam1 = Vector(0, 0, -7.5)
|
|
local vaultoverhighcam2 = Vector(0, 0, 0)
|
|
local vaultoverhigharm1 = Vector(4, -4, 13.5)
|
|
local vaultoverhigharm2 = Vector(4, 0, -2.5)
|
|
local ladderexitarm1 = Vector(-2.5, 0, 0)
|
|
local ladderexitarm2 = Vector(-10, 0, 0)
|
|
local vaultontohigharm1 = Vector(5, -10, 3.5)
|
|
local vaultontohigharm2 = Vector(10, 0, 0)
|
|
local snatchscarcam1 = Vector(0, 0, 0)
|
|
local snatchscarcam2 = Vector(10, 0, 5)
|
|
|
|
local customarmoffset = {
|
|
meslidestart = Vector(2, 5, 9.5),
|
|
meslideloop = Vector(2, 5, 9.5),
|
|
meslidestart45 = Vector(2, 5, 5),
|
|
meslideloop45 = Vector(2, 5, 5),
|
|
meslideend = Vector(2, 5, 9.5),
|
|
meslideendprone = Vector(2, 5, 9.5),
|
|
meleeslide = Vector(2, 5, 9.5),
|
|
jumpturnfly = Vector(0, 2.5, 7.5),
|
|
jumpturnflyidle = Vector(0, 2.5, 7.5),
|
|
jumpturnland = Vector(0, 2.5, 7.5),
|
|
jumpturnlandidle = Vector(0, 2.5, 7.5),
|
|
jumpturnlandstand = Vector(0, 2.5, 7.5),
|
|
jumpturnlandstandgun = Vector(0, 2.5, 7.5),
|
|
wallrunvertical = Vector(0, 0, 5),
|
|
wallrunverticalstart = Vector(0, 0, 5),
|
|
wallrunverticalturn = Vector(0, 0, 5),
|
|
vaultover = Vector(0, 4, -2.5),
|
|
vaultoverhigh = Vector(0, 0, 9.5),
|
|
vaultontohigh = Vector(5, -10, 2.5),
|
|
fallinguncontrolled = Vector(5, 0, 6),
|
|
ladderexittoplefthand = Vector(5, 0, 0),
|
|
ladderexittoprighthand = Vector(5, 0, 0),
|
|
ladderclimbhangstart = Vector(-5, 0, 0),
|
|
ladderenterbottom = Vector(-7.5, 0, 0),
|
|
crouchstill = Vector(-4, 0, -5),
|
|
crouchfwd = Vector(-4, 0, -5),
|
|
crouchbwd = Vector(0, 0, 0),
|
|
walkfwd = Vector(10, 0, -10),
|
|
runbwd = Vector(0, 0, 3),
|
|
stand = Vector(10, 0, -10),
|
|
walktostandleft = Vector(10, 0, -10)
|
|
}
|
|
|
|
local customcamoffset = {
|
|
jumpturnfly = Vector(0, 0, 7.5),
|
|
jumpturnflyidle = Vector(0, 0, 7.5),
|
|
jumpturnland = Vector(0, 0, 7.5),
|
|
jumpturnlandidle = Vector(0, 0, 7.5),
|
|
jumpturnlandstand = Vector(0, 0, 7.5),
|
|
jumpturnlandstandgun = Vector(0, 0, 7.5),
|
|
meslideendprone = Vector(0, 0, 7.5),
|
|
vaultover = Vector(0, 0, -2.5),
|
|
vaultoverhigh = Vector(0, 0, -7.5),
|
|
ladderexittoplefthand = Vector(-5, 0, 0),
|
|
ladderexittoprighthand = Vector(-5, 0, 0),
|
|
ladderenterbottom = Vector(-5, 0, 0),
|
|
hangstrafeleft = Vector(-2.5, 0, 0),
|
|
hangstraferight = Vector(-2.5, 0, 0),
|
|
snatchscar = snatchscarcam1,
|
|
crouchstill = Vector(0, 0, 2.5),
|
|
crouchfwd = Vector(0, 0, 2.5),
|
|
crouchbwd = Vector(0, 0, 2.5)
|
|
}
|
|
|
|
local transitionchecks = {
|
|
meleeairstill = function(ply)
|
|
if BodyAnimCycle >= 1 or ply:OnGround() then return true end
|
|
end,
|
|
swingjumpoff = function(ply)
|
|
if BodyAnimCycle >= 0.15 or ply:OnGround() then
|
|
BodyAnimCycle = 0
|
|
|
|
return true
|
|
end
|
|
end,
|
|
jumpcoilend = function(ply)
|
|
if ply:GetVelocity():Length() < 10 and BodyAnimCycle > 0.5 or BodyAnimCycle > 0.9 then return true end
|
|
end,
|
|
vaultover = function(ply)
|
|
if BodyAnimCycle >= 1 or ply:OnGround() and ply:GetMantle() == 0 then
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
|
|
return true
|
|
end
|
|
end,
|
|
vaultkong = function(ply)
|
|
if BodyAnimCycle >= 1 or ply:OnGround() and ply:GetMantle() == 0 then
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
|
|
return true
|
|
end
|
|
end,
|
|
vaultoverhigh = function(ply)
|
|
if BodyAnimCycle < 0.45 then
|
|
customarmoffset.vaultoverhigh = vaultoverhigharm1
|
|
customcamoffset.vaultoverhigh = vaultoverhighcam1
|
|
else
|
|
customarmoffset.vaultoverhigh = vaultoverhigharm2
|
|
customcamoffset.vaultoverhigh = vaultoverhighcam2
|
|
end
|
|
|
|
if BodyAnimCycle >= 1 or BodyAnimCycle > 0.75 and ply:OnGround() and ply:GetMantle() == 0 then
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
|
|
return true
|
|
else
|
|
BodyLimitX = 25
|
|
BodyLimitY = 40
|
|
end
|
|
end,
|
|
vaultontohigh = function(ply)
|
|
if BodyAnimCycle < 0.45 then
|
|
customarmoffset.vaultontohigh = vaultontohigharm1
|
|
else
|
|
customarmoffset.vaultontohigh = vaultontohigharm2
|
|
end
|
|
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
if BodyAnimCycle >= 1 then
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
|
|
return true
|
|
elseif BodyAnimCycle >= 0.15 then
|
|
BodyLimitX = 10
|
|
BodyLimitY = 45
|
|
else
|
|
BodyLimitX = 10
|
|
BodyLimitY = 0
|
|
end
|
|
|
|
if BodyAnimCycle >= 0.45 then
|
|
local eyeang = ply:EyeAngles()
|
|
eyeang.x = 0
|
|
eyeang.z = 0
|
|
ply.OrigEyeAng = eyeang
|
|
|
|
BodyAnim:SetAngles(eyeang)
|
|
end
|
|
end,
|
|
zipline = function(ply)
|
|
if not IsValid(ply:GetZipline()) then
|
|
BodyAnimCycle = 0
|
|
|
|
return true
|
|
end
|
|
end,
|
|
jumpzipline = function(ply)
|
|
lockang = false
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
end,
|
|
stepuprightleg = function(ply)
|
|
if BodyAnimCycle >= 1 then return true end
|
|
end,
|
|
springboardleftleg = function(ply)
|
|
if BodyAnimCycle >= 0.75 or ply:OnGround() then return true end
|
|
end,
|
|
jumpturnlandstand = function(ply)
|
|
if BodyAnimCycle >= 0.85 then
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
|
|
return true
|
|
end
|
|
end,
|
|
jumpturnlandstandgun = function(ply)
|
|
if BodyAnimCycle >= 0.85 then
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
|
|
return true
|
|
end
|
|
end,
|
|
fallinguncontrolled = function(ply)
|
|
if not ply.FallStatic then return true end
|
|
end,
|
|
ladderclimbuplefthand = function(ply)
|
|
if BodyAnimCycle >= 0.75 then return true end
|
|
end,
|
|
ladderclimbuprighthand = function(ply)
|
|
if BodyAnimCycle >= 0.75 then return true end
|
|
end,
|
|
ladderenterbottom = function(ply)
|
|
if BodyAnimCycle >= 0.35 then return true end
|
|
end,
|
|
ladderexittoplefthand = function(ply)
|
|
if BodyAnimCycle < 0.25 then
|
|
customarmoffset.ladderexittoplefthand = ladderexitarm1
|
|
else
|
|
customarmoffset.ladderexittoplefthand = ladderexitarm2
|
|
end
|
|
|
|
if BodyAnimCycle >= 1 or ply:OnGround() then return true end
|
|
end,
|
|
ladderexittoprighthand = function(ply)
|
|
if BodyAnimCycle < 0.25 then
|
|
customarmoffset.ladderexittoprighthand = ladderexitarm1
|
|
else
|
|
customarmoffset.ladderexittoprighthand = ladderexitarm2
|
|
end
|
|
|
|
if BodyAnimCycle >= 1 or ply:OnGround() then return true end
|
|
end,
|
|
wallrunverticalturn = function(ply)
|
|
if ply:GetWallrun() ~= 4 then return true end
|
|
end,
|
|
hangfoldedheaveup = function(ply)
|
|
if BodyAnimCycle >= 0.65 then return true end
|
|
end,
|
|
hanghardstart = function(ply)
|
|
if BodyAnimCycle >= 1 then
|
|
ply.hangyaw = 0
|
|
|
|
return true
|
|
end
|
|
end,
|
|
hanghardstart2 = function(ply)
|
|
if BodyAnimCycle >= 0.75 then
|
|
ply.hangyaw = 0
|
|
|
|
return true
|
|
end
|
|
end,
|
|
snatchscar = function(ply)
|
|
lockang = true
|
|
|
|
if BodyAnimCycle < 0.35 or BodyAnimCycle > 0.8 then
|
|
customcamoffset.snatchscar = snatchscarcam1
|
|
else
|
|
customcamoffset.snatchscar = snatchscarcam2
|
|
end
|
|
|
|
if BodyAnimCycle >= 1 then
|
|
lockang = false
|
|
|
|
return true
|
|
end
|
|
end,
|
|
snatchsniper = function(ply)
|
|
lockang = true
|
|
|
|
if BodyAnimCycle >= 1 then
|
|
lockang = false
|
|
|
|
return true
|
|
end
|
|
end,
|
|
ziplinestart = function(ply)
|
|
if BodyAnimCycle >= 0.75 then return true end
|
|
end,
|
|
walkbalancefalloffleft = function(ply)
|
|
lockang = true
|
|
|
|
if BodyAnimCycle >= 1 then
|
|
lockang = false
|
|
|
|
return true
|
|
end
|
|
end,
|
|
walkbalancefalloffright = function(ply)
|
|
lockang = true
|
|
|
|
if BodyAnimCycle >= 1 then
|
|
lockang = false
|
|
|
|
return true
|
|
end
|
|
end
|
|
}
|
|
|
|
fbfunctions = {
|
|
vaultontohigh = function(ply) return true end,
|
|
swingstraight = function(ply)
|
|
BodyAnim:SetPoseParameter("swing", (ply:GetSBOffset() / 45 - 1) * 100)
|
|
end,
|
|
ziplinestart = function(ply)
|
|
if IsValid(ply:GetZipline()) then
|
|
lockang = true
|
|
CamIgnoreAng = false
|
|
BodyLimitX = 30
|
|
BodyLimitY = 90
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
end
|
|
|
|
return true
|
|
end,
|
|
zipline = function(ply)
|
|
lockang = true
|
|
CamIgnoreAng = false
|
|
BodyLimitX = 30
|
|
BodyLimitY = 90
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
return true
|
|
end,
|
|
hang = function(ply)
|
|
CamIgnoreAng = false
|
|
local ang = ply.OrigEyeAng
|
|
local eyeang = ply:EyeAngles()
|
|
local eyeangx = eyeang.x
|
|
eyeang.x = 0
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
local mul = ang:Forward():Dot(eyeang:Forward()) + 1.1
|
|
mul = math.Clamp(mul, 0.4, 1)
|
|
BodyLimitX = 80 * mul
|
|
BodyLimitY = 175
|
|
|
|
local a = math.Clamp(math.AngleDifference(ang.y, eyeang.y), -179, 179)
|
|
|
|
if not ply.hangyaw then
|
|
ply.hangyaw = 0
|
|
end
|
|
|
|
if math.abs(a) < 42 then
|
|
a = 0
|
|
end
|
|
|
|
ply.hangyaw = Lerp(FrameTime() * 15, ply.hangyaw, a)
|
|
a = ply.hangyaw
|
|
|
|
if IsValid(BodyAnimArmCopy) and IsValid(BodyAnim) then
|
|
BodyAnim:SetPoseParameter("hang_yaw", a)
|
|
BodyAnimArmCopy:SetPoseParameter("hang_yaw", a)
|
|
|
|
a = LocalPlayer():EyeAngles().x
|
|
|
|
BodyAnim:SetPoseParameter("hang_pitch", a)
|
|
BodyAnimArmCopy:SetPoseParameter("hang_pitch", a)
|
|
end
|
|
|
|
if BodyLimitX <= eyeangx then
|
|
eyeang.x = BodyLimitX - 0.1
|
|
ply:SetEyeAngles(eyeang)
|
|
end
|
|
|
|
return true
|
|
end,
|
|
hangstrafeleft = function(ply)
|
|
BodyLimitY = 40
|
|
|
|
return true
|
|
end,
|
|
hangstraferight = function(ply)
|
|
BodyLimitY = 40
|
|
|
|
return true
|
|
end,
|
|
hanghardstartvertical = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 120
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
return true
|
|
end,
|
|
hanghardstart = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 120
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
return true
|
|
end,
|
|
hanghardstart2 = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 120
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
return true
|
|
end,
|
|
hangheaveup = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 90
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
return true
|
|
end,
|
|
hangfoldedstart = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 90
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
return true
|
|
end,
|
|
hangfoldedendhang = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 90
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
ply.hangyaw = 0
|
|
|
|
return true
|
|
end,
|
|
hangfoldedheaveup = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 90
|
|
local ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
return true
|
|
end,
|
|
dodgejumpleft = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 180
|
|
end,
|
|
dodgejumpright = function(ply)
|
|
BodyLimitX = 30
|
|
BodyLimitY = 180
|
|
end,
|
|
ladderclimbdownfast = function(ply)
|
|
lockang = true
|
|
end
|
|
}
|
|
|
|
local defaultcamoffset = Vector()
|
|
|
|
local playermodelbones = {"ValveBiped.Bip01_L_UpperArm", "ValveBiped.Bip01_R_UpperArm"}
|
|
|
|
local fingers = {"ValveBiped.Bip01_L_Finger4", "ValveBiped.Bip01_L_Finger41", "ValveBiped.Bip01_L_Finger3", "ValveBiped.Bip01_L_Finger31", "ValveBiped.Bip01_L_Finger2", "ValveBiped.Bip01_L_Finger21", "ValveBiped.Bip01_L_Finger1", "ValveBiped.Bip01_L_Finger11", "ValveBiped.Bip01_R_Finger4", "ValveBiped.Bip01_R_Finger41", "ValveBiped.Bip01_R_Finger3", "ValveBiped.Bip01_R_Finger31", "ValveBiped.Bip01_R_Finger2", "ValveBiped.Bip01_R_Finger21", "ValveBiped.Bip01_R_Finger1", "ValveBiped.Bip01_R_Finger11"}
|
|
|
|
local fingerscustom = {
|
|
["ValveBiped.Bip01_L_Finger4"] = Angle(-10, 10, 0),
|
|
["ValveBiped.Bip01_L_Finger3"] = Angle(-10, 20, 0),
|
|
["ValveBiped.Bip01_L_Finger2"] = Angle(0, 20, 0),
|
|
["ValveBiped.Bip01_L_Finger1"] = Angle(10, 20, 0),
|
|
["ValveBiped.Bip01_R_Finger4"] = Angle(30, 10, 0),
|
|
["ValveBiped.Bip01_R_Finger3"] = Angle(20, 20, 0),
|
|
["ValveBiped.Bip01_R_Finger2"] = Angle(10, 20, 0)
|
|
}
|
|
|
|
eventsounds = {
|
|
hangfoldedendhang = {
|
|
[0.42] = "Handsteps.ConcreteHard",
|
|
[0.05] = "Handsteps.ConcreteSoft",
|
|
[0.25] = "Handsteps.ConcreteRelease",
|
|
[0.15] = "Handsteps.ConcreteRelease",
|
|
[0.5] = "Faith.StrainHard"
|
|
},
|
|
hangfoldedheaveup = {
|
|
[0.1] = "Faith.StrainHard"
|
|
},
|
|
hangfoldedstart = {
|
|
[0.1] = "Faith.Impact"
|
|
},
|
|
hangheaveup = {
|
|
[0] = "Faith.StrainMedium"
|
|
},
|
|
vaultontohigh = {
|
|
[0.2] = "Vault",
|
|
[0.05] = "Handsteps.ConcreteHard",
|
|
[0.25] = "Faith.StrainSoft",
|
|
[0.45] = "Footsteps.Concrete",
|
|
[0.5] = "Cloth.MovementRun",
|
|
[0.3] = "Cloth.VaultSwish"
|
|
},
|
|
vaultonto = {
|
|
[0.1] = "Footsteps.Concrete",
|
|
[0.01] = "Handsteps.ConcreteHard",
|
|
[0.025] = "Cloth.MovementRun"
|
|
},
|
|
vaultkong = {
|
|
[0.025] = "Vault"
|
|
},
|
|
snatchscar = {
|
|
[0.35] = "Melee.Foot",
|
|
[0.05] = "Melee.ArmSwoosh",
|
|
[0.1] = "Melee.LegSwoosh",
|
|
[0.15] = "Faith.StrainMedium"
|
|
},
|
|
meleeslide = {
|
|
[0.025] = "Melee.LegSwoosh"
|
|
},
|
|
meleewrleft = {
|
|
[0.035] = "Melee.LegSwoosh",
|
|
[0.075] = "Faith.StrainHard"
|
|
},
|
|
meleewrright = {
|
|
[0.035] = "Melee.LegSwoosh",
|
|
[0.075] = "Faith.StrainHard"
|
|
},
|
|
ladderclimbhangstart = {
|
|
[0] = "Footsteps.LadderHeavy",
|
|
[0.1] = "Land.Ladder"
|
|
},
|
|
ladderclimbuplefthand = {
|
|
[0] = "Release.Ladder",
|
|
[0.15] = "Footsteps.LadderMedium",
|
|
[0.2] = "Handsteps.Ladder"
|
|
},
|
|
ladderclimbuprighthand = {
|
|
[0] = "Release.Ladder",
|
|
[0.15] = "Footsteps.LadderMedium",
|
|
[0.2] = "Handsteps.Ladder"
|
|
},
|
|
ladderexittoplefthand = {
|
|
[0.45] = "Release.Ladder",
|
|
[0.1] = "Handsteps.Ladder",
|
|
[0.5] = "Release.Ladder",
|
|
[0.15] = "Handsteps.Ladder"
|
|
},
|
|
ladderexittoprighthand = {
|
|
[0.45] = "Release.Ladder",
|
|
[0.1] = "Handsteps.Ladder",
|
|
[0.5] = "Release.Ladder",
|
|
[0.15] = "Handsteps.Ladder"
|
|
},
|
|
jumpturnlandstand = {
|
|
[0.025] = "me_faith_cloth_roll_cloth.wav",
|
|
[0.25] = "Faith.StrainSoft",
|
|
[0.3] = "me_body_roll.wav"
|
|
}
|
|
}
|
|
|
|
local CharaName = "Faith"
|
|
local CharaLen = #CharaName
|
|
|
|
local function BodyEventSounds(anim)
|
|
local tbl = eventsounds[anim]
|
|
|
|
if tbl then
|
|
local ply = LocalPlayer()
|
|
|
|
for k, v in pairs(tbl) do
|
|
local func = nil
|
|
|
|
if v:Left(CharaLen) == CharaName then
|
|
func = ply.FaithVO
|
|
else
|
|
func = ply.EmitSound
|
|
end
|
|
|
|
timer.Simple(k, function()
|
|
func(ply, v)
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
|
|
camint = 1
|
|
campos = Vector()
|
|
camang = Angle()
|
|
-- local customoffset = Vector()
|
|
-- local movedback = false
|
|
local customoffsetlerp = Vector()
|
|
|
|
local function JumpCalcView(view)
|
|
if not fbanims[BodyAnimString] then
|
|
hook.Remove("BodyAnimCalcView", "JumpCalcView")
|
|
hook.Remove("BodyAnimDrawArm", "JumpArmThink")
|
|
hook.Remove("PostDrawOpaqueRenderables", "JumpArmDraw")
|
|
|
|
if IsValid(BodyAnimArmCopy) then
|
|
BodyAnimArmCopy:Remove()
|
|
end
|
|
end
|
|
|
|
-- local eyepos = LocalPlayer():EyePos()
|
|
-- local vieworigin = view.origin
|
|
|
|
BodyAnim:SetupBones()
|
|
|
|
local m = BodyAnim:GetBoneMatrix(68)
|
|
local ang = nil -- local pos, ang = nil
|
|
|
|
if m then
|
|
ang = m:GetAngles()
|
|
pos = m:GetTranslation()
|
|
end
|
|
|
|
if IsValid(ang) then
|
|
ang:Sub(view.angles)
|
|
ang:Mul(camint)
|
|
view.angles:Add(ang)
|
|
end
|
|
|
|
customoffsetlerp = LerpVector(math.min(10 * FrameTime(), 1), customoffsetlerp, customcamoffset[BodyAnimString] or defaultcamoffset)
|
|
campos = view.origin
|
|
camang = view.angles
|
|
|
|
campos:Add(LocalToWorld(customoffsetlerp, angle_zero, vector_origin, BodyAnim:GetAngles()))
|
|
|
|
if IsValid(BodyAnim) and jumpanims[BodyAnimString] and BodyAnimCycle >= 1 then
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("jumpidle"))
|
|
end
|
|
end
|
|
|
|
local function CreateBodyAnimArmCopy()
|
|
if not IsValid(BodyAnimArmCopy) and IsValid(BodyAnim) and not ignorebac[BodyAnimString] then
|
|
local ply = LocalPlayer()
|
|
BodyAnimArmCopy = ClientsideModel("models/" .. BodyAnimMDLString .. ".mdl", RENDERGROUP_BOTH)
|
|
local seq = BodyAnim:GetSequence()
|
|
|
|
if seq then
|
|
BodyAnimArmCopy:SetSequence(seq)
|
|
end
|
|
|
|
for num, _ in pairs(BodyAnim:GetBodyGroups()) do
|
|
BodyAnimArmCopy:SetBodygroup(num - 1, BodyAnim:GetBodygroup(num - 1))
|
|
BodyAnimArmCopy:SetSkin(BodyAnim:GetSkin())
|
|
end
|
|
|
|
for k, v in ipairs(fingers) do
|
|
local b = BodyAnimArmCopy:LookupBone(v)
|
|
|
|
if b then
|
|
BodyAnimArmCopy:ManipulateBoneAngles(b, Angle(0, 30, 0))
|
|
end
|
|
end
|
|
|
|
for k, v in pairs(fingerscustom) do
|
|
local b = BodyAnimArmCopy:LookupBone(k)
|
|
|
|
if b then
|
|
BodyAnimArmCopy:ManipulateBoneAngles(b, v)
|
|
end
|
|
end
|
|
|
|
ply.BAC = BodyAnimArmCopy
|
|
end
|
|
|
|
return BodyAnimArmCopy
|
|
end
|
|
|
|
hook.Add("BodyAnimRemove", "BodyAnimArmRemove", function()
|
|
if IsValid(BodyAnimArmCopy) then
|
|
BodyAnimArmCopy:Remove()
|
|
end
|
|
end)
|
|
|
|
local function JumpArmThink()
|
|
local bac = CreateBodyAnimArmCopy()
|
|
|
|
if IsValid(bac) then return true end
|
|
end
|
|
|
|
function ArmInterrupting(bac)
|
|
return IsValid(bac) and arminterrupts[bac:GetSequenceName(bac:GetSequence())]
|
|
end
|
|
|
|
local defaultarmoffset = Vector()
|
|
local armoffset = Vector()
|
|
local armoffsetlerp = Vector()
|
|
-- local drawnorigin = false
|
|
local drawnskytime = 0
|
|
|
|
local function JumpArmDraw(a, b, c)
|
|
local bac = CreateBodyAnimArmCopy()
|
|
|
|
if IsValid(bac) and not LocalPlayer():ShouldDrawLocalPlayer() and IsValid(BodyAnim) and not c then
|
|
local ply = LocalPlayer()
|
|
local ang = ply:EyeAngles()
|
|
ang.z = 0
|
|
|
|
if not nospinebend[BodyAnimString] then
|
|
BodyAnim:ManipulateBoneAngles(1, Angle(0, math.max(ang.x * 0.5, 0), 0))
|
|
else
|
|
BodyAnim:ManipulateBoneAngles(1, angle_zero)
|
|
end
|
|
|
|
cam.IgnoreZ(true)
|
|
|
|
-- local camposoff = campos - ply:EyePos()
|
|
local attachId = bac:LookupAttachment("eyes")
|
|
local offset = bac:GetAttachment(attachId)
|
|
|
|
if not offset then return end
|
|
|
|
local arminterrupting = ArmInterrupting(bac)
|
|
local arminterruptboost = arminterrupting and 4 or 1
|
|
|
|
armoffsetlerp = LerpVector(math.min(10 * FrameTime() * arminterruptboost, 1), armoffsetlerp, not arminterrupting and customarmoffset[BodyAnimString] or defaultarmoffset)
|
|
armoffset:Set(armoffsetlerp)
|
|
|
|
local pos = offset.Pos
|
|
local ang = offset.Ang
|
|
|
|
if not IsValid(BodyAnimMDLarm) then return end
|
|
|
|
BodyAnimMDLarm:SetNoDraw(true)
|
|
bac:SetParent(nil)
|
|
bac:SetAngles(angle_zero)
|
|
bac:SetPos(Vector(0, 0, -64))
|
|
|
|
if not worldarm[BodyAnimString] then
|
|
bac:SetRenderOrigin(bac:GetPos())
|
|
end
|
|
|
|
BodyAnimMDLarm:SetParent(bac)
|
|
|
|
if not ply.armfollowlerp then
|
|
ply.armfollowlerp = 0
|
|
end
|
|
|
|
if armfollowanims[BodyAnimString] and not ArmInterrupting(bac) then
|
|
ang.x = ply.armfollowlerp < 1 and Lerp(ply.armfollowlerp, 0, ply:EyeAngles().x) or ply:EyeAngles().x
|
|
ply.armfollowlerp = math.Approach(ply.armfollowlerp, 1, FrameTime() * 1.5)
|
|
elseif armlock[BodyAnimString] then
|
|
ang.x = ply:EyeAngles().x
|
|
ang.y = ply:EyeAngles().y - ply.OrigEyeAng.y
|
|
else
|
|
ang.x = ply.armfollowlerp > 0 and Lerp(ply.armfollowlerp, 0, ply:EyeAngles().x) or 0
|
|
ang.y = 0
|
|
ply.armfollowlerp = math.Approach(ply.armfollowlerp, 0, FrameTime() * 2.5 * arminterruptboost)
|
|
end
|
|
|
|
pos:Add(armoffset)
|
|
pos:Add(customoffsetlerp)
|
|
ang:Add(ViewTiltAngle)
|
|
|
|
if CamShake then
|
|
ang:Add(CamShakeAng)
|
|
end
|
|
|
|
local activewep = ply:GetActiveWeapon()
|
|
|
|
if IsValid(activewep) and activewep:GetClass() == "runnerhands" then
|
|
if not worldarm[BodyAnimString] then
|
|
cam.Start3D(pos, ang)
|
|
cam.IgnoreZ(ignorezarm[BodyAnimString] or false)
|
|
|
|
BodyAnimMDLarm:SetPos(pos)
|
|
bac:SetupBones()
|
|
BodyAnimMDLarm:DrawModel()
|
|
cam.End3D()
|
|
else
|
|
local armoff = LocalToWorld(armoffset, angle_zero, vector_origin, BodyAnim:GetAngles())
|
|
|
|
cam.IgnoreZ(ignorezarm[BodyAnimString] or false)
|
|
bac:SetAngles(BodyAnim:GetAngles())
|
|
bac:SetPos(BodyAnim:GetPos() + armoff)
|
|
bac:SetRenderOrigin(nil)
|
|
|
|
BodyAnimMDLarm:SetPos(BodyAnim:GetPos() + armoff)
|
|
bac:SetupBones()
|
|
BodyAnimMDLarm:DrawModel()
|
|
end
|
|
elseif IsValid(activewep) then
|
|
ply:DrawViewModel(true)
|
|
ply:GetViewModel():SetNoDraw(false)
|
|
end
|
|
|
|
cam.IgnoreZ(false)
|
|
|
|
local seq = BodyAnim:GetSequence()
|
|
|
|
if seq and (not arminterrupts[bac:GetSequenceName(bac:GetSequence())] or bac:GetCycle() >= 1) then
|
|
if bac:GetSequence() ~= seq then
|
|
for k, v in ipairs(fingers) do
|
|
local b = bac:LookupBone(v)
|
|
|
|
if b then
|
|
bac:ManipulateBoneAngles(b, Angle(0, 30, 0))
|
|
end
|
|
end
|
|
|
|
for k, v in pairs(fingerscustom) do
|
|
local b = bac:LookupBone(k)
|
|
|
|
if b then
|
|
bac:ManipulateBoneAngles(b, v)
|
|
end
|
|
end
|
|
end
|
|
|
|
bac:SetSequence(seq)
|
|
bac:SetCycle(BodyAnim:GetCycle() or 1)
|
|
elseif seq and drawnskytime < CurTime() then
|
|
bac:SetCycle(bac:GetCycle() + FrameTime() / bac:SequenceDuration())
|
|
end
|
|
|
|
if (not b or not skybox3d) and not worldarm[BodyAnimString] then
|
|
bac:SetRenderOrigin(campos)
|
|
|
|
drawnorigin = true
|
|
end
|
|
|
|
drawnskytime = CurTime()
|
|
end
|
|
end
|
|
|
|
hook.Add("PreRender", "JumpArmOriginVar", function()
|
|
drawnorigin = false
|
|
end)
|
|
|
|
hook.Add("PostDrawSkyBox", "JumpArm3DSky", function()
|
|
skybox3d = true
|
|
|
|
hook.Remove("PostDrawSkyBox", "JumpArm3DSky")
|
|
end)
|
|
|
|
hook.Add("CalcViewModelView", "lol", function(wep, vm, oldpos, oldang, pos, ang)
|
|
pos:Sub(oldpos)
|
|
pos:Add(campos)
|
|
ang:Sub(oldang)
|
|
ang:Add(camang)
|
|
|
|
if wep.m_ViewModel then
|
|
local vmoffsets = wep.ViewModelVars
|
|
local lerpaimpos = vmoffsets.LerpAimPos
|
|
lerpaimpos.y = 0
|
|
local cpos, cang = LocalToWorld(vector_origin, angle_zero, lerpaimpos, vmoffsets.LerpAimAngles)
|
|
|
|
pos:Add(cpos)
|
|
ang:Add(cang)
|
|
|
|
wep.m_ViewModel:SetRenderOrigin(pos)
|
|
wep.m_ViewModel:SetAngles(ang)
|
|
end
|
|
end)
|
|
|
|
local function JumpAnim(event, ply)
|
|
if events[event] then
|
|
local wasjumpanim = fbanims[BodyAnimString] and IsValid(BodyAnim)
|
|
|
|
if not wasjumpanim then
|
|
RemoveBodyAnim()
|
|
end
|
|
|
|
if event == "jump" or event == "jumpfar" or event:Left(11) == "jumpwallrun" and ply:GetWallrunDir():Dot(ply:EyeAngles():Forward()) < 0.75 then
|
|
if event == "jumpfar" then
|
|
animtable.AnimString = "jumpfast"
|
|
else
|
|
animtable.AnimString = "jumpslow"
|
|
end
|
|
|
|
lockang = false
|
|
CamIgnoreAng = true
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
else
|
|
BodyAnimCycle = 0
|
|
animtable.AnimString = eventslut[event]
|
|
end
|
|
|
|
BodyAnimString = animtable.AnimString
|
|
|
|
BodyEventSounds(BodyAnimString)
|
|
|
|
if not nocyclereset[BodyAnimString] then
|
|
BodyAnimCycle = 0
|
|
end
|
|
|
|
if not wasjumpanim then
|
|
StartBodyAnim(animtable)
|
|
|
|
if not IsValid(BodyAnim) then return end
|
|
|
|
CreateBodyAnimArmCopy()
|
|
|
|
if not ply:ShouldDrawLocalPlayer() or CurTime() < 10 then
|
|
for k, v in ipairs(playermodelbones) do
|
|
local b = BodyAnim:LookupBone(v)
|
|
|
|
if b then
|
|
BodyAnim:ManipulateBonePosition(b, Vector(0, 0, 100 * (k == 1 and -1 or 1)))
|
|
end
|
|
end
|
|
end
|
|
|
|
hook.Add("BodyAnimCalcView", "JumpCalcView", JumpCalcView)
|
|
hook.Add("BodyAnimDrawArm", "JumpArmThink", JumpArmThink)
|
|
hook.Add("PostDrawOpaqueRenderables", "JumpArmDraw", JumpArmDraw)
|
|
else
|
|
BodyAnim:ResetSequence(BodyAnim:LookupSequence(BodyAnimString))
|
|
end
|
|
end
|
|
end
|
|
|
|
hook.Add("OnParkour", "JumpAnim", JumpAnim)
|
|
|
|
function ArmInterrupt(anim)
|
|
if arminterrupts[anim] then
|
|
local arm = CreateBodyAnimArmCopy()
|
|
|
|
if IsValid(arm) then
|
|
for k, v in ipairs(fingers) do
|
|
local b = BodyAnimArmCopy:LookupBone(v)
|
|
|
|
if b then
|
|
arm:ManipulateBoneAngles(b, angle_zero)
|
|
end
|
|
end
|
|
|
|
for k, v in pairs(fingerscustom) do
|
|
local b = BodyAnimArmCopy:LookupBone(k)
|
|
|
|
if b then
|
|
arm:ManipulateBoneAngles(b, angle_zero)
|
|
end
|
|
end
|
|
|
|
arm:SetSequence(anim)
|
|
arm:SetCycle(0)
|
|
end
|
|
end
|
|
end
|
|
|
|
local lastwr = 0
|
|
|
|
hook.Add("Think", "FBAnimHandler", function()
|
|
local ply = LocalPlayer()
|
|
|
|
if not IsValid(BodyAnim) and ply:Alive() then
|
|
JumpAnim("fall", ply)
|
|
|
|
camjoint = "eyes"
|
|
BodyAnimSpeed = 1
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
end
|
|
|
|
if ply:GetWallrun() >= 2 then
|
|
BodyLimitY = 95
|
|
end
|
|
|
|
if ply:GetWallrun() == 0 and lastwr > 0 then
|
|
BodyLimitY = 180
|
|
end
|
|
|
|
lastwr = ply:GetWallrun()
|
|
end)
|
|
|
|
local animtr, animtr_result = nil, nil
|
|
local oldnewang = Angle()
|
|
|
|
local function JumpThink()
|
|
if IsValid(BodyAnim) then
|
|
if not animtr then
|
|
animtr = {}
|
|
animtr_result = {}
|
|
animtr.filter = ply
|
|
animtr.output = animtr_result
|
|
end
|
|
|
|
local lastBAString = BodyAnimString
|
|
BodyAnimString = BodyAnim:GetSequenceName(BodyAnim:GetSequence())
|
|
|
|
if fbanims[BodyAnimString] then
|
|
local ply = LocalPlayer()
|
|
|
|
if jumpanims[BodyAnimString] and (ply:OnGround() or ply:GetWallrun() ~= 0 or ply:GetMantle() ~= 0) then
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("runfwd"))
|
|
BodyAnimCycle = 0
|
|
end
|
|
|
|
local ang = ply:EyeAngles()
|
|
ang[1] = 0
|
|
|
|
animtr.start = ply:GetPos()
|
|
|
|
local angold = ang
|
|
local lerpspeed = 10
|
|
local vel = LocalPlayer():GetVelocity()
|
|
local vel_l = vel:Length()
|
|
local moving = ply:KeyDown(IN_FORWARD) or ply:KeyDown(IN_MOVELEFT) or ply:KeyDown(IN_MOVERIGHT)
|
|
local back = ply:KeyDown(IN_BACK)
|
|
|
|
if runanims[BodyAnimString] then
|
|
if lastBAString == "stand" and vel_l > 0 then
|
|
BodyAnimCycle = ply:GetStepRight() and 0.5 or 0
|
|
end
|
|
|
|
lockang = false
|
|
CamIgnoreAng = true
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
vel.z = 0
|
|
|
|
if back and vel_l > 10 then
|
|
ang = vel:Angle()
|
|
|
|
if ang:Forward():Dot(angold:Forward()) < 0 then
|
|
ang:RotateAroundAxis(Vector(0, 0, 1), 180)
|
|
end
|
|
|
|
BodyAnimSpeed = math.Clamp(vel_l / 150, 0.1, 0.8)
|
|
lerpspeed = 300
|
|
moveback = true
|
|
|
|
if not ply:Crouching() then
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("runbwd"))
|
|
else
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("crouchbwd"))
|
|
end
|
|
elseif vel_l > 0 and moving then
|
|
ang = vel:Angle()
|
|
|
|
if moveback then
|
|
ang:RotateAroundAxis(Vector(0, 0, 1), -180)
|
|
|
|
if ply:KeyDown(IN_FORWARD) then
|
|
moveback = false
|
|
else
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("runbwd"))
|
|
end
|
|
end
|
|
|
|
if ply:InOverdrive() then
|
|
BodyAnimSpeed = math.Clamp(vel_l / 320, 0.85, 1.5)
|
|
else
|
|
local dot = ang:Forward():Dot(angold:Forward())
|
|
|
|
if dot < 0 then
|
|
ang:RotateAroundAxis(Vector(0, 0, 1), 180 * math.abs(dot))
|
|
end
|
|
|
|
if vel_l > 295 then
|
|
BodyAnimSpeed = math.Clamp(vel_l / 300, 0.85, 1)
|
|
elseif moveback then
|
|
BodyAnimSpeed = math.Clamp(vel_l / 150, 0.1, 0.8)
|
|
else
|
|
BodyAnimSpeed = math.Clamp(vel_l / 255, 0.85, 1.15)
|
|
end
|
|
end
|
|
|
|
lerpspeed = 30
|
|
|
|
if vel:Length() > 300 and ply:OnGround() then
|
|
if ply:InOverdrive() and BodyAnimString ~= "sprintfwd" and vel:Length() < 300 then
|
|
ply:EmitSound("CyborgRun")
|
|
end
|
|
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("sprintfwd"))
|
|
elseif ply:OnGround() and not moveback then
|
|
if not ply:Crouching() then
|
|
if ply:KeyDown(IN_WALK) or vel:Length() < 150 then
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("walkfwd"))
|
|
else
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("runfwd"))
|
|
end
|
|
else
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("crouchfwd"))
|
|
end
|
|
end
|
|
else
|
|
if not ply:Crouching() and BodyAnimString:Left(6) == "crouch" or BodyAnimString == "walkfwd" or BodyAnimString == "runfwd" or BodyAnimString == "sprintfwd" or BodyAnimString == "runbwd" then
|
|
BodyAnimCycle = 0
|
|
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("walktostandleft"))
|
|
end
|
|
|
|
if (BodyAnimString == "stand" or BodyAnimString == "walktostandleft" or BodyAnimString == "jumpcoilend") and ply:Crouching() or BodyAnimString == "crouchfwd" or BodyAnimString == "crouchbwd" then
|
|
BodyAnimCycle = 0
|
|
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("crouchstill"))
|
|
end
|
|
end
|
|
|
|
if vel_l < 64 then
|
|
ang = angold
|
|
end
|
|
else
|
|
lerpspeed = 10
|
|
BodyAnimSpeed = customspeed[BodyAnimString] or animtable.BodyAnimSpeed
|
|
end
|
|
|
|
if jumpanims2[BodyAnimString] and vel.z < -5 then
|
|
local pos = ply:GetPos()
|
|
local groundcheck = Vector(0, 0, -35)
|
|
|
|
groundcheck:Add(pos)
|
|
|
|
animtr.start = pos
|
|
animtr.endpos = groundcheck
|
|
animtr.filter = ply
|
|
|
|
util.TraceLine(animtr)
|
|
|
|
if animtr_result.Hit then
|
|
BodyAnim:SetSequence("jumpidle")
|
|
end
|
|
end
|
|
|
|
if ply:GetWallrun() >= 2 and ply:GetWallrun() < 4 and ply:GetMelee() == 0 then
|
|
vel.z = 0
|
|
ang = vel:Angle()
|
|
CamIgnoreAng = false
|
|
local bs = ply:GetWallrun() == 2 and "wallrunrightstart" or "wallrunleftstart"
|
|
local bl = ply:GetWallrun() == 2 and "wallrunright" or "wallrunleft"
|
|
|
|
if BodyAnimString == bs and BodyAnimCycle >= 1 then
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence(bl))
|
|
|
|
BodyAnimSpeed = 1.5
|
|
elseif BodyAnimString ~= bl then
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence(bs))
|
|
end
|
|
elseif BodyAnimString == "wallrunright" or BodyAnimString == "wallrunleft" or BodyAnimString == "wallrunrightstart" or BodyAnimString == "wallrunleftstart" then
|
|
BodyAnimCycle = 0
|
|
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("jumpair"))
|
|
end
|
|
|
|
if BodyAnimString == "jumpturnfly" or BodyAnimString == "jumpturnflyidle" then
|
|
if ply:GetQuickturn() then
|
|
BodyAnim:SetAngles(ang + Angle(0, 6.5, 0))
|
|
|
|
ply.OrigEyeAng = ang
|
|
end
|
|
|
|
if ply:OnGround() then
|
|
BodyAnimCycle = 0
|
|
|
|
BodyAnim:SetSequence("jumpturnland")
|
|
ply:EmitSound("Cloth.FallShortHard")
|
|
ply:FaithVO("Faith.Impact")
|
|
DoImpactBlur(6)
|
|
end
|
|
elseif (BodyAnimString == "jumpturnland" or BodyAnimString == "jumpturnlandidle" or BodyAnimString == "jumpturnlandstand" or BodyAnimString == "jumpturnlandstandgun") and not ply:OnGround() and ply:GetMoveType() ~= MOVETYPE_NOCLIP and ply:WaterLevel() < 3 then
|
|
BodyAnimCycle = 0
|
|
|
|
BodyAnim:SetSequence("jumpturnflyidle")
|
|
end
|
|
|
|
if ply:GetSliding() then
|
|
ang = vel:Angle()
|
|
end
|
|
|
|
local check = transitionchecks[BodyAnimString]
|
|
|
|
if check and check(ply) or not check and BodyAnimCycle >= 0.9 and transitionanims[BodyAnimString] then
|
|
BodyAnim:SetSequence(transitionanims[BodyAnimString])
|
|
end
|
|
|
|
if BodyAnimString == "wallrunverticalstart" or BodyAnimString == "wallrunvertical" then
|
|
ang = ply.WallrunOrigAng or ang
|
|
BodyAnimSpeed = 1.2 * math.Clamp((LocalPlayer():GetWallrunTime() - CurTime()) / 1.2, 0.5, 1)
|
|
end
|
|
|
|
if BodyAnimString == "vaultover" or BodyAnimString == "vaultkong" or BodyAnimString == "stepuprightleg" or BodyAnimString == "vaultonto" then
|
|
if BodyAnimCycle < 0.65 then
|
|
local target = ply:GetMantleEndPos() - ply:GetMantleStartPos()
|
|
target.z = 0
|
|
target = target:Angle()
|
|
ang = target or ang
|
|
|
|
if BodyAnimString == "vaultover" or BodyAnimString == "vaultkong" or BodyAnimString == "vaultonto" then
|
|
BodyLimitX = 15
|
|
BodyLimitY = 70
|
|
|
|
if BodyAnimString == "vaultkong" then
|
|
BodyLimitX = 25
|
|
end
|
|
end
|
|
else
|
|
BodyLimitX = 90
|
|
BodyLimitY = 180
|
|
end
|
|
end
|
|
|
|
if BodyAnimString == "wallrunverticalturn" then
|
|
BodyAnimSpeed = 1.5
|
|
ang = ply:EyeAngles()
|
|
ang.x = 0
|
|
ang.z = 0
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
ply.OrigEyeAng = ang
|
|
|
|
return
|
|
end
|
|
|
|
if BodyAnimString:Left(6) == "ladder" and BodyAnimString ~= "ladderclimbdownfast" then
|
|
BodyLimitX = 25
|
|
BodyLimitY = 90
|
|
ang = ply.OrigEyeAng
|
|
|
|
BodyAnim:SetAngles(ang)
|
|
|
|
CamIgnoreAng = false
|
|
lockang = false
|
|
|
|
return
|
|
end
|
|
|
|
local func = fbfunctions[BodyAnimString]
|
|
func = func and func(ply)
|
|
|
|
if func == true then return end
|
|
|
|
if ply:GetMantle() == 4 then
|
|
BodyAnim:SetSequence("vaultoverhigh")
|
|
|
|
return
|
|
end
|
|
|
|
if ply:GetMantle() == 5 then
|
|
BodyAnim:SetSequence("vaultontohigh")
|
|
|
|
return
|
|
end
|
|
|
|
if not stillanims[BodyAnimString] then
|
|
local speed = vel_l > 5 and math.min(vel_l / 200, 1) or 1
|
|
local newang = LerpAngle(math.min(lerpspeed * FrameTime() * speed, 1), BodyAnim:GetAngles(), ang)
|
|
local ang = ply:EyeAngles()
|
|
ang[1] = 0
|
|
ang[3] = 0
|
|
|
|
if vel_l > 0 or BodyAnimString == "walktostandleft" or ply:Crouching() or IsValid(ply:GetBalanceEntity()) then
|
|
if newang:Forward():Dot(ang:Forward()) > -0.25 then
|
|
ply.OrigEyeAng = newang
|
|
|
|
BodyAnim:SetAngles(newang)
|
|
oldnewang:Set(BodyAnim:GetAngles())
|
|
else
|
|
oldnewang:Set(LerpAngle(FrameTime() * 8, oldnewang, ang))
|
|
|
|
ply.OrigEyeAng = Angle(oldnewang)
|
|
|
|
BodyAnim:SetAngles(oldnewang)
|
|
end
|
|
elseif newang:Forward():Dot(ang:Forward()) < 0.25 then
|
|
local stepmat = ply.LastStepMat or game.SinglePlayer() and ply:GetNW2String("LastStepMat", "Concrete") or "Concrete"
|
|
BodyAnimCycle = 0
|
|
|
|
BodyAnim:SetSequence(BodyAnim:LookupSequence("walktostandleft"))
|
|
ply:EmitSound("Release." .. stepmat)
|
|
|
|
timer.Simple(0.15, function()
|
|
ply:EmitSound("Footsteps." .. stepmat)
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
hook.Add("Think", "JumpThink", JumpThink) |