Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

My game is a top-down multiplayer shooter where you control a space pod with 4 different weapons that do varying damage. We have all the usual stats like Kills, Deaths, and Damage Inflicted/Taken, etc. However, the one stat we have had trouble with is an Assists statistic, mainly because we can't seem to determine what should constitute an assist.

In our game, the player spawns with 224 points of health (ya random number I know), and each weapon they are hit with will take a different amount of health away (anywhere from 11-224). If the player kills another player, they recoup any lost health by 40 points.

When a player only has 40 points of health left, their pod starts to smoke to signify their low health.

Players constantly complain of being "vulched", where they will inflict 223 damage on a player, only for someone else to get the last shot and get credit for the kill.

Given this information, how would you determine when a player gets an Assist?

share|improve this question
    
Has anyone answered your question to your satisfaction? If they have, would you mind checking one off? –  MentatOfDune Feb 18 '12 at 20:56

5 Answers 5

To prevent players from acting like vultures, you might want to think about having the person who does the most damage being credited with the kill. Though this approach would most likely not work in a FFA environment. Granted you're talking about assists, so I'd imagine this is some semblance of a team game. Another thing I just thought of that would probably increase the cohesiveness of the team is completely eliminating the individual kill counter, and only displaying an overall team kill count. Suddenly the goal shifts from being I have to be the last one to hit this, or I have to snipe this kill, to I have to kill him and I'm glad this guy is helping me secure the kill for the team. If you implemented this approach, you could track an individual stat like damage done which is completely representative of your contribution to the team instead of only representing how good you are at getting the last hit.

Edit to further address your question:

Something you might want to keep in mind for calculating assists are metrics other than pure damage. For instance, say two pods are trading fire. If the two fire at equivalent rates, the result is dependent on who started shooting first/who is the most accurate. Assuming all factors are equal, add a healer into the mix. Now the player being healed with come out on top barring intervention by others. In my mind, the player doing the healing should get an assist. without him, the player doesn't get the kill. Other ideas to keep in mind are debuffs applied to the enemy and other buffs applied to the killer.

share|improve this answer
    
That's an interesting idea. The game has been around for a while though, so I'm not sure if a change such as this would go smoothly or not for the community. We do have the damage done stat already implemented. It's displayed along side the Kill stat. Most people do value it more than the Kill stat, but there are still those who kill without reason. –  Kyle Feb 14 '12 at 23:08
    
@MotiveKyle I'd test the waters if I were you. If you have an active community, shoot them the idea and see what their responses are. If they're receptive, you need a very small modification to your code to implement (rather remove) it. I wish there was a way to get the League of Legends to do this, but the gold you get per kill is a hindrance. I feel like this would drastically improve the team coherence of random teams in team games like MOBAs and FPS team modes. Damn, now I have to go design a MOBA! –  MentatOfDune Feb 14 '12 at 23:22
    
IMHO it's a bad idea to credit people who do the most damage in a shooter game. It's going to get apparent that somebody who fired the last shot didn't get the kill, it's better if people get mad at each other for "stealing kills", than the game being "unfair". –  dreta Feb 14 '12 at 23:23
1  
in WoW, f.e. nobody cares about the kill count in battlegrounds, because it's not elevated at all, it's there, but nobody ever cares, either you get the flag in WSG or hold blacksmith in AB (and other) or you lose, nobody thinks about the game beyond that and i think that's something that all the moba games could learn from, nobody ever says "stop dying omfg", people think more in terms of "we need defense on lumbermil", WoW, i'm positive, doesn't ever get called a strategy game, but somehow it extrudes more strategy from people than DotA does –  dreta Feb 15 '12 at 2:35
2  
Instead of outright crediting kills to the one who did the most damage, simply make an assist worth more 'points' if more damage is done. The kill should obviously go to whoever had the killing shot, because that's what a kill is. But whatever is being calculated based on player performance (points, money, etc) can be weighted. So if one player removes 225 of 250 HP, and somebody else finishes the enemy off, then the assist weighting ends up meaning that the heavy damager got more points/money. –  Tristan Crockett Feb 15 '12 at 5:04

I'd start with something simple. All players who do some minimum threshold of damage to a player who is then killed before that player kills someone else gets an assist. Then extend it from there if testing proves it to be problematic (i.e. if you die before the other player does, you lose the assist).

share|improve this answer
1  
Another caveat you may run into in your testing is how are assists handled as players regain health. Food for thought :) –  SpartanDonut Feb 14 '12 at 19:04

This is a bit tricky, as it's possible that someone is damaged in a long timespan and when someone finally gets to whack them, they'll be really disapointed if they don't get awarded for it.

To solve this, I would try something like this;

  • Each time someone gets hit, track who made the damage and how much.
  • In case of kill, give awards based on damage collected.
  • Add cooldown to the tracked values; say, if the damage is 60 seconds old, it doesn't count at all.

Whether you want to award everyone who has doled damage that is still valid, or only the killer and whoever has doled most damage (or second most) is up to you.

share|improve this answer

I took the same basic approach to this in Savage 2 and Heroes of Newerth, it's a flexible system that allows you tweak the specific rules easily.

Each entity has a collection of records that store an attacker id, point value and time stamp. At this point you might also trim the damage log of any records that are too old to count as an assist, if you set a threshold for that. If there aren't too many records being generated, you could also just wait for the entity to die. When it dies, Step through the damage log and get the total damage recorded as well as the total damage belonging to each attacker id. Now you can either award assists at a fixed threshold (i.e. 20 or more damage grants an assist) or as a percentage (20% or more of the total recent damage grants an assist). This system accounts for any changes in health like healing, or loss of health other than credited damage.

If you don't need the granularity of every single attack, you can simplify this by only storing a single record for each attack id and just accumulate their score with each update. What you lose is the ability to ignore credit given to them outside of the assist time threshold, if you wanted to have one.

You can also use this system to give credit for non-damage events. For instance, if one entity can apply a buff to another, each damage event can also record points for the buffer, either at some flat rate or as a percentage of the buffed entity's damage.

share|improve this answer

As near as I can tell, Tribes: Ascend has the following algorithm:

  • The person who made the final hit gets the kill credit.
  • If someone besides that person did the most damage, they get the assist credit.
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.