// no pragma once !!!
//#pragma once

#ifndef ITER
#define CLASS_BEGIN(ClassName)
#define ADD_VIRTUAL_FUNCTION(FunctionName, ...)
#define ADD_OVERRIDE_VIRTUAL_FUNCTION(FunctionName, ...)
#define ADD_MEMBER_FUNCTION(FunctionName, ...)
#define ADD_STATIC_MEMBER_FUNCTION(FunctionName, ...)
#define CLASS_END()
#endif

CLASS_BEGIN(CBaseEntity, void)
	ADD_VIRTUAL_FUNCTION(Spawn)
	ADD_VIRTUAL_FUNCTION(Precache)
	ADD_VIRTUAL_FUNCTION(KeyValue, KeyValueData*)
	//ADD_VIRTUAL_FUNCTION(Save, CSave&)
	//ADD_VIRTUAL_FUNCTION(Restore, CRestore&)
	ADD_VIRTUAL_FUNCTION(ObjectCaps)
	ADD_VIRTUAL_FUNCTION(Activate)
	ADD_VIRTUAL_FUNCTION(SetObjectCollisionBox)
	ADD_VIRTUAL_FUNCTION(Classify)
	ADD_VIRTUAL_FUNCTION(DeathNotice, entvars_t*)
	ADD_VIRTUAL_FUNCTION(TraceAttack, entvars_t*, float, Vector, TraceResult*, int)
	ADD_VIRTUAL_FUNCTION(TakeDamage, entvars_t*, entvars_t*, float, int)
	ADD_VIRTUAL_FUNCTION(TakeHealth, float, int)
	ADD_VIRTUAL_FUNCTION(Killed, entvars_t*, int)
	ADD_VIRTUAL_FUNCTION(BloodColor)
	ADD_VIRTUAL_FUNCTION(TraceBleed, float, Vector, TraceResult*, int)
	ADD_VIRTUAL_FUNCTION(IsTriggered, CBaseEntity*)
	ADD_VIRTUAL_FUNCTION(MyMonsterPointer)
	ADD_VIRTUAL_FUNCTION(MySquadMonsterPointer)
	ADD_VIRTUAL_FUNCTION(GetToggleState)
	ADD_VIRTUAL_FUNCTION(AddPoints, int, BOOL)
	ADD_VIRTUAL_FUNCTION(AddPointsToTeam, int, BOOL)
	ADD_VIRTUAL_FUNCTION(AddPlayerItem, CBasePlayerItem*)
	ADD_VIRTUAL_FUNCTION(RemovePlayerItem, CBasePlayerItem*)
	ADD_VIRTUAL_FUNCTION(GiveAmmo, int, const char*, int)
	ADD_VIRTUAL_FUNCTION(GetDelay)
	ADD_VIRTUAL_FUNCTION(IsMoving)
	ADD_VIRTUAL_FUNCTION(OverrideReset)
	ADD_VIRTUAL_FUNCTION(DamageDecal, int)
	ADD_VIRTUAL_FUNCTION(SetToggleState, int)
	// ADD_VIRTUAL_FUNCTION(StartSneaking)
	// ADD_VIRTUAL_FUNCTION(StopSneaking)
	ADD_VIRTUAL_FUNCTION(OnControls, entvars_t*)
	ADD_VIRTUAL_FUNCTION(IsSneaking)
	ADD_VIRTUAL_FUNCTION(IsAlive)
	ADD_VIRTUAL_FUNCTION(IsBSPModel)
	ADD_VIRTUAL_FUNCTION(ReflectGauss)
	ADD_VIRTUAL_FUNCTION(HasTarget, string_t)
	ADD_VIRTUAL_FUNCTION(IsInWorld)
	ADD_VIRTUAL_FUNCTION(IsPlayer)
	ADD_VIRTUAL_FUNCTION(IsNetClient)
	ADD_VIRTUAL_FUNCTION(TeamID)
	ADD_VIRTUAL_FUNCTION(GetNextTarget)
	ADD_VIRTUAL_FUNCTION(Think)
	ADD_VIRTUAL_FUNCTION(Touch, CBaseEntity*)
	ADD_VIRTUAL_FUNCTION(Use, CBaseEntity*, CBaseEntity*, USE_TYPE, float)
	ADD_VIRTUAL_FUNCTION(Blocked, CBaseEntity*)
	ADD_VIRTUAL_FUNCTION(Respawn)
	ADD_VIRTUAL_FUNCTION(UpdateOwner)
	ADD_VIRTUAL_FUNCTION(FBecomeProne)
	ADD_VIRTUAL_FUNCTION(Center)
	ADD_VIRTUAL_FUNCTION(EyePosition)
	ADD_VIRTUAL_FUNCTION(EarPosition)
	ADD_VIRTUAL_FUNCTION(BodyTarget, const Vector&)
	ADD_VIRTUAL_FUNCTION(Illumination)
	ADD_VIRTUAL_FUNCTION(FVisible, CBaseEntity*)
	ADD_VIRTUAL_FUNCTION(FVisible, const Vector&)

	ADD_MEMBER_FUNCTION(SUB_Remove)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(SUB_DoNothing)
	ADD_MEMBER_FUNCTION(SUB_StartFadeOut)
	ADD_MEMBER_FUNCTION(SUB_FadeOut)
#endif
	ADD_MEMBER_FUNCTION(SUB_CallUseToggle)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(SUB_UseTargets, CBaseEntity*, USE_TYPE, float)
	ADD_MEMBER_FUNCTION(UpdateOnRemove)
	ADD_MEMBER_FUNCTION(ShouldToggle, USE_TYPE, BOOL)
	ADD_MEMBER_FUNCTION(FireBullets, ULONG, Vector, Vector, Vector, float, int, int, int, entvars_t*)
#endif
	ADD_MEMBER_FUNCTION(FireBullets3, Vector, Vector, float, float, int, int, int, float, entvars_t*, bool, int)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(Intersects, CBaseEntity*)
	ADD_MEMBER_FUNCTION(MakeDormant)
	ADD_MEMBER_FUNCTION(IsDormant)
	ADD_MEMBER_FUNCTION(IsLockedByMaster)
#endif
	ADD_MEMBER_FUNCTION(GetKnockBackData)

	ADD_STATIC_MEMBER_FUNCTION(Instance, edict_t*)
	ADD_STATIC_MEMBER_FUNCTION(Instance, entvars_t*)
	ADD_STATIC_MEMBER_FUNCTION(Instance, int)

	ADD_MEMBER_FUNCTION(GetMonsterPointer, entvars_t*)
	ADD_MEMBER_FUNCTION(GetMonsterPointer, edict_t*)

#ifndef CLIENT_DLL
	ADD_STATIC_MEMBER_FUNCTION(Create, const char*, const Vector&, const Vector&, edict_t*)
#endif

	ADD_MEMBER_FUNCTION(edict)
	ADD_MEMBER_FUNCTION(eoffset)
	ADD_MEMBER_FUNCTION(entindex)
CLASS_END()

CLASS_BEGIN(CBaseDelay, CBaseEntity)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(SUB_UseTargets, CBaseEntity*, USE_TYPE, float)
	ADD_MEMBER_FUNCTION(DelayThink)
#endif

	ADD_OVERRIDE_VIRTUAL_FUNCTION(KeyValue, KeyValueData*)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Save, CSave&)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Restore, CRestore&)
CLASS_END()

CLASS_BEGIN(CBaseAnimating, CBaseDelay)
	ADD_VIRTUAL_FUNCTION(HandleAnimEvent, MonsterEvent_t*)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(GetSequenceFlags)
	ADD_MEMBER_FUNCTION(LookupActivity, int)
	ADD_MEMBER_FUNCTION(LookupActivityHeaviest, int)
	ADD_MEMBER_FUNCTION(LookupSequence, const char*)
	ADD_MEMBER_FUNCTION(ResetSequenceInfo)
	ADD_MEMBER_FUNCTION(DispatchAnimEvents, duration_t)
	ADD_MEMBER_FUNCTION(SetBoneController, int, float)
	ADD_MEMBER_FUNCTION(InitBoneControllers)
	ADD_MEMBER_FUNCTION(SetBlending, int, float)
	ADD_MEMBER_FUNCTION(GetBonePosition, int, Vector&, Vector&)
	ADD_MEMBER_FUNCTION(GetAutomovement, Vector&, Vector&, float)
	ADD_MEMBER_FUNCTION(FindTransition, int, int, int*)
	ADD_MEMBER_FUNCTION(GetAttachment, int, Vector&, Vector&)
	ADD_MEMBER_FUNCTION(SetBodygroup, int, int)
	ADD_MEMBER_FUNCTION(GetBodygroup, int)
	ADD_MEMBER_FUNCTION(ExtractBbox, int, vec3_t_ref, vec3_t_ref)
	ADD_MEMBER_FUNCTION(SetSequenceBox)
#endif

	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Save, CSave&)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Restore, CRestore&)
CLASS_END()

CLASS_BEGIN(CBaseToggle, CBaseAnimating)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(LinearMove, Vector, float)
	ADD_MEMBER_FUNCTION(LinearMoveDone)
	ADD_MEMBER_FUNCTION(AngularMove, Vector, float)
	ADD_MEMBER_FUNCTION(AngularMoveDone)
	ADD_MEMBER_FUNCTION(IsLockedByMaster)
	ADD_STATIC_MEMBER_FUNCTION(AxisValue, int, const Vector&)
	ADD_STATIC_MEMBER_FUNCTION(AxisDir, entvars_t*)
	ADD_STATIC_MEMBER_FUNCTION(AxisDelta, int, const Vector&, const Vector&)
#endif

	ADD_OVERRIDE_VIRTUAL_FUNCTION(KeyValue, KeyValueData*)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Save, CSave&)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Restore, CRestore&)
CLASS_END()

CLASS_BEGIN(CBasePlayerItem, CBaseAnimating)
	ADD_VIRTUAL_FUNCTION(AddToPlayer, CBasePlayer*)
	ADD_VIRTUAL_FUNCTION(AddDuplicate, CBasePlayerItem*)
	ADD_VIRTUAL_FUNCTION(GetItemInfo, ItemInfo*)
	ADD_VIRTUAL_FUNCTION(CanDeploy)
	ADD_VIRTUAL_FUNCTION(CanDrop)
	ADD_VIRTUAL_FUNCTION(Deploy)
	ADD_VIRTUAL_FUNCTION(IsWeapon)
	ADD_VIRTUAL_FUNCTION(CanHolster)
	ADD_VIRTUAL_FUNCTION(Holster, int)
	ADD_VIRTUAL_FUNCTION(UpdateItemInfo)
	ADD_VIRTUAL_FUNCTION(ItemPreFrame)
	ADD_VIRTUAL_FUNCTION(ItemPostFrame)
	ADD_VIRTUAL_FUNCTION(Drop)
	ADD_VIRTUAL_FUNCTION(Kill)
	ADD_VIRTUAL_FUNCTION(AttachToPlayer, CBasePlayer*)
	ADD_VIRTUAL_FUNCTION(CheckWeapon, CBasePlayer*, CBasePlayerItem*)
	ADD_VIRTUAL_FUNCTION(PrimaryAmmoIndex)
	ADD_VIRTUAL_FUNCTION(SecondaryAmmoIndex)
	ADD_VIRTUAL_FUNCTION(UpdateClientData, CBasePlayer*)
	ADD_VIRTUAL_FUNCTION(GetWeaponPtr)
	ADD_VIRTUAL_FUNCTION(GetMaxSpeed)
	ADD_VIRTUAL_FUNCTION(iItemSlot)

	ADD_MEMBER_FUNCTION(DestroyItem)
	ADD_MEMBER_FUNCTION(DefaultTouch, CBaseEntity*)
	ADD_MEMBER_FUNCTION(FallThink)
	ADD_MEMBER_FUNCTION(Materialize)
	ADD_MEMBER_FUNCTION(AttemptToMaterialize)
	ADD_MEMBER_FUNCTION(FallInit)
	ADD_MEMBER_FUNCTION(CheckRespawn)

	ADD_VIRTUAL_FUNCTION(GetArmorRatioModifier)
	ADD_VIRTUAL_FUNCTION(GetCSModelName)
	ADD_VIRTUAL_FUNCTION(GetBuyAmmoConfig)

	ADD_MEMBER_FUNCTION(ItemInfoInstance)
	ADD_MEMBER_FUNCTION(iItemPosition)
	ADD_MEMBER_FUNCTION(pszAmmo1)
	ADD_MEMBER_FUNCTION(iMaxAmmo1)
	ADD_MEMBER_FUNCTION(pszAmmo2)
	ADD_MEMBER_FUNCTION(iMaxAmmo2)
	ADD_MEMBER_FUNCTION(pszName)
	ADD_MEMBER_FUNCTION(iMaxClip)
	ADD_MEMBER_FUNCTION(iWeight)
	ADD_MEMBER_FUNCTION(iFlags)

	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Save, CSave&)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Restore, CRestore&)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(SetObjectCollisionBox)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Respawn)
CLASS_END()


CLASS_BEGIN(CBasePlayerWeapon, CBasePlayerItem)
	ADD_VIRTUAL_FUNCTION(ExtractAmmo, CBasePlayerWeapon*)
	ADD_VIRTUAL_FUNCTION(ExtractClipAmmo, CBasePlayerWeapon*)
	ADD_VIRTUAL_FUNCTION(AddWeapon)
	ADD_VIRTUAL_FUNCTION(PlayEmptySound)
	ADD_VIRTUAL_FUNCTION(ResetEmptySound)
	ADD_VIRTUAL_FUNCTION(SendWeaponAnim, int, int)
	ADD_VIRTUAL_FUNCTION(IsUseable)
	ADD_VIRTUAL_FUNCTION(PrimaryAttack)
	ADD_VIRTUAL_FUNCTION(SecondaryAttack)
	ADD_VIRTUAL_FUNCTION(Reload)
	ADD_VIRTUAL_FUNCTION(WeaponIdle)
	ADD_VIRTUAL_FUNCTION(RetireWeapon)
	ADD_VIRTUAL_FUNCTION(ShouldWeaponIdle)
	ADD_VIRTUAL_FUNCTION(UseDecrement)

#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(AddPrimaryAmmo, int, char*, int, int)
	ADD_MEMBER_FUNCTION(AddSecondaryAmmo, int, char*, int)
#endif
	ADD_MEMBER_FUNCTION(DefaultDeploy, const char*, const char*, int, const char*, int)
	ADD_MEMBER_FUNCTION(DefaultReload, int, int, duration_t, int)
	ADD_MEMBER_FUNCTION(FireRemaining, int&, time_point_t&, BOOL)
	ADD_MEMBER_FUNCTION(KickBack, float, float, float, float, float, float, int)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(EjectBrassLate)
	//ADD_MEMBER_FUNCTION(MakeBeam)
	//ADD_MEMBER_FUNCTION(BeamUpdate)
	ADD_MEMBER_FUNCTION(ReloadSound)
	ADD_MEMBER_FUNCTION(GetNextAttackDelay, duration_t)
#endif
	ADD_MEMBER_FUNCTION(HasSecondaryAttack)
	ADD_MEMBER_FUNCTION(IsPistol)
	ADD_MEMBER_FUNCTION(SetPlayerShieldAnim)
	ADD_MEMBER_FUNCTION(ResetPlayerShieldAnim)
	ADD_MEMBER_FUNCTION(ShieldSecondaryFire, int, int)

	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Save, CSave&)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Restore, CRestore&)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(SetObjectCollisionBox)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Respawn)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(AddToPlayer, CBasePlayer*)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(AddDuplicate, CBasePlayerItem*)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(CanDeploy)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(IsWeapon)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Holster, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(UpdateItemInfo)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(ItemPostFrame)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(PrimaryAmmoIndex)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(SecondaryAmmoIndex)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(UpdateClientData, CBasePlayer*)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(GetWeaponPtr)
CLASS_END()

CLASS_BEGIN(CBaseMonster, CBaseToggle)
	ADD_VIRTUAL_FUNCTION(ChangeYaw, int)
	ADD_VIRTUAL_FUNCTION(HasHumanGibs)
	ADD_VIRTUAL_FUNCTION(HasAlienGibs)
	ADD_VIRTUAL_FUNCTION(FadeMonster)
	ADD_VIRTUAL_FUNCTION(GibMonster)
	ADD_VIRTUAL_FUNCTION(GetDeathActivity)
	ADD_VIRTUAL_FUNCTION(BecomeDead)
	ADD_VIRTUAL_FUNCTION(ShouldFadeOnDeath)
	ADD_VIRTUAL_FUNCTION(IRelationship, CBaseEntity*)
	ADD_VIRTUAL_FUNCTION(PainSound)
	ADD_VIRTUAL_FUNCTION(ResetMaxSpeed)
	ADD_VIRTUAL_FUNCTION(ReportAIState)
	ADD_VIRTUAL_FUNCTION(MonsterInitDead)
	ADD_VIRTUAL_FUNCTION(Look, int)
	ADD_VIRTUAL_FUNCTION(BestVisibleEnemy)
	ADD_VIRTUAL_FUNCTION(FInViewCone, CBaseEntity*)
	ADD_VIRTUAL_FUNCTION(FInViewCone, const Vector *)

#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(MakeIdealYaw, Vector)
	ADD_MEMBER_FUNCTION(GetSmallFlinchActivity)
	ADD_MEMBER_FUNCTION(ShouldGibMonster, int)
	ADD_MEMBER_FUNCTION(CallGibMonster)
	ADD_MEMBER_FUNCTION(FCheckAITrigger)
	ADD_MEMBER_FUNCTION(DeadTakeDamage, entvars_t*, entvars_t*, float, int)
	ADD_MEMBER_FUNCTION(DamageForce, float)
	ADD_MEMBER_FUNCTION(RadiusDamage, entvars_t*, entvars_t*, float, int, int)
	ADD_MEMBER_FUNCTION(RadiusDamage, Vector, entvars_t*, entvars_t*, float, int, int)
	ADD_MEMBER_FUNCTION(CorpseFallThink)
	ADD_MEMBER_FUNCTION(CheckTraceHullAttack, float, int, int)
	ADD_MEMBER_FUNCTION(MakeDamageBloodDecal, int, float, TraceResult*, const Vector&)
	ADD_MEMBER_FUNCTION(BloodSplat, const Vector&, const Vector&, int, int)
#endif

	ADD_MEMBER_FUNCTION(SetConditions, int)
	ADD_MEMBER_FUNCTION(ClearConditions, int)
	ADD_MEMBER_FUNCTION(HasConditions, int)
	ADD_MEMBER_FUNCTION(HasAllConditions, int)
	ADD_MEMBER_FUNCTION(Remember, int)
	ADD_MEMBER_FUNCTION(Forget, int)
	ADD_MEMBER_FUNCTION(HasMemory, int)
	ADD_MEMBER_FUNCTION(HasAllMemories, int)
	ADD_MEMBER_FUNCTION(StopAnimation)

	ADD_OVERRIDE_VIRTUAL_FUNCTION(KeyValue, KeyValueData*)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(TakeHealth, float, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(TakeDamage, entvars_t*, entvars_t*, float, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Killed, entvars_t*, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(BloodColor)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(IsAlive)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(TraceAttack, entvars_t*, float, Vector, TraceResult*, int)
CLASS_END()

CLASS_BEGIN(CBasePlayer, CBaseMonster)
	ADD_VIRTUAL_FUNCTION(Jump)
	ADD_VIRTUAL_FUNCTION(Duck)
	ADD_VIRTUAL_FUNCTION(PreThink)
	ADD_VIRTUAL_FUNCTION(PostThink)
	ADD_VIRTUAL_FUNCTION(GetGunPosition)
	ADD_VIRTUAL_FUNCTION(IsBot)
	ADD_VIRTUAL_FUNCTION(UpdateClientData)
	ADD_VIRTUAL_FUNCTION(ImpulseCommands)
	ADD_VIRTUAL_FUNCTION(RoundRespawn)
	ADD_VIRTUAL_FUNCTION(GetAutoaimVector, float)
	ADD_VIRTUAL_FUNCTION(Blind, duration_t, duration_t, duration_t, int)
	ADD_VIRTUAL_FUNCTION(OnTouchingWeapon, CWeaponBox*)

#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(SpawnClientSideCorpse)
	ADD_MEMBER_FUNCTION(Observer_FindNextPlayer, bool, const char*)
	ADD_MEMBER_FUNCTION(Observer_IsValidTarget, int, bool)
	ADD_MEMBER_FUNCTION(Observer_HandleButtons)
	ADD_MEMBER_FUNCTION(Observer_SetMode, int)
	ADD_MEMBER_FUNCTION(Observer_CheckTarget)
	ADD_MEMBER_FUNCTION(Observer_CheckProperties)
	ADD_MEMBER_FUNCTION(IsObserver)
	// ADD_MEMBER_FUNCTION(PlantC4)
	ADD_MEMBER_FUNCTION(Radio, const char*, const char*, short, bool)
	ADD_MEMBER_FUNCTION(GetNextRadioRecipient, CBasePlayer*)
	ADD_MEMBER_FUNCTION(SmartRadio)
	ADD_MEMBER_FUNCTION(ThrowWeapon, const char*)
	ADD_MEMBER_FUNCTION(ThrowPrimary)
	ADD_MEMBER_FUNCTION(AddAccount, int, bool)
	ADD_MEMBER_FUNCTION(Disappear)
	ADD_MEMBER_FUNCTION(MakeVIP)
	ADD_MEMBER_FUNCTION(CanPlayerBuy, bool)
	ADD_MEMBER_FUNCTION(TabulateAmmo)
	ADD_MEMBER_FUNCTION(Pain, int, bool)
	ADD_MEMBER_FUNCTION(IsBombGuy)
	ADD_MEMBER_FUNCTION(IsLookingAtPosition, Vector*, float)
	ADD_MEMBER_FUNCTION(Reset)
	ADD_MEMBER_FUNCTION(SetScoreboardAttributes, CBasePlayer*)
	ADD_MEMBER_FUNCTION(RenewItems)
	ADD_MEMBER_FUNCTION(PackDeadPlayerItems)
	ADD_MEMBER_FUNCTION(GiveDefaultItems)
	ADD_MEMBER_FUNCTION(RemoveAllItems, BOOL, bool)
	ADD_MEMBER_FUNCTION(SetBombIcon, BOOL)
	ADD_MEMBER_FUNCTION(SetProgressBarTime, int)
	ADD_MEMBER_FUNCTION(SetProgressBarTime2, int, duration_t)
	ADD_MEMBER_FUNCTION(SetPlayerModel, BOOL)
	ADD_MEMBER_FUNCTION(SetNewPlayerModel, const char *)
	ADD_MEMBER_FUNCTION(SwitchWeapon, CBasePlayerItem*)
	ADD_MEMBER_FUNCTION(CheckPowerups, entvars_t*)
	ADD_MEMBER_FUNCTION(CanAffordPrimary)
	ADD_MEMBER_FUNCTION(CanAffordPrimaryAmmo)
	ADD_MEMBER_FUNCTION(CanAffordSecondaryAmmo)
	ADD_MEMBER_FUNCTION(CanAffordArmor)
	ADD_MEMBER_FUNCTION(CanAffordDefuseKit)
	ADD_MEMBER_FUNCTION(CanAffordGrenade)
	ADD_MEMBER_FUNCTION(NeedsPrimaryAmmo)
	ADD_MEMBER_FUNCTION(NeedsSecondaryAmmo)
	ADD_MEMBER_FUNCTION(NeedsArmor)
	ADD_MEMBER_FUNCTION(NeedsDefuseKit)
	ADD_MEMBER_FUNCTION(NeedsGrenade)
	ADD_MEMBER_FUNCTION(IsOnLadder)
	ADD_MEMBER_FUNCTION(FlashlightIsOn)
	ADD_MEMBER_FUNCTION(FlashlightTurnOn)
	ADD_MEMBER_FUNCTION(FlashlightTurnOff)
	ADD_MEMBER_FUNCTION(UpdatePlayerSound)
	ADD_MEMBER_FUNCTION(DeathSound)
	ADD_MEMBER_FUNCTION(SetAnimation, PLAYER_ANIM)
	//ADD_MEMBER_FUNCTION(SetWeaponAnimType, const char*)
	ADD_MEMBER_FUNCTION(CheatImpulseCommands, int)
	ADD_MEMBER_FUNCTION(StartDeathCam)
	ADD_MEMBER_FUNCTION(StartObserver, Vector, Vector)
	ADD_MEMBER_FUNCTION(HandleSignals)
	ADD_MEMBER_FUNCTION(DropPlayerItem, const char*)
	ADD_MEMBER_FUNCTION(HasPlayerItem, CBasePlayerItem*)
	ADD_MEMBER_FUNCTION(HasNamedPlayerItem, const char*)
	ADD_MEMBER_FUNCTION(HasWeapons)
	ADD_MEMBER_FUNCTION(SelectPrevItem, int)
	ADD_MEMBER_FUNCTION(SelectNextItem, int)
	ADD_MEMBER_FUNCTION(SelectLastItem)
	ADD_MEMBER_FUNCTION(SelectItem, const char*)
	ADD_MEMBER_FUNCTION(ItemPreFrame)
	ADD_MEMBER_FUNCTION(ItemPostFrame)
	ADD_MEMBER_FUNCTION(GiveNamedItem, const char*)
	ADD_MEMBER_FUNCTION(EnableControl, BOOL)
	ADD_MEMBER_FUNCTION(HintMessage, const char*, BOOL, BOOL)
	ADD_MEMBER_FUNCTION(SendAmmoUpdate)
	ADD_MEMBER_FUNCTION(SendFOV, int)
	ADD_MEMBER_FUNCTION(WaterMove)
	ADD_MEMBER_FUNCTION(PlayerDeathThink)
	ADD_MEMBER_FUNCTION(PlayerUse)
	ADD_MEMBER_FUNCTION(HostageUsed)
	ADD_MEMBER_FUNCTION(JoiningThink)
	ADD_MEMBER_FUNCTION(RemoveLevelText)
	ADD_MEMBER_FUNCTION(MenuPrint, const char*)
	ADD_MEMBER_FUNCTION(ResetMenu)
	ADD_MEMBER_FUNCTION(SyncRoundTimer)
	ADD_MEMBER_FUNCTION(CheckSuitUpdate)
	ADD_MEMBER_FUNCTION(SetSuitUpdate, const char*, int, int)
	ADD_MEMBER_FUNCTION(UpdateGeigerCounter)
	ADD_MEMBER_FUNCTION(CheckTimeBasedDamage)
	ADD_MEMBER_FUNCTION(BarnacleVictimBitten, entvars_t*)
	ADD_MEMBER_FUNCTION(BarnacleVictimReleased)
	ADD_STATIC_MEMBER_FUNCTION(GetAmmoIndex, const char*)
	ADD_MEMBER_FUNCTION(AmmoInventory, int)
	ADD_MEMBER_FUNCTION(ResetAutoaim)
	ADD_MEMBER_FUNCTION(AutoaimDeflection, Vector&, float, float)
	ADD_MEMBER_FUNCTION(ForceClientDllUpdate)
	ADD_MEMBER_FUNCTION(DeathMessage, entvars_t*)
	ADD_MEMBER_FUNCTION(SetCustomDecalFrames, int)
	ADD_MEMBER_FUNCTION(GetCustomDecalFrames)
	ADD_MEMBER_FUNCTION(InitStatusBar)
	ADD_MEMBER_FUNCTION(UpdateStatusBar)
	ADD_MEMBER_FUNCTION(StudioEstimateGait)
	ADD_MEMBER_FUNCTION(StudioPlayerBlend, int*, float*)
	ADD_MEMBER_FUNCTION(CalculatePitchBlend)
	ADD_MEMBER_FUNCTION(CalculateYawBlend)
	ADD_MEMBER_FUNCTION(StudioProcessGait)
	ADD_MEMBER_FUNCTION(SendHostagePos)
	ADD_MEMBER_FUNCTION(SendHostageIcons)
	ADD_MEMBER_FUNCTION(ResetStamina)
	ADD_MEMBER_FUNCTION(IsArmored, int)
	ADD_MEMBER_FUNCTION(ShouldDoLargeFlinch, int, int)
	ADD_MEMBER_FUNCTION(SetPrefsFromUserinfo, char*)
	ADD_MEMBER_FUNCTION(SendWeatherInfo)
	ADD_MEMBER_FUNCTION(UpdateShieldCrosshair, bool)
	ADD_MEMBER_FUNCTION(HasShield)
	ADD_MEMBER_FUNCTION(IsProtectedByShield)
	ADD_MEMBER_FUNCTION(RemoveShield)
	ADD_MEMBER_FUNCTION(DropShield, bool)
	ADD_MEMBER_FUNCTION(DropShield, bool)
	ADD_MEMBER_FUNCTION(IsHittingShield, Vector&, TraceResult*)
	ADD_MEMBER_FUNCTION(SelectSpawnSpot, const char*, CBaseEntity*&)
#endif
	ADD_MEMBER_FUNCTION(IsReloading)
	ADD_MEMBER_FUNCTION(IsBlind)
	ADD_MEMBER_FUNCTION(IsAutoFollowAllowed)
	ADD_MEMBER_FUNCTION(InhibitAutoFollow, duration_t)
	ADD_MEMBER_FUNCTION(AllowAutoFollow)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(ClearAutoBuyData)
	ADD_MEMBER_FUNCTION(AddAutoBuyData, const char *)
	ADD_MEMBER_FUNCTION(AutoBuy)
	ADD_MEMBER_FUNCTION(ClientCommand, const char*, const char*, const char*, const char*)
	ADD_MEMBER_FUNCTION(PrioritizeAutoBuyString, char*, const char*)
	ADD_MEMBER_FUNCTION(PickPrimaryCareerTaskWeapon)
	ADD_MEMBER_FUNCTION(PickSecondaryCareerTaskWeapon)
	ADD_MEMBER_FUNCTION(PickFlashKillWeaponString)
	ADD_MEMBER_FUNCTION(PickGrenadeKillWeaponString)
	ADD_MEMBER_FUNCTION(ShouldExecuteAutoBuyCommand, AutoBuyInfoStruct*, bool, bool)
	ADD_MEMBER_FUNCTION(PostAutoBuyCommandProcessing, AutoBuyInfoStruct*, bool&, bool&)
	ADD_MEMBER_FUNCTION(ParseAutoBuyString, const char*, bool&, bool&)
	ADD_MEMBER_FUNCTION(GetAutoBuyCommandInfo, const char*)
	ADD_MEMBER_FUNCTION(InitRebuyData, const char*)
	ADD_MEMBER_FUNCTION(BuildRebuyStruct)
	ADD_MEMBER_FUNCTION(Rebuy)
	ADD_MEMBER_FUNCTION(RebuyPrimaryWeapon)
	ADD_MEMBER_FUNCTION(RebuyPrimaryAmmo)
	ADD_MEMBER_FUNCTION(RebuySecondaryWeapon)
	ADD_MEMBER_FUNCTION(RebuySecondaryAmmo)
	ADD_MEMBER_FUNCTION(RebuyHEGrenade)
	ADD_MEMBER_FUNCTION(RebuyFlashbang)
	ADD_MEMBER_FUNCTION(RebuySmokeGrenade)
	ADD_MEMBER_FUNCTION(RebuyDefuser)
	ADD_MEMBER_FUNCTION(RebuyNightVision)
	ADD_MEMBER_FUNCTION(RebuyArmor)
	ADD_MEMBER_FUNCTION(UpdateLocation, bool)
#endif
	ADD_MEMBER_FUNCTION(SetObserverAutoDirector, bool)
#ifndef CLIENT_DLL
	ADD_MEMBER_FUNCTION(IsObservingPlayer, CBasePlayer*)
#endif
	ADD_MEMBER_FUNCTION(CanSwitchObserverModes)
	ADD_MEMBER_FUNCTION(Intense)

	ADD_OVERRIDE_VIRTUAL_FUNCTION(Spawn)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Precache)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Restart)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Save, CSave&)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(Restore, CRestore&)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(ObjectCaps)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Classify)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(TraceAttack, entvars_t*, float, Vector, TraceResult*, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(TakeDamage, entvars_t*, entvars_t*, float, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(TakeHealth, float, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Killed, entvars_t*, int)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(AddPoints, int, BOOL)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(AddPointsToTeam, int, BOOL)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(AddPlayerItem, CBasePlayerItem*)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(RemovePlayerItem, CBasePlayerItem*)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(GiveAmmo, int, const char*, int)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(StartSneaking)
	// ADD_OVERRIDE_VIRTUAL_FUNCTION(StopSneaking)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(IsSneaking)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(IsAlive)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(IsPlayer)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(IsNetClient)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(TeamID)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(FBecomeProne)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(BodyTarget, const Vector&)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(Illumination)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(ShouldFadeOnDeath)
	ADD_OVERRIDE_VIRTUAL_FUNCTION(ResetMaxSpeed)
CLASS_END()

#undef CLASS_BEGIN
#undef ADD_VIRTUAL_FUNCTION
#undef ADD_MEMBER_FUNCTION
#undef ADD_STATIC_MEMBER_FUNCTION
#undef CLASS_END