"Games"
{
	"left4dead2"
	{
		"Functions"
		{
			"CTerrorWeapon::CanDeployFor"
			{
				"signature"	"CTerrorWeapon::CanDeployFor"
				"callconv"	"thiscall"
				"return"	"int"
				"this"		"entity"
				"arguments"
				{
					"CTerrorPlayer"
					{
						"type"	"cbaseentity"
					}
				}
			}
			"CTerrorGun::Reload"
			{
				"signature"	"CTerrorGun::Reload"
				"callconv"	"thiscall"
				"return"	"void"
				"this"		"entity"
			}
			"CBaseShotgun::Reload"
			{
				"signature"	"CBaseShotgun::Reload"
				"callconv"	"thiscall"
				"return"	"void"
				"this"		"entity"
			}
		}
		"MemPatches"
		{
			"CTerrorWeapon::CanDeployFor__movetype_patch"
			{
				"signature"			"CTerrorWeapon::CanDeployFor"
				"linux"
				{
					"offset"		"76"
					"verify"		"\x09"
					"patch"			"\xFF"
				}
				"windows"
				{
					"offset"		"87"
					"verify"		"\x09"
					"patch"			"\xFF"
				}
			}
			"CTerrorPlayer::PreThink__SafeDropLogic_patch"
			{
				"signature"			"CTerrorPlayer::PreThink"
				"linux"
				{
					"offset"		"181"
					"verify"		"\x09"
					"patch"			"\xFF"
					
				}
				"windows"
				{
					"offset"		"498"
					"verify"		"\x09"
					"patch"			"\xFF"
				}
			}
			"CTerrorPlayer::OnLadderMount__WeaponHolster_patch"
			{
				"signature"			"CTerrorPlayer::OnLadderMount"
				"linux"
				{
					"offset"		"68"
					"verify"		"\x75"
					"patch"			"\x90\x90" //nop
					
				}
				"windows"
				{
					"offset"		"2Fh"
					"verify"		"\x74"
					"patch"			"\xEB" //jmp instead of jz
				}
			}
			"CTerrorPlayer::OnLadderDismount__WeaponDeploy_patch" //stops the WeaponDeploy call
			{
				"signature"			"CTerrorPlayer::OnLadderDismount"
				"linux"
				{
					"offset"		"68"
					"verify"		"\x8B\x10\x89\x04\x24\xFF\x92\x24\x04\x00\x00"
					"patch"			"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" //lots of nops
					
				}
				"windows"
				{
					"offset"		"49"
					"verify"		"\xFF\xD0"
					"patch"			"\x90\x90" //nop
				}
			}
		}
		"Offsets"
		{
			"CBaseCombatWeapon::AbortReload"
			{
				"linux"		"281"
				"windows"	"280"
			}
			
			"CBaseCombatWeapon::Holster"
			{
				"linux"		"266"
				"windows"	"265"
			}
		}
		"Signatures"
		{
			"CTerrorWeapon::CanDeployFor"
			{
				"library"	"server"
				"linux"		"@_ZN13CTerrorWeapon12CanDeployForEP13CTerrorPlayer"
				"windows"	"\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x57\x8B\xF9\x85\xF6\x0F\x84\x2A\x2A\x2A\x2A\x8B\x06\x8B\x90\xE4\x07\x00\x00"
						/* ? ? ? ? ? ? ? 57 8B F9 85 F6 0F 84 ? ? ? ? 8B 06 8B 90 E4 07 00 00 */
			}
			"CTerrorPlayer::PreThink"
			{
				"library"	"server"
				"linux"		"@_ZN13CTerrorPlayer8PreThinkEv"
				"windows"	"\x2A\x2A\x2A\x2A\x2A\x2A\xA1\x2A\x2A\x2A\x2A\x33\xC5\x89\x45\xFC\x56\x57\x8B\xF1\xE8\x2A\x2A\x2A\x2A\x8B\x2A\xE8\x2A\x2A\x2A\x2A\x8B"
						/* ? ? ? ? ? ? A1 ? ? ? ? 33 C5 89 45 FC 56 57 8B F1 E8 ? ? ? ? 8B ? E8 ? ? ? ? 8B */
						/* Found by unique string "#L4D_idle_spectator" */
			}
			"CTerrorPlayer::OnLadderMount"
			{
				"library"	"server"
				"linux"		"@_ZN13CTerrorPlayer13OnLadderMountEv"
				"windows"	"\x56\x68\x2A\x2A\x2A\x2A\x8B\xF1\xE8\x2A\x2A\x2A\x2A\x8B\xCE\xE8"
						/* 56 68 ? ? ? ? 8B F1 E8 ? ? ? ? 8B CE E8 */
						/* XREF from function CTerrorPlayer::PlayerRunCommand search string "CTerrorPlayer::PlayerRunCommand" */
			}
			"CTerrorPlayer::OnLadderDismount"
			{
				"library"	"server"
				"linux"		"@_ZN13CTerrorPlayer16OnLadderDismountEv"
				"windows"	"\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x50\xE8\x2A\x2A\x2A\x2A\x83\xC4\x04\x84\xC0\x74\x2A\x8B\xCE\xE8\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x2A\x8B\x2A\x8B\x82\x2A\x2A\x2A\x2A\xFF"
						/* ? ? ? ? ? ? ? ? 50 E8 ? ? ? ? 83 C4 04 84 C0 74 ? 8B CE E8 ? ? ? ? 85 C0 74 ? 8B ? E8 ? ? ? ? 8B ? 8B ? 8B 82 ? ? ? ? FF */
						/* XREF from function CTerrorPlayer::PlayerRunCommand search string "CTerrorPlayer::PlayerRunCommand" */
			}
			"CTerrorGun::Holster"
			{
				"library"	"server"
				"linux"		"@_ZN10CTerrorGun7HolsterEP17CBaseCombatWeapon"
				"windows"	"\x2A\x2A\x2A\x2A\x2A\x2A\x80\x2A\x2A\x2A\x2A\x2A\x00\x74\x2A\x80\x2A\x2A\x2A\x2A\x2A\x01\x74\x2A\x80"
						/* ? ? ? ? ? ? 80 ? ? ? ? ? 00 74 ? 80 ? ? ? ? ? 01 74 ? 80 */
						/* Signature provided by crasher_3637 */
						/* https://forums.alliedmods.net/showpost.php?p=2737123&postcount=3 */
			}
			"CTerrorGun::Reload"
			{
				"library"	"server"
				"linux"		"@_ZN10CTerrorGun6ReloadEv"
				"windows"		"\x2A\x2A\x2A\x2A\x2A\x2A\x53\x56\x8B\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x2A\x85\x2A\x0F\x84\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x2A\x83"
						/* ? ? ? ? ? ? 53 56 8B ? E8 ? ? ? ? 8B ? 85 ? 0F 84 ? ? ? ? 8B ? ? ? ? ? 83 */
						/* VTable method. Using "!player->CanAttack()" 1 call below. */
			}
			"CBaseShotgun::Reload"
			{
				"library"	"server"
				"linux"		"@_ZN12CBaseShotgun6ReloadEv"
				"windows"	"\x2A\x2A\x2A\x2A\x2A\x2A\x56\x57\x8B\xF1\xE8\x2A\x2A\x2A\x2A\x8B\xF8\x85\xFF\x0F\x84\x2A\x2A\x2A\x2A\x8B\x87\xB4\x1C\x00\x00"
						/* ? ? ? ? ? ? 56 57 8B F1 E8 ? ? ? ? 8B F8 85 FF 0F 84 ? ? ? ? 8B 87 B4 1C 00 00 */
						/* Signature provided by Lux & Crasher_3637 */
			}
			"CBaseShotgun::PlayReloadAnim"
			{
				"library"	"server"
				"linux"		"@_ZN12CBaseShotgun14PlayReloadAnimE8Activity17PlayerAnimEvent_ti"
				"windows"	"\x2A\x2A\x2A\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x2A\x85\x2A\x0F\x84\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x8B\x2A\x8B"
						/* ? ? ? ? ? ? ? E8 ? ? ? ? 8B ? 85 ? 0F 84 ? ? ? ? 8B ? ? 8B ? 8B */
			}
		}
	}
}
