diff --git a/baystation12.dme b/baystation12.dme index fdacccb1a87..d5168fea9d5 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -571,6 +571,7 @@ #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\wires.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm" +#include "code\game\objects\items\weapons\grenades\clowngrenade.dm" #include "code\game\objects\items\weapons\grenades\emgrenade.dm" #include "code\game\objects\items\weapons\grenades\flashbang.dm" #include "code\game\objects\items\weapons\grenades\grenade.dm" diff --git a/code/WorkInProgress/explosion_particles.dm b/code/WorkInProgress/explosion_particles.dm index 9cf81b27aee..4d0f24799e1 100644 --- a/code/WorkInProgress/explosion_particles.dm +++ b/code/WorkInProgress/explosion_particles.dm @@ -32,7 +32,8 @@ spawn(0) var/obj/effect/expl_particles/expl = new /obj/effect/expl_particles(src.location) var/direct = pick(alldirs) - for(i=0, i 0) cost_text = "([item.cost])" if(item.cost <= uses) @@ -71,7 +80,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid /obj/item/device/uplink/interact(mob/user as mob) var/dat = "" - dat += src.generate_menu() + dat += src.generate_menu(user) // AUTOFIXED BY fix_string_idiocy.py // C:\Users\Rob\Documents\Projects\vgstation13\code\game\objects\items\devices\uplinks.dm:72: dat += "Lock" diff --git a/code/game/objects/items/weapons/grenades/clowngrenade.dm b/code/game/objects/items/weapons/grenades/clowngrenade.dm new file mode 100644 index 00000000000..872f51bc2b3 --- /dev/null +++ b/code/game/objects/items/weapons/grenades/clowngrenade.dm @@ -0,0 +1,96 @@ +/obj/item/weapon/grenade/clown_grenade + name = "Banana Grenade" + desc = "HONK! brand Bananas. In a special applicator for rapid slipping of wide areas." + icon_state = "chemg" + item_state = "flashbang" + w_class = 2.0 + force = 2.0 + var/stage = 0 + var/state = 0 + var/path = 0 + var/affected_area = 2 + + New() + icon_state = initial(icon_state) +"_locked" + + prime() + ..() + playsound(src.loc, 'sound/items/bikehorn.ogg', 25, -3) + /* + for(var/turf/simulated/floor/T in view(affected_area, src.loc)) + if(prob(75)) + banana(T) + */ + var/i = 0 + var/number = 0 + for(var/direction in alldirs) + for(i = 0; i < 2; i++) + number++ + var/obj/item/weapon/bananapeel/traitorpeel/peel = new /obj/item/weapon/bananapeel/traitorpeel(get_turf(src.loc)) + /* var/direction = pick(alldirs) + var/spaces = pick(1;150, 2) + var/a = 0 + for(a = 0; a < spaces; a++) + step(peel,direction)*/ + var/a = 1 + if(number & 2) + for(a = 1; a <= 2; a++) + sleep(1) + step(peel,direction) + else + sleep(1) + step(peel,direction) + del(src) + return + + proc/banana(turf/T as turf) + if(!T || !istype(T)) + return + if(locate(/obj/structure/grille) in T) + return + if(locate(/obj/structure/window) in T) + return + new /obj/item/weapon/bananapeel/traitorpeel(T) + +/obj/item/weapon/bananapeel/traitorpeel + name = "banana peel" + desc = "A peel from a banana." + icon = 'icons/obj/items.dmi' + icon_state = "banana_peel" + item_state = "banana_peel" + w_class = 1.0 + throwforce = 0 + throw_speed = 4 + throw_range = 20 + + HasEntered(AM as mob|obj) + var/burned = rand(2,5) + if(istype(AM, /mob/living)) + var/mob/living/M = AM + if(ishuman(M)) + if(isobj(M:shoes)) + if(M:shoes.flags&NOSLIP) + return + else + M << "\red Your feet feel like they're on fire!" + M.take_overall_damage(0, max(0, (burned - 2))) + + if(!istype(M, /mob/living/carbon/slime)) + M.stop_pulling() + step(M, M.dir) + spawn(1) step(M, M.dir) + spawn(2) step(M, M.dir) + spawn(3) step(M, M.dir) + spawn(4) step(M, M.dir) + M.take_organ_damage(2) // Was 5 -- TLE + M << "\blue You slipped on \the [name]!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Weaken(10) + M.take_overall_damage(0, burned) + + throw_impact(atom/hit_atom) + var/burned = rand(1,3) + if(istype(hit_atom ,/mob/living)) + var/mob/living/M = hit_atom + M.take_organ_damage(0, burned) + return ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index a68276a3100..1c35e79c1b1 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -178,7 +178,7 @@ * Bucher's cleaver */ /obj/item/weapon/butch - name = "butcher's Cleaver" + name = "Butcher's Cleaver" icon = 'icons/obj/kitchen.dmi' icon_state = "butch" desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products." @@ -192,6 +192,15 @@ origin_tech = "materials=1" attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") +/obj/item/weapon/butch/meatcleaver + name = "Meat Cleaver" + icon_state = "mcleaver" + desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products." + force = 25.0 + throwforce = 15.0 + + + /obj/item/weapon/butch/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) return ..() diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index b04d142d141..3443d5c1968 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -124,4 +124,13 @@ ..() new /obj/item/device/handtv(src) new /obj/item/weapon/storage/box/surveillance(src) + return + +/obj/item/weapon/storage/box/syndie_kit/conversion + name = "box (CK)" + +/obj/item/weapon/storage/box/syndie_kit/conversion/New() + ..() + new /obj/item/weapon/conversion_kit(src) + new /obj/item/ammo_magazine/a357(src) return \ No newline at end of file diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index d14e54f10eb..018bdfc20d1 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -9,6 +9,7 @@ * Wirecutters * Welding Tool * Crowbar + * Revolver Conversion Kit(made sense) */ /* @@ -460,3 +461,25 @@ user << "Nothing to fix!" else return ..() + +/obj/item/weapon/conversion_kit + name = "\improper Revolver Conversion Kit" + desc = "A professional conversion kit used to convert any knock off revolver into the real deal capable of shooting lethal .357 rounds without the possibility of catastrophic failure" + icon = 'icons/obj/weapons.dmi' + icon_state = "kit" + flags = FPRINT | TABLEPASS | CONDUCT + w_class = 2.0 + origin_tech = "combat=2" + var/open = 0 + + New() + ..() + update_icon() + + update_icon() + icon_state = "[initial(icon_state)]_[open]" + + attack_self(mob/user as mob) + open = !open + user << "\blue You [open?"open" : "close"] the conversion kit." + update_icon() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index f281015f757..8efda84b695 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -228,13 +228,14 @@ if(istype(used_weapon,/obj/item/weapon)) var/obj/item/weapon/W = used_weapon //Sharp objects will always embed if they do enough damage. if( (damage > (10*W.w_class)) && ( (sharp && !ismob(W.loc)) || prob(damage/W.w_class) ) ) - organ.implants += W - visible_message("\The [W] sticks in the wound!") - W.add_blood(src) - if(ismob(W.loc)) - var/mob/living/H = W.loc - H.drop_item() - W.loc = src + if(!istype(W, /obj/item/weapon/butch/meatcleaver)) + organ.implants += W + visible_message("\The [W] sticks in the wound!") + W.add_blood(src) + if(ismob(W.loc)) + var/mob/living/H = W.loc + H.drop_item() + W.loc = src else if(istype(used_weapon,/obj/item/projectile)) //We don't want to use the actual projectile item, so we spawn some shrapnel. if(prob(75) && damagetype == BRUTE) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index ff2940d005e..8de68c3b06d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -116,10 +116,24 @@ emp_act var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, src) if(user == src) // Attacking yourself can't miss target_zone = user.zone_sel.selecting - if(!target_zone) + if(!target_zone && !src.stat) visible_message("\red [user] misses [src] with \the [I]!") return - + if(istype(I, /obj/item/weapon/butch/meatcleaver) && src.stat == DEAD && user.a_intent == "hurt") + var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/weapon/reagent_containers/food/snacks/meat/human(get_turf(src.loc)) + newmeat.name = src.real_name + newmeat.name + newmeat.subjectname = src.real_name + newmeat.subjectjob = src.job + newmeat.reagents.add_reagent ("nutriment", (src.nutrition / 15) / 3) + src.reagents.trans_to (newmeat, round ((src.reagents.total_volume) / 3, 1)) + src.loc.add_blood(src) + --src.meatleft + user << "\red You hack off a chunk of meat from [src.name]" + if(!src.meatleft) + src.attack_log += "\[[time_stamp()]\] Was chopped up into meat by [user]/[user.ckey]" + user.attack_log += "\[[time_stamp()]\] Chopped up [src]/[src.ckey] into meat" + msg_admin_attack("[user.name] ([user.ckey]) chopped up [src] ([src.ckey]) into meat (JMP)") + del(src) var/datum/organ/external/affecting = get_organ(target_zone) if (!affecting) return diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index d9768992d3f..700bb58d96c 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -55,3 +55,5 @@ var/xylophone = 0 //For the spoooooooky xylophone cooldown var/mob/remoteview_target = null + + var/meatleft = 3 //For chef item \ No newline at end of file diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 8d76b47513c..db40b9d7999 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -35,4 +35,6 @@ var/cameraFollow = null var/tod = null // Time of death - var/update_slimes = 1 \ No newline at end of file + var/update_slimes = 1 + + var/specialsauce = 0 //Has this person consumed enough special sauce? IF so they're a ticking time bomb of death. \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 0f6fca68b2b..192ab6ff05f 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -6,12 +6,12 @@ caliber = "38" origin_tech = "combat=2;materials=2" ammo_type = "/obj/item/ammo_casing/c38" - + var/perfect = 0 special_check(var/mob/living/carbon/human/M) if(caliber == initial(caliber)) return 1 - if(prob(70 - (loaded.len * 10))) //minimum probability of 10, maximum of 60 + if(!perfect && prob(70 - (loaded.len * 10))) //minimum probability of 10, maximum of 60 M << "[src] blows up in your face." M.take_organ_damage(0,20) M.drop_item() @@ -38,8 +38,14 @@ return 1 attackby(var/obj/item/A as obj, mob/user as mob) + var/obj/item/weapon/conversion_kit/CK ..() - if(istype(A, /obj/item/weapon/screwdriver)) + if(isscrewdriver(A) || istype(A, /obj/item/weapon/conversion_kit)) + if(istype(A, /obj/item/weapon/conversion_kit)) + CK = A + if(!CK.open) + user << "This [CK.name] is useless unless you open it first. " + return if(caliber == "38") user << "You begin to reinforce the barrel of [src]." if(loaded.len) @@ -54,6 +60,8 @@ caliber = "357" desc = "The barrel and chamber assembly seems to have been modified." user << "You reinforce the barrel of [src]! Now it will fire .357 rounds." + if(CK && istype(CK)) + perfect = 1 else user << "You begin to revert the modifications to [src]." if(loaded.len) @@ -68,6 +76,7 @@ caliber = "38" desc = initial(desc) user << "You remove the modifications on [src]! Now it will fire .38 rounds." + perfect = 0 diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 7babae05475..e6894bcb28c 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -363,6 +363,29 @@ datum ..() return + chefspecial + // Quiet and lethal, needs atleast 4 units in the person before they'll die + name = "Chef's Special" + id = "chefspecial" + description = "An extremely toxic chemical that will surely end in death." + reagent_state = LIQUID + color = "#CF3600" // rgb: 207, 54, 0 + custom_metabolism = 0.39 + + on_mob_life(var/mob/living/M as mob) + var/random = rand(150,180) + if(!M) M = holder.my_atom + if(!data) data = 1 + switch(data) + if(0 to 5) + ..() + if(data >= random) + if(M.stat != DEAD) + M.death(0) + M.attack_log += "\[[time_stamp()]\]Died a quick and painless death by Chef Excellence's Special Sauce." + data++ + return + minttoxin name = "Mint Toxin" id = "minttoxin" diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm index e360062fec0..a54093c8efb 100644 --- a/code/modules/reagents/reagent_containers/food/condiment.dm +++ b/code/modules/reagents/reagent_containers/food/condiment.dm @@ -126,6 +126,9 @@ if("sugar") name = "Sugar" desc = "Tastey space sugar!" + if("chefspecial") + name = "Chef Excellence's Special Sauce" + desc = "A potent sauce distilled from the toxin glands of 1000 Space Carp." else name = "Misc Condiment Bottle" if (reagents.reagent_list.len==1) @@ -172,4 +175,13 @@ volume = 20 New() ..() - reagents.add_reagent("blackpepper", 20) \ No newline at end of file + reagents.add_reagent("blackpepper", 20) + +/obj/item/weapon/reagent_containers/food/condiment/syndisauce + name = "Chef Excellence's Special Sauce" + desc = "A potent sauce distilled from the toxin glands of 1000 Space Carp with an extra touch of LSD because why not?" + amount_per_transfer_from_this = 1 + volume = 20 + New() + ..() + reagents.add_reagent("chefspecial", 20) \ No newline at end of file diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 9cccbfeb83b..20ed4c8e8f0 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 6e68e6c6dce..261a4c9dd82 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ