// Knockback actors should inherit from this
actor Vile_KnockbackHelper
{
Mass 1 //Thrust
Accuracy 0 //ZThrust
Meleerange 0 //Flags //Radial = 1, Halt = 2
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_RearrangePointers(0,0,2)
TNT1 A 0 A_TransferPointer(2,0,2,2)
TNT1 A 0 A_SetArg(0,CallACS("core_gettracer"))
TNT1 A 0 A_JumpIf(Accuracy<1,2)
TNT1 A 0 ThrustThingZ(args[0],Accuracy,0,0)
TNT1 A 0 ACS_NamedExecuteAlways("vile_neoknockback",0,args[0],Mass,Meleerange)
TNT1 A 1 A_Jump(256,"SpawnFX")
SpawnFX:
TNT1 A 1
stop
}
}

actor Vile_BasicHitBase
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 A 0
stop
}
}

actor Vile_Stop : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_Stop 
stop
}
}

//////////////////
// ENCORE TOOLS //
//////////////////


// Knockback actors should inherit from this
actor EncoreKnockbackHelper
{
Mass 1 //Thrust
Accuracy 0 //ZThrust
Meleerange 0 //Flags //Radial = 1, Halt = 2
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_RearrangePointers(0,0,2)
TNT1 A 0 A_TransferPointer(2,0,2,2)
TNT1 A 0 A_SetArg(0,CallACS("core_gettracer"))
TNT1 A 0 A_JumpIf(Accuracy<1,2)
TNT1 A 0 ThrustThingZ(args[0],Accuracy,0,0)
TNT1 A 0 ACS_NamedExecuteAlways("enc_knockback",0,args[0],Mass,Meleerange)
TNT1 A 1 A_Jump(256,"SpawnFX")
SpawnFX:
TNT1 A 1
stop
}
}

const int ENC_BT_ATTACK	= 1;
const int ENC_BT_JUMP = 4;
const int ENC_BT_ALTATTACK = 32;
// A_JumpIfInventory doesn't desync on high pings, unlike CallACS
actor Enc_ButtonCheckSync_P : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_Jumpif(CallACS("Enc_ButtonCheck",ENC_BT_ATTACK,0,192),"Firing")
TNT1 A 0 A_TakeInventory("BTFireFlag")
AltfireCheck:
TNT1 A 0 A_Jumpif(CallACS("Enc_ButtonCheck",ENC_BT_ALTATTACK,0,192),"Altfiring")
TNT1 A 0 A_TakeInventory("BTAltfireFlag")
stop
Firing:
TNT1 A 0 A_GiveInventory("BTFireFlag")
goto AltfireCheck
Altfiring:
TNT1 A 0 A_GiveInventory("BTAltfireFlag")
stop
}
}
actor BTFireFlag : Once {}
actor BTAltfireFlag : Once {}
actor BTJumpFlag : Once {}

// Given by "vile_class_altfire" script
// Used to allow clientside prediction of class altfires
actor Vile_ClassAltfire : Inventory
{
    inventory.amount 1
    inventory.maxamount 1
}

actor IsSpecialBot : Once {}

Actor BotRandomWeapon : CustomInventory
{
states
{
Pickup:
TNT1 A 0 ACS_NamedExecuteAlways("Encore_RandomWeapon",0,tid)
TNT1 A 0 A_GiveInventory("BotUsesRandomWeps")
stop
}
}
actor BotUsesRandomWeps : Once {}