On Bounty Hunting and Debugging

Nearly every time I open patch notes, the thanks and appreciation is usually punctuated with a discussion about Bounty Hunting. Specifically the issues surrounding reputation, last hit mechanics, and security vessel response to stray munitions. First, let’s not downplay or minimize, these are issues that do affect many people and that do make Bounty Hunting more tedious and less fun. It does even start to hinder profit when you take an anaconda blast to the face from the Local Security Force for killing that dastardly pirate who happened to be in the same minor faction. The Devs have, through social media, tickets, and the forums, been made fully aware of the issues by now, I’m sure; and since the Patch Notes have yet to address this issue, I’m sure they’re aware that the issues are still in the public version.

Now, having said that, I've a basic understanding of simple Boolean programming and debugging, and I know that often times, as a community rallying around a piece of art/entertainment, we begin to lost objectivity and forget the humanity behind the decisions and the work. And I see many comments to the effect of “Well why are they focusing on all these other bugs and not the Bounty Hunting bugs?” This would be a perfectly valid question, were it not for the way game companies handle debugging and patching. So I’d like to hopefully help explain why Frontier have been seemingly slow in fixing these glaring bugs, and why other bugs are being fixed faster, seemingly in its stead.

DISCLAIMER: I do not have intimate knowledge of Frontier’s exact resource management model, nor am I a professional programmer. However, I do have a few years of amateur programming in Java, HTML, CSS, and AutoHotKey (I know, I know, but it is still an object oriented programming language), and I have knowledge of LEAN model efficiency, which is used heavily in the programming and software industry; as well as basic professional project management experience (currently working on my second major project for my company, as project lead). Information from this point forward infers from this knowledge, and is slight conjecture as to their model from practices I’ve observed. This is an attempt to remember the human element and an attempt at an objective analysis of the situation.

So! What’s our primary issue? Well, Bounty Hunting has a few glaring issues, issues which the Devs have, on several occasions, made it clear they are aware of and working on (For full details, please see Michael Brooke’s forum post history). As mentioned above, these issues have persisted for a while, and yes, have persisted past launch. However, let’s take a moment before we dive into debugging to remember something important, it is, despite some cries to the contrary, broken beyond all repair. I have personally broken a cool Million credits bounty hunting since launch, and have a nearly 100% A-fit Viper thanks to the combined funds of Bounty Hunting, its associated missions (which I actually think are different than Assassination missions, someone please confirm/correct), combat missions, and some light courier missions. There are countless more CMDRs who have been able to make a living in a similar fashion. It’s annoying, but it works, more or less.

Now, on to the main question that inspired this rant/letter, “Why is Frontier taking so long to fix such a simple bug, and why are they fixing other, sometimes rare bugs first?” Short answer is, they aren’t. Long answer requires a basic understanding of programming logic. Elite is very Binary, there is no getting around this fact. It appears to me AI behavious can be determined by a very basic set of IF, THEN statements regarding a player’s reactions towards them. Now all AI can be defined this way (All of the Final Fantasy’s combat AIs are a string of these determining who to target with what attack) so this is not a criticism, simply the foundation we are basing the rest of this on.

Now, let’s see if we can fix this for Frontier. The largest complaint I’ve seen, more than the last hit mechanic is the retaliation. Now, the simplest fix for this would be to run a targeting check, right? So our Boolean now looks like this:

Code:
if (target=policeForce) {
	attackPlayer = True;
} else {
	attackPlayer = False;
}

Now, we have to account for additional layering, additional eventualities. We have to account for cheaters and exploits. So, first exploit that comes to mind is the ability to attack police by positioning them between you an your target (a skilled pilot could do this with say, an anaconda, and kill police craft with the plasma accelerator in 1-2 hits. Since the Police is not engaging, then they won’t fly differently. Now, we can add some arguments to account for this.

Code:
if (target = policeForce) {
	} or {
		if (shieldDamage >50%)
			and (damageSource = playerWeapon)
		then attackPlayer = True;
	} else {
		attackPlayer = False;
}

Now, the player must be targeting someone else, and we’ve added a damage threshold for engaging the player. If the player causes more than 50% shields damage to an officer, no matter who they are engaging, the police will engage. Now, someone who’s good with programing is probably looking at this statement and seeing a glaring issue. This could, without knowing the rest of the code, cause an issue where attacking a clean player would not cause police to engage you, since you aren’t targeting them, and aren’t damaging them, they are told that attackPlayer = False. So, that needs to be fixed.

Code:
if (target = policeForce) {
	and if (target = clean)
	} or {
		if (shieldDamage >50%)
			and (damageSource = playerWeapon)
		then attackPlayer = True;
	} else {
		attackPlayer = False;
}

Now, we have an additional rule governing the assault of Clean Pilots. If the pilot is clean, the police will attack, if not, they will not. Now, you will notice I’m using “and if”, meaning that both criteria must be met, the target cannot be the police force, and the target must be clean for the police force to ignore you. There’s also the caveat that if you cause over 50% shield damage, the Police will attack.

For each possible exploit, the code gets longer, and more and more scenarios have to be accounted for. And for each line, it’s possible to break something else. Obviously, there’s reputation to account for, if the local police hate you, you’re SOL. Now some people mentioned that police should not have a faction affiliation. I beg to differ.

By answering not only to the local government but to their faction, it adds another layer of depth. Whether or not the police put the law above their faction is not for me to say, I leave it to Frontier to make the design choice for their game. But at the end of the day, it’s a long, and time consuming process just to get the code built correctly. And remember for each line you write, you need to correct two... hundred... thousand. You get the idea.

Now, last, and least (at least word count-wise, already over 1200, sorry, guys and gals) why are they fixing other stuff and ignoring Bounty Hunting? Again, they aren’t. There are probably a team devoted to fixing this, as well as a team devoted to fixing other issues. The teams work in parallel, but separately. People are unable to log in, unable to finish their purchase, or disconnecting regularly. That’s more important than bounty hunting, yes, but it’s not that bounty hunting is being ignored. Tons of testing needs to be done for each change, to ensure that it doesn’t have unprecedented outcomes.

And since it’s a launched game, they need to make doubly sure that nothing is damaged when they make a major change like that. So give them a bit of time, time to work out exactly how to improve my favorite profession. (Well, second favorite, I’m an Imperial mercenary first, but that doesn’t make me a lot of money atm). I can assure you, Frontier hears you, and they want to give you a game you love. No developer sets out with the mission of ing off their players, but good code comes with patience and a lot of energy drinks.

See you out in the Black, commanders!
 
Last edited:
If you are trying to get a job at Frontier - try harder

Bug in your code

Code:
if (target = policeForce) {

it should be == not =
Same goes for rest of comparing lines
 
Last edited:
As far as simple pseudo-code showing the logic of the operation goes, that is fine.

But then you run into questions like:

- how do you actually define who attacked first? is it first hit? is it first one to pull the trigger when targetted? for example, I could come across you and fire a missile, but you spot it and fire your laser weapons at me and I take a hit. Now, you have definietly hit me, but I fired first, although you might evade the missile. So which action defines "first attack"? What if I fire a missile first, and you fire one, but yours hits me before mine hits you?
- what is the cooldown between attacks? e.g. if someone shoots me first and i run, then I come across them 2 days later, can i fire at them because they attacked me first?

And probably a whole load more conditions and values that need to be taken into account due to the programming architeture being called upon to make these decisions. "Who attacked first?" might be a simple binray yes/no, but to arrive at that yes/no you might have to evalaute a dozen or more conditions first.

Note Im not saying that these are insurmountable problems, but they are the kind of thing that needs to be considered that OP doesnt touch on.
 
Last edited:
Stray munitions is easy, you just store the shipID and run a timeout timer on the infraction count, if the infraction count passes 3 then set the offending ships to wanted status. (a player could still kill a Auth w/o getting a bounty but it would take an hour or something)

Last hit is easy as well, any ship stores where damage came from, and how much that damage is, on death it goes through the list and finds the winner, returns that shipID to the server or whatever and dishes out the bounty. (would have to be a bit changed for wings)
 
Stray munitions is easy, you just store the shipID and run a timeout timer on the infraction count, if the infraction count passes 3 then set the offending ships to wanted status. (a player could still kill a Auth w/o getting a bounty but it would take an hour or something)

Last hit is easy as well, any ship stores where damage came from, and how much that damage is, on death it goes through the list and finds the winner, returns that shipID to the server or whatever and dishes out the bounty. (would have to be a bit changed for wings)

Playing devils advocate, do you count beam weapon hits as one infraction or is it so many infractions per time unit? Would you alter this depending on the power of the beam laser being fired? What about autocannon where three rounds is a lot easier to acheive than three missile hits, but one or two missile hits is a lot more likely to destroy someone than three autocannon rounds.

Again, these are things that arent insurmountable, but its never a case if "you just need to...". What might be, at first glance, simple change then cascasdes into a whole range of different variations that need coding and test and balancing, all of which take time and money.
 
Playing devils advocate, do you count beam weapon hits as one infraction or is it so many infractions per time unit? Would you alter this depending on the power of the beam laser being fired? What about autocannon where three rounds is a lot easier to acheive than three missile hits, but one or two missile hits is a lot more likely to destroy someone than three autocannon rounds.

Its all the same, any weapons fire is classed as a "hit", infraction increases until you are wanted, or decreases over time, you can use any time delay or damage delay you like, you could even use it based on specific weapons by running a delegate to encure the correct operation via weaponID, this isnt rocket science.
 
any weapons fire is classed as a "hit"

So imagine you are targetted on an innocent, unwanted, bountyless ship, or a police ship, but facing away. Then, a wanted ship passes in front of your ship and you open fire. Is that counted as fire against the unwanted/police targetted ship or the legitimate target you actually hit?

This might seem like Im being pedantic, but that's exactly the level of detail you have to get into when speccing out the requirements for (good) computer code.
 
The code examples :D

I'm quite new to bounty hunting and yesterday I joined some security ships in taking down a wanted dude. Once I got the kill shot they hunted me, probably the whole faction thing. I don't care what the reason is, that is just pure stupid.

You shouldn't stop exploits by screwing with the average player, that's just poor planning and execution. Some would say downright lazy. Same goes for external views, screenshots, gui element removal etc.
 
So imagine you are targetted on an innocent, unwanted, bountyless ship, or a police ship, but facing away. Then, a wanted ship passes in front of your ship and you open fire. Is that counted as fire against the unwanted/police targetted ship or the legitimate target you actually hit?

This might seem like Im being pedantic, but that's exactly the level of detail you have to get into when speccing out the requirements for (good) computer code.

It has nothing to do with what your targeting or your facing, its "on hit" on anything, if your having issues with the logic, thats something you need to learn to be a good progammer. :D
 
Didnt you say:

So is it on hit or is it on weapon fire?

That exactly my point, you took 2 different parts from 2 different sentences which discussed different things, couldn't understand that the sentences were in reference to what you said on different occasions, then placed quotes in the above that have no logical references to each other and but you deemed them as part of the same logic.

Have a quick re-read of what I've posted to what you've said.

"on hit" when weapons hit.

"on weapons fire" is the notion that all weapons are relative to the system, when you questioned different weapons to the original logic.

I think we can end this here. :D
 
If you are trying to get a job at Frontier - try harder

Bug in your code

Code:
if (target = policeForce) {

it should be == not =
Same goes for rest of comparing lines

Wanted it to be easy to read for our non-programmer bretheren, so I simplified it. Technically it would look more like this:

Code:
if((target == policeForce && target == clearn) || (shieldDamge > 50 && damageSource == playerWeapon))
    attackPlayer = true;
else
    attackPlayer = false;

As far as simple pseudo-code showing the logic of the operation goes, that is fine.

Note Im not saying that these are insurmountable problems, but they are the kind of thing that needs to be considered that OP doesnt touch on.

Thanks! Wasn't trying to be perfect on the code, just an example.

To your last point, that's my point exactly. Stuff takes time. And good code takes even more time. Give them time, I'm sure they're working on it.

Stray munitions is easy, you just store the shipID and run a timeout timer on the infraction count, if the infraction count passes 3 then set the offending ships to wanted status. (a player could still kill a Auth w/o getting a bounty but it would take an hour or something)

Last hit is easy as well, any ship stores where damage came from, and how much that damage is, on death it goes through the list and finds the winner, returns that shipID to the server or whatever and dishes out the bounty. (would have to be a bit changed for wings)

You aren't wrong, but some of top cat's arguments, like this one:

[...]do you count beam weapon hits as one infraction or is it so many infractions per time unit? Would you alter this depending on the power of the beam laser being fired? What about autocannon where three rounds is a lot easier to acheive than three missile hits, but one or two missile hits is a lot more likely to destroy someone than three autocannon rounds[...]

is why I went with a shield damage threshold. Problem is, even my example is FAR too simplified, since you'd probably want different numbers per ship type, or raw numbers per weapons time, like a missile is likely never going to be a "forgiven" hit, whereas turreted auto cannons might forgive a good 5-10 hits. These were generic examples to prove a point, not to serve as a guideline.
 
Back
Top Bottom