void TechnoClass::RegisterDestruction(TechnoClass * Killer) {
  // stuff
  TechnoClass * Victim = this;
  
  int Reward = Victim->GetTechnoType()->GetActualCost(Victim->Owner);
  
  if(!Victim->GetTechnoType()->DontScore) {
    if(Killer) {
  
      if(Killer->Owner->IsAlliedWith(Victim)) {
        Reward = 0;
      } else if(Victim->Veterancy.IsVeteran()) {
        Reward *= 2;
      } else if(Victim->Veterancy.IsElite()) {
        Reward *= 3;
      }
      
      VeterancyStruct * veterancy = NULL;
      int OwnerCost = 0;
      int VictimCost = Reward;
      
      TechnoClass * Transporter = NULL;
      if(Killer->InOpenTopped && (Transporter = Killer->Transporter) && Transporter->GetTechnoType()->Trainable) {
        veterancy = &Transporter->Veterancy;
        OwnerCost = Transporter->GetTechnoType()->GetActualCost(Transporter->Owner);
      } else if(Killer->GetTechnoType()->Trainable) {
        veterancy = &Killer->Veterancy;
        OwnerCost = Killer->GetTechnoType()->GetActualCost(Killer->Owner);
      } else if(Killer->GetTechnoType()->MissileSpawn) {
        if(TechnoClass * Spawner = Killer->SpawnOwner) {
          if(Spawner->GetTechnoType()->Trainable) {
            veterancy = &Spawner->Veterancy;
            OwnerCost = Spawner->GetTechnoType()->GetActualCost(Spawner->Owner);
          }
        }
      } else if(Killer->CanOccupyFire) {
        if(BuildingClass * KillerBuilding = specific_cast<BuildingClass *>(Killer)) {
          InfantryClass * Occupant = KillerBuilding->Occupants[KillerBuilding->FiringOccupantIndex];
          veterancy = &Occupant->Veterancy;
          OwnerCost = Occupant->Type->GetActualCost(Occupant->Owner);
        }
      }
    }
    if(Veterancy) {
      Veterancy->Add(OwnerCost, VictimCost);
    }
  }
  // stuff
}

void VeterancyStruct::Add(int OwnerCost, int VictimCost) {
  float Addition = VictimCost / OwnerCost * RulesClass::Instance->VeteranRatio;
  float NewVeterancy = this->Veterancy + Addition;
  if(NewVeterancy > RulesClass::Instance->VeteranCap) {
    NewVeterancy = RulesClass::Instance->VeteranCap;
  }
  this->Veterancy = NewVeterancy;
}