mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
@@ -0,0 +1,749 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
SWEP.Base = "arccw_base"
|
||||
SWEP.Spawnable = true -- this obviously has to be set to true
|
||||
SWEP.Category = "Willard - Modern Weaponry" -- edit this if you like
|
||||
SWEP.AdminOnly = false
|
||||
|
||||
SWEP.PrintName = "MP-155"
|
||||
SWEP.TrueName = "MP-155"
|
||||
SWEP.Trivia_Class = "Semi-automatic shotgun"
|
||||
SWEP.Trivia_Desc = "Russian smoothbore multi-shot MP-155 12 gauge shotgun, manufactured by IzhMekh (\"Izhevsky Mechanical Plant\"). The gun weighs less than its predecessor MP-153 and features enhanced ergonomics and an easy-to-replace barrel mechanism. The new design also makes it easier to use for left-handed users."
|
||||
SWEP.Trivia_Manufacturer = "Izhmekh"
|
||||
SWEP.Trivia_Calibre = "12 Gauge"
|
||||
SWEP.Trivia_Mechanism = "Gas-operated Rotating bolt"
|
||||
SWEP.Trivia_Country = "Russia"
|
||||
SWEP.Trivia_Year = 2017
|
||||
|
||||
SWEP.Slot = 4
|
||||
|
||||
SWEP.UseHands = true
|
||||
|
||||
SWEP.ViewModel = "models/weapons/arccw/darsu_eft/c_mp153.mdl"
|
||||
SWEP.WorldModel = "models/weapons/arccw/darsu_eft/c_mp153.mdl"
|
||||
SWEP.ViewModelFOV = 70
|
||||
|
||||
SWEP.DefaultBodygroups = "1415003000"
|
||||
|
||||
SWEP.Num = 8 -- number of shots per trigger pull.
|
||||
SWEP.Damage = 10
|
||||
SWEP.DamageMin = 10 -- damage done at maximum range
|
||||
SWEP.RangeMin = 20 -- in METRES
|
||||
SWEP.Range = 90 -- in METRES
|
||||
SWEP.Penetration = 3
|
||||
SWEP.DamageType = DMG_BULLET
|
||||
SWEP.ShootEntity = nil -- entity to fire, if any
|
||||
-- IN M/S
|
||||
SWEP.ChamberSize = 1 -- how many rounds can be chambered.
|
||||
SWEP.Primary.ClipSize = 4 -- DefaultClip is automatically set.
|
||||
SWEP.ExtendedClipSize = 8
|
||||
|
||||
SWEP.PhysBulletMuzzleVelocity = 415
|
||||
|
||||
SWEP.TriggerDelay = false
|
||||
|
||||
SWEP.ReloadInSights = true
|
||||
SWEP.ReloadInSights_FOVMult = 1
|
||||
|
||||
SWEP.Recoil = 2.5
|
||||
SWEP.RecoilSide = 2
|
||||
|
||||
SWEP.RecoilRise = 0.3
|
||||
SWEP.RecoilPunch = 2.5
|
||||
SWEP.VisualRecoilMult = 10
|
||||
SWEP.RecoilPunchBackMax = 18
|
||||
SWEP.RecoilPunchBackMaxSights = 19 -- may clip with scopes
|
||||
|
||||
SWEP.Delay = 60 / 120 -- 60 / RPM.
|
||||
SWEP.Firemodes = {
|
||||
{
|
||||
Mode = 1,
|
||||
},
|
||||
{
|
||||
Mode = 0
|
||||
}
|
||||
}
|
||||
|
||||
SWEP.NPCWeaponType = "weapon_shotgun"
|
||||
SWEP.NPCWeight = 100
|
||||
|
||||
SWEP.AccuracyMOA = 48 -- accuracy in Minutes of Angle. There are 60 MOA in a degree.
|
||||
SWEP.HipDispersion = 350 -- inaccuracy added by hip firing.
|
||||
SWEP.MoveDispersion = 300
|
||||
|
||||
SWEP.Primary.Ammo = "buckshot" -- what ammo type the gun uses
|
||||
SWEP.MagID = "MP153" -- the magazine pool this gun draws from
|
||||
|
||||
SWEP.ShootVol = 100 -- volume of shoot sound
|
||||
SWEP.ShootPitch = 100 -- pitch of shoot sound
|
||||
|
||||
SWEP.ShootSound = {"weapons/darsu_eft/mp153/mr153_fire_close1.wav", "weapons/darsu_eft/mp153/mr153_fire_close2.wav"}
|
||||
SWEP.ShootSoundSilenced = "weapons/darsu_eft/mp153/mr133_fire_silenced_close.wav"
|
||||
SWEP.DistantShootSound = {"weapons/darsu_eft/mp153/mr153_fire_distant1.wav", "weapons/darsu_eft/mp153/mr153_fire_distant2.wav"}
|
||||
|
||||
SWEP.MuzzleEffect = "muzzleflash_shotgun"
|
||||
SWEP.ShellModel = "models/weapons/arccw/eft_shells/patron_12x70_shell.mdl"
|
||||
SWEP.ShellPitch = 100
|
||||
SWEP.ShellScale = 1.5
|
||||
SWEP.ShellRotateAngle = Angle(0, 180, 0)
|
||||
|
||||
SWEP.MuzzleEffectAttachment = 1 -- which attachment to put the muzzle on
|
||||
SWEP.CaseEffectAttachment = 2 -- which attachment to put the case effect on
|
||||
SWEP.CamAttachment = 3 -- if set, this attachment will control camera movement
|
||||
|
||||
SWEP.SpeedMult = 0.94
|
||||
SWEP.SightedSpeedMult = 0.8
|
||||
SWEP.SightTime = 0.5*1.07
|
||||
|
||||
SWEP.IronSightStruct = {
|
||||
Pos = Vector(-4.281, -2, 0.681),
|
||||
Ang = Angle(0.25, 0.004, 0),
|
||||
Magnification = 1.1,
|
||||
SwitchToSound = "", -- sound that plays when switching to this sight
|
||||
CrosshairInSights = false
|
||||
}
|
||||
|
||||
SWEP.ProceduralRegularFire = false
|
||||
SWEP.ProceduralIronFire = false
|
||||
|
||||
SWEP.Jamming = false
|
||||
SWEP.HeatCapacity = 9
|
||||
SWEP.HeatDissipation = 0.3
|
||||
SWEP.HeatLockout = true -- overheating means you cannot fire until heat has been fully depleted
|
||||
SWEP.HeatFix = true -- when the "fix" animation is played, all heat is restored.
|
||||
|
||||
SWEP.Malfunction = false
|
||||
SWEP.MalfunctionJam = false -- After a malfunction happens, the gun will dryfire until reload is pressed. If unset, instead plays animation right after.
|
||||
SWEP.MalfunctionTakeRound = false -- When malfunctioning, a bullet is consumed.
|
||||
SWEP.MalfunctionWait = 0 -- The amount of time to wait before playing malfunction animation (or can reload)
|
||||
SWEP.MalfunctionMean = 48 -- The mean number of shots between malfunctions, will be autocalculated if nil
|
||||
SWEP.MalfunctionVariance = 0.2 -- The fraction of mean for variance. e.g. 0.2 means 20% variance
|
||||
SWEP.MalfunctionSound = "weapons/arccw/malfunction.wav"
|
||||
|
||||
SWEP.HoldtypeHolstered = "normal"
|
||||
SWEP.HoldtypeActive = "shotgun"
|
||||
SWEP.HoldtypeSights = "rpg"
|
||||
|
||||
SWEP.AnimShoot = ACT_HL2MP_GESTURE_RANGE_ATTACK_PISTOL
|
||||
|
||||
SWEP.ActivePos = Vector(0.2, -3.5, 0.7)
|
||||
SWEP.ActiveAng = Angle(0, 0, 0)
|
||||
|
||||
SWEP.CrouchPos = Vector(-1.2, -4.5, 0.2)
|
||||
SWEP.CrouchAng = Angle(0, 0, -6)
|
||||
|
||||
SWEP.HolsterPos = Vector(0.2, -3.5, 0.7)
|
||||
SWEP.HolsterAng = Angle(-7.036, 30.016, 0)
|
||||
|
||||
SWEP.BarrelOffsetSighted = Vector(0, 0, -1)
|
||||
SWEP.BarrelOffsetHip = Vector(2, 0, -2)
|
||||
SWEP.BarrelOffsetCrouch = Vector(0, 0, -2)
|
||||
|
||||
SWEP.CustomizePos = Vector(0.2, -3.5, 0.7)
|
||||
SWEP.CustomizeAng = Angle(0, 0, 0)
|
||||
|
||||
SWEP.BarrelLength = 28
|
||||
|
||||
SWEP.BulletBones = { -- the bone that represents bullets in gun/mag
|
||||
[1] = {"shellport", "patron_in_weapon"},
|
||||
}
|
||||
|
||||
SWEP.AttachmentElements = {
|
||||
["sightmount"] = {VMBodygroups = {{ind = 4, bg = 1}},},
|
||||
["bottommount"] = {VMBodygroups = {{ind = 5, bg = 2}},},
|
||||
|
||||
|
||||
["m5"] = {VMBodygroups = {{ind = 3, bg = 6}},},
|
||||
["m6"] = {VMBodygroups = {{ind = 3, bg = 7}},},
|
||||
["m7"] = {VMBodygroups = {{ind = 3, bg = 8}},},
|
||||
["m8"] = {VMBodygroups = {{ind = 3, bg = 9}},},
|
||||
|
||||
["ultimapistol"] = {
|
||||
VMBodygroups = {{ind = 6, bg = 4}},
|
||||
Override_IronSightStruct = {
|
||||
Pos = Vector(-4.281, -4.5, -1.0),
|
||||
Ang = Angle(0.25, 0.004, 0),
|
||||
Magnification = 1.5,
|
||||
}
|
||||
},
|
||||
["ultimatoprail"] = {
|
||||
VMBodygroups = {{ind = 4, bg = 2}},
|
||||
AttPosMods = {
|
||||
[1] = {
|
||||
vpos = Vector(0, 19, 2.9),
|
||||
vang = Angle(0, -90, 0),
|
||||
},
|
||||
},
|
||||
Override_IronSightStruct = {
|
||||
Pos = Vector(-4.281, -4.5, -1.0),
|
||||
Ang = Angle(0.25, 0.004, 0),
|
||||
Magnification = 1.5,
|
||||
},
|
||||
NameChange = "MP-155 Ultima",
|
||||
TrueNameChange = "MP-155 Ultima",
|
||||
},
|
||||
["ultimastock"] = {VMBodygroups = {{ind = 8, bg = 1}},},
|
||||
|
||||
["ultimapistolend"] = {VMBodygroups = {{ind = 7, bg = 1}},},
|
||||
["ultimastockendL"] = {VMBodygroups = {{ind = 7, bg = 2}},},
|
||||
["ultimastockendM"] = {VMBodygroups = {{ind = 7, bg = 3}},},
|
||||
["ultimastockendS"] = {VMBodygroups = {{ind = 7, bg = 4}},},
|
||||
|
||||
["ultimacamera"] = {VMBodygroups = {{ind = 9, bg = 1}},},
|
||||
|
||||
["ultimahg"] = {VMBodygroups = {{ind = 2, bg = 2}},},
|
||||
|
||||
["12rip"] = {VMBodygroups = {{ind = 10, bg = 1}},},
|
||||
["12fl"] = {VMBodygroups = {{ind = 10, bg = 2}},},
|
||||
["12dss"] = {VMBodygroups = {{ind = 10, bg = 3}},},
|
||||
["12bmg"] = {VMBodygroups = {{ind = 10, bg = 4}},},
|
||||
["12ap20"] = {VMBodygroups = {{ind = 10, bg = 5}},},
|
||||
["12ftx"] = {VMBodygroups = {{ind = 10, bg = 6}},},
|
||||
["12g40"] = {VMBodygroups = {{ind = 10, bg = 7}},},
|
||||
["12cop"] = {VMBodygroups = {{ind = 10, bg = 8}},},
|
||||
["12p3"] = {VMBodygroups = {{ind = 10, bg = 9}},},
|
||||
["12p6u"] = {VMBodygroups = {{ind = 10, bg = 10}},},
|
||||
["12sfp"] = {VMBodygroups = {{ind = 10, bg = 11}},},
|
||||
|
||||
["12lead"] = {VMBodygroups = {{ind = 10, bg = 10}},},
|
||||
}
|
||||
|
||||
SWEP.ExtraSightDist = 6
|
||||
SWEP.GuaranteeLaser = true
|
||||
|
||||
SWEP.WorldModelOffset = {
|
||||
pos = Vector(-10, 5.5, -2),
|
||||
ang = Angle(-10, 0, 180)
|
||||
}
|
||||
|
||||
SWEP.MirrorVMWM = true
|
||||
|
||||
SWEP.ShotgunReload = true
|
||||
SWEP.Attachments = {
|
||||
{
|
||||
PrintName = "Optic", -- print name
|
||||
DefaultAttName = "None",
|
||||
//DefaultAttIcon = Material("vgui/entities/eft_attachments/usp_sights_standard.png"),
|
||||
Slot = {"eft_optic_small", "eft_optic_medium", "eft_optic_large"}, -- what kind of attachments can fit here, can be string or table
|
||||
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
|
||||
CorrectiveAng = Angle(0, 180, 0),
|
||||
InstalledEles = {"sightmount"},
|
||||
Offset = {
|
||||
vpos = Vector(0, 17, 2.7),
|
||||
vang = Angle(0, -90, 0),
|
||||
},
|
||||
},
|
||||
{
|
||||
PrintName = "Bodykit", -- print name
|
||||
DefaultAttName = "Default",
|
||||
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp155_kit_std.png"),
|
||||
Slot = "eft_mp155_kit", -- what kind of attachments can fit here, can be string or table
|
||||
GivesFlags = {"ultima"},
|
||||
},
|
||||
{
|
||||
PrintName = "Muzzle Device",
|
||||
Slot = "eft_muzzle_12g",
|
||||
Bone = "weapon",
|
||||
DefaultAttName = "None",
|
||||
-- DefaultAttIcon = Material("vgui/entities/eft_attachments/att_scarl_muzzle_std.png"),
|
||||
Offset = {
|
||||
vpos = Vector(0, 40, 1.8),
|
||||
vang = Angle(90, -90, -90),
|
||||
},
|
||||
},
|
||||
{
|
||||
PrintName = "Magazine", -- print name
|
||||
DefaultAttName = "4-shell",
|
||||
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp153_m4.png"),
|
||||
Slot = "eft_mp153_mag", -- what kind of attachments can fit here, can be string or table
|
||||
Installed = "mag_eft_mp153_6",
|
||||
},
|
||||
{
|
||||
PrintName = "Stock", -- print name
|
||||
DefaultAttName = "Walnut stock",
|
||||
DefaultAttIcon = Material("vgui/entities/eft_attachments/mp155_stock_std.png"),
|
||||
Slot = "eft_mp155_stock", -- what kind of attachments can fit here, can be string or table
|
||||
GivesFlags = {"ultimacam"},
|
||||
},
|
||||
{
|
||||
PrintName = "Right Tactical", -- print name
|
||||
DefaultAttName = "No Tactical",
|
||||
Slot = {"eft_tactical"}, -- what kind of attachments can fit here, can be string or table
|
||||
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
|
||||
RequireFlags = {"ultima"},
|
||||
HideIfBlocked = true,
|
||||
Offset = {
|
||||
vpos = Vector(-1.17, 33.4, 1.7),
|
||||
vang = Angle(0, -90, -90),
|
||||
},
|
||||
},
|
||||
{
|
||||
PrintName = "Underbarrel",
|
||||
Slot = "eft_foregrip",
|
||||
Bone = "mod_mount_000",
|
||||
DefaultAttName = "No Underbarrel",
|
||||
Offset = {
|
||||
vpos = Vector(0, -5.5, -1.2),
|
||||
vang = Angle(90, -90, -90),
|
||||
},
|
||||
InstalledEles = {"bottommount"},
|
||||
RequireFlags = {"ultima"},
|
||||
},
|
||||
{
|
||||
PrintName = "Top Gadget", -- print name
|
||||
DefaultAttName = "No Tactical",
|
||||
Slot = {"eft_tactical_big", "eft_mp155_tac"}, -- what kind of attachments can fit here, can be string or table
|
||||
Bone = "weapon", -- relevant bone any attachments will be mostly referring to
|
||||
RequireFlags = {"ultima"},
|
||||
HideIfBlocked = true,
|
||||
Offset = {
|
||||
vpos = Vector(0, 33, 2.9),
|
||||
vang = Angle(0, -90, 180),
|
||||
},
|
||||
},
|
||||
{
|
||||
PrintName = "Ammo",
|
||||
DefaultAttName = "12/70 7mm buckshot",
|
||||
DefaultAttIcon = Material("vgui/entities/eft_attachments/ammo/12g_def.png"),
|
||||
Slot = "ammo_eft_12"
|
||||
},
|
||||
}
|
||||
|
||||
SWEP.Animations = {
|
||||
["idle"] = {
|
||||
Source = "idle"
|
||||
},
|
||||
|
||||
["draw"] = {
|
||||
Source = "draw",
|
||||
Time = 1.2,
|
||||
LHIK = true,
|
||||
LHIKIn = 0,
|
||||
LHIKOut = 0.5,
|
||||
SoundTable = {
|
||||
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0},
|
||||
},
|
||||
},
|
||||
|
||||
["holster"] = {
|
||||
Source = "holster",
|
||||
Time = 1.2,
|
||||
LHIK = true,
|
||||
LHIKIn = 0.5,
|
||||
LHIKOut = 0,
|
||||
SoundTable = {
|
||||
{s = "weapons/darsu_eft/mp153/mr133_holster.wav", t = 0},
|
||||
},
|
||||
},
|
||||
|
||||
["ready"] = {
|
||||
Source = {"ready0", "ready1", "ready2"},
|
||||
LHIK = true,
|
||||
LHIKIn = 0,
|
||||
LHIKOut = 0.5,
|
||||
SoundTable = {
|
||||
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.4},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 0.8},
|
||||
},
|
||||
},
|
||||
|
||||
["fire"] = {
|
||||
Source = "fire",
|
||||
Time = 0.15,
|
||||
ShellEjectAt = 0.05,
|
||||
SoundTable = {
|
||||
{s = "eft_shared/weap_trigger_hammer.wav", t = 0.05}
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
["sgreload_start"] = {
|
||||
Source = "reload_start",
|
||||
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
|
||||
LHIK = true,
|
||||
LHIKIn = 0.5,
|
||||
LHIKOut = 0,
|
||||
SoundTable = {
|
||||
{s = "eft_shared/weap_handoff.wav", t = 0},
|
||||
},
|
||||
},
|
||||
["sgreload_start_empty"] = {
|
||||
Source = "reload_start_empty",
|
||||
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
|
||||
LHIK = true,
|
||||
LHIKIn = 0.5,
|
||||
LHIKOut = 0,
|
||||
SoundTable = {
|
||||
{s = "eft_shared/weap_handoff.wav", t = 0},
|
||||
{s = "weapons/darsu_eft/mp153/mr133_shell_pickup.wav", t = 0.15},
|
||||
{s = "weapons/darsu_eft/mp153/mr133_shell_in_port.wav", t = 0.85},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.2},
|
||||
},
|
||||
},
|
||||
["sgreload_insert"] = {
|
||||
Source = "reload_loop",
|
||||
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
|
||||
LHIK = true,
|
||||
LHIKIn = 0,
|
||||
LHIKOut = 0,
|
||||
SoundTable = {
|
||||
{s = "weapons/darsu_eft/mp153/mr133_shell_pickup.wav", t = 0},
|
||||
{s = "weapons/darsu_eft/mp153/mr133_shell_in_mag2.wav", t = 0.3},
|
||||
},
|
||||
},
|
||||
["sgreload_finish"] = {
|
||||
Source = "reload_end",
|
||||
TPAnim = ACT_HL2MP_GESTURE_RELOAD_SHOTGUN,
|
||||
LHIK = true,
|
||||
LHIKIn = 0,
|
||||
LHIKOut = 0.5,
|
||||
SoundTable = {
|
||||
{s = "eft_shared/weap_handon.wav", t = 0.1},
|
||||
},
|
||||
},
|
||||
|
||||
["enter_inspect"] = {
|
||||
Source = "enter_inspect",
|
||||
SoundTable = {
|
||||
{s = "eft_shared/weap_handoff.wav", t = 0},
|
||||
},
|
||||
},
|
||||
|
||||
["idle_inspect"] = {
|
||||
Source = "idle_inspect",
|
||||
},
|
||||
["exit_inspect"] = {
|
||||
Source = "exit_inspect",
|
||||
SoundTable = {
|
||||
{s = "weapons/darsu_eft/mp153/mr133_draw.wav", t = 0.2},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 1.2},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.8},
|
||||
},
|
||||
},
|
||||
["unjam"] = {
|
||||
Source = {"jam0","jam1","jam2"},
|
||||
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
|
||||
SoundTable = {
|
||||
{s = "eft_shared/weap_handoff.wav", t = 0},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.8},
|
||||
{s = "weapons/darsu_eft/mp153/mr133_shell_out_mag.wav", t = 1.2},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 1.52},
|
||||
},
|
||||
},
|
||||
["fix"] = {
|
||||
Source = {"misfire0","misfire1","misfire2"},
|
||||
TPAnim = ACT_HL2MP_GESTURE_RELOAD_REVOLVER,
|
||||
LHIK = true,
|
||||
LHIKIn = 0.2,
|
||||
LHIKOut = 0.2,
|
||||
-- ShellEjectAt = 0.8,
|
||||
SoundTable = {
|
||||
{s = "eft_shared/weap_handoff.wav", t = 0},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_up.wav", t = 0.7},
|
||||
{s = "weapons/darsu_eft/mp153/mr133_shell_out_mag.wav", t = 0.75},
|
||||
{s = "weapons/darsu_eft/mp153/mr153_slider_down.wav", t = 0.9},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
if CLIENT then
|
||||
-- Stuff to always draw thermal on this shotgun if camera is installed
|
||||
-- Mostly copied from arccw's cl_holosight.lua
|
||||
|
||||
local blackColor = Color(0, 0, 0)
|
||||
|
||||
local rtsize = ScrH()
|
||||
local rtmat = GetRenderTarget("arccw_rtmat_ultima", rtsize, rtsize, false)
|
||||
|
||||
local rtmaterial = CreateMaterial( "arccw_rtmat_ultima", "UnlitGeneric", {
|
||||
['$basetexture'] = rtmat:GetName(),
|
||||
} );
|
||||
|
||||
local colormod2 = Material("pp/colour")
|
||||
local pp_ca_base, pp_ca_r, pp_ca_g, pp_ca_b = Material("pp/arccw/ca_base"), Material("pp/arccw/ca_r"), Material("pp/arccw/ca_g"), Material("pp/arccw/ca_b")
|
||||
local pp_ca_r_thermal, pp_ca_g_thermal, pp_ca_b_thermal = Material("pp/arccw/ca_r_thermal"), Material("pp/arccw/ca_g_thermal"), Material("pp/arccw/ca_b_thermal")
|
||||
|
||||
pp_ca_r:SetTexture("$basetexture", render.GetScreenEffectTexture())
|
||||
pp_ca_g:SetTexture("$basetexture", render.GetScreenEffectTexture())
|
||||
pp_ca_b:SetTexture("$basetexture", render.GetScreenEffectTexture())
|
||||
|
||||
pp_ca_r_thermal:SetTexture("$basetexture", render.GetScreenEffectTexture())
|
||||
pp_ca_g_thermal:SetTexture("$basetexture", render.GetScreenEffectTexture())
|
||||
pp_ca_b_thermal:SetTexture("$basetexture", render.GetScreenEffectTexture())
|
||||
|
||||
local coldtime = 30
|
||||
|
||||
local reticle = Material("hud/scopes/ultimareticle6.png")
|
||||
|
||||
function SWEP:UltimaFormRTScope()
|
||||
cam.Start3D()
|
||||
|
||||
-- ArcCW.Overdraw = true
|
||||
-- ArcCW.LaserBehavior = true
|
||||
-- ArcCW.VMInRT = true
|
||||
|
||||
local rtangles, rtpos, rtdrawvm
|
||||
|
||||
if GetConVar("arccw_drawbarrel"):GetBool() and GetConVar("arccw_vm_coolsway"):GetBool() then
|
||||
rtangles = self.VMAng - self.VMAngOffset
|
||||
rtangles.x = rtangles.x - self.VMPosOffset_Lerp.z * 10
|
||||
rtangles.y = rtangles.y + self.VMPosOffset_Lerp.y * 10
|
||||
|
||||
rtpos = self.VMPos + self.VMAng:Forward() * 15
|
||||
else
|
||||
rtangles = EyeAngles()
|
||||
rtpos = EyePos()
|
||||
end
|
||||
|
||||
local addads = 1
|
||||
|
||||
local rt = {
|
||||
w = rtsize,
|
||||
h = rtsize,
|
||||
angles = rtangles,
|
||||
origin = rtpos,
|
||||
drawviewmodel = false,
|
||||
fov = 15,
|
||||
}
|
||||
|
||||
rtsize = ScrH()
|
||||
|
||||
if ScrH() > ScrW() then rtsize = ScrW() end
|
||||
|
||||
local rtres = ScrH()*0.2
|
||||
|
||||
rtmat = GetRenderTarget("arccw_rtmat_ultima", rtres, rtres, false)
|
||||
|
||||
render.PushRenderTarget(rtmat, 0, 0, rtsize, rtsize)
|
||||
|
||||
render.ClearRenderTarget(rt, blackColor)
|
||||
|
||||
-- if self:GetState() == ArcCW.STATE_SIGHTS then
|
||||
render.RenderView(rt)
|
||||
cam.Start3D(EyePos(), EyeAngles(), rt.fov, 0, 0, nil, nil, 0, nil)
|
||||
self:DoLaser(false)
|
||||
cam.End3D()
|
||||
-- end
|
||||
|
||||
-- ArcCW.Overdraw = false
|
||||
-- ArcCW.LaserBehavior = false
|
||||
-- ArcCW.VMInRT = false
|
||||
|
||||
-- self:FormPP(rtmat)
|
||||
|
||||
render.PopRenderTarget()
|
||||
|
||||
cam.End3D()
|
||||
|
||||
-- if asight.Thermal then
|
||||
self:UltimaFormThermalImaging(rtmat)
|
||||
-- end
|
||||
end
|
||||
|
||||
local function IsWHOT(ent)
|
||||
if !ent:IsValid() or ent:IsWorld() then return false end
|
||||
|
||||
if ent:IsPlayer() then -- balling
|
||||
if ent.ArcticMedShots_ActiveEffects and ent.ArcticMedShots_ActiveEffects["coldblooded"] or ent:Health() <= 0 then return false end -- arc stims
|
||||
return true
|
||||
end
|
||||
|
||||
if ent:IsNPC() or ent:IsNextBot() then -- npcs
|
||||
if ent.ArcCWCLHealth and ent.ArcCWCLHealth <= 0 or ent:Health() <= 0 then return false end
|
||||
return true
|
||||
end
|
||||
|
||||
if ent:IsRagdoll() then -- ragdolling
|
||||
if !ent.ArcCW_ColdTime then ent.ArcCW_ColdTime = CurTime() + coldtime end
|
||||
return ent.ArcCW_ColdTime > CurTime()
|
||||
end
|
||||
|
||||
if ent:IsVehicle() or ent:IsOnFire() or ent.ArcCW_Hot or ent:IsScripted() and !ent:GetOwner():IsValid() then -- vroom vroom + :fire: + ents but not guns (guns on ground will be fine)
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function SWEP:UltimaFormThermalImaging(tex)
|
||||
if !tex then
|
||||
tex = render.GetRenderTarget()
|
||||
end
|
||||
|
||||
render.PushRenderTarget(tex)
|
||||
|
||||
cam.Start3D()
|
||||
|
||||
if tex then
|
||||
colormod2:SetTexture("$fbtexture", tex)
|
||||
else
|
||||
colormod2:SetTexture("$fbtexture", render.GetScreenEffectTexture())
|
||||
end
|
||||
|
||||
local nvsc = {r=255+0, g=255+1, b=255+16/255}
|
||||
local tvsc = {r=-255, g=-255, b=-255}
|
||||
|
||||
local tab = ents.GetAll()
|
||||
|
||||
-- table.Add(tab, player.GetAll())
|
||||
-- table.Add(tab, ents.FindByClass("npc_*"))
|
||||
|
||||
render.SetStencilEnable(true)
|
||||
render.SetStencilWriteMask(255)
|
||||
render.SetStencilTestMask(255)
|
||||
render.ClearStencil()
|
||||
|
||||
local sw = ScrH()
|
||||
local sh = sw
|
||||
|
||||
local sx = (ScrW() - sw) / 2
|
||||
local sy = (ScrH() - sh) / 2
|
||||
|
||||
render.SetScissorRect( sx, sy, sx + sw, sy + sh, true )
|
||||
|
||||
render.SetStencilReferenceValue(64)
|
||||
|
||||
render.SetStencilPassOperation(STENCIL_REPLACE)
|
||||
render.SetStencilFailOperation(STENCIL_KEEP)
|
||||
render.SetStencilZFailOperation(STENCIL_KEEP)
|
||||
render.SetStencilCompareFunction(STENCIL_ALWAYS)
|
||||
|
||||
for _, v in pairs(tab) do
|
||||
|
||||
if !IsWHOT(v) then continue end
|
||||
|
||||
-- if !asight.ThermalScopeSimple then
|
||||
render.SetBlend(0.5)
|
||||
render.SuppressEngineLighting(true)
|
||||
|
||||
render.SetColorModulation(250, 250, 250)
|
||||
|
||||
v:DrawModel()
|
||||
-- end
|
||||
end
|
||||
|
||||
render.SetColorModulation(1, 1, 1)
|
||||
|
||||
render.SuppressEngineLighting(false)
|
||||
|
||||
render.MaterialOverride()
|
||||
|
||||
render.SetBlend(1)
|
||||
|
||||
render.SetStencilCompareFunction(STENCIL_EQUAL)
|
||||
|
||||
|
||||
DrawColorModify({
|
||||
["$pp_colour_addr"] = 0,
|
||||
["$pp_colour_addg"] = 0,
|
||||
["$pp_colour_addb"] = 0,
|
||||
["$pp_colour_brightness"] = 0,
|
||||
["$pp_colour_contrast"] = 1,
|
||||
["$pp_colour_colour"] = 0,
|
||||
["$pp_colour_mulr"] = 0,
|
||||
["$pp_colour_mulg"] = 0,
|
||||
["$pp_colour_mulb"] = 0
|
||||
})
|
||||
|
||||
DrawColorModify({
|
||||
["$pp_colour_addr"] = tvsc.r - 255,
|
||||
["$pp_colour_addg"] = tvsc.g - 255,
|
||||
["$pp_colour_addb"] = tvsc.b - 255,
|
||||
["$pp_colour_addr"] = 0,
|
||||
["$pp_colour_addg"] = 0,
|
||||
["$pp_colour_addb"] = 0,
|
||||
["$pp_colour_brightness"] = 0,
|
||||
["$pp_colour_contrast"] = 1,
|
||||
["$pp_colour_colour"] = 1,
|
||||
["$pp_colour_mulr"] = 0,
|
||||
["$pp_colour_mulg"] = 0,
|
||||
["$pp_colour_mulb"] = 0
|
||||
})
|
||||
|
||||
-- if !asight.ThermalNoCC then
|
||||
render.SetStencilCompareFunction(STENCIL_NOTEQUAL)
|
||||
render.SetStencilPassOperation(STENCIL_KEEP)
|
||||
|
||||
|
||||
if GetConVar("arccw_thermalpp"):GetBool() and GetConVar("arccw_scopepp"):GetBool() then
|
||||
-- chromatic abberation
|
||||
|
||||
render.CopyRenderTargetToTexture(render.GetScreenEffectTexture())
|
||||
|
||||
render.SetMaterial( pp_ca_base )
|
||||
render.DrawScreenQuad()
|
||||
render.SetMaterial( pp_ca_r_thermal )
|
||||
render.DrawScreenQuad()
|
||||
render.SetMaterial( pp_ca_g_thermal )
|
||||
render.DrawScreenQuad()
|
||||
render.SetMaterial( pp_ca_b_thermal )
|
||||
render.DrawScreenQuad()
|
||||
-- pasted here cause otherwise either target colors will get fucked either pp either motion blur
|
||||
end
|
||||
|
||||
DrawColorModify({
|
||||
["$pp_colour_addr"] = nvsc.r - 255,
|
||||
["$pp_colour_addg"] = nvsc.g - 255,
|
||||
["$pp_colour_addb"] = nvsc.b - 255,
|
||||
-- ["$pp_colour_addr"] = 0,
|
||||
-- ["$pp_colour_addg"] = 0,
|
||||
-- ["$pp_colour_addb"] = 0,
|
||||
["$pp_colour_brightness"] = 0.1,
|
||||
["$pp_colour_contrast"] = 0.5,
|
||||
["$pp_colour_colour"] = 0.12,
|
||||
["$pp_colour_mulr"] = 0,
|
||||
["$pp_colour_mulg"] = 0,
|
||||
["$pp_colour_mulb"] = 0
|
||||
})
|
||||
-- end
|
||||
|
||||
render.SetScissorRect( sx, sy, sx + sw, sy + sh, false )
|
||||
|
||||
render.SetStencilEnable(false)
|
||||
|
||||
colormod2:SetTexture("$fbtexture", render.GetScreenEffectTexture())
|
||||
|
||||
cam.End3D()
|
||||
|
||||
if GetConVar("arccw_thermalpp"):GetBool() then
|
||||
if !render.SupportsPixelShaders_2_0() then return end
|
||||
|
||||
DrawSharpen(0.3,0.9)
|
||||
DrawBloom(0,0.3,5,5,3,0.5,1,1,1)
|
||||
-- DrawMotionBlur(0.7,1,1/(15)) -- seems to break shit
|
||||
end
|
||||
|
||||
|
||||
cam.Start2D()
|
||||
surface.SetMaterial(reticle)
|
||||
surface.SetDrawColor(255, 255, 255, 255)
|
||||
surface.DrawTexturedRect(0, 0, ScrH(), ScrH())
|
||||
cam.End2D()
|
||||
|
||||
render.PopRenderTarget()
|
||||
end
|
||||
|
||||
local fpsdelay = CurTime()
|
||||
|
||||
hook.Add("RenderScene", "ArcCW_ULTIMA_CAM", function()
|
||||
local wpn = LocalPlayer():GetActiveWeapon()
|
||||
|
||||
if wpn.ArcCW and wpn:GetClass() == "arccw_eft_mp155" and wpn.Attachments[8].Installed == "tac_eft_mp155_ultima_camera" then
|
||||
if fpsdelay > CurTime() then return end
|
||||
wpn:UltimaFormRTScope()
|
||||
wpn.Owner:GetViewModel():SetSubMaterial(28, "!arccw_rtmat_ultima")
|
||||
fpsdelay = CurTime()+1/15
|
||||
end
|
||||
end)
|
||||
end
|
||||
Reference in New Issue
Block a user