diff --git a/gamemodes/benny/entities/entities/b-npc_human.lua b/gamemodes/benny/entities/entities/b-npc_human.lua index e683570..9295bbf 100644 --- a/gamemodes/benny/entities/entities/b-npc_human.lua +++ b/gamemodes/benny/entities/entities/b-npc_human.lua @@ -41,7 +41,7 @@ if CLIENT then local s = ScreenScaleH local function DST( text, font, x, y, color ) - for O=1, 2 do + for O=1, 1 do draw.SimpleText( text, font, x-O, y-O, color_black ) draw.SimpleText( text, font, x, y-O, color_black ) draw.SimpleText( text, font, x+O, y-O, color_black ) @@ -213,14 +213,14 @@ ENT.States = { if (self.NextFire or 0) <= CurTime() then local rp = RecipientFilter() rp:AddAllPlayers() - self:EmitSound("benny/weapons/usp/01.ogg", 100, 100, 0.2, nil, nil, nil, rp ) - self:FireBullets( { - Attacker = self, - Inflictor = self, - Damage = 3, - Dir = self:EyeAngles():Forward(), - Src = self:EyePos() - } ) + self:EmitSound("benny/weapons/usp/01.ogg", 80, 100, 0.2, nil, nil, nil, rp ) + --self:FireBullets( { + -- Attacker = self, + -- Inflictor = self, + -- Damage = 3, + -- Dir = self:EyeAngles():Forward(), + -- Src = self:EyePos() + --} ) self.NextFire = CurTime() + 0.5 end else diff --git a/gamemodes/benny/entities/weapons/itemhandler.lua b/gamemodes/benny/entities/weapons/itemhandler.lua index 7e8a376..d259a16 100644 --- a/gamemodes/benny/entities/weapons/itemhandler.lua +++ b/gamemodes/benny/entities/weapons/itemhandler.lua @@ -63,7 +63,7 @@ function SWEP:ItemCheckTrace() tracedef.endpos = p:EyePos() + (p:GetAimVector() * 90) local trace = util.TraceHull(tracedef) --print(trace.StartPos:Distance(trace.HitPos)) - p:LagCompensation( false ) + p:LagCompensation( false ) return trace end diff --git a/gamemodes/benny/gamemode/camera.lua b/gamemodes/benny/gamemode/camera.lua index 56d9c11..42d2f93 100644 --- a/gamemodes/benny/gamemode/camera.lua +++ b/gamemodes/benny/gamemode/camera.lua @@ -3,7 +3,7 @@ -- Your Name is Benny --------------------- -local cam_f = CreateConVar( "b-cam_f", -50 ) +local cam_f = CreateConVar( "b-cam_f", -75 ) local cam_r = CreateConVar( "b-cam_r", 12 ) local cam_u = CreateConVar( "b-cam_u", 0 ) local cam_fov = CreateConVar( "b-cam_fov", 75 ) diff --git a/gamemodes/benny/gamemode/debugmenu.lua b/gamemodes/benny/gamemode/debugmenu.lua index 9794269..c72d1d6 100644 --- a/gamemodes/benny/gamemode/debugmenu.lua +++ b/gamemodes/benny/gamemode/debugmenu.lua @@ -26,7 +26,7 @@ end local function OpenDebugMenu() if IsValid(DebugMenu) then DebugMenu:Remove() end DebugMenu = vgui.Create("DFrame") - DebugMenu:SetSize( 400, 300 ) + DebugMenu:SetSize( 200, 500 ) DebugMenu:Center() DebugMenu:MakePopup() DebugMenu:SetKeyboardInputEnabled( false ) @@ -34,10 +34,21 @@ local function OpenDebugMenu() local opt = DebugMenu:Add("DScrollPanel") opt:Dock( FILL ) + local categories = {} + for iname, idata in SortedPairs( ITEMS ) do - local button = opt:Add("DButton") + if !categories[idata.Category] then + local cate = opt:Add("DCollapsibleCategory") + cate:Dock(TOP) + cate:SetLabel(idata.Category) + local plist = vgui.Create("DPanelList") + cate:SetContents(plist) + categories[idata.Category] = plist + end + local plist = categories[idata.Category] + local button = plist:Add("DButton") button:Dock( TOP ) - button:DockMargin( 4, 4, 4, 0 ) + button:DockMargin( 0, 0, 0, 0 ) button:SetText( l8( idata.PrintName ) ) button.iName = iname button.iData = idata diff --git a/gamemodes/benny/gamemode/hud.lua b/gamemodes/benny/gamemode/hud.lua index 6417544..af30931 100644 --- a/gamemodes/benny/gamemode/hud.lua +++ b/gamemodes/benny/gamemode/hud.lua @@ -40,6 +40,14 @@ local function hRect( x, y, w, h ) surface.DrawRect( x, y, w, h ) end +local function hRRect( x, y, w, h, r ) + gx, gy = hXY() + x = (x or 0) + gx + y = (y or 0) + gy + + draw.RoundedBox( r, x, y, w, h, surface.GetDrawColor() ) +end + local function hTRect( x, y, w, h ) gx, gy = hXY() x = (x or 0) + gx @@ -130,7 +138,7 @@ local function commoncode( set ) local keydown = input.IsKeyDown( lettercode ) local thecolor = keydown and COLOR_MAIN or COLOR_DARK - local fakecolor = ColorAlpha( COLOR_BRIGHT, 60) + local fakecolor = ColorAlpha( COLOR_BRIGHT, 60 ) hCol( fakecolor ) hRect( (index-1)*(60+4), 0, 60, 40, 2 ) @@ -147,6 +155,11 @@ local function commoncode( set ) end end +local fmlookup = { + [1] = "SEMI", + [math.huge] = "AUTO", +} + -- Drawing function GM:HUDPaint() local p = LocalPlayer() @@ -154,24 +167,42 @@ function GM:HUDPaint() local handler = p:HandlerCheck() stack = util.Stack() - S_Push( 20, 20 ) + -- S_Push( math.random( -4, 4 ), math.random( -4, 4 ) ) + + S_Push( 20, h - 20 - 64 ) hCol( COLOR_DARK ) - hRect( 0, 0, 320, 40 ) + hRRect( 0, 0, 328, 64, 8 ) local x, y = hXY( 6, 0 ) draw.SimpleText( "BENNY", "HUD_48", x, y, COLOR_MAIN ) hCol( COLOR_MAIN ) - hRect( 4, 4, (320-4-4) * p:GetHealth_Blood()/1000, 40-4-4 ) - - hScis( 4, 4, (320-4-4) * p:GetHealth_Blood()/1000, 40-4-4 ) - local x, y = hXY( 6, 0 ) - draw.SimpleText( "BENNY", "HUD_48", x, y, COLOR_DARK ) + hRect( 8, 8, (320-4-4) * p:GetHealth_Blood()/1000, 40-4-4 ) + hCol( COLOR_DARK ) + hORect( 8+1, 8+1, (320-4-4)-2, 40-4-4-2, 1 ) + + hCol( COLOR_MAIN ) + hScis( 8, 8, (320-4-4) * p:GetHealth_Blood()/1000, 40-4-4 ) + local x, y = hXY( 10, 4 ) + draw.SimpleText( "BENNY", "HUD_48", x, y, COLOR_DARK ) hScisoff() + + local slen = (320-4-4-4-4-4) + hCol( COLOR_MAIN ) + hRect( 8, 44, slen*0.25, 12 ) + hRect( 8 + (slen*0.25+4), 44, slen*0.25, 12 ) + hRect( 8 + (slen*0.25+4)*2, 44, slen*0.25, 12 ) + hRect( 8 + (slen*0.25+4)*3, 44, slen*0.25, 12 ) + + hCol( COLOR_DARK ) + hORect( 8+1, 44+1, slen*0.25 - 2, 12-2, 1 ) + hORect( 8+1 + (slen*0.25+4), 44+1, slen*0.25 - 2, 12-2, 1 ) + hORect( 8+1 + (slen*0.25+4)*2, 44+1, slen*0.25 - 2, 12-2, 1 ) + hORect( 8+1 + (slen*0.25+4)*3, 44+1, slen*0.25 - 2, 12-2, 1 ) S_Pop() if handler then - S_Push( 20, h - 60 - 20 ) + S_Push( 20, 20 ) for i, v in ipairs( p:GetInventory():GetWeighted() ) do hCol( v == handler:GetActiveR() and COLOR_BRIGHT or COLOR_DARK ) hRect( (i-1)*(120+10), 0, 120, 60 ) @@ -194,6 +225,40 @@ function GM:HUDPaint() end end S_Pop() + + local wep = handler:GetActiveR() + if wep and wep.GetClip then + local Bw, Bh = 328, 160 + S_Push( w - 20 - Bw, h - 20 - Bh ) + hCol( COLOR_DARK ) + hRRect( 0, 0, Bw, Bh, 8 ) + + hCol( COLOR_MAIN ) + local leng = Bw-8-8 + hRect( 8, 8, leng-70, 26 ) + hRect( 8 + leng - 70 + 4, 8, leng-(leng-70)-4, 26 ) + local x, y = hXY( 12, 6 ) + draw.SimpleText( l8( wep.Class.PrintName ), "HUD_36", x, y, COLOR_DARK ) + local x, y = hXY( 10 + (leng - 70) + 70/2, 11 ) + local bc = wep.Class.BurstCount + draw.SimpleText( fmlookup[bc] or bc .. "RND", "HUD_24", x, y, COLOR_DARK, TEXT_ALIGN_CENTER ) + + S_Push( Bw - 8 - 8, Bh - 18 - 8 ) + for i=0, wep.Class.ClipSize-1 do + if (wep:GetClip() + (wep:GetSlideState() == SLIDE_FORWARD and 1 or 0)) >= (i+1) then + hCol( COLOR_MAIN ) + hRect( (0 - 8 - 2)*i, 0, 8, 18 ) + hCol( COLOR_DARK ) + hRect( (0 - 8 - 2)*i, 14, 8, 2 ) + else + hCol( COLOR_BRIGHT ) + hORect( (0 - 8 - 2)*i, 0, 8, 18 ) + --hORect( (0 - 8 - 2)*i+1, 1, 8-2, 18-2 ) + end + end + S_Pop() + S_Pop() + end end if false then @@ -213,10 +278,12 @@ function GM:HUDPaint() S_Pop() end - local itemcheck = handler:ItemCheckTrace() + --local itemcheck = handler:ItemCheckTrace() + + -- Hints if true then - S_Push( w - 20, h - 20 ) + S_Push( w - 20, 20 ) local hints = {} @@ -229,23 +296,32 @@ function GM:HUDPaint() table.insert( hints, { "[E]", "THROW" } ) table.insert( hints, { "[R]", "RELOAD" } ) table.insert( hints, { "", "RETAIN MAG", "HOLD" } ) - elseif itemcheck.Entity:IsValid() and itemcheck.Entity.BennyItem then - table.insert( hints, { "", "- - - - - - - - - - - -" } ) - table.insert( hints, { "[E]", "PICK UP" } ) + --elseif itemcheck.Entity:IsValid() and itemcheck.Entity.BennyItem then + -- table.insert( hints, { "", "- - - - - - - - - - - -" } ) + -- table.insert( hints, { "[E]", "PICK UP" } ) end - local x, y = hXY( 0, (#hints-1)*(-24) ) + local x, y = hXY( 0, 0 ) for i, v in ipairs( hints ) do - draw.SimpleText( v[1], "HUD_24", x - 150, y - 24 + (24*(i-1)), COLOR_MAIN, TEXT_ALIGN_CENTER ) - draw.SimpleText( v[2], "HUD_24", x, y - 24 + (24*(i-1)), COLOR_MAIN, TEXT_ALIGN_RIGHT ) + draw.SimpleText( v[1], "HUD_24", x - 150 + 1, y + (24*(i-1)) + 1, COLOR_DARK, TEXT_ALIGN_CENTER ) + draw.SimpleText( v[2], "HUD_24", x + 1, y + (24*(i-1)) + 1, COLOR_DARK, TEXT_ALIGN_RIGHT ) if v[3] then - draw.SimpleText( v[3], "HUD_16", x - 150, y - 24+3 + (24*(i-1)), COLOR_MAIN, TEXT_ALIGN_CENTER ) + draw.SimpleText( v[3], "HUD_16", x - 150 + 1, y+3 + (24*(i-1)) + 1, COLOR_DARK, TEXT_ALIGN_CENTER ) + end + end + for i, v in ipairs( hints ) do + draw.SimpleText( v[1], "HUD_24", x - 150, y + (24*(i-1)), COLOR_MAIN, TEXT_ALIGN_CENTER ) + draw.SimpleText( v[2], "HUD_24", x, y + (24*(i-1)), COLOR_MAIN, TEXT_ALIGN_RIGHT ) + if v[3] then + draw.SimpleText( v[3], "HUD_16", x - 150, y+3 + (24*(i-1)), COLOR_MAIN, TEXT_ALIGN_CENTER ) end end S_Pop() end + -- S_Pop() + local trac = p:GetEyeTrace().HitPos:ToScreen() local trac2 = util.TraceLine( { start = CamSpot(), @@ -256,7 +332,7 @@ function GM:HUDPaint() for i=1, 2 do local shadowtime = i==1 local traac = shadowtime and trac2 or trac - local cx, cy = traac.x, traac.y + local cx, cy = math.Round(traac.x), math.Round(traac.y) S_Push( cx, cy ) local lol = shadowtime and 0 or 255 surface.SetDrawColor( lol, lol, lol ) diff --git a/gamemodes/benny/gamemode/items.lua b/gamemodes/benny/gamemode/items.lua index c557bf9..9871a77 100644 --- a/gamemodes/benny/gamemode/items.lua +++ b/gamemodes/benny/gamemode/items.lua @@ -76,27 +76,27 @@ AddItem( "base", { local AnimationLookup = { ["fire"] = { - ["handgun"] = "fire_handgun", + ["handgun"] = "handgun_fire", ["rifle"] = "rifle_fire", }, ["reload"] = { - ["handgun"] = "reload_handgun", + ["handgun"] = "handgun_reload", ["rifle"] = "rifle_reload", }, ["reload_rack"] = { - ["handgun"] = "reload_handgun_rack", + ["handgun"] = "handgun_reload_rack", ["rifle"] = "rifle_reload_rack", }, ["reload_insert"] = { - ["handgun"] = "reload_handgun_insert", + ["handgun"] = "handgun_reload_insert", ["rifle"] = "rifle_reload_insert", }, ["deploy"] = { - ["handgun"] = "deploy_handgun", + ["handgun"] = "handgun_deploy", ["rifle"] = "rifle_deploy", }, ["holster"] = { - ["handgun"] = "holster_handgun", + ["handgun"] = "handgun_holster", ["rifle"] = "holster_handgun", }, } @@ -218,6 +218,7 @@ AddItem( "base_firearm", { local acc = math.rad( class.Accuracy or 0 ) local p = handler:GetOwner() + p:LagCompensation(true) handler:FireBullets( { Attacker = p, Damage = 1, @@ -227,6 +228,7 @@ AddItem( "base_firearm", { Src = p:GetShootPos(), Spread = Vector( acc, acc, 0 ), } ) + p:LagCompensation(false) local ply = handler:GetOwner() ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["fire"][class.HoldType] ), 0, true ) @@ -240,36 +242,41 @@ AddItem( "base_firearm", { if ent:GetDelay() > CurTime() then return end - ent:SetDelay( CurTime() + 0.6 ) local ply = handler:GetOwner() + local time = 0.6 if (ent:GetClip() > 0) and ent:GetSlideState() == SLIDE_BACK then handler:EmitSound( class.BoltDropSound, 70, 100, 0.4, CHAN_STATIC ) ent:SetSlideState( SLIDE_FORWARD ) ent:SetClip( ent:GetClip() - 1 ) ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["reload_rack"][class.HoldType] ), 0, true ) + time = 0.4 elseif (ent:GetClip() > 0) and ent:GetSlideState() == SLIDE_EMPTY then handler:EmitSound( class.BoltPullSound, 70, 100, 0.4, CHAN_STATIC ) ent:SetSlideState( SLIDE_FORWARD ) ent:SetClip( ent:GetClip() - 1 ) ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["reload_rack"][class.HoldType] ), 0, true ) + time = 0.4 elseif ent:GetLoaded() then handler:EmitSound( class.MagOutSound, 70, 100, 0.4, CHAN_STATIC ) ent:SetLoaded( false ) ent:SetClip( 0 ) ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["reload"][class.HoldType] ), 0, true ) + time = 0.4 else handler:EmitSound( class.MagInSound, 70, 100, 0.4, CHAN_STATIC ) ent:SetLoaded( true ) ent:SetRefillTime( CurTime() + 0.5 ) ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["reload_insert"][class.HoldType] ), 0, true ) + time = 0.6 end + ent:SetDelay( CurTime() + time ) end, ["Deploy"] = function( class, ent, handler ) handler:EmitSound( "weapons/usp/usp_slideback.wav", 70, 125, 0.4, CHAN_STATIC ) - ent:SetDelay( CurTime() + 0.25 ) + ent:SetDelay( CurTime() + 0.5 ) local ply = handler:GetOwner() ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["deploy"][class.HoldType] ), 0, true ) @@ -412,109 +419,316 @@ AddItem( "satchels", { end, }) -AddItem( "mk23", { - PrintName = "#Item.mk23.Name", - Description = "#Item.mk23.Description", - Category = "pistol", - Base = "base_firearm", +AddItem( "toolgun", { + PrintName = "#Item.toolgun.Name", + Description = "#Item.toolgun.Description", + Category = "dev", + Base = "base", Model = "models/benny/weapons/testgun.mdl", HoldType = "handgun", - - ClipSize = 12, - Delay = (60/350), - FireSound = { - "benny/weapons/usp/01.ogg", - "benny/weapons/usp/02.ogg", - "benny/weapons/usp/03.ogg", - }, - MagOutSound = "benny/weapons/1911/magout.ogg", - MagInSound = "benny/weapons/1911/magin.ogg", - BoltDropSound = "benny/weapons/1911/slidedrop.ogg", - BoltPullSound = "benny/weapons/glock/cock.ogg", - - Accuracy = 5/60, - BurstCount = 1, - Accuracy_Add = 0.5, - Accuracy_Reset = 0.4, - Accuracy_Decay = 5, -}) - -AddItem( "fnc", { - PrintName = "#Item.fnc.Name", - Description = "#Item.fnc.Description", - Base = "base_firearm_ubgl", - - Model = "models/benny/weapons/testrifle2.mdl",--"models/weapons/w_rif_ar556.mdl", - HoldType = "rifle", - - ClipSize = 30, - Delay = (60/750), - FireSound = { - "benny/weapons/m16a2/01.ogg", - "benny/weapons/m16a2/02.ogg", - "benny/weapons/m16a2/03.ogg", + + Vars = { + ["Float"] = { + "Delay", + }, + ["Int"] = { + "BurstCount", + }, }, - Accuracy = 1, - Accuracy_Add = 0.4, - Accuracy_Reset = 0.4, - Accuracy_Decay = 12, + ["Attack"] = function( class, ent, handler ) + if ent:GetBurstCount() >= 1 then return end + if ent:GetDelay() > CurTime() then return end + ent:SetDelay( CurTime() + 0.1 ) + ent:SetBurstCount( ent:GetBurstCount() + 1 ) + + handler:EmitSound("weapons/airboat/airboat_gun_lastshot1.wav", 100, 100, 1, CHAN_STATIC) + + if SERVER then + local p = handler:GetOwner() + local tr = p:GetEyeTrace() + + local summon = ents.Create( "b-npc_human" ) + summon:SetPos( tr.HitPos + tr.HitNormal ) + local ang = Angle( 0, p:EyeAngles().y+0, 0 ) + summon:SetAngles( ang ) + summon:Spawn() + end + end, + + ["AttackAlt"] = function( class, ent, handler ) + if ent:GetDelay() > CurTime() then return end + ent:SetDelay( CurTime() + 0.5 ) + end, + + ["Reload"] = function( class, ent, handler ) + + end, + + ["Think"] = function( class, ent, handler ) + if ent:GetBurstCount() > 0 and !handler:GetOwner():KeyDown( IN_ATTACK ) then + ent:SetBurstCount( 0 ) + end + end, + + ["Deploy"] = function( class, ent, handler ) + ent:SetDelay( CurTime() + 0.5 ) + + local ply = handler:GetOwner() + ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["deploy"][class.HoldType] ), 0, true ) + end, + + ["Holster"] = function( class, ent, handler ) + ent:SetDelay( CurTime() + 0.25 ) + + local ply = handler:GetOwner() + ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["holster"][class.HoldType] ), 0, true ) + end, }) -AddItem( "m16a2", { - PrintName = "#Item.m16a2.Name", - Description = "#Item.m16a2.Description", - Base = "base_firearm", +do -- Handguns - Model = "models/benny/weapons/testrifle3.mdl",--"models/weapons/w_rif_m16a2.mdl", - HoldType = "rifle", + AddItem( "mk23", { + PrintName = "#Item.mk23.Name", + Description = "#Item.mk23.Description", + Category = "pistol", + Base = "base_firearm", - ClipSize = 30, - Delay = (60/900), - BurstCount = 3, - BurstRunaway = true, - BurstAuto = true, - BurstDelay = 0.2, - FireSound = { - "benny/weapons/m16a2/01.ogg", - "benny/weapons/m16a2/02.ogg", - "benny/weapons/m16a2/03.ogg", - }, + Model = "models/benny/weapons/testgun.mdl", + HoldType = "handgun", - Accuracy = 1, - Accuracy_Add = 0.4, - Accuracy_Reset = 0.4, - Accuracy_Decay = 12, -}) + ClipSize = 12, + Delay = (60/350), + FireSound = { + "benny/weapons/usp/01.ogg", + "benny/weapons/usp/02.ogg", + "benny/weapons/usp/03.ogg", + }, + MagOutSound = "benny/weapons/1911/magout.ogg", + MagInSound = "benny/weapons/1911/magin.ogg", + BoltDropSound = "benny/weapons/1911/slidedrop.ogg", + BoltPullSound = "benny/weapons/glock/cock.ogg", -AddItem( "spas12", { - PrintName = "#Item.spas12.Name", - Description = "#Item.spas12.Description", - Base = "base_firearm", + Accuracy = 5/60, + BurstCount = 1, + Accuracy_Add = 0.5, + Accuracy_Reset = 0.4, + Accuracy_Decay = 5, + }) - Model = "models/weapons/w_shotgun.mdl", - HoldType = "rifle", +end - ClipSize = 8, - Pellets = 8, - Delay = 0.4, - BurstCount = 1, - FireSound = { - "benny/weapons/spas12/01.ogg", - "benny/weapons/spas12/02.ogg", - "benny/weapons/spas12/03.ogg", - }, - MagOutSound = "benny/weapons/spas12/magout-01.ogg", - MagInSound = "benny/weapons/spas12/magout-02.ogg", - BoltDropSound = "benny/weapons/spas12/magin.ogg", - BoltPullSound = "benny/weapons/glock/magin.ogg", +do -- Rifles - Accuracy = 8, - Accuracy_Add = 0.4, - Accuracy_Reset = 0.4, - Accuracy_Decay = 12, -}) + AddItem( "fnc", { + PrintName = "#Item.fnc.Name", + Description = "#Item.fnc.Description", + Category = "assaultrifle", + Base = "base_firearm_ubgl", + + Model = "models/benny/weapons/testrifle2.mdl",--"models/weapons/w_rif_ar556.mdl", + HoldType = "rifle", + + ClipSize = 30, + Delay = (60/750), + FireSound = { + "benny/weapons/m16a2/01.ogg", + "benny/weapons/m16a2/02.ogg", + "benny/weapons/m16a2/03.ogg", + }, + + Accuracy = 1, + Accuracy_Add = 0.4, + Accuracy_Reset = 0.4, + Accuracy_Decay = 12, + }) + + AddItem( "qbz", { + PrintName = "#Item.qbz.Name", + Description = "#Item.qbz.Description", + Category = "assaultrifle", + Base = "base_firearm", + + Model = "models/benny/weapons/testrifle2.mdl",--"models/weapons/w_rif_ar556.mdl", + HoldType = "rifle", + + ClipSize = 30, + Delay = (60/750), + FireSound = { + "benny/weapons/stoner63/01.ogg", + "benny/weapons/stoner63/02.ogg", + "benny/weapons/stoner63/03.ogg", + }, + + Accuracy = 1, + Accuracy_Add = 0.4, + Accuracy_Reset = 0.4, + Accuracy_Decay = 12, + }) + + AddItem( "m16a2", { + PrintName = "#Item.m16a2.Name", + Description = "#Item.m16a2.Description", + Category = "assaultrifle", + Base = "base_firearm", + + Model = "models/benny/weapons/testrifle3.mdl",--"models/weapons/w_rif_m16a2.mdl", + HoldType = "rifle", + + ClipSize = 30, + Delay = (60/900), + BurstCount = 3, + BurstRunaway = true, + BurstAuto = true, + BurstDelay = 0.2, + FireSound = { + "benny/weapons/m16a2/01.ogg", + "benny/weapons/m16a2/02.ogg", + "benny/weapons/m16a2/03.ogg", + }, + + Accuracy = 1, + Accuracy_Add = 0.4, + Accuracy_Reset = 0.4, + Accuracy_Decay = 12, + }) + +end + +do -- SMGs + + AddItem( "tmp", { + PrintName = "#Item.tmp.Name", + Description = "#Item.tmp.Description", + Category = "smg", + Base = "base_firearm", + + Model = "models/benny/weapons/testrifle2.mdl",--"models/weapons/w_rif_ar556.mdl", + HoldType = "handgun", + + ClipSize = 15, + Delay = (60/850), + FireSound = { + "benny/weapons/tmp/01.ogg", + "benny/weapons/tmp/02.ogg", + "benny/weapons/tmp/03.ogg", + }, + }) + + AddItem( "mp7", { + PrintName = "#Item.mp7.Name", + Description = "#Item.mp7.Description", + Category = "smg", + Base = "base_firearm", + + Model = "models/benny/weapons/testrifle2.mdl",--"models/weapons/w_rif_ar556.mdl", + HoldType = "handgun", + + ClipSize = 20, + Delay = (60/950), + FireSound = { + "benny/weapons/mp7/01.ogg", + "benny/weapons/mp7/02.ogg", + "benny/weapons/mp7/03.ogg", + }, + }) + + AddItem( "mp5k", { + PrintName = "#Item.mp5k.Name", + Description = "#Item.mp5k.Description", + Category = "smg", + Base = "base_firearm", + + Model = "models/benny/weapons/testrifle2.mdl",--"models/weapons/w_rif_ar556.mdl", + HoldType = "handgun", + + ClipSize = 15, + Delay = (60/750), + FireSound = { + "benny/weapons/mp5k/01.ogg", + "benny/weapons/mp5k/02.ogg", + "benny/weapons/mp5k/03.ogg", + }, + }) + + AddItem( "mac11", { + PrintName = "#Item.mac11.Name", + Description = "#Item.mac11.Description", + Category = "smg", + Base = "base_firearm", + + Model = "models/benny/weapons/testrifle2.mdl",--"models/weapons/w_rif_ar556.mdl", + HoldType = "handgun", + + ClipSize = 16, + Delay = (60/1000), + FireSound = { + "benny/weapons/mac11/01.ogg", + "benny/weapons/mac11/02.ogg", + "benny/weapons/mac11/03.ogg", + }, + }) + +end + +do -- Shotguns + + AddItem( "spas12", { + PrintName = "#Item.spas12.Name", + Description = "#Item.spas12.Description", + Category = "shotgun", + Base = "base_firearm", + + Model = "models/weapons/w_shotgun.mdl", + HoldType = "rifle", + + ClipSize = 8, + Pellets = 8, + Delay = 0.4, + BurstCount = 1, + FireSound = { + "benny/weapons/spas12/01.ogg", + "benny/weapons/spas12/02.ogg", + "benny/weapons/spas12/03.ogg", + }, + MagOutSound = "benny/weapons/spas12/magout-01.ogg", + MagInSound = "benny/weapons/spas12/magout-02.ogg", + BoltDropSound = "benny/weapons/spas12/magin.ogg", + BoltPullSound = "benny/weapons/glock/magin.ogg", + + Accuracy = 8, + Accuracy_Add = 0.4, + Accuracy_Reset = 0.4, + Accuracy_Decay = 12, + }) + +end + +-- bat +-- bat_wood +-- machete +-- kabar +-- baton + +-- deagle +-- cz75a +-- glock +-- 1911 +-- mk23 +-- nambu +-- anaconda + +-- tmp +-- mp7 +-- mp5k +-- mac11 +-- bizon +-- chicom + +-- fnc +-- qbz +-- m16a2 for ID, Data in pairs(ITEMS) do local tent = {} diff --git a/gamemodes/benny/gamemode/languages/en-us.lua b/gamemodes/benny/gamemode/languages/en-us.lua index 98e600d..1884599 100644 --- a/gamemodes/benny/gamemode/languages/en-us.lua +++ b/gamemodes/benny/gamemode/languages/en-us.lua @@ -9,11 +9,29 @@ L["#Item.mk23.Description"] = "Special forces sidearm" L["#Item.fnc.Name"] = "FNC Para" L["#Item.fnc.Description"] = "Imported assault rifle" +L["#Item.qbz.Name"] = "QBZ-95" +L["#Item.qbz.Description"] = "Low-profile bullpup assault rifle" + L["#Item.m16a2.Name"] = "M16A2" L["#Item.m16a2.Description"] = "Rugged burst rifle" L["#Item.spas12.Name"] = "SPAS-12" L["#Item.spas12.Description"] = "Chrome-lined autoshotgun" +L["#Item.tmp.Name"] = "TMP" +L["#Item.tmp.Description"] = "Concealable machine pistol" + +L["#Item.mp5k.Name"] = "MP5K" +L["#Item.mp5k.Description"] = "High-quality SMG" + +L["#Item.mp7.Name"] = "MP7" +L["#Item.mp7.Description"] = "Special forces PDW" + +L["#Item.mac11.Name"] = "MAC-11" +L["#Item.mac11.Description"] = "Tiny hornet gun" + L["#Item.satchels.Name"] = "Satchels" -L["#Item.satchels.Description"] = "Packs of bombs and a detonator" \ No newline at end of file +L["#Item.satchels.Description"] = "Packs of bombs and a detonator" + +L["#Item.toolgun.Name"] = "Tool gun" +L["#Item.toolgun.Description"] = "Developer tools" \ No newline at end of file diff --git a/gamemodes/benny/gamemode/player.lua b/gamemodes/benny/gamemode/player.lua index 818d5f2..a026d84 100644 --- a/gamemodes/benny/gamemode/player.lua +++ b/gamemodes/benny/gamemode/player.lua @@ -144,11 +144,58 @@ function GM:UpdateAnimation( ply, vel, maxseqgroundspeed ) normal:Rotate( Angle( 0, -ply:EyeAngles().y, 0 ) ) local speed = (len2d/200) + + --print( string.format( "x: %G, y: %G", normal.x, normal.y )) + + local biggerone = math.max( math.abs(normal.x), math.abs(normal.y) ) + + local needer = 1+((1-biggerone)/biggerone) + normal.x = normal.x * needer + normal.y = normal.y * needer + + local diveend = ply:GetLayerSequence( GESTURE_SLOT_JUMP ) == ply:LookupSequence("dive_end_handgun") + local divestart = ply:GetLayerSequence( GESTURE_SLOT_JUMP ) == ply:LookupSequence("dive_start_handgun") + + if ply:GetInDive() or diveend then speed = 1 end + ply:SetPoseParameter( "move_x", normal.x * speed ) ply:SetPoseParameter( "move_y", normal.y * speed ) - ply:SetAllowFullRotation( true ) - ply:SetAngles( Angle( 0, ply:EyeAngles().y, 0 ) ) + local magic = ply:EyeAngles().y + + magic = -(magic - ply:GetRenderAngles().y) + + --magic = magic % 180 + + if magic < -180 then + magic = magic + 360 + elseif magic > 180 then + magic = magic - 360 + end + + magic = magic * 0.75 + + ply:SetPoseParameter( "aim_p", -ply:EyeAngles().p/90 ) + ply:SetPoseParameter( "aim_y", 0 )--magic/90 ) + + + ply:SetAllowFullRotation( false ) + --ply:SetAngles( Angle( 0, ply:EyeAngles().y, 0 ) ) + ply:SetRenderAngles( Angle( 0, ply:EyeAngles().y, 0 ) ) + + if diveend then + local magicnumber = ply:GetLayerCycle( GESTURE_SLOT_JUMP ) + magicnumber = math.Remap( magicnumber, 0.5, 0.75, 1, 0 ) + magicnumber = math.Clamp( magicnumber, 0, 1 ) + ply:AnimSetGestureWeight( GESTURE_SLOT_JUMP, magicnumber ) + elseif divestart then + local magicnumber = ply:GetLayerCycle( GESTURE_SLOT_JUMP ) + magicnumber = math.Remap( magicnumber, 0.1, 0.6, 1, 0 ) + magicnumber = math.Clamp( magicnumber, 0, 1 ) + ply:AnimSetGestureWeight( GESTURE_SLOT_JUMP, magicnumber ) + else + ply:AnimSetGestureWeight( GESTURE_SLOT_JUMP, 1 ) + end --local dir = ply:GetVelocity():GetNormalized() --local dira @@ -211,7 +258,7 @@ function GM:CalcMainActivity( ply, velocity ) end if ply:GetInDive() then - plyTable.CalcSeqOverride = ply:LookupSequence( "dive_idle" ) + plyTable.CalcSeqOverride = ply:LookupSequence( "dive_idle_handgun" ) end plyTable.m_bWasOnGround = ply:IsOnGround() @@ -269,8 +316,6 @@ if CLIENT then end hook.Add("Move", "Benny_Move", function( ply, mv ) - ply:SetHull( Vector( -8, -8, 0 ), Vector( 8, 8, 72 ) ) - ply:SetHullDuck( Vector( -8, -8, 0 ), Vector( 8, 8, 32 ) ) if mv:KeyDown( IN_SPEED ) and !ply:GetInDive() and (ply:GetDivedAt() + 0.5 <= CurTime()) then local cool = Vector( mv:GetForwardSpeed(), -mv:GetSideSpeed(), 0 ) cool:Normalize() @@ -281,7 +326,7 @@ hook.Add("Move", "Benny_Move", function( ply, mv ) ply:SetGroundEntity( NULL ) ply:SetInDive( true ) ply:SetDivedAt( CurTime() ) - ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_JUMP, ply:LookupSequence( "dive_start" ), 0, true ) + ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_JUMP, ply:LookupSequence( "dive_start_handgun" ), 0, true ) if (SERVER) or (CLIENT and IsFirstTimePredicted()) then local rfil = nil if SERVER then @@ -291,6 +336,8 @@ hook.Add("Move", "Benny_Move", function( ply, mv ) end ply:EmitSound("weapons/slam/throw.wav", 70, 100, .25, nil, nil, nil, rfil) end + ply:SetHull( Vector( -8, -8, 32 ), Vector( 8, 8, 72 ) ) + ply:SetHullDuck( Vector( -8, -8, 32 ), Vector( 8, 8, 48 ) ) end if ply:OnGround() and ply:GetInDive() then if (SERVER) or (CLIENT and IsFirstTimePredicted()) then @@ -304,7 +351,12 @@ hook.Add("Move", "Benny_Move", function( ply, mv ) end ply:SetInDive(false) ply:SetDivedAt( CurTime() ) - ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_JUMP, ply:LookupSequence( "dive_end" ), 0, true ) + ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_JUMP, ply:LookupSequence( "dive_end_handgun" ), 0, true ) + ply:SetHull( Vector( -8, -8, 0 ), Vector( 8, 8, 72 ) ) + ply:SetHullDuck( Vector( -8, -8, 0 ), Vector( 8, 8, 48 ) ) + mv:SetVelocity( mv:GetVelocity() + Vector( 0, 0, 120 ) ) + ply:SetGroundEntity( NULL ) + mv:SetOrigin( mv:GetOrigin() + vector_up*32 ) end --if !ply:OnGround() and ply:GetInDive() then -- local da = ply:GetDivedAt()