Compare commits
No commits in common. "master" and "v0.4-beta" have entirely different histories.
|
@ -1,8 +1,6 @@
|
|||
Disguiser SWEP
|
||||
==============
|
||||
|
||||
[![YouTube: [gmod] Derping around with the Disguiser ](http://img.youtube.com/vi/IvMkNIm4Ro0/0.jpg)](http://www.youtube.com/watch?v=IvMkNIm4Ro0&feature=github)
|
||||
|
||||
So you always wanted to be able to disguise as another item on the map in Sandbox or
|
||||
any other game mode than Prop Hunt? You were always annoyed by how you were able to
|
||||
see yourself being able to rotate but without knowing you were still standing all the
|
||||
|
|
|
@ -5,12 +5,6 @@
|
|||
"ignore" :
|
||||
[
|
||||
"*.git*",
|
||||
"*.svn*",
|
||||
"builds*",
|
||||
"tools*",
|
||||
"*.bat",
|
||||
"*.sh",
|
||||
"*.md",
|
||||
"LICENSE.txt"
|
||||
"*.svn*"
|
||||
]
|
||||
}
|
40
build.bat
40
build.bat
|
@ -5,44 +5,6 @@ path %programfiles(x86)%\lua\5.1\;%path%;%programfiles(x86)%\Steam\SteamApps\com
|
|||
if not exist builds mkdir builds
|
||||
mkdir tmp
|
||||
|
||||
:: Root path
|
||||
set workspace=%cd%
|
||||
set workspacelentmp=%workspace%
|
||||
set workspacelen=1
|
||||
:workspacelencalc
|
||||
set /a workspacelen=!workspacelen!+1
|
||||
set workspace=!workspace:~1!
|
||||
if "%workspace%"=="" goto compile
|
||||
goto workspacelencalc
|
||||
|
||||
:compileerr
|
||||
echo ERROR: Compilation failed.
|
||||
exit /B -1
|
||||
|
||||
:compile
|
||||
echo Workspace: %workspace% (%workspacelen%)
|
||||
:: Compile LUA files
|
||||
pushd lua
|
||||
for /r %%i in (.) do (
|
||||
set absdir=%%i
|
||||
set directory=!absdir:~%workspacelen%,-2!
|
||||
|
||||
echo Creating !directory!...
|
||||
mkdir "..\tmp\!directory!"
|
||||
)
|
||||
for /r %%i in (*.lua) do (
|
||||
set absfile=%%i
|
||||
set file=!absfile:~%workspacelen%!
|
||||
|
||||
echo Compiling !file!...
|
||||
luac52 -o "..\tmp\!file!" "!absfile!"
|
||||
if %errorlevel% NEQ 0 (
|
||||
echo Could not compile !file!, only copying...
|
||||
copy !absfile! "..\tmp\!file!"
|
||||
)
|
||||
)
|
||||
popd
|
||||
|
||||
:: Optimize LUA files
|
||||
::set cutofflen=
|
||||
::set foo=%~dp0
|
||||
|
@ -72,4 +34,4 @@ gmad create -folder "tmp" -out "builds\disguiser_swep.gma"
|
|||
|
||||
:: Clean up
|
||||
rmdir /q /s tmp
|
||||
::pause
|
||||
pause
|
||||
|
|
99
build.sh
99
build.sh
|
@ -1,99 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
reldir() {
|
||||
# both $1 and $2 are absolute paths beginning with /
|
||||
# returns relative path to $2/$target from $1/$source
|
||||
source=$1
|
||||
target=$2
|
||||
|
||||
common_part=$source # for now
|
||||
result="" # for now
|
||||
|
||||
while [[ "${target#$common_part}" == "${target}" ]]; do
|
||||
# no match, means that candidate common part is not correct
|
||||
# go up one level (reduce common part)
|
||||
common_part="$(dirname $common_part)"
|
||||
# and record that we went back, with correct / handling
|
||||
if [[ -z $result ]]; then
|
||||
result=".."
|
||||
else
|
||||
result="../$result"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ $common_part == "/" ]]; then
|
||||
# special case for root (no common path)
|
||||
result="$result/"
|
||||
fi
|
||||
|
||||
# since we now have identified the common part,
|
||||
# compute the non-common part
|
||||
forward_part="${target#$common_part}"
|
||||
|
||||
# and now stick all parts together
|
||||
if [[ -n $result ]] && [[ -n $forward_part ]]; then
|
||||
result="$result$forward_part"
|
||||
elif [[ -n $forward_part ]]; then
|
||||
# extra slash removal
|
||||
result="${forward_part:1}"
|
||||
fi
|
||||
|
||||
echo $result
|
||||
}
|
||||
|
||||
copy_flt() {
|
||||
filter="$3"
|
||||
source="$1"
|
||||
target="$2"
|
||||
|
||||
find "$source" -type "d" -not -path "$target" | while read i; do
|
||||
mkdir -p "$target/$(reldir $source $i)"
|
||||
done
|
||||
find "$source" -name "$filter" -type "f" -not -path "$target" | while read i; do
|
||||
cp "$i" "$target/$(reldir $source $i)"
|
||||
done
|
||||
}
|
||||
|
||||
mkdir -p builds
|
||||
|
||||
if [ -e tmp ]; then
|
||||
rm -rf tmp
|
||||
fi
|
||||
mkdir -p tmp
|
||||
|
||||
# Root path
|
||||
workspace=$(pwd)
|
||||
|
||||
echo Workspace: $workspace
|
||||
|
||||
# Copy over
|
||||
copy_flt "." "tmp" "*.json"
|
||||
copy_flt "." "tmp" "*.wav"
|
||||
copy_flt "." "tmp" "*.lua"
|
||||
copy_flt "." "tmp" "*.mp3"
|
||||
copy_flt "." "tmp" "*.jpg"
|
||||
copy_flt "." "tmp" "*.png"
|
||||
copy_flt "." "tmp" "*.txt"
|
||||
|
||||
find tmp
|
||||
|
||||
# Compile LUA files
|
||||
pushd lua
|
||||
mkdir -p ../tmp/lua
|
||||
find . -type f -name '*.lua' | while read absfile; do
|
||||
file="lua/$absfile"
|
||||
echo "Compiling $file..."
|
||||
luac5.2 -o "../tmp/$file.luac" "$absfile" && (
|
||||
rm "/tmp/$file"
|
||||
mv "/tmp/$file.luac" "/tmp/$file"
|
||||
) || (
|
||||
echo "Could not compile $file, leaving as is."
|
||||
)
|
||||
done
|
||||
popd
|
||||
|
||||
# Create the GMA file
|
||||
gmad create -warninvalid -folder "tmp" -out "builds/disguiser_swep.gma"
|
||||
|
||||
# Clean up
|
||||
rm -rf tmp
|
|
@ -1,47 +1,48 @@
|
|||
--
|
||||
-- Disguiser SWEP - Lets you disguise as any prop on a map.
|
||||
--
|
||||
-- File:
|
||||
-- patch_createfont.lua
|
||||
--
|
||||
-- Purpose:
|
||||
-- This code will allow any font to be checked for existence. I hope it works
|
||||
-- as it is only a function patch which should be loaded right at the beginning.
|
||||
-- Can't guarantee that it loads right at the beginning though.
|
||||
--
|
||||
-- Copyright (C) 2013 Carl Kittelberger (Icedream)
|
||||
--
|
||||
-- This program is free software: you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU Affero General Public License as
|
||||
-- published by the Free Software Foundation, either version 3 of the
|
||||
-- License, or (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU Affero General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU Affero General Public License
|
||||
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
/**
|
||||
* Disguiser SWEP - Lets you disguise as any prop on a map.
|
||||
*
|
||||
* File:
|
||||
* patch_createfont.lua
|
||||
*
|
||||
* Purpose:
|
||||
* This code will allow any font to be checked for existence. I hope it works
|
||||
* as it is only a function patch which should be loaded right at the beginning.
|
||||
* Can't guarantee that it loads right at the beginning though.
|
||||
*
|
||||
* Copyright (C) 2013 Carl Kittelberger (Icedream)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
print("[Disguiser] Loading compatibility layer for surface.CreateFont...")
|
||||
|
||||
local registered_fonts = {}
|
||||
|
||||
-- Function already patched by us?
|
||||
if not surface.__createFont == nil then
|
||||
// Function already patched by us?
|
||||
if !!surface.__createFont then
|
||||
MsgC(Color(255, 255, 0), "[Fontpatch] Can't patch surface.CreateFont, already patched. Skipping patch.\n")
|
||||
return
|
||||
end
|
||||
|
||||
-- Original function
|
||||
// Original function
|
||||
surface.__createFont = surface.CreateFont
|
||||
|
||||
-- Patch function
|
||||
// Patch function
|
||||
function surface.CreateFont(name, data)
|
||||
if not name or not data then return false end
|
||||
if !name || !data then return false end
|
||||
|
||||
if registered_fonts[name] then
|
||||
if !!registered_fonts[name] then
|
||||
MsgN("[Fontpatch] Skipping font " .. name .. ", already registered")
|
||||
else
|
||||
MsgN("[Fontpatch] Registering font " .. name .. "...")
|
||||
|
@ -50,7 +51,7 @@ function surface.CreateFont(name, data)
|
|||
surface.__createFont(name, data)
|
||||
end
|
||||
|
||||
-- Check if a font exists
|
||||
// Check if a font exists
|
||||
function surface.FontExists(name)
|
||||
return not not registered_fonts[name]
|
||||
return !!registered_fonts[name] // I love how all those peeps on the internet still don't use the !! thingie
|
||||
end
|
|
@ -86,7 +86,7 @@ hook.Add("CalcView", "Disguiser.ThirdPersonCalcView", function(ply, pos, angles,
|
|||
end
|
||||
|
||||
// Smoothing FOV change
|
||||
fov = targetfov -- comment or remove this to enable smoothing
|
||||
fov = targetfov
|
||||
fov = math.Approach(fov, targetfov, math.abs(targetfov - fov) * smoothscale)
|
||||
|
||||
return GAMEMODE:CalcView(ply, pos, angles, fov)
|
||||
|
@ -96,7 +96,7 @@ end)
|
|||
hook.Add("HUDPaint", "Disguiser.ThirdPersonHUDPaint", function()
|
||||
local ply = LocalPlayer()
|
||||
|
||||
if IsValid(ply) && !!ply["GetAimVector"] && ply:Alive() && ply:GetNetworkedBool("thirdperson") then
|
||||
if IsValid(ply) && ply:Alive() && ply:GetNetworkedBool("thirdperson") then
|
||||
// trace from muzzle to hit pos
|
||||
local t = {}
|
||||
t.start = ply:GetShootPos()
|
||||
|
|
|
@ -149,7 +149,11 @@ function SWEP:Disguise(entity)
|
|||
// Apply new hull
|
||||
local obbmaxs = entity:OBBMaxs()
|
||||
local obbmins = entity:OBBMins()
|
||||
|
||||
/*
|
||||
local obbmargin = Vector(2, 2, 0)
|
||||
obbmaxs = obbmaxs + obbmargin
|
||||
obbmins = obbmins - obbmargin
|
||||
*/
|
||||
// Look for correction values
|
||||
local pcfg = self:GetPropConfig(entity:GetModel())
|
||||
if !!pcfg["OBBMaxsCorrection"] then
|
||||
|
@ -316,7 +320,6 @@ function SWEP:EnableThirdPerson(player)
|
|||
entity:SetModel(player:GetModel())
|
||||
entity:Spawn()
|
||||
entity:SetAngles(player:GetAngles())
|
||||
entity:SetVelocity(player:GetVelocity())
|
||||
entity:SetMoveType(MOVETYPE_NONE)
|
||||
entity:SetParent(player)
|
||||
entity:SetOwner(player)
|
||||
|
@ -330,18 +333,13 @@ end
|
|||
|
||||
hook.Add("PlayerDeath", "Disguiser.ThirdPersonDeath", function(victim, inflictor, killer)
|
||||
// Escape third-person mode
|
||||
if victim:GetNWBool("thirdperson") then
|
||||
victim:SetNetworkedBool("thirdperson", false)
|
||||
|
||||
if victim:GetNWBool("thirdperson") || victim:GetNWBool("isDisguised") then
|
||||
local ventity = victim:GetViewEntity()
|
||||
if (IsValid(ventity)) then
|
||||
victim:SetViewEntity(victim)
|
||||
ventity:Remove()
|
||||
end
|
||||
end
|
||||
|
||||
// Undisguise basically but with a few tweaks to avoid some bugs
|
||||
if victim:GetNWBool("isDisguised") then
|
||||
victim:SetNetworkedBool("thirdperson", false)
|
||||
victim:SetNetworkedBool("isDisguised", false)
|
||||
|
||||
// fake entity for spectacular death!
|
||||
|
@ -355,9 +353,7 @@ hook.Add("PlayerDeath", "Disguiser.ThirdPersonDeath", function(victim, inflictor
|
|||
dentity:SetPos(victim:GetPos())
|
||||
dentity:SetVelocity(victim:GetVelocity())
|
||||
local physics = victim:GetPhysicsObject()
|
||||
if !!victim:GetBloodColor() then
|
||||
dentity:SetBloodColor(victim:GetBloodColor()) -- this thing was alive, ya know? :(
|
||||
end
|
||||
dentity:SetBloodColor(BLOOD_COLOR_RED) -- this thing was alive, ya know? :(
|
||||
dentity:Spawn()
|
||||
local dphysics = dentity:GetPhysicsObject()
|
||||
dphysics:SetAngles(physics:GetAngles())
|
||||
|
@ -369,6 +365,7 @@ hook.Add("PlayerDeath", "Disguiser.ThirdPersonDeath", function(victim, inflictor
|
|||
dentity:Fire("enablemotion","",0)
|
||||
|
||||
// Let the entity bleed wahahaha. I'm mad, ain't I?
|
||||
victim:SetBloodColor(BLOOD_COLOR_RED) -- this thing was alive, ya know? :(
|
||||
local traceworld = {}
|
||||
traceworld.start = victim:GetPos() + Vector(0, 0, 20)
|
||||
traceworld.endpos = traceworld.start + (Vector(0,0,-1) * 8000) // aim max. 8000 units down
|
||||
|
@ -380,12 +377,6 @@ hook.Add("PlayerDeath", "Disguiser.ThirdPersonDeath", function(victim, inflictor
|
|||
edata:SetNormal(trw.Normal)
|
||||
edata:SetEntity(dentity)
|
||||
util.Effect("BloodImpact", edata)
|
||||
|
||||
// Reset the victim's bounding box to solve the issue with getting stuck at spawn
|
||||
victim:ResetHull()
|
||||
umsg.Start("resetHull", victim)
|
||||
umsg.Entity(victim)
|
||||
umsg.End()
|
||||
end
|
||||
end)
|
||||
|
||||
|
|
Loading…
Reference in New Issue