From 391f296ed9b06d9bd13daca5b51c68740e714f1f Mon Sep 17 00:00:00 2001 From: TheKillfish <145384199+TheKillfish@users.noreply.github.com> Date: Sun, 21 Jan 2024 22:03:46 +0100 Subject: [PATCH] Knuckledusters; New Ways to Beat People to Death in Style (#23685) * Created Knuckledusters.dm Time to see if this shit works * Correct file now I forgot to add .dm after making file. Oopsies. * Delete code/game/objects/items/weapons/knuckledusters Wrong file * Fixes code and addes sprites * Finished sprites, dusters can now be gotten * Tweaks and fixes and additions * Uplink description tweak * Now they do more, thanks Snowball for help * Syndiedusters look good now * Tweaked values, added Engraved Dusters as steal objective * Further tweak * Removal of unnecessary space Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Tweaks from Henri added * Gave admin variant new root name * Autodocumentation of variables I feel like an idiot not knowing how to autodocument, but feeling like an idiot is worth it so long as I learn Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * Added some suggested changes/code cleaning * Removes unecessary space, how do I keep missing these? Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- code/datums/uplink_items/uplink_general.dm | 7 ++ code/game/gamemodes/steal_items.dm | 6 ++ .../game/objects/effects/spawners/lootdrop.dm | 2 + .../objects/items/weapons/knuckledusters.dm | 86 ++++++++++++++++++ .../closets/secure/cargo_lockers.dm | 1 + .../research/designs/autolathe_designs.dm | 8 ++ icons/obj/knuckleduster.dmi | Bin 0 -> 639 bytes paradise.dme | 1 + 8 files changed, 111 insertions(+) create mode 100644 code/game/objects/items/weapons/knuckledusters.dm create mode 100644 icons/obj/knuckleduster.dmi diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm index ff77a3edfaa..9c6078da7b3 100644 --- a/code/datums/uplink_items/uplink_general.dm +++ b/code/datums/uplink_items/uplink_general.dm @@ -374,6 +374,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/toy/plushie/carpplushie/dehy_carp cost = 4 +/datum/uplink_item/stealthy_weapons/knuckleduster + name = "Syndicate Knuckleduster" + desc = "A straightforward and fairly concealable melee weapon for bludgeoning someone to death in brutal fashion. This one is designed specifically to cause severe organ damage to the victim." + reference = "SKD" + item = /obj/item/melee/knuckleduster/syndie + cost = 5 + cant_discount = TRUE // GRENADES AND EXPLOSIVES diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index 39bfff31741..93efa0cb6b3 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -150,6 +150,12 @@ protected_jobs = list("Quartermaster") job_possession = FALSE +/datum/theft_objective/engraved_dusters + name = "the quartermaster's engraved knuckledusters" + typepath = /obj/item/melee/knuckleduster/nanotrasen + protected_jobs = list("Quartermaster") + location_override = "the Quartermaster's Cargo Office" + /datum/theft_objective/number var/min=0 var/max=0 diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index b54a46802ea..5ef0a837cad 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -136,6 +136,7 @@ /obj/item/caution = 10, /obj/item/mod/construction/broken_core = 4, /obj/effect/spawner/random_spawners/mod/maint = 10, + /obj/item/melee/knuckleduster = 10, ////////////////CONTRABAND STUFF////////////////// /obj/item/grenade/clown_grenade = 3, /obj/item/grenade/smokebomb = 3, @@ -165,6 +166,7 @@ /obj/item/storage/pill_bottle/fakedeath = 2, /obj/item/clothing/suit/jacket/syndicatebomber = 5, /obj/item/clothing/suit/storage/iaa/blackjacket/armored = 2, // More armored than bomber and has pockets, so it is rarer + /obj/item/melee/knuckleduster/syndie = 2, "" = 61 // This should be a decently high number for chances where no loot will spawn ) diff --git a/code/game/objects/items/weapons/knuckledusters.dm b/code/game/objects/items/weapons/knuckledusters.dm new file mode 100644 index 00000000000..8e1248df5ba --- /dev/null +++ b/code/game/objects/items/weapons/knuckledusters.dm @@ -0,0 +1,86 @@ +/obj/item/melee/knuckleduster + name = "knuckleduster" + desc = "Simple metal punch enhancers, perfect for bar brawls." + icon = 'icons/obj/knuckleduster.dmi' + icon_state = "knuckleduster" + flags = CONDUCT + force = 5 + throwforce = 3 + w_class = WEIGHT_CLASS_SMALL + resistance_flags = FIRE_PROOF + materials = list(MAT_METAL = 500) + origin_tech = "combat=2" + attack_verb = list("struck", "bludgeoned", "bashed", "smashed") + /// Is the weapon gripped or not? + var/gripped = FALSE + /// Can the weapon damage organs directly or not? + var/elite = FALSE + /// Chance to break bones on hit + var/robust = 10 + /// How much organ damage can the weapon do? + var/trauma = 5 + +/obj/item/melee/knuckleduster/attack_self(mob/user) + if(!gripped) + gripped = TRUE + to_chat(user, "You tighten your grip on [src], ensuring you won't drop it.") + flags |= NODROP + else + gripped = FALSE + to_chat(user, "You relax your grip on [src].") + flags &= ~NODROP + return + +/obj/item/melee/knuckleduster/attack(mob/living/target, mob/living/user) + . = ..() + if(!ishuman(target)) + return + + var/obj/item/organ/external/punched = target.get_organ(user.zone_selected) + if(gripped && prob(robust) && target.health < 90) // Better at throwing strong punches when gripped + if(HAS_TRAIT(target, TRAIT_NO_BONES)) + punched.cause_internal_bleeding() // Those with no bones get no relief, although this is primarily for Slimes + else + punched.fracture() + return + + if(!length(punched.internal_organs)) + return + + var/obj/item/organ/internal/squishy = pick(punched.internal_organs) + if(gripped && elite && target.health < 90) + squishy.receive_damage(trauma) + if(punched.is_broken()) + squishy.receive_damage(trauma) // Probably not so good for your organs to have your already broken ribs punched hard again + return + +/obj/item/melee/knuckleduster/syndie + name = "syndicate knuckleduster" + desc = "For feeling like a real Syndicate Elite when threatening to punch someone to death." + icon_state = "knuckleduster_syndie" + force = 10 + throwforce = 5 + origin_tech = "combat=2;syndicate=1" + elite = TRUE + robust = 15 + +/obj/item/melee/knuckleduster/nanotrasen + name = "engraved knuckleduster" + desc = "Perfect for giving that Greytider a golden, painful lesson." + icon_state = "knuckleduster_nt" + force = 10 + throwforce = 5 + origin_tech = "combat=3" + resistance_flags = FIRE_PROOF | ACID_PROOF + materials = list(MAT_GOLD = 500) + robust = 20 + +/obj/item/melee/knuckleduster/admin + name = "handheld bone-breakers" + desc = "Your bones just hurt looking at it." + icon_state = "knuckleduster_nt" + force = 25 + throwforce = 25 + elite = TRUE + robust = 100 + trauma = 30 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm index 23e43d86390..28d421596d6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo_lockers.dm @@ -31,6 +31,7 @@ new /obj/item/flash(src) new /obj/item/cartridge/qm(src) new /obj/item/storage/bag/mail(src) + new /obj/item/melee/knuckleduster/nanotrasen(src) /obj/structure/closet/secure_closet/quartermaster/lavaland //used in mining outpost name = "quartermaster's secondary locker" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 3f85b550422..ba1f1ddf3d1 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -949,3 +949,11 @@ materials = list(MAT_METAL = 1500, MAT_GLASS = 500) build_path = /obj/item/mail_scanner category = list("initial", "Miscellaneous") + +/datum/design/knuckleduster + name = "Knuckleduster" + id = "knuckleduster" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/melee/knuckleduster + category = list("hacked", "Security") diff --git a/icons/obj/knuckleduster.dmi b/icons/obj/knuckleduster.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c84b99554225602afd7a7636f6c55ce2b87606d3 GIT binary patch literal 639 zcmV-_0)YLAP)V=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DLbz;IXfpcrL?#twMdDJ zGbOXA7$|PY#hF%=n41b=V^_H0A4jc|3dO#cK`qZ zZAnByR9J=WlIw26APj{m0b(Lbc>kxJj~&v`Cep~H{n$8CEnM>XauQ>PhJIU*M-At) zlXb>9XD?VE=HNZYiz;>^Vw`CDtN_r57&*o$iEkf3--(PNCjn}CW> zjR_HC1ivis5q09R0HH52Z)6q19CUmjve<I)P*5J7Co?h*h1002ovPDHLkV1f`89YX*B literal 0 HcmV?d00001 diff --git a/paradise.dme b/paradise.dme index 9701261c459..89348d5f5fc 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1089,6 +1089,7 @@ #include "code\game\objects\items\weapons\holosign_projector.dm" #include "code\game\objects\items\weapons\holy_weapons.dm" #include "code\game\objects\items\weapons\kitchen.dm" +#include "code\game\objects\items\weapons\knuckledusters.dm" #include "code\game\objects\items\weapons\legcuffs.dm" #include "code\game\objects\items\weapons\lighters.dm" #include "code\game\objects\items\weapons\manuals.dm"