MegaMek / megamek

MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight using giant robots, tanks, and/or infantry on a hex-based map.
http://www.megamek.org
GNU General Public License v2.0
296 stars 284 forks source link

Kill Count Victory Condition Should Count Ejections as Kills #417

Open VampireSeraphin opened 7 years ago

VampireSeraphin commented 7 years ago

This is an enhancement I've been meaning to ask for a for a while.

The kill count victory condition should count enemy ejected units as kills. Right now it only counts hard kills, and you can eliminate the entire enemy team and never reach your kill count it there are several ejected units.

arlith commented 7 years ago

This is kind of a duplicate of this bug on SF: https://sourceforge.net/p/megamek/bugs/4360/. The name doesn't make this clear, but to me that issue represents the a problem with how kills are reported in MM. The kill tracking system was kind of tacked on, and hence isn't as robust as it needs to be. Basically, kills are indicated when weapon damage is resolved. Since weapons haven't dealt damage when a unit ejects, the proper information isn't updated.

crazys1 commented 7 years ago

I don't know if it should be a separate enhancement, but along the same lines, the kill tracking ideally should grant a kill in the following situation:

As it is now, unit 2 is recorded as being destroyed due to pilot error. But, I think that it makes more sense to for unit 1 to get the kill due to unit 1 doing enough damage to cause unit 2's destruction, even if it was by a fall (in the same firing phase). At the least, this can be an optional rule.

I manually assign such kills after each battle using the following priorities:

  1. The unit that destroyed the target's gyro or a leg. This damage always knocks down a 'Mech, and so the case is clear that this result probably caused the fall-kill. If both events occur by multiple units, then whoever achieved one of these events first gets the kill.
  2. The unit that knocked out the pilot and the 'Mech took 20+ damage in the same phase. This also guarantees a knockdown.
  3. The unit that damaged the gyro or any leg actuator. If multiple events occur by multiple units, then whoever achieved one of these events first gets the kill.
  4. The unit that caused 20+ damage by itself. If multiple units caused 20+ damage, then the unit that caused the most damage gets the kill. The reason for this criteria is that even if no other allies fired at the target, the one that caused 20+ damage would still have had a chance to knock down the target.
  5. The unit that caused the most damage if no units did 20+ damage individually, but collectively multiple units did 20+ damage.

You could combine some of these priorities, such as 3 and 4. That is, whoever damaged the gyro or any leg actuator, or did 20+ damage. But, at least for manually figuring out the fall-kill credit, it's simpler to consider these separately.

The falling kill credit can be tracked by a variable that is defined for each 'Mech. The variable stores the ID of whichever unit is highest on the priority list each phase. As MegaMek determines the outcome of the fire phase, it constantly updates the variable as needed until it is done calculating the results of the fire phase. This same fall-kill tracking would need to be done in the indirect fire phase and physical attack phase.

Bonepart commented 7 years ago

Updating kill tracking would require a lot of work, but for now PR #661 should let destruction by ejection and pilot error count. This will only work in the case of 2 teams playing. More than that and you would have to actually credit the kill accurately.

Sleet01 commented 1 year ago

Is this still an issue? I'd like to take a stab at implementing this using events; I think I've got a relatively clean approach that can handle all the situations listed.

pheonixstorm commented 1 year ago

Yes, but read up on the notes from PR 661.