diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 0a42b2edd84..f239288b031 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -16,6 +16,12 @@ icon = 'icons/obj/weapons/improvised.dmi' icon_state = "riflestock" +/obj/item/weaponcrafting/giant_wrench + name = "Big Slappy parts kit" + desc = "Illegal parts to make a giant like wrench commonly known as a Big Slappy." + icon = 'icons/obj/weapons/improvised.dmi' + icon_state = "weaponkit_gw" + ///These gun kits are printed from the security protolathe to then be used in making new weapons // GUN PART KIT // diff --git a/code/datums/components/crafting/melee_weapon.dm b/code/datums/components/crafting/melee_weapon.dm index 0d50bf077e6..23873a5d7af 100644 --- a/code/datums/components/crafting/melee_weapon.dm +++ b/code/datums/components/crafting/melee_weapon.dm @@ -142,3 +142,17 @@ ) time = 10 SECONDS category = CAT_WEAPON_MELEE + +/datum/crafting_recipe/giant_wrench + name = "Big Slappy" + result = /obj/item/shovel/giant_wrench + tool_behaviors = list(TOOL_CROWBAR, TOOL_SCREWDRIVER, TOOL_WELDER) + reqs = list( + /obj/item/wrench = 4, + /obj/item/weaponcrafting/giant_wrench = 1, + /obj/item/stack/sheet/plasteel = 5, + /obj/item/stack/rods = 10, + /obj/item/pickaxe/drill = 1, + ) + time = 10 SECONDS + category = CAT_WEAPON_MELEE diff --git a/code/modules/cargo/markets/market_items/misc.dm b/code/modules/cargo/markets/market_items/misc.dm index 937bbc33232..d2b70704e7a 100644 --- a/code/modules/cargo/markets/market_items/misc.dm +++ b/code/modules/cargo/markets/market_items/misc.dm @@ -121,3 +121,12 @@ stock_min = 3 stock_max = 8 availability_prob = 90 + +/datum/market_item/misc/giant_wrench_parts + name = "Big Slappy parts" + desc = "Cheap illegal Big Slappy parts. The fastest and statistically most dangerous wrench." + item = /obj/item/weaponcrafting/giant_wrench + price_min = CARGO_CRATE_VALUE * 2 + price_max = CARGO_CRATE_VALUE * 5 + stock_max = 1 + availability_prob = 25 diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index a1f721180d3..2b46a0f34d4 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -291,3 +291,11 @@ cost = CARGO_CRATE_VALUE * 5 contains = list(/obj/item/reagent_containers/cup/glass/bottle/juice/dreadnog = 3) crate_name = "dreadnog crate" + +/datum/supply_pack/imports/giant_wrench_parts + name = "Big Slappy parts" + desc = "Illegal Big Slappy parts. The fastest and statistically most dangerous wrench." + cost = CARGO_CRATE_VALUE * 22 + contraband = TRUE + contains = list(/obj/item/weaponcrafting/giant_wrench) + crate_name = "unknown parts crate" diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 101ad3cb20a..b931e67f058 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -283,3 +283,90 @@ if(user.incapacitated() || !user.Adjacent(src)) return FALSE return TRUE + +/obj/item/shovel/giant_wrench + name = "Big Slappy" + desc = "A gigantic wrench made illegal because of its many incidents involving this tool." + icon_state = "giant_wrench" + icon = 'icons/obj/weapons/giant_wrench.dmi' + inhand_icon_state = null + lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' + righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' + inhand_x_dimension = 64 + inhand_y_dimension = 64 + w_class = WEIGHT_CLASS_HUGE + slot_flags = NONE + toolspeed = 0.1 + force = 30 + throwforce = 20 + block_chance = 30 + throw_range = 2 + demolition_mod = 2 + armor_type = /datum/armor/giant_wrench + resistance_flags = FIRE_PROOF + wound_bonus = -10 + attack_verb_continuous = list("bonks", "bludgeons", "pounds") + attack_verb_simple = list("bonk", "bludgeon", "pound") + drop_sound = 'sound/weapons/sonic_jackhammer.ogg' + pickup_sound = 'sound/items/handling/crowbar_pickup.ogg' + hitsound = 'sound/weapons/sonic_jackhammer.ogg' + block_sound = 'sound/weapons/sonic_jackhammer.ogg' + item_flags = SLOWS_WHILE_IN_HAND + slowdown = 3 + attack_speed = 1.2 SECONDS + /// The factor at which the recoil becomes less. + var/recoil_factor = 3 + /// Wether we knock down and launch away out enemies when we attack. + var/do_launch = TRUE + +/datum/armor/giant_wrench + acid = 30 + bomb = 100 + bullet = 30 + fire = 100 + laser = 30 + melee = 30 + +/obj/item/shovel/giant_wrench/Initialize(mapload) + . = ..() + transform = transform.Translate(-16, -16) + AddComponent(/datum/component/two_handed, require_twohands=TRUE) + AddComponent( \ + /datum/component/transforming, \ + force_on = 40, \ + throwforce_on = throwforce, \ + hitsound_on = hitsound, \ + w_class_on = w_class, \ + sharpness_on = SHARP_POINTY, \ + clumsy_check = TRUE, \ + inhand_icon_change = TRUE, \ + ) + RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) + +/// Used when the tool is transformed through the transforming component. +/obj/item/shovel/giant_wrench/proc/on_transform(obj/item/source, mob/user, active) + SIGNAL_HANDLER + + usesound = (active ? 'sound/items/ratchet.ogg' : initial(usesound)) + block_chance = (active ? 0 : initial(block_chance)) + recoil_factor = (active ? 2 : initial(recoil_factor)) + do_launch = (active ? FALSE : initial(do_launch)) + tool_behaviour = (active ? TOOL_WRENCH : initial(tool_behaviour)) + armour_penetration = (active ? 30 : initial(armour_penetration)) + if(user) + balloon_alert(user, "folded Big Slappy [active ? "open" : "closed"]") + playsound(src, 'sound/items/ratchet.ogg', 50, TRUE) + return COMPONENT_NO_DEFAULT_MESSAGE + +/obj/item/shovel/giant_wrench/attack(mob/living/target_mob, mob/living/user) + ..() + if(QDELETED(target_mob)) + return + if(do_launch) + var/atom/throw_target = get_edge_target_turf(target_mob, get_dir(user, get_step_away(target_mob, user))) + target_mob.throw_at(throw_target, 2, 2, user, gentle = TRUE) + target_mob.Knockdown(2 SECONDS) + var/body_zone = pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + user.apply_damage(force / recoil_factor, BRUTE, body_zone, user.run_armor_check(body_zone, MELEE)) + to_chat(user, span_danger("The weight of the Big Slappy recoils!")) + log_combat(user, user, "recoiled Big Slappy into") diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 4a43893cef4..26c177f7293 100644 Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi index 89975e330ce..79c30f5cb19 100644 Binary files a/icons/mob/inhands/64x64_righthand.dmi and b/icons/mob/inhands/64x64_righthand.dmi differ diff --git a/icons/obj/weapons/giant_wrench.dmi b/icons/obj/weapons/giant_wrench.dmi new file mode 100644 index 00000000000..b9aef713d6a Binary files /dev/null and b/icons/obj/weapons/giant_wrench.dmi differ diff --git a/icons/obj/weapons/improvised.dmi b/icons/obj/weapons/improvised.dmi index b2ef58f7088..a98d5cad860 100644 Binary files a/icons/obj/weapons/improvised.dmi and b/icons/obj/weapons/improvised.dmi differ