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 ede37b37c08d..825e13f6ff9e 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 e3766ada9b0d..991443cc76d5 100644 --- a/taucetistation.dme +++ b/taucetistation.dme @@ -1750,6 +1750,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"