anchor.diff:  	result = /obj/vehicle/sealed/mecha/combat/savannah_ivanov
   	base_icon = "savannah_ivanov"
   
  +	has_weapons_module = TRUE
  +
   	circuit_control = /obj/item/circuitboard/mecha/savannah_ivanov/main
   	circuit_periph = /obj/item/circuitboard/mecha/savannah_ivanov/peripherals
   	circuit_weapon = /obj/item/circuitboard/mecha/savannah_ivanov/targeting
  
positive.code: 	. = user.transferItemToLoc(I, parent)
  	if(.)
  		var/atom/parent_atom = parent
  		user.visible_message(span_notice("[user] connects [I] to [parent]."), span_notice("You connect [I] to [parent]."))
  		parent_atom.add_overlay(I.icon_state+"+o")
  		qdel(I)
  
  
negative.code: 		)
  	)
  
  /// Steps must be checked for sequentially, in case we skip into another state we don't want
  /// However, if we're doing a deconstruction step (backwards) we need to check in a different order
  /datum/component/construction/mecha/proc/skip_extra_steps(diff, forward)
  	var/on_valid_step = FALSE
  
  	while (!on_valid_step)
  		// Offset the next number if it's a backwards step
  		// to ensure we're checking the correct next step
  		var/next_step = forward ? message_step : (message_step - 1)
  
  		// Some variables for what step we're on to keep the if statements reasonably long
  		var/on_weapons_step = next_step == ADD_WEAPONS_CONTROLS_STEP || next_step == SECURE_WEAPONS_CONTROLS_STEP
  		var/on_bluespace_step = next_step == INSTALL_BLUESPACE_STEP || next_step == CONNECT_BLUESPACE_STEP || next_step == ENGAGE_BLUESPACE_STEP
  
  		// Skip over steps we're not doing!
  		if(!has_treads && next_step == ADD_TREADS_STEP)
  			message_step += diff
  
  		else if(!has_weapons_module && on_weapons_step)
  			message_step += diff * 2
  
  		else if(!has_bluespace_crystal && on_bluespace_step)
  			message_step += diff * 3
  
  		else
  			on_valid_step = TRUE
  
  /// Generic mech construction messages
  /datum/component/construction/mecha/custom_action(obj/item/I, mob/living/user, diff)
  	if(!..())
  		return FALSE
  
  	var/forward = (diff == FORWARD)
  
  	skip_extra_steps(diff, forward)
  
  	// An offset is used to condense the printing of messages:
  	// When we advance a step, we display the message (i.e. step 1) and move to the next step (2)
  	// When we move back a step, we decrement the step (step 2 to 1) and then print the backwards message for that step
  	var/curr_step = forward ? message_step : (message_step - 1)
  
  	switch(curr_step)
  		if(ADD_TREADS_STEP)
  			user.balloon_alert_to_viewers("[forward ? "added" : "removed"] tread systems")
  		if(CONNECT_HYDRAULICS_STEP)
  			user.balloon_alert_to_viewers("[forward ? "connected" : "disconnected"] hydraulic systems")
  		if(ACTIVATE_HYDRAULICS_STEP)
  			user.balloon_alert_to_viewers("[forward ? "activated" : "deactivated"] hydraulic systems")
  		if(ADD_WIRING_STEP)
  			user.balloon_alert_to_viewers("[forward ? "added" : "removed"] wiring")
  		if(ADJUST_WIRING_STEP)
  			user.balloon_alert_to_viewers("[forward ? "adjusted" : "disconnected"] wiring")
  		if(ADD_CONTROL_MODULE_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "removed"] central control module")
  		if(SECURE_CONTROL_MODULE_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unsecured"] central control module")
  		if(ADD_PERIPHERALS_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "removed"] peripherals control module")
  		if(SECURE_PERIPHERALS_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unsecured"] peripherals control module")
  		if(ADD_WEAPONS_CONTROLS_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "removed"] weapons control module")
  		if(SECURE_WEAPONS_CONTROLS_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unsecured"] weapons control module")
  		if(ADD_SCANNING_MODULE_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "removed"] scanner module")
  		if(SECURE_SCANNING_MODULE_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unsecured"] scanner module")
  		if(ADD_CAPACITOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "removed"] capacitor")
  		if(SECURE_CAPACITOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unsecured"] capacitor")
  		if(INSTALL_BLUESPACE_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "removed"] bluespace crystal")
  		if(CONNECT_BLUESPACE_STEP)
  			user.balloon_alert_to_viewers("[forward ? "connected" : "disconnected"] bluespace crystal")
  		if(ENGAGE_BLUESPACE_STEP)
  			user.balloon_alert_to_viewers("[forward ? "engaged" : "disengaged"] bluespace crystal")
  		if(ADD_CELL_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "removed"] power cell")
  		if(SECURE_CELL_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unsecured"] power cell")
  		if(ADD_INTERNAL_ARMOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "pried off"] internal armor layer")
  		if(SECURE_INTERNAL_ARMOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unfastened"] internal armor layer")
  		if(WELD_INTERNAL_ARMOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "welded" : "cut off"] internal armor layer")
  		if(ADD_EXTERNAL_ARMOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "installed" : "pried off"] external armor layer")
  		if(SECURE_EXTERNAL_ARMOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "secured" : "unfastened"] external armor layer")
  		if(WELD_EXTERNAL_ARMOR_STEP)
  			user.balloon_alert_to_viewers("[forward ? "welded" : "cut off"] external armor layer")
  
  	message_step += diff
  	return TRUE
  
  //RIPLEY
  /datum/component/construction/unordered/mecha_chassis/ripley
  	result = /datum/component/construction/mecha/ripley
  	steps = list(
  