anchor.diff:  		return
   
   	playsound(user, 'sound/machines/ding.ogg', 100, TRUE)
  -	objective.weakpoint_areas[user_area.type] = FALSE
  -	for(var/area/scan_area in objective.weakpoint_areas)
  -		if(objective.weakpoint_areas[scan_area])
  +	objective.scan_areas[user_area.type] = FALSE
  +	for(var/area/scan_area as anything in objective.scan_areas)
  +		if(objective.scan_areas[scan_area])
   			say("Next scanning location is [initial(scan_area.name)]")
   			return
   
  -	var/area/weakpoint_location = objective.weakpoint_areas[3]
  -	to_chat(user, span_notice("Scan finished. Structural weakpoint located in [initial(weakpoint_location.name)]."))
  +	to_chat(user, span_notice("Scan finished. Structural weakpoint located in [initial(objective.weakpoint_area.name)]."))
   	objective.weakpoint_located()
   
   /obj/item/weakpoint_locator/proc/scan_checks(mob/living/user, area/user_area, datum/traitor_objective/locate_weakpoint/parent_objective)
  
positive.code: 
  /obj/item/grenade/c4/es8/detonate(mob/living/lanced_by)
  	var/area/target_area = get_area(target)
  	if (target_area.type != objective.weakpoint_areas[3])
  		var/obj/item/grenade/c4/es8/new_bomb = new(target.drop_location())
  		new_bomb.balloon_alert_to_viewers("invalid location!")
  		target.cut_overlay(plastic_overlay, TRUE)
  		qdel(src)
  		return
  
  	if(!objective)
  		return
  
  	objective.create_shockwave(target.x, target.y, target.z)
  	return ..()
  
negative.code: 
  	var/progression_objectives_minimum = 20 MINUTES
  
  	/// Have we sent a weakpoint locator yet?
  	var/locator_sent = FALSE
  	/// Have we sent a bomb yet?
  	var/bomb_sent = FALSE
  	/// Have we located the weakpoint yet?
  	var/weakpoint_found = FALSE
  	/// Areas that need to be scanned
  	var/list/area/scan_areas
  	/// Weakpoint where the bomb should be planted
  	var/area/weakpoint_area
  
  /datum/traitor_objective/locate_weakpoint/generate_objective(datum/mind/generating_for, list/possible_duplicates)
  	if(handler.get_completion_progression(/datum/traitor_objective) < progression_objectives_minimum)
  		return FALSE
  
  	if(SStraitor.get_taken_count(/datum/traitor_objective/locate_weakpoint) > 0)
  		return FALSE
  
  	scan_areas = list()
  	/// List of high-security areas that we pick required ones from
  	var/list/allowed_areas = typecacheof(list(/area/station/command,
  		/area/station/comms,
  		/area/station/engineering,
  		/area/station/science,
  		/area/station/security,
  	))
  
  	var/list/blacklisted_areas = typecacheof(list(/area/station/engineering/hallway,
  		/area/station/engineering/lobby,
  		/area/station/engineering/storage,
  		/area/station/science/lobby,
  		/area/station/science/ordnance/bomb,
  		/area/station/security/prison,
  	))
  
  	var/list/possible_areas = GLOB.the_station_areas.Copy()
  	for(var/area/possible_area as anything in possible_areas)
  		if(!is_type_in_typecache(possible_area, allowed_areas) || initial(possible_area.outdoors) || is_type_in_typecache(possible_area, blacklisted_areas))
  			possible_areas -= possible_area
  
  	for(var/i in 1 to 2)
  		scan_areas[pick_n_take(possible_areas)] = TRUE
  	weakpoint_area = pick_n_take(possible_areas)
  
  	var/area/scan_area1 = scan_areas[1]
  	var/area/scan_area2 = scan_areas[2]
  	replace_in_name("%AREA1%", initial(scan_area1.name))
  	replace_in_name("%AREA2%", initial(scan_area2.name))
  	RegisterSignal(SSdcs, COMSIG_GLOB_TRAITOR_OBJECTIVE_COMPLETED, .proc/on_global_obj_completed)
  	return TRUE
  
  /datum/traitor_objective/locate_weakpoint/ungenerate_objective()
  	UnregisterSignal(SSdcs, COMSIG_GLOB_TRAITOR_OBJECTIVE_COMPLETED)
  
  /datum/traitor_objective/locate_weakpoint/on_objective_taken(mob/user)
  	. = ..()
  
  	// We don't want multiple people being able to take weakpoint objectives if they get one available at the same time
  	for(var/datum/traitor_objective/locate_weakpoint/other_objective in SStraitor.all_objectives_by_type[/datum/traitor_objective/locate_weakpoint])
  		if(other_objective != src)
  			other_objective.fail_objective()
  
  
  /datum/traitor_objective/locate_weakpoint/proc/on_global_obj_completed(datum/source, datum/traitor_objective/objective)
  	SIGNAL_HANDLER
  