I've been working on a separate module of the BotZ, not unrelated though.
I've always found a bit boring to continue on the same project or part of project from beginning to end so I tend to work on many fronts.
I've been doing some experiments with an aiming system, used inside a custom actor that rotates the viewport player without the player's command.
No, it's not an aimbot (shouldn't qualify as one, did make it work on ACE servers though...), all it does is locate a random pawn and make a human-like rotation to it, with some error as well, let's call it autonomous player for now.
Autonomous player has it's own half-assed weapon profile system (very generic, but has TRACKING and AQUISITION parameters) which should dictate a turning style, turning style determines speed, precision and when to hit fire if not hold it.
Some data extracted from the Autonomous player code:
var enum EAimingFlags
//Aim during aquisition?
var rotator StartAim;
var rotator TargetAim;
var float AimAlpha;
var float CurAimTime; //Total time turn will take
var bool bAimLeft; //Interpolation is made via substraction
var class<Weapon> WeaponClass;
var bool bZeroPing;
var int AmmoAmount;
var float WeaponWeight; //Dynamically set to determine if that weapon is the best in this situation
var float FiredAt; //Last time I fired, for checking whether I can fire again
var bool bTracker;
var bool bAltTracker;
var float SnipeFactor;
var float ProjSpeed; //0 means instant weapon
var float AltProjSpeed;
var WeapInfo Weapons;
//Enemy list, Ally list, flag carriers
var Pawn EL, AL;
var int iEL, iAL;
var int iEF, iAF;
function int AllyCount( float Distance, optional bool bInSight)
function int EnemyCount( float Distance, optional bool bInSight)
//4 acquire modes:
//1 = Quick, seek enemy, lowest accuracy (projectile weapons) (30% faster)
//2 = Precalculate movement, then acquire (lower skill or tracking weapon) (tracking is 15% faster)
//3 = 2 Precalculations, then acquire (higher skill + instant fire, or highest skill + instant fire or tracker)
//4 = 3 Precalculations, exclusive to highest skill + instant fire weapons
function AcquirePlayer( pawn P, optional float ScaleSpeed,optional vector vStart)
function float AcquireTime( vector TargetLoc, optional vector OriginLoc, optional float ScaleSpeed, optional int TurnDegrees)
function ResetAbilities( optional float ExtraMobility, optional float ExtraFirepower) //This should make a BotZ auto-adjust it's abilities
//here we set the turning parameters
//Origin loc is a way to turn towards something taking into account a different position, useful for pre-sniping and advanced translocating
function SetTurnTo( EAimingFlags TurnType, vector TargetLoc, optional vector OriginLoc, optional float ScaleSpeed)
//But we split it
//We must reach 100 so
//0.0 - 0.3 = 30% (speed 100%)
//0.3 - 0.6 = 40% (speed 133%)
//0.6 - 0.9 = 25% (speed 83%)
//0.9 - 1.0 = 5% //remaining 5% (speed 50%)
//Used for an individual turn
//For turn to be complete, turn alpha must reach or exceed 1.0 (apply fps error margin?)
function BotFacePosition( float Delta) //This is a delta function, turns are processed every frame here
All these have already been coded and work, now porting these methods to BotZ might prove a challenge at first but it works as safe enviroment to try new stuff without breaking BotZ.
It may take a while to put some of this stuff together so I wouldn't expect an update soon, I may release another test FerBotz.u with the shock combo profile this or next weekend.