Forums » Suggestions
Autoaim
This thread is intended to propose an improved autoaim algorithm. I will attempt to describe the problem and the current solution. a1k0n is probably going to correct me, and maybe even post the current implementation. We will see.
Autoaim means that your client predicts the future position of the ship you are targeting and aims your weapon accordingly (Gauss, for example). The algorithm is actually useful for a lot more things than just that, including making lag less visible and bot aiming (server-side). In vendetta, for each object (ship) the 3D coordinates [x,y,z], the 3D orientation (roll, pitch, yaw), and a 3D motion vector [vx,vy,vz] is transmitted to the client (at various intervalls, depending on priority). Accelerations is currently not transmitted to the client.
To hit a target, we have to get a projectile to the exact same location (on both time and space axis) as the target object. Thats easier said than done, because projectiles travel at limited speed and we have a certain range of choices of trajectories along which we can shoot the projectile (some weapons in vendetta have a limited aim radius). In fact, often there are a number of trajectories we can use to hit the target. Some will require the projectile to travel further, others will yield a more immediate hit. For obvious reasons, the closer the point target and projectile collide, the better (less time to dodge while the projectile travels).
Vendettas current algorithm - in a nutshell - assumes that the acceleration vector (read: user input) of the target will be zero while the projectile travels. That is in fact often not true. Vendetta's flight model gives ships thrusters along each axis, but also has a key to roll the ship. The combination of rolling and vertical thrust greats an oscillating acceleration vector, because a constant thrust is exerted in a constantly changing direction (rolling). In other words, by simply pressing Q and R at the same time, the aimbot (or just bots in general) have zero chance of ever hitting a target except if they are either so close that every shot is a hit or just by sheer luck. That does two things: it makes botting very boring and autoaim very annoying.
A better solution would be IMO to assume a constant acceleration vector instead of the motion vector. Even better would be to assume constant user input, and using the ship model to predict the acceleration vector.
Autoaim means that your client predicts the future position of the ship you are targeting and aims your weapon accordingly (Gauss, for example). The algorithm is actually useful for a lot more things than just that, including making lag less visible and bot aiming (server-side). In vendetta, for each object (ship) the 3D coordinates [x,y,z], the 3D orientation (roll, pitch, yaw), and a 3D motion vector [vx,vy,vz] is transmitted to the client (at various intervalls, depending on priority). Accelerations is currently not transmitted to the client.
To hit a target, we have to get a projectile to the exact same location (on both time and space axis) as the target object. Thats easier said than done, because projectiles travel at limited speed and we have a certain range of choices of trajectories along which we can shoot the projectile (some weapons in vendetta have a limited aim radius). In fact, often there are a number of trajectories we can use to hit the target. Some will require the projectile to travel further, others will yield a more immediate hit. For obvious reasons, the closer the point target and projectile collide, the better (less time to dodge while the projectile travels).
Vendettas current algorithm - in a nutshell - assumes that the acceleration vector (read: user input) of the target will be zero while the projectile travels. That is in fact often not true. Vendetta's flight model gives ships thrusters along each axis, but also has a key to roll the ship. The combination of rolling and vertical thrust greats an oscillating acceleration vector, because a constant thrust is exerted in a constantly changing direction (rolling). In other words, by simply pressing Q and R at the same time, the aimbot (or just bots in general) have zero chance of ever hitting a target except if they are either so close that every shot is a hit or just by sheer luck. That does two things: it makes botting very boring and autoaim very annoying.
A better solution would be IMO to assume a constant acceleration vector instead of the motion vector. Even better would be to assume constant user input, and using the ship model to predict the acceleration vector.
This is actually something I'd been wondering about, but had never bothered to do any testing on or study in depth.
Assuming a constant acceleration vector would probably kill the primary failing that bots have in dealing with human pilots, and make things a little more interesting as far as needing a better strategy and skill at positioning.
While we're discussing the aiming system, it might also be nice if we got some sort of feedback if a target is outside maximum (not effective) range of our weapons.. While I'm really avid on reading tech info on gear, and hopefully we'll have maximum range listed there, it would be nice to have it in-flight.
Of course, part of the catch here is that with the current flight model, rolling doesn't seem to so much be an acceleration as a simple state change; there doesn't seem to be any inertial effect on rolling. For this to help, rolling would need to be taken into account, meaning it would need to be an actual 'thrust' of some sort.. It's possible the game already does this, and just has absolutely effective torque in cutting the rotational velocity when the player releases the key, but that seems unlikely to have been the development choice.
'Sup, devs? How's this go?
Assuming a constant acceleration vector would probably kill the primary failing that bots have in dealing with human pilots, and make things a little more interesting as far as needing a better strategy and skill at positioning.
While we're discussing the aiming system, it might also be nice if we got some sort of feedback if a target is outside maximum (not effective) range of our weapons.. While I'm really avid on reading tech info on gear, and hopefully we'll have maximum range listed there, it would be nice to have it in-flight.
Of course, part of the catch here is that with the current flight model, rolling doesn't seem to so much be an acceleration as a simple state change; there doesn't seem to be any inertial effect on rolling. For this to help, rolling would need to be taken into account, meaning it would need to be an actual 'thrust' of some sort.. It's possible the game already does this, and just has absolutely effective torque in cutting the rotational velocity when the player releases the key, but that seems unlikely to have been the development choice.
'Sup, devs? How's this go?
Don't use the auto-aim when fighting people. Bots are hard enough when they swarm without them being able to hit you every time.
While htis seems intuitive, I'm not convinced this will work. I'm a programmer (obviously not quite THIS advanced), so I know how hard it is to predict what a user is going to do. Therefore, no matter how clever you make the auto-aim, it cannot account for everything.
However, it may work for a variety of scenarios, which may be worth the rewrite. But it seems to me that this would be rough to code and would not yield anyhting in the way of beneficial gameplay results.
Just my observation, I could be completely wrong (but I hope I'm not).
However, it may work for a variety of scenarios, which may be worth the rewrite. But it seems to me that this would be rough to code and would not yield anyhting in the way of beneficial gameplay results.
Just my observation, I could be completely wrong (but I hope I'm not).
The intent is not to make it account for everything. The intent is for it to account for what's already there. If someone is doing something consistently (i.e. rolling while thrusting in a lateral direction) then that should not be difficult for an autoaim to account for.
The key is to simply not be predictable, and not do 'one thing'. The fact that there's an easy way to minimize damage when dealing with bots, and an un-accounted-for element in dealing with other players, indicates a failing. Not a -major- one, but a failing nonetheless. Functionally, people are botting with the use of an exploit.
If you maintain an erratic movement pattern, bots will not be able to hit you every time from this change. They will only be able to hit you when they should have been before.
The key is to simply not be predictable, and not do 'one thing'. The fact that there's an easy way to minimize damage when dealing with bots, and an un-accounted-for element in dealing with other players, indicates a failing. Not a -major- one, but a failing nonetheless. Functionally, people are botting with the use of an exploit.
If you maintain an erratic movement pattern, bots will not be able to hit you every time from this change. They will only be able to hit you when they should have been before.