diff --git a/modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm b/modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm new file mode 100644 index 00000000000..ac1fd624429 --- /dev/null +++ b/modular_skyrat/master_files/code/game/objects/items/scratchingstone.dm @@ -0,0 +1,7 @@ +/obj/item/scratching_stone + name = "scratching stone" + icon = 'modular_skyrat/master_files/icons/obj/kitchen.dmi' + icon_state = "scratchingstone" + desc = "A specialized kind of whetstone, made of unknown alloys to hone a cyborg mercenary's claws to the best they can be. This one looks like a shitty second-hand sold by razorkids. It's got like, what, maybe one use left?" + force = 5 + throwforce = 10 //Hey, you can at least use it as a brick. diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm b/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm index 479265f0cfb..09a174b1ff3 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm @@ -31,7 +31,9 @@ "stomach" = "Stomach", "eyes" = "Eyes", "tongue" = "Tongue", - "Mouth implant" = "Mouth implant" + "Mouth implant" = "Mouth implant", + "Left Arm implant" = "Left Arm implant", + "Right Arm implant" = "Right Arm implant", ) var/list/aug_support = list( diff --git a/modular_skyrat/master_files/icons/hud/actions.dmi b/modular_skyrat/master_files/icons/hud/actions.dmi new file mode 100644 index 00000000000..32da90c1cf8 Binary files /dev/null and b/modular_skyrat/master_files/icons/hud/actions.dmi differ diff --git a/modular_skyrat/master_files/icons/obj/kitchen.dmi b/modular_skyrat/master_files/icons/obj/kitchen.dmi new file mode 100644 index 00000000000..2329e8dee79 Binary files /dev/null and b/modular_skyrat/master_files/icons/obj/kitchen.dmi differ diff --git a/modular_skyrat/modules/cargo/code/goodies.dm b/modular_skyrat/modules/cargo/code/goodies.dm index 5bff4884d55..2324057a3a6 100644 --- a/modular_skyrat/modules/cargo/code/goodies.dm +++ b/modular_skyrat/modules/cargo/code/goodies.dm @@ -77,6 +77,13 @@ cost = CARGO_CRATE_VALUE * 6 // 1200 credits contains = list(/obj/item/gravity_harness) +/datum/supply_pack/goody/scratching_stone + name = "Scratching Stone" + desc = "A high-grade sharpening stone made of specialized alloys, meant to sharpen razor-claws. Unfortunately, this particular one has by far seen better days." + cost = CARGO_CRATE_VALUE * 4 //800 credits + contains = list(/obj/item/scratching_stone) + contraband = TRUE + /* * CARPET PACKS */ diff --git a/modular_skyrat/modules/customization/modules/client/augment/implants.dm b/modular_skyrat/modules/customization/modules/client/augment/implants.dm index 14770a84458..9abdce1a5db 100644 --- a/modular_skyrat/modules/customization/modules/client/augment/implants.dm +++ b/modular_skyrat/modules/customization/modules/client/augment/implants.dm @@ -19,10 +19,20 @@ /datum/augment_item/implant/l_arm slot = AUGMENT_SLOT_LEFT_ARM_IMPLANT +/datum/augment_item/implant/l_arm/razor_claws + name = "Left Razor Claws" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/razor_claws/left_arm + //RIGHT ARM IMPLANTS /datum/augment_item/implant/r_arm slot = AUGMENT_SLOT_RIGHT_ARM_IMPLANT +/datum/augment_item/implant/r_arm/razor_claws + name = "Right Razor Claws" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/razor_claws/right_arm + //EYES IMPLANTS /datum/augment_item/implant/eyes slot = AUGMENT_SLOT_EYES_IMPLANT diff --git a/modular_skyrat/modules/implants/code/augments_arms.dm b/modular_skyrat/modules/implants/code/augments_arms.dm index 3de8c3b93ff..d59c4353732 100644 --- a/modular_skyrat/modules/implants/code/augments_arms.dm +++ b/modular_skyrat/modules/implants/code/augments_arms.dm @@ -1,3 +1,19 @@ +#define KNIFE_HITSOUND 'sound/weapons/bladeslice.ogg' +#define KNIFE_USESOUND 'sound/weapons/bladeslice.ogg' +#define KNIFE_ATTACK_VERB_CONTINUOUS list("slashes", "tears", "slices", "tears", "lacerates", "rips", "dices", "cuts", "rends") +#define KNIFE_ATTACK_VERB_SIMPLE list("slash", "tear", "slice", "tear", "lacerate", "rip", "dice", "cut", "rend") +#define KNIFE_SHARPNESS SHARP_EDGED +#define KNIFE_BARE_WOUND_BONUS 15 +#define CUTTER_HITSOUND 'sound/items/wirecutter.ogg' +#define CUTTER_USESOUND 'sound/items/wirecutter.ogg' +#define CUTTER_ATTACK_VERB_CONTINUOUS list("bashes", "batters", "bludgeons", "thrashes", "whacks") +#define CUTTER_ATTACK_VERB_SIMPLE list("bash", "batter", "bludgeon", "thrash", "whack") +#define CUTTER_FORCE 6 +#define CUTTER_WOUND_BONUS 0 +#define ENHANCED_KNIFE_FORCE 15 +#define ENHANCED_KNIFE_WOUND_BONUS 15 +#define ENHANCED_KNIFE_ARMOR_PENETRATION 10 + /obj/item/melee/implantarmblade name = "implanted arm blade" desc = "A long, sharp, mantis-like blade implanted into someones arm. Cleaves through flesh like its particularly strong butter." @@ -36,6 +52,98 @@ items_list += WEAKREF(new /obj/item/melee/implantarmblade/energy(src)) return TRUE +/obj/item/knife/razor_claws + name = "implanted razor claws" + desc = "A set of sharp, retractable claws built into the fingertips, five double-edged blades sure to turn people into mincemeat. Capable of shifting into 'Precision' mode to act similar to wirecutters." + icon = 'modular_skyrat/modules/implants/icons/razorclaws.dmi' + righthand_file = 'modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi' + lefthand_file = 'modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi' + icon_state = "wolverine" + inhand_icon_state = "wolverine" + var/knife_force = 10 + w_class = WEIGHT_CLASS_BULKY + var/knife_wound_bonus = 5 + var/cutter_force = CUTTER_FORCE + var/cutter_wound_bonus = CUTTER_WOUND_BONUS + var/cutter_bare_wound_bonus = CUTTER_WOUND_BONUS + tool_behaviour = TOOL_KNIFE + toolspeed = 1 + item_flags = NEEDS_PERMIT //Beepers gets angry if you get caught with this. + +/obj/item/knife/razor_claws/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) + if(tool_behaviour != TOOL_WIRECUTTER) + tool_behaviour = TOOL_WIRECUTTER + to_chat(user, span_notice("You shift [src] into Precision mode, for wirecutting.")) + icon_state = "precision_wolverine" + inhand_icon_state = "precision_wolverine" + force = cutter_force + wound_bonus = cutter_wound_bonus + bare_wound_bonus = cutter_bare_wound_bonus + sharpness = NONE + hitsound = CUTTER_HITSOUND + usesound = CUTTER_USESOUND + attack_verb_continuous = CUTTER_ATTACK_VERB_CONTINUOUS + attack_verb_simple = CUTTER_ATTACK_VERB_SIMPLE + else + tool_behaviour = TOOL_KNIFE + to_chat(user, span_notice("You shift [src] into Killing mode, for slicing.")) + icon_state = "wolverine" + inhand_icon_state = "wolverine" + force = knife_force + sharpness = KNIFE_SHARPNESS + wound_bonus = knife_wound_bonus + bare_wound_bonus = KNIFE_BARE_WOUND_BONUS + hitsound = KNIFE_HITSOUND + usesound = KNIFE_USESOUND + attack_verb_continuous = KNIFE_ATTACK_VERB_CONTINUOUS + attack_verb_simple = KNIFE_ATTACK_VERB_SIMPLE + +/obj/item/knife/razor_claws/attackby(obj/item/stone, mob/user, param) + if(!istype(stone, /obj/item/scratching_stone)) + return ..() + + knife_force = ENHANCED_KNIFE_FORCE + knife_wound_bonus = ENHANCED_KNIFE_WOUND_BONUS + armour_penetration = ENHANCED_KNIFE_ARMOR_PENETRATION //Let's give them some AP for the trouble. + + if(tool_behaviour == TOOL_KNIFE) + force = knife_force + wound_bonus = knife_wound_bonus + + name = "enhanced razor claws" + desc += span_warning("\n\nThese have undergone a special honing process; they'll kill people even faster than they used to.") + user.visible_message(span_warning("[user] sharpens [src], [stone] disintegrating!"), span_warning("You sharpen [src], making it much more deadly than before, but [stone] disintegrates under the stress.")) + playsound(src, 'sound/items/unsheath.ogg', 25, TRUE) + qdel(stone) + return ..() + +/obj/item/organ/internal/cyberimp/arm/razor_claws + name = "razor claws implant" + desc = "A set of hidden, retractable blades built into the fingertips; cyborg mercenary approved." + items_to_create = list(/obj/item/knife/razor_claws) + actions_types = list(/datum/action/item_action/organ_action/toggle/razor_claws) + icon = 'modular_skyrat/modules/implants/icons/razorclaws.dmi' + icon_state = "wolverine" + extend_sound = 'sound/items/unsheath.ogg' + retract_sound = 'sound/items/sheath.ogg' + +/// bespoke subtypes for augs menu since it's a bit wonky +/obj/item/organ/internal/cyberimp/arm/razor_claws/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/razor_claws/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + + +/datum/action/item_action/organ_action/toggle/razor_claws + name = "Extend Claws" + desc = "You can also activate the claws in your hand to change their mode." + button_icon = 'modular_skyrat/master_files/icons/hud/actions.dmi' + button_icon_state = "wolverine" + /obj/item/organ/internal/cyberimp/arm/hacker name = "hacking arm implant" desc = "An small arm implant containing an advanced screwdriver, wirecutters, and multitool designed for engineers and on-the-field machine modification. Actually legal, despite what the name may make you think." @@ -110,3 +218,19 @@ items_list += WEAKREF(new /obj/item/lighter(src)) //Now you can choose between bad and worse! obj_flags |= EMAGGED return TRUE + +#undef KNIFE_HITSOUND +#undef KNIFE_USESOUND +#undef KNIFE_ATTACK_VERB_CONTINUOUS +#undef KNIFE_ATTACK_VERB_SIMPLE +#undef KNIFE_SHARPNESS +#undef KNIFE_BARE_WOUND_BONUS +#undef CUTTER_HITSOUND +#undef CUTTER_USESOUND +#undef CUTTER_ATTACK_VERB_CONTINUOUS +#undef CUTTER_ATTACK_VERB_SIMPLE +#undef CUTTER_FORCE +#undef CUTTER_WOUND_BONUS +#undef ENHANCED_KNIFE_FORCE +#undef ENHANCED_KNIFE_WOUND_BONUS +#undef ENHANCED_KNIFE_ARMOR_PENETRATION diff --git a/modular_skyrat/modules/implants/code/medical_designs.dm b/modular_skyrat/modules/implants/code/medical_designs.dm index 6066441688d..fe795717df3 100644 --- a/modular_skyrat/modules/implants/code/medical_designs.dm +++ b/modular_skyrat/modules/implants/code/medical_designs.dm @@ -11,6 +11,23 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY +/datum/design/cyberimp_claws + name = "Razor Claws Implant" + desc = "Long, sharp, double-edged razors installed within the fingers, functional for cutting. All kinds of cutting." + id = "ci-razor" + build_type = PROTOLATHE | AWAY_LATHE | MECHFAB + materials = list ( + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT + ) + construction_time = 20 SECONDS + build_path = /obj/item/organ/internal/cyberimp/arm/razor_claws + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SECURITY + /datum/design/cyberimp_hacker name = "Hacking Hand Implant" desc = "An advanced hacking and machine modification toolkit fitted into an arm implant, designed to be installed on a subject's arm." diff --git a/modular_skyrat/modules/implants/code/medical_nodes.dm b/modular_skyrat/modules/implants/code/medical_nodes.dm index 1b6258ea41d..4eb34b69568 100644 --- a/modular_skyrat/modules/implants/code/medical_nodes.dm +++ b/modular_skyrat/modules/implants/code/medical_nodes.dm @@ -1,5 +1,18 @@ /datum/techweb_node/cyber_implants - design_ids = list("ci-nutriment", "ci-scanner", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-diaghud", "ci-botany", "ci-janitor", "ci-lighter") + design_ids = list( + "ci-nutriment", + "ci-scanner", + "ci-breather", + "ci-gloweyes", + "ci-welding", + "ci-medhud", + "ci-sechud", + "ci-diaghud", + "ci-botany", + "ci-janitor", + "ci-lighter", + "ci-razor", + ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) /datum/techweb_node/adv_cyber_implants diff --git a/modular_skyrat/modules/implants/icons/razorclaws.dmi b/modular_skyrat/modules/implants/icons/razorclaws.dmi new file mode 100644 index 00000000000..af0a7bf194a Binary files /dev/null and b/modular_skyrat/modules/implants/icons/razorclaws.dmi differ diff --git a/modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi b/modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi new file mode 100644 index 00000000000..9ef1ab7530b Binary files /dev/null and b/modular_skyrat/modules/implants/icons/razorclaws_lefthand.dmi differ diff --git a/modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi b/modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi new file mode 100644 index 00000000000..9098ad1ceec Binary files /dev/null and b/modular_skyrat/modules/implants/icons/razorclaws_righthand.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 7d03d8c790f..f53f2663d45 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5741,6 +5741,7 @@ #include "modular_skyrat\master_files\code\game\objects\items\oxygen_candle.dm" #include "modular_skyrat\master_files\code\game\objects\items\RCD.dm" #include "modular_skyrat\master_files\code\game\objects\items\religion.dm" +#include "modular_skyrat\master_files\code\game\objects\items\scratchingstone.dm" #include "modular_skyrat\master_files\code\game\objects\items\devices\anomaly_neutralizer.dm" #include "modular_skyrat\master_files\code\game\objects\items\stacks\sheets\sheet_types.dm" #include "modular_skyrat\master_files\code\game\objects\items\storage\backpack.dm"