diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 22a8d2c92a..5f3524d1c3 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -138,6 +138,12 @@ throwforce = 15 custom_materials = null +/obj/item/kitchen/knife/combat/bone/plastic + name = "plastic knife" + desc = "A plastic knife. Rather harmless to anything." + force = 1 + bayonet = FALSE + /obj/item/kitchen/knife/combat/cyborg name = "cyborg knife" icon = 'icons/obj/items_cyborg.dmi' diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 4f5f264c0e..07f4cb4e40 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -237,3 +237,19 @@ w_class = WEIGHT_CLASS_HUGE item_flags = SLOWS_WHILE_IN_HAND transparent = FALSE + +/obj/item/shield/riot/implant + name = "riot tower shield" + desc = "A massive shield that can block a lot of attacks and can take a lot of abuse before breaking." //It cant break unless it is removed from the implant + item_state = "metal" + icon_state = "metal" + icon = 'icons/obj/items_and_weapons.dmi' + block_chance = 30 //May be big but hard to move around to block. + slowdown = 1 + transparent = FALSE + item_flags = SLOWS_WHILE_IN_HAND + +/obj/item/shield/riot/implant/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(attack_type == PROJECTILE_ATTACK) + final_block_chance = 60 //Massive shield + return ..() diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index af80aa6671..c0d48301e1 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -369,6 +369,39 @@ category = list("Misc", "Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +/datum/design/cyberimp_shield + name = "Riot Shield Arm Implant" + desc = "An implanted riot shield, designed to be installed on subject's arm." + id = "ci-shield" + build_type = PROTOLATHE + materials = list (/datum/material/iron = 8500, /datum/material/glass = 8500, /datum/material/silver = 1800, /datum/material/titanium = 600) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/shield + category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/cyberimp_janitor + name = "Janitor Arm Implant" + desc = "A set of janitor tools fitted into an arm implant, designed to be installed on subject's arm." + id = "ci-janitor" + build_type = PROTOLATHE | MECHFAB + materials = list (/datum/material/iron = 3500, /datum/material/glass = 1500, /datum/material/silver = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/janitor + category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/cyberimp_service + name = "Service Arm Implant" + desc = "Everything a cook or barkeep needs in an arm implant, designed to be installed on subject's arm." + id = "ci-service" + build_type = PROTOLATHE | MECHFAB + materials = list (/datum/material/iron = 3500, /datum/material/glass = 1500, /datum/material/silver = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/service + category = list("Misc", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/cyberimp_medical_hud name = "Medical HUD Implant" desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 69ad026f63..5c7b6b57d1 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -521,7 +521,7 @@ display_name = "Cybernetic Implants" description = "Electronic implants that improve humans." prereq_ids = list("adv_biotech", "adv_datatheory") - design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud") + design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-service") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) /datum/techweb_node/adv_cyber_implants @@ -570,7 +570,7 @@ display_name = "Advanced Sanitation Technology" description = "Clean things better, faster, stronger, and harder!" prereq_ids = list("adv_engi") - design_ids = list("advmop", "buffer", "light_replacer", "spraybottle", "beartrap") + design_ids = list("advmop", "buffer", "light_replacer", "spraybottle", "beartrap", "ci-janitor") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1750) // No longer has its bag /datum/techweb_node/botany diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 7371afd40f..37ee253d4b 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -140,6 +140,88 @@ else Retract() +/obj/item/organ/cyberimp/arm/medibeam + name = "integrated medical beamgun" + desc = "A cybernetic implant that allows the user to project a healing beam from their hand." + contents = newlist(/obj/item/gun/medbeam) + +/////////////// +//Tools Arms// +/////////////// + +/obj/item/organ/cyberimp/arm/toolset + name = "integrated toolset implant" + desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contains all necessary tools." + contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg, + /obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/multitool/cyborg) + +/obj/item/organ/cyberimp/arm/toolset/emag_act() + . = ..() + if(obj_flags & EMAGGED) + return + obj_flags |= EMAGGED + to_chat(usr, "You unlock [src]'s integrated knife!") + items_list += new /obj/item/kitchen/knife/combat/cyborg(src) + return TRUE + +/obj/item/organ/cyberimp/arm/surgery + name = "surgical toolset implant" + desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." + contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/surgical_drapes) + +/obj/item/organ/cyberimp/arm/surgery/emag_act() + . = ..() + if(obj_flags & EMAGGED) + return + obj_flags |= EMAGGED + to_chat(usr, "You unlock [src]'s integrated knife!") + items_list += new /obj/item/kitchen/knife/combat/cyborg(src) + return TRUE + +/obj/item/organ/cyberimp/arm/janitor + name = "janitorial tools implant" + desc = "A set of janitorial tools on the user's arm." + contents = newlist(/obj/item/lightreplacer, /obj/item/holosign_creator, /obj/item/soap/nanotrasen, /obj/item/reagent_containers/spray/cyborg_drying, /obj/item/mop/advanced, /obj/item/paint/paint_remover, /obj/item/reagent_containers/glass/beaker/large, /obj/item/reagent_containers/spray/cleaner) //Beaker if for refilling sprays + +/obj/item/organ/cyberimp/arm/janitor/emag_act() + . = ..() + if(obj_flags & EMAGGED) + return + obj_flags |= EMAGGED + to_chat(usr, "You unlock [src]'s integrated deluxe cleaning supplies!") + items_list += new /obj/item/soap/syndie(src) //We add not replace. + items_list += new /obj/item/reagent_containers/spray/cyborg_lube(src) + return TRUE + +/obj/item/organ/cyberimp/arm/service + name = "service toolset implant" + desc = "A set of miscellaneous gadgets hidden behind a concealed panel on the user's arm." + contents = newlist(/obj/item/extinguisher/mini, /obj/item/kitchen/knife/combat/bone/plastic, /obj/item/hand_labeler, /obj/item/pen, /obj/item/reagent_containers/dropper, /obj/item/kitchen/rollingpin, /obj/item/reagent_containers/glass/beaker/large, /obj/item/reagent_containers/syringe,/obj/item/reagent_containers/food/drinks/shaker, /obj/item/radio/off, /obj/item/camera, /obj/item/modular_computer/tablet/preset/cargo) + +/obj/item/organ/cyberimp/arm/service/emag_act() + . = ..() + if(obj_flags & EMAGGED) + return + obj_flags |= EMAGGED + to_chat(usr, "You unlock [src]'s integrated real knife!") + items_list += new /obj/item/kitchen/knife/combat/cyborg(src) + return TRUE + +/////////////// +//Combat Arms// +/////////////// + +/obj/item/organ/cyberimp/arm/gun/laser + name = "arm-mounted laser implant" + desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." + icon_state = "arm_laser" + contents = newlist(/obj/item/gun/energy/laser/mounted) + +/obj/item/organ/cyberimp/arm/gun/taser + name = "arm-mounted taser implant" + desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." + icon_state = "arm_taser" + contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted) /obj/item/organ/cyberimp/arm/gun/emp_act(severity) . = ..() @@ -156,54 +238,6 @@ crit_fail = 1 organ_flags |= ORGAN_FAILING - -/obj/item/organ/cyberimp/arm/gun/laser - name = "arm-mounted laser implant" - desc = "A variant of the arm cannon implant that fires lethal laser beams. The cannon emerges from the subject's arm and remains inside when not in use." - icon_state = "arm_laser" - contents = newlist(/obj/item/gun/energy/laser/mounted) - -/obj/item/organ/cyberimp/arm/gun/laser/l - zone = BODY_ZONE_L_ARM - - -/obj/item/organ/cyberimp/arm/gun/taser - name = "arm-mounted taser implant" - desc = "A variant of the arm cannon implant that fires electrodes and disabler shots. The cannon emerges from the subject's arm and remains inside when not in use." - icon_state = "arm_taser" - contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted) - -/obj/item/organ/cyberimp/arm/gun/taser/l - zone = BODY_ZONE_L_ARM - -/obj/item/organ/cyberimp/arm/toolset - name = "integrated toolset implant" - desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contains all necessary tools." - contents = newlist(/obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, /obj/item/weldingtool/largetank/cyborg, - /obj/item/crowbar/cyborg, /obj/item/wirecutters/cyborg, /obj/item/multitool/cyborg) - -/obj/item/organ/cyberimp/arm/toolset/l - zone = BODY_ZONE_L_ARM - -/obj/item/organ/cyberimp/arm/toolset/emag_act() - . = ..() - if(locate(/obj/item/kitchen/knife/combat/cyborg) in items_list) - return - to_chat(usr, "You unlock [src]'s integrated knife!") - items_list += new /obj/item/kitchen/knife/combat/cyborg(src) - return TRUE - -/obj/item/organ/cyberimp/arm/esword - name = "arm-mounted energy blade" - desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy." - contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight) - -/obj/item/organ/cyberimp/arm/medibeam - name = "integrated medical beamgun" - desc = "A cybernetic implant that allows the user to project a healing beam from their hand." - contents = newlist(/obj/item/gun/medbeam) - - /obj/item/organ/cyberimp/arm/flash name = "integrated high-intensity photon projector" //Why not desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." @@ -231,7 +265,22 @@ var/obj/item/assembly/flash/armimplant/F = locate(/obj/item/assembly/flash/armimplant) in items_list F.I = src -/obj/item/organ/cyberimp/arm/surgery - name = "surgical toolset implant" - desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." - contents = newlist(/obj/item/retractor/augment, /obj/item/hemostat/augment, /obj/item/cautery/augment, /obj/item/surgicaldrill/augment, /obj/item/scalpel/augment, /obj/item/circular_saw/augment, /obj/item/surgical_drapes) +/obj/item/organ/cyberimp/arm/esword + name = "arm-mounted energy blade" + desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy." + contents = newlist(/obj/item/melee/transforming/energy/blade/hardlight) + +/obj/item/organ/cyberimp/arm/shield + name = "arm-mounted riot shield" + desc = "A deployable riot shield to help deal with civil unrest." + contents = newlist(/obj/item/shield/riot/implant) + +/obj/item/organ/cyberimp/arm/shield/emag_act() + . = ..() + if(obj_flags & EMAGGED) + return + obj_flags |= EMAGGED + to_chat(usr, "You unlock [src]'s high-power flash!") + var/obj/item/assembly/flash/armimplant/F = new(src) + items_list += F + F.I = src