diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm
index 93ade8003617..87a6ac6c67ee 100644
--- a/code/__DEFINES/research.dm
+++ b/code/__DEFINES/research.dm
@@ -5,6 +5,7 @@
#define RESEARCH_BLUESPACE "bluespace"
#define RESEARCH_ROBOTICS "robotics"
#define RESEARCH_ILLEGAL "illegal"
+#define RESEARCH_SPECIAL "special"
// Is used in calculating reliability increase per prototype created.
#define RND_RELIABILITY_EXPONENT 0.75
diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm
index 0b1752af0e9c..010f8537c9cc 100644
--- a/code/_onclick/hud/action.dm
+++ b/code/_onclick/hud/action.dm
@@ -21,6 +21,8 @@
var/button_icon = 'icons/hud/actions.dmi'
var/button_icon_state = "default"
var/background_icon_state = "bg_default"
+ var/icon/button_overlay_icon = null
+ var/button_overlay_state = null
var/transparent_when_unavailable = TRUE
var/mob/owner
var/toggleable = FALSE
@@ -191,7 +193,9 @@
cut_overlays()
var/image/img
- if(owner.action_type == AB_ITEM && owner.target)
+ if(owner.button_overlay_icon && owner.button_overlay_state)
+ img = image(owner.button_overlay_icon, owner.button_overlay_state)
+ else if(owner.action_type == AB_ITEM && owner.target)
var/obj/item/I = owner.target
img = image(I.icon, src , I.icon_state)
else if(owner.button_icon && owner.button_icon_state)
diff --git a/code/game/objects/items/weapons/disks.dm b/code/game/objects/items/weapons/disks.dm
index 88dd1f071f18..de750b2ace4c 100644
--- a/code/game/objects/items/weapons/disks.dm
+++ b/code/game/objects/items/weapons/disks.dm
@@ -143,6 +143,17 @@
m_amt = 30
g_amt = 10
var/datum/tech/stored
+ var/datum/technology/stored_technology
+
+/obj/item/weapon/disk/tech_disk/hud
+ name = "HUD tech disk"
+ desc = "That disk contains design of basic HUD upgrade and advanced HUD blueprint"
+ stored_technology = new /datum/technology/tier1_hud_upgrade()
+
+/obj/item/weapon/disk/tech_disk/spec_ops
+ name = "Spec Ops tech disk"
+ desc = "That disc contains designs and blueprints of Special Operation Forces equipment and ammunition"
+ stored_technology = new /datum/technology/healer_gun
/obj/item/weapon/disk/tech_disk/atom_init()
var/diskcolor = pick(0,1,2,3,4,5,6,7,8)
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index b377f1e4b18f..107f94ea7fb0 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -445,3 +445,61 @@
return
active = !active
to_chat(usr, "You toggle the Noire Mode [active ? "on. Let the investigation begin." : "off."]")
+
+/datum/glasses_mode_type_state
+
+/datum/glasses_mode_type_state/proc/change_state(obj/item/clothing/glasses/glasses, state)
+ if(state)
+ on(glasses)
+ else
+ off(glasses)
+
+/datum/glasses_mode_type_state/proc/on(obj/item/clothing/glasses/glasses)
+ return
+
+/datum/glasses_mode_type_state/proc/off(obj/item/clothing/glasses/glasses)
+ return
+
+/datum/glasses_mode_type_state/thermal
+ var/sightglassesmod = "thermal"
+
+/datum/glasses_mode_type_state/thermal/sepia
+ sightglassesmod = "sepia"
+
+/datum/glasses_mode_type_state/thermal/on(obj/item/clothing/glasses/glasses)
+ glasses.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
+ glasses.sightglassesmod = sightglassesmod
+ glasses.vision_flags = SEE_MOBS
+
+/datum/glasses_mode_type_state/thermal/off(obj/item/clothing/glasses/glasses)
+ glasses.lighting_alpha = null
+ glasses.sightglassesmod = null
+ glasses.vision_flags = 0
+
+/datum/glasses_mode_type_state/night
+ var/sightglassesmod = "night"
+
+/datum/glasses_mode_type_state/night/nightsight
+ sightglassesmod = "nightsight"
+
+/datum/glasses_mode_type_state/night/on(obj/item/clothing/glasses/glasses)
+ glasses.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
+ glasses.sightglassesmod = sightglassesmod
+ glasses.darkness_view = 7
+
+/datum/glasses_mode_type_state/night/off(obj/item/clothing/glasses/glasses)
+ glasses.lighting_alpha = null
+ glasses.sightglassesmod = null
+ glasses.darkness_view = 0
+
+/datum/glasses_mode_type_state/thermal_advanced
+
+/datum/glasses_mode_type_state/thermal_advanced/on(obj/item/clothing/glasses/glasses)
+ glasses.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
+ glasses.darkness_view = 7
+ glasses.vision_flags = SEE_MOBS
+
+/datum/glasses_mode_type_state/thermal_advanced/off(obj/item/clothing/glasses/glasses)
+ glasses.lighting_alpha = null
+ glasses.darkness_view = 0
+ glasses.vision_flags = 0
diff --git a/code/modules/item_upgrades/item_upgrade.dm b/code/modules/item_upgrades/item_upgrade.dm
new file mode 100644
index 000000000000..1cd822dd89cf
--- /dev/null
+++ b/code/modules/item_upgrades/item_upgrade.dm
@@ -0,0 +1,205 @@
+#define HUD_UPGRADE_MEDSCAN 1
+#define HUD_UPGRADE_NIGHTVISION 2
+#define HUD_UPGRADE_THERMAL 3
+#define HUD_UPGRADE_THERMAL_ADVANCED 4
+
+#define HUD_TOGGLEABLE_MODE_NIGHTVISION "night"
+#define HUD_TOGGLEABLE_MODE_THERMAL "thermal"
+#define HUD_TOGGLEABLE_MODE_THERMAL_ADVANCED "thermal_adv"
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced
+ name = "Advanced HUD"
+ desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and health status."
+ icon = 'icons/obj/clothing/goggles.dmi'
+ item_state = "sechud"
+ item_state_inventory = "sechud"
+ item_state_world = "sechud_w"
+ body_parts_covered = EYES
+ hud_types = list(DATA_HUD_SECURITY)
+ item_action_types = list()
+ var/upgrade_tier = 0
+ var/current_mode = null
+ var/static/list/glasses_states = list(
+ HUD_TOGGLEABLE_MODE_NIGHTVISION = new /datum/glasses_mode_type_state/night/nightsight,
+ HUD_TOGGLEABLE_MODE_THERMAL = new /datum/glasses_mode_type_state/thermal/sepia,
+ HUD_TOGGLEABLE_MODE_THERMAL_ADVANCED = new /datum/glasses_mode_type_state/thermal_advanced,
+ )
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced/atom_init()
+ . = ..()
+ RegisterSignal(src, COMSIG_ITEM_DROPPED, PROC_REF(handle_drop))
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced/equipped(mob/user, slot)
+ . = ..()
+ if(slot != SLOT_GLASSES)
+ return
+ apply_effects(current_mode, TRUE)
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced/proc/handle_drop(source, mob/living/carbon/human/user)
+ if(!istype(user) || user.glasses)
+ return
+ apply_effects(current_mode, FALSE)
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced/proc/apply_effects(mode_type, enable)
+ if(!ishuman(glasses_user))
+ return
+ if(mode_type == null)
+ return
+ var/datum/glasses_mode_type_state/state = glasses_states[mode_type]
+ state.change_state(src, enable)
+ playsound(src, activation_sound, VOL_EFFECTS_MASTER, 10, FALSE)
+ glasses_user.update_sight()
+ update_item_actions()
+
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced/proc/switch_mode(mode_type)
+ if(current_mode)
+ apply_effects(current_mode, FALSE)
+ if(current_mode == mode_type)
+ current_mode = null
+ return
+
+ apply_effects(mode_type, TRUE)
+ current_mode = mode_type
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced/proc/upgrade_hud(obj/item/hud_upgrade/hud_upgrader, mob/living/user)
+ hud_upgrader.upgrade_hud(src, user)
+ upgrade_tier = hud_upgrader.tier
+ update_world_icon()
+ add_item_actions(user)
+
+/obj/item/clothing/glasses/sunglasses/hud/advanced/attackby(obj/item/W, mob/living/user)
+ if(istype(W, /obj/item/hud_upgrade))
+ var/obj/item/hud_upgrade/hud_upgrade = W
+ if(upgrade_tier >= hud_upgrade.tier)
+ to_chat(user, "You've already installed that upgrade")
+ return
+ if(upgrade_tier < hud_upgrade.tier - 1)
+ to_chat(user, "You have to install previous upgrades")
+ return
+ if(!user.is_in_hands(src))
+ to_chat(user, "You have to hold huds in hands to upgrade it")
+ return
+ upgrade_hud(hud_upgrade, user)
+ add_item_actions(user)
+ qdel(hud_upgrade)
+ else if(istype(W, /obj/item/device/hud_calibrator))
+ var/obj/item/device/hud_calibrator = W
+ to_chat(user, "You try to recalibrate huds, but nothing happens")
+ qdel(hud_calibrator)
+ return
+ return ..()
+
+/obj/item/hud_upgrade
+ icon = 'icons/obj/item_upgrades.dmi'
+ var/tier = 0
+ var/glasses_item_state
+ var/glasses_item_state_inventory
+ var/glasses_item_state_world
+
+/obj/item/hud_upgrade/proc/upgrade_hud(obj/item/clothing/glasses/sunglasses/hud/advanced/glasses, mob/living/user)
+ if(glasses_item_state)
+ glasses.item_state = glasses_item_state
+ if(glasses_item_state_inventory)
+ glasses.item_state_inventory = glasses_item_state_inventory
+ if(glasses_item_state_world)
+ glasses.item_state_world = glasses_item_state_world
+
+/obj/item/hud_upgrade/medscan
+ name = "Damage Scan Upgrade"
+ desc = "Allows HUD to show damage on person."
+ item_state_inventory = "medscan"
+ item_state_world = "medscan_w"
+ glasses_item_state = "mixhud"
+ glasses_item_state_inventory = "mixhud"
+ glasses_item_state_world = "mixhud_w"
+ tier = HUD_UPGRADE_MEDSCAN
+
+/obj/item/hud_upgrade/medscan/upgrade_hud(obj/item/clothing/glasses/sunglasses/hud/advanced/glasses, mob/living/user)
+ ..()
+ glasses.hud_types.Add(DATA_HUD_MEDICAL_ADV)
+ glasses.def_hud_types.Add(DATA_HUD_MEDICAL_ADV)
+
+/obj/item/hud_upgrade/night
+ name = "Basic Nightvision HUD upgrade"
+ desc = "Allows HUD to turn a basic nightvision mode. Can be installed only after damage scan upgrade"
+ item_state_inventory = "nightvision"
+ item_state_world = "nightvision_w"
+ glasses_item_state = "nvghud"
+ glasses_item_state_inventory = "nvghud"
+ glasses_item_state_world = "nvghud_w"
+ tier = HUD_UPGRADE_NIGHTVISION
+
+/obj/item/hud_upgrade/night/upgrade_hud(obj/item/clothing/glasses/sunglasses/hud/advanced/glasses, mob/living/user)
+ ..()
+ glasses.item_actions.Add(new /datum/action/item_action/hands_free/switch_hud_modes/night(glasses))
+
+/obj/item/hud_upgrade/thermal
+ name = "Thermal HUD upgrade"
+ desc = "Allows HUD to turn a basic thermal mode, makes nightvision mode more comfortable for use. Can be installed only after basic nightvision upgrade"
+ item_state_inventory = "thermal"
+ item_state_world = "thermal_w"
+ glasses_item_state = "thermalhud"
+ glasses_item_state_inventory = "thermalhud"
+ glasses_item_state_world = "thermalhud_w"
+ tier = HUD_UPGRADE_THERMAL
+
+/obj/item/hud_upgrade/thermal/upgrade_hud(obj/item/clothing/glasses/sunglasses/hud/advanced/glasses, mob/living/user)
+ ..()
+ glasses.item_actions.Add(new /datum/action/item_action/hands_free/switch_hud_modes/thermal(glasses))
+
+/obj/item/hud_upgrade/thermal_advanced
+ name = "Advanced Thermal HUD upgrade"
+ desc = "Makes thermal mode comfortable and combines it with nightvision mode. Can be installed only after thermal upgrade"
+ item_state_inventory = "thermaladv"
+ item_state_world = "thermaladv_w"
+ glasses_item_state = "thermalhudadv"
+ glasses_item_state_inventory = "thermalhudadv"
+ glasses_item_state_world = "thermalhudadv_w"
+ tier = HUD_UPGRADE_THERMAL_ADVANCED
+
+/obj/item/hud_upgrade/thermal_advanced/upgrade_hud(obj/item/clothing/glasses/sunglasses/hud/advanced/glasses, mob/living/user)
+ ..()
+ for(var/datum/action/item_action/hands_free/switch_hud_modes/night/night_action in glasses.item_actions)
+ night_action.Remove(user)
+ glasses.item_actions.Remove(night_action)
+ for(var/datum/action/item_action/hands_free/switch_hud_modes/thermal/thermal_action in glasses.item_actions)
+ thermal_action.Remove(user)
+ glasses.item_actions.Remove(thermal_action)
+ glasses.item_actions.Add(new /datum/action/item_action/hands_free/switch_hud_modes/thermal_advanced(glasses))
+
+
+/datum/action/item_action/hands_free/switch_hud_modes
+ name = "Switch Mode"
+ button_overlay_icon = 'icons/obj/clothing/goggles.dmi'
+ var/hud_mode
+
+/datum/action/item_action/hands_free/switch_hud_modes/Activate()
+ var/obj/item/clothing/glasses/sunglasses/hud/advanced/hud = target
+ if(!hud_mode || !istype(hud))
+ return
+
+ hud.switch_mode(hud_mode)
+
+/datum/action/item_action/hands_free/switch_hud_modes/night
+ name = "Toggle Nightvision"
+ button_overlay_state = "nvghud"
+ hud_mode = HUD_TOGGLEABLE_MODE_NIGHTVISION
+
+/datum/action/item_action/hands_free/switch_hud_modes/thermal //only thermal
+ name = "Toggle thermal"
+ button_overlay_state = "thermalhud"
+ hud_mode = HUD_TOGGLEABLE_MODE_THERMAL
+
+/datum/action/item_action/hands_free/switch_hud_modes/thermal_advanced //mixed thermal and nightvision
+ name = "Toggle Advanced Thermal"
+ button_overlay_state = "thermalhudadv"
+ hud_mode = HUD_TOGGLEABLE_MODE_THERMAL_ADVANCED
+
+#undef HUD_UPGRADE_MEDSCAN
+#undef HUD_UPGRADE_NIGHTVISION
+#undef HUD_UPGRADE_THERMAL
+#undef HUD_UPGRADE_THERMAL_ADVANCED
+#undef HUD_TOGGLEABLE_MODE_NIGHTVISION
+#undef HUD_TOGGLEABLE_MODE_THERMAL
+#undef HUD_TOGGLEABLE_MODE_THERMAL_ADVANCED
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index d07c41f77cb3..f19a1fd54cf5 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -2113,6 +2113,33 @@ other types of metals and chemistry for reagents).
build_path = /obj/item/weapon/gun/energy/toxgun
category = list("Weapons")
+/datum/design/medigun
+ name = "Medigun"
+ desc = "Прототип лечебной пушки, которая медленно возвращает органику в прежнее состояние, исцеляя их."
+ id = "medigun"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_PHORON = 5000, MAT_GOLD = 1500, MAT_SILVER = 1500, MAT_DIAMOND = 2000)
+ build_path = /obj/item/weapon/gun/medbeam
+ category = list("Weapons")
+
+/datum/design/sniperrifle
+ name = "Sniper rifle"
+ desc = "Снайперская винтовка W2500-E, разработанная компанией W&J, изготовлена из легких материалов и оснащена прицелом системы SMART."
+ id = "sniperrifle"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 20000, MAT_GLASS = 7000, MAT_URANIUM = 5000, MAT_GOLD = 2500, MAT_SILVER = 2500, MAT_DIAMOND = 2000)
+ build_path = /obj/item/weapon/gun/energy/sniperrifle
+ category = list("Weapons")
+
+/datum/design/pulse_rifle
+ name = "Pulse rifle"
+ desc = "Сверхмощное, импульсно-энергетическое оружие, используемое военными."
+ id = "pulse_rifle"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 30000, MAT_GLASS = 15000, MAT_URANIUM = 12500, MAT_GOLD = 5000, MAT_SILVER = 5000, MAT_DIAMOND = 5000, MAT_PHORON = 20000)
+ build_path = /obj/item/weapon/gun/energy/pulse_rifle
+ category = list("Weapons")
+
/////////////////////////////////////////
/////////////////Mining//////////////////
/////////////////////////////////////////
@@ -2316,6 +2343,15 @@ other types of metals and chemistry for reagents).
build_path = /obj/item/device/hud_calibrator
category = list("Support")
+/datum/design/hud_advanced
+ name = "Advanced HUD"
+ desc = "An advanced HUD that can be flexibly modified"
+ id = "advanced_hud"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 150, MAT_GLASS = 150)
+ build_path = /obj/item/clothing/glasses/sunglasses/hud/advanced
+ category = list("Support")
+
/////////////////////////////////////////
//////////////////Test///////////////////
/////////////////////////////////////////
@@ -2879,3 +2915,82 @@ other types of metals and chemistry for reagents).
materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
build_path = /obj/item/rig_module/emp_shield
category = list("Rig Modules")
+/datum/design/rigstealth
+ name = "Hardsuit stealth system"
+ desc = "System that makes hardsuit invisible."
+ id = "rigstealth"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 10000, MAT_SILVER = 5000, MAT_GOLD = 5000, MAT_DIAMOND = 10000, MAT_PHORON = 5000)
+ build_path = /obj/item/rig_module/stealth
+ category = list("Rig Modules")
+
+/////////////////////////////////////////
+////////////////Upgrades/////////////////
+/////////////////////////////////////////
+
+/datum/design/tier1_hud_upgrade
+ name = "Damage Scan Upgrade"
+ desc = "Allows HUD to show damage on person."
+ id = "tier1_hud_upgrade"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 2000, MAT_GLASS = 1000)
+ build_path = /obj/item/hud_upgrade/medscan
+ category = list("Special upgrades")
+
+/datum/design/tier2_hud_upgrade
+ name = "Basic Nightvision HUD upgrade"
+ desc = "Allows HUD to turn a basic nightvision mode. Can be installed only after damage scan upgrade"
+ id = "tier2_hud_upgrade"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_URANIUM = 2000)
+ build_path = /obj/item/hud_upgrade/night
+ category = list("Special upgrades")
+
+/datum/design/tier3_hud_upgrade
+ name = "Thermal HUD upgrade"
+ desc = "Allows HUD to turn a basic thermal mode, makes nightvision mode more comfortable for use. Can be installed only after basic nightvision upgrade"
+ id = "tier3_hud_upgrade"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_PHORON = 2500)
+ build_path = /obj/item/hud_upgrade/thermal
+ category = list("Special upgrades")
+
+/datum/design/tier4_hud_upgrade
+ name = "Advanced Thermal HUD upgrade"
+ desc = "Makes thermal mode comfortable and combines it with nightvision mode. Can be installed only after thermal upgrade"
+ id = "tier4_hud_upgrade"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_GLASS = 2000, MAT_GOLD = 1500, MAT_URANIUM = 3000, MAT_PHORON = 3500)
+ build_path = /obj/item/hud_upgrade/thermal_advanced
+ category = list("Special upgrades")
+
+/////////////////////////////////////////
+//////////////////Armor//////////////////
+/////////////////////////////////////////
+
+/datum/design/ds_helmet
+ name = "Deathsquad helmet"
+ desc = "That's not red paint. That's real blood."
+ id = "ds_helmet"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 15000, MAT_GLASS = 8000, MAT_GOLD = 2500, MAT_URANIUM = 4500, MAT_PHORON = 5000)
+ build_path = /obj/item/clothing/head/helmet/space/deathsquad
+ category = list("Armor")
+
+/datum/design/ds_armor
+ name = "SWAT Suit"
+ desc = "Тяжелый бронированный костюм, защищающий от умеренного количества повреждений. Используется в специальных операциях."
+ id = "ds_armor"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 50000, MAT_GLASS = 25000, MAT_GOLD = 8000, MAT_URANIUM = 12500, MAT_PHORON = 15000)
+ build_path = /obj/item/clothing/suit/armor/swat
+ category = list("Armor")
+
+/datum/design/ds_boots
+ name = "SWAT shoes"
+ desc = "When you want to turn up the heat."
+ id = "ds_boots"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GOLD = 2000, MAT_PHORON = 4000)
+ build_path = /obj/item/clothing/shoes/boots/swat
+ category = list("Armor")
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 6177b6e25854..b40f9391a9b9 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -132,6 +132,7 @@ ADD_TO_GLOBAL_LIST(/obj/machinery/computer/rdconsole, RDcomputer_list)
if(istype(D, /obj/item/weapon/disk/research_points))
var/obj/item/weapon/disk/research_points/disk = D
to_chat(user, "[name] received [disk.stored_points] research points from [disk.name]")
+ playsound(src, 'sound/machines/disk-upload.ogg', VOL_EFFECTS_MASTER)
files.research_points += disk.stored_points
user.remove_from_mob(disk)
qdel(disk)
@@ -146,6 +147,17 @@ ADD_TO_GLOBAL_LIST(/obj/machinery/computer/rdconsole, RDcomputer_list)
files.research_points += research_points
else
to_chat(user, "There was no usefull data inside [D.name]'s buffer.")
+ else if(istype(D, /obj/item/weapon/disk/tech_disk))
+ var/obj/item/weapon/disk/tech_disk/disk = D
+ if(disk.stored_technology)
+ to_chat(user, "You succesfully uploaded '[disk.stored_technology.name]' in the console")
+ playsound(src, 'sound/machines/disk-upload.ogg', VOL_EFFECTS_MASTER)
+ files.tech_trees[disk.stored_technology.tech_type].shown = TRUE
+ files.UnlockTechology(disk.stored_technology, TRUE)
+ user.remove_from_mob(disk)
+ qdel(disk)
+ else
+ to_chat(user, "You can't upload empty disk")
else
//The construction/deconstruction of the console code.
..()
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index aea7da885018..44f51440c077 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -348,6 +348,15 @@ The tech datums are the actual "tech trees" that you improve through researching
shown = FALSE
item_tech_req = "syndicate" // research any traiter item and this tech will show up
+/datum/tech/special
+ name = "Special Technologies Research"
+ shortname = "Special Tech"
+ desc = "Technologies of another corporations that can be used for Nanotrasen benefit"
+ id = RESEARCH_SPECIAL
+ rare = 3
+ shown = FALSE
+ item_tech_req = "special" // research any special item and this tech will show up
+
/datum/technology
var/name = "name"
@@ -1709,3 +1718,147 @@ The tech datums are the actual "tech trees" that you improve through researching
cost = 5000
unlocks_designs = list("camera_bug")
+
+
+/datum/technology/tier1_hud_upgrade
+ name = "Damage Scan HUD upgrade"
+ desc = "Damage Scan HUD upgrade"
+ id = "tier1_hud_upgrade"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.1
+ y = 0.8
+ icon = "mixhudadv"
+
+ required_technologies = list("tier1_hud_upgrade")
+ required_tech_levels = list(RESEARCH_SPECIAL = 1)
+
+ unlocks_designs = list("tier1_hud_upgrade", "advanced_hud")
+
+/datum/technology/tier2_hud_upgrade
+ name = "Basic Nightvision HUD upgrade"
+ desc = "Basic Nightvision HUD upgrade"
+ id = "tier2_hud_upgrade"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.2
+ y = 0.8
+ icon = "nvghud"
+
+ required_technologies = list("tier1_hud_upgrade")
+ required_tech_levels = list(RESEARCH_SPECIAL = 2)
+ cost = 10000
+
+ unlocks_designs = list("tier2_hud_upgrade")
+
+/datum/technology/tier3_hud_upgrade
+ name = "Thermal HUD upgrade"
+ desc = "Ultra HUD upgrade"
+ id = "tier3_hud_upgrade"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.3
+ y = 0.8
+ icon = "thermalhud"
+
+ required_technologies = list("tier2_hud_upgrade")
+ required_tech_levels = list(RESEARCH_SPECIAL = 3)
+ cost = 20000
+
+ unlocks_designs = list("tier3_hud_upgrade")
+
+/datum/technology/tier4_hud_upgrade
+ name = "Advanced Thermal HUD upgrade"
+ desc = "Advanced Thermal HUD upgrade"
+ id = "tier4_hud_upgrade"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.4
+ y = 0.8
+ icon = "4thtier"
+
+ required_technologies = list("tier3_hud_upgrade")
+ required_tech_levels = list(RESEARCH_SPECIAL = 4)
+ cost = 30000
+
+ unlocks_designs = list("tier4_hud_upgrade")
+
+/datum/technology/healer_gun
+ name = "Medigun"
+ desc = "Medigun"
+ id = "medigun"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.1
+ y = 0.6
+ icon = "medigun"
+
+ required_technologies = list("medigun")
+ required_tech_levels = list(RESEARCH_SPECIAL = 1)
+ cost = 0
+
+ unlocks_designs = list("medigun")
+
+/datum/technology/rigstealth
+ name = "RIG Stealth Module"
+ desc = "RIG Stealth Module"
+ id = "rigstealth"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.2
+ y = 0.6
+ icon = "rigstealth"
+
+ required_technologies = list("medigun")
+ required_tech_levels = list(RESEARCH_SPECIAL = 2)
+ cost = 15000
+
+ unlocks_designs = list("rigstealth")
+
+/datum/technology/sniperrifle
+ name = "Sniper Rifle"
+ desc = "Sniper Rifle"
+ id = "sniperrifle"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.3
+ y = 0.6
+ icon = "sniperrifle"
+
+ required_technologies = list("rigstealth")
+ required_tech_levels = list(RESEARCH_SPECIAL = 3)
+ cost = 15000
+
+ unlocks_designs = list("sniperrifle")
+
+/datum/technology/pulse_rifle
+ name = "Pulse Rifle"
+ desc = "Pulse Rifle"
+ id = "pulse_rifle"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.4
+ y = 0.6
+ icon = "pulserifle"
+
+ required_technologies = list("rigstealth")
+ required_tech_levels = list(RESEARCH_SPECIAL = 4)
+ cost = 25000
+
+ unlocks_designs = list("pulse_rifle")
+
+/datum/technology/ds_armor
+ name = "DeathSquad Armor"
+ desc = "DeathSquad Armor"
+ id = "ds_armor"
+ tech_type = RESEARCH_SPECIAL
+
+ x = 0.5
+ y = 0.6
+ icon = "dsarmor"
+
+ required_technologies = list("pulse_rifle")
+ required_tech_levels = list(RESEARCH_SPECIAL = 5)
+ cost = 45000
+
+ unlocks_designs = list("ds_helmet", "ds_armor", "ds_boots")
diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi
index d22109fdda12..39fd23e36f87 100644
Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ
diff --git a/icons/obj/clothing/goggles.dmi b/icons/obj/clothing/goggles.dmi
new file mode 100644
index 000000000000..bb1f3f31c67c
Binary files /dev/null and b/icons/obj/clothing/goggles.dmi differ
diff --git a/icons/obj/item_upgrades.dmi b/icons/obj/item_upgrades.dmi
new file mode 100644
index 000000000000..91739adeabea
Binary files /dev/null and b/icons/obj/item_upgrades.dmi differ
diff --git a/maps/templates/space_structures/cloning_lab.dmm b/maps/templates/space_structures/cloning_lab.dmm
index 1deec1c1f913..2bef86dcc78d 100644
--- a/maps/templates/space_structures/cloning_lab.dmm
+++ b/maps/templates/space_structures/cloning_lab.dmm
@@ -208,6 +208,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/item/weapon/book/manual/wiki/medical_genetics,
/obj/structure/table,
+/obj/item/weapon/disk/tech_disk/hud,
/turf/simulated/floor/wood{
icon_state = "wood4"
},
diff --git a/maps/templates/space_structures/delivery_shuttle.dmm b/maps/templates/space_structures/delivery_shuttle.dmm
index 5d5080c3300c..6fea0f31b4ee 100644
--- a/maps/templates/space_structures/delivery_shuttle.dmm
+++ b/maps/templates/space_structures/delivery_shuttle.dmm
@@ -40,6 +40,7 @@
/obj/machinery/light/small{
dir = 8
},
+/obj/item/weapon/disk/tech_disk/hud,
/turf/simulated/floor{
icon_state = "darkgreenfull"
},
diff --git a/maps/templates/space_structures/secrete_lab.dmm b/maps/templates/space_structures/secrete_lab.dmm
index e28d1dfd524f..b62c6f46b320 100644
--- a/maps/templates/space_structures/secrete_lab.dmm
+++ b/maps/templates/space_structures/secrete_lab.dmm
@@ -253,6 +253,7 @@
pixel_y = 6
},
/obj/item/weapon/stock_parts/manipulator/nano/pico/femto,
+/obj/item/weapon/disk/tech_disk/spec_ops,
/turf/simulated/floor{
icon_state = "whitechoco"
},
diff --git a/maps/templates/space_structures/ships_squad.dmm b/maps/templates/space_structures/ships_squad.dmm
index a0d482a48964..609760339d3d 100644
--- a/maps/templates/space_structures/ships_squad.dmm
+++ b/maps/templates/space_structures/ships_squad.dmm
@@ -341,6 +341,7 @@
icon_state = "weaponcrateopen";
opened = 1
},
+/obj/item/weapon/disk/tech_disk/spec_ops,
/turf/simulated/floor{
icon_state = "darkyellowfull"
},
diff --git a/nano/css/shared.css b/nano/css/shared.css
index 516c8922483a..b6cafee4b53e 100644
--- a/nano/css/shared.css
+++ b/nano/css/shared.css
@@ -770,6 +770,18 @@ th.cargo {
.sciTechTreeIcon.icon-camerabug { background-position: -64px -320px; }
.sciTechTreeIcon.icon-smuggler { background-position: -96px -320px; }
+.sciTechTreeIcon.icon-sechudadv { background-position: -128px -320px;}
+.sciTechTreeIcon.icon-mixhudadv { background-position: -160px -320px;}
+.sciTechTreeIcon.icon-nvghud { background-position: -192px -320px;}
+.sciTechTreeIcon.icon-thermalhud { background-position: -224px -320px;}
+.sciTechTreeIcon.icon-4thtier { background-position: -32px -352px;}
+
+.sciTechTreeIcon.icon-medigun { background-position: -64px -352px;}
+.sciTechTreeIcon.icon-rigstealth { background-position: -96px -352px;}
+.sciTechTreeIcon.icon-sniperrifle { background-position: -128px -352px;}
+.sciTechTreeIcon.icon-pulserifle { background-position: -160px -352px;}
+.sciTechTreeIcon.icon-dsarmor { background-position: -192px -352px;}
+
.sciMenuButton {
width: 300px;
float: left;
diff --git a/nano/images/science.png b/nano/images/science.png
index 46094cde2201..e97ff133322c 100644
Binary files a/nano/images/science.png and b/nano/images/science.png differ
diff --git a/sound/machines/disk-upload.ogg b/sound/machines/disk-upload.ogg
new file mode 100644
index 000000000000..01f71e650371
Binary files /dev/null and b/sound/machines/disk-upload.ogg differ
diff --git a/taucetistation.dme b/taucetistation.dme
index a94c7d845e88..681619e46d79 100644
--- a/taucetistation.dme
+++ b/taucetistation.dme
@@ -1759,6 +1759,7 @@
#include "code\modules\holodeck\HolodeckTemplate.dm"
#include "code\modules\holomap\holochip.dm"
#include "code\modules\holomap\holochips.dm"
+#include "code\modules\item_upgrades\item_upgrade.dm"
#include "code\modules\jungle\falsewall.dm"
#include "code\modules\jungle\jungle.dm"
#include "code\modules\jungle\jungle_animals.dm"