diff --git a/baystation12.dme b/baystation12.dme index fad46ccc344..7b3e8565e88 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -605,7 +605,6 @@ #include "code\game\objects\items\stacks\tiles\tile_types.dm" #include "code\game\objects\items\weapons\AI_modules.dm" #include "code\game\objects\items\weapons\autopsy.dm" -#include "code\game\objects\items\weapons\bats.dm" #include "code\game\objects\items\weapons\candle.dm" #include "code\game\objects\items\weapons\cards_ids.dm" #include "code\game\objects\items\weapons\cigs_lighters.dm" @@ -618,6 +617,7 @@ #include "code\game\objects\items\weapons\flamethrower.dm" #include "code\game\objects\items\weapons\gift_wrappaper.dm" #include "code\game\objects\items\weapons\handcuffs.dm" +#include "code\game\objects\items\weapons\improvised_components.dm" #include "code\game\objects\items\weapons\kitchen.dm" #include "code\game\objects\items\weapons\manuals.dm" #include "code\game\objects\items\weapons\mop.dm" @@ -628,7 +628,6 @@ #include "code\game\objects\items\weapons\RCD.dm" #include "code\game\objects\items\weapons\RSF.dm" #include "code\game\objects\items\weapons\scrolls.dm" -#include "code\game\objects\items\weapons\shards.dm" #include "code\game\objects\items\weapons\shields.dm" #include "code\game\objects\items\weapons\stunbaton.dm" #include "code\game\objects\items\weapons\surgery_tools.dm" @@ -636,7 +635,6 @@ #include "code\game\objects\items\weapons\tape.dm" #include "code\game\objects\items\weapons\teleportation.dm" #include "code\game\objects\items\weapons\tools.dm" -#include "code\game\objects\items\weapons\twohanded.dm" #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\weldbackpack.dm" #include "code\game\objects\items\weapons\wires.dm" @@ -674,6 +672,14 @@ #include "code\game\objects\items\weapons\implants\implantfreedom.dm" #include "code\game\objects\items\weapons\implants\implantpad.dm" #include "code\game\objects\items\weapons\implants\implantuplink.dm" +#include "code\game\objects\items\weapons\material\bats.dm" +#include "code\game\objects\items\weapons\material\kitchen.dm" +#include "code\game\objects\items\weapons\material\knives.dm" +#include "code\game\objects\items\weapons\material\misc.dm" +#include "code\game\objects\items\weapons\material\shards.dm" +#include "code\game\objects\items\weapons\material\swords.dm" +#include "code\game\objects\items\weapons\material\thrown.dm" +#include "code\game\objects\items\weapons\material\twohanded.dm" #include "code\game\objects\items\weapons\melee\energy.dm" #include "code\game\objects\items\weapons\melee\misc.dm" #include "code\game\objects\items\weapons\storage\backpack.dm" diff --git a/code/game/objects/items/weapons/improvised_components.dm b/code/game/objects/items/weapons/improvised_components.dm new file mode 100644 index 00000000000..31a6e8d6a90 --- /dev/null +++ b/code/game/objects/items/weapons/improvised_components.dm @@ -0,0 +1,68 @@ +/obj/item/butterflyconstruction + name = "unfinished concealed knife" + desc = "An unfinished concealed knife, it looks like the screws need to be tightened." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterflystep1" + +/obj/item/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/screwdriver)) + user << "You finish the concealed blade weapon." + new /obj/item/weapon/butterfly(user.loc) + qdel(src) + return + +/obj/item/butterflyblade + name = "knife blade" + desc = "A knife blade. Unusable as a weapon without a grip." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterfly2" + matter = list(DEFAULT_WALL_MATERIAL = 5000) + +/obj/item/butterflyhandle + name = "concealed knife grip" + desc = "A plasteel grip with screw fittings for a blade." + icon = 'icons/obj/buildingobject.dmi' + icon_state = "butterfly1" + matter = list(DEFAULT_WALL_MATERIAL = 4000) + +/obj/item/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/butterflyblade)) + user << "You attach the two concealed blade parts." + new /obj/item/butterflyconstruction(user.loc) + qdel(W) + qdel(src) + return + update_icon(user) + +/obj/item/weapon/wirerod + name = "wired rod" + desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." + icon_state = "wiredrod" + item_state = "rods" + flags = CONDUCT + force = 8 + throwforce = 10 + w_class = 3 + attack_verb = list("hit", "bludgeoned", "whacked", "bonked") + + +/obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob) + ..() + if(istype(I, /obj/item/weapon/shard)) + var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear + + user.put_in_hands(S) + user << "You fasten the glass shard to the top of the rod with the cable." + qdel(I) + qdel(src) + update_icon(user) + + else if(istype(I, /obj/item/weapon/wirecutters)) + var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod + + user.put_in_hands(P) + user << "You fasten the wirecutters to the top of the rod with the cable, prongs outward." + qdel(I) + qdel(src) + update_icon(user) + update_icon(user) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 3a1496939ed..e69de29bb2d 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -1,468 +0,0 @@ -/* Kitchen tools - * Contains: - * Utensils - * Spoons - * Forks - * Knives - * Kitchen knives - * Butcher's cleaver - * Rolling Pins - * Trays - */ - -/obj/item/weapon/kitchen - icon = 'icons/obj/kitchen.dmi' - -/* - * Utensils - */ -/obj/item/weapon/kitchen/utensil - force = 5.0 - w_class = 1.0 - throwforce = 5.0 - throw_speed = 3 - throw_range = 5 - flags = CONDUCT - origin_tech = "materials=1" - attack_verb = list("attacked", "stabbed", "poked") - sharp = 0 - - var/loaded //Descriptive string for currently loaded food object. - -/obj/item/weapon/kitchen/utensil/New() - if (prob(60)) - src.pixel_y = rand(0, 4) - - create_reagents(5) - return - -/obj/item/weapon/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(user.a_intent != I_HELP) - if(user.zone_sel.selecting == "head" || user.zone_sel.selecting == "eyes") - if((CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - else - return ..() - - if (reagents.total_volume > 0) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - if(M == user) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\blue [] eats some [] from \the [].", user, loaded, src), 1) - M.reagents.add_reagent("nutriment", 1) - else - for(var/mob/O in viewers(M, null)) - O.show_message(text("\blue [] feeds [] some [] from \the []", user, M, loaded, src), 1) - M.reagents.add_reagent("nutriment", 1) - playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) - overlays.Cut() - return - else - ..() - -/obj/item/weapon/kitchen/utensil/fork - name = "fork" - desc = "It's a fork. Sure is pointy." - icon_state = "fork" - -/obj/item/weapon/kitchen/utensil/pfork - name = "plastic fork" - desc = "Yay, no washing up to do." - icon_state = "pfork" - -/obj/item/weapon/kitchen/utensil/spoon - name = "spoon" - desc = "It's a spoon. You can see your own upside-down face in it." - icon_state = "spoon" - attack_verb = list("attacked", "poked") - -/obj/item/weapon/kitchen/utensil/pspoon - name = "plastic spoon" - desc = "It's a plastic spoon. How dull." - icon_state = "pspoon" - attack_verb = list("attacked", "poked") - -/* - * Knives - */ -/obj/item/weapon/kitchen/utensil/knife - name = "knife" - desc = "Can cut through any food." - icon_state = "knife" - force = 10.0 - throwforce = 10.0 - sharp = 1 - edge = 1 - - suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") - return (BRUTELOSS) - -/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob) - if ((CLUMSY in user.mutations) && prob(50)) - user << "\red You accidentally cut yourself with the [src]." - user.take_organ_damage(20) - return - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() - -/obj/item/weapon/kitchen/utensil/pknife - name = "plastic knife" - desc = "The bluntest of blades." - icon_state = "pknife" - force = 1 - throwforce = 1 - sharp = 0 - edge = 1 //for cutting pizzas - -/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob) - if ((CLUMSY in user.mutations) && prob(50)) - user << "\red You somehow managed to cut yourself with the [src]." - user.take_organ_damage(20) - return - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() - -/* - * Kitchen knives - */ -/obj/item/weapon/kitchenknife - name = "kitchen knife" - icon = 'icons/obj/kitchen.dmi' - icon_state = "knife" - desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - flags = CONDUCT - sharp = 1 - edge = 1 - force = 10.0 - w_class = 3.0 - throwforce = 6.0 - throw_speed = 3 - throw_range = 6 - matter = list(DEFAULT_WALL_MATERIAL = 12000) - origin_tech = "materials=1" - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - - suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") - return (BRUTELOSS) - -/obj/item/weapon/kitchenknife/hook - name = "meat hook" - desc = "A sharp, metal hook what sticks into things." - icon_state = "hook_knife" - item_state = "hook_knife" - -/obj/item/weapon/kitchenknife/ritual - name = "ritual knife" - desc = "The unearthly energies that once powered this blade are now dormant." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - -/* - * Bucher's cleaver - */ -/obj/item/weapon/butch - 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." - flags = CONDUCT - force = 15.0 - w_class = 2.0 - throwforce = 8.0 - throw_speed = 3 - throw_range = 6 - matter = list(DEFAULT_WALL_MATERIAL = 12000) - origin_tech = "materials=1" - attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharp = 1 - edge = 1 - -/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 ..() - -/* - * Rolling Pins - */ - -/obj/item/weapon/kitchen/rollingpin - name = "rolling pin" - desc = "Used to knock out the Bartender." - icon_state = "rolling_pin" - force = 8.0 - throwforce = 10.0 - throw_speed = 2 - throw_range = 7 - w_class = 3.0 - attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") //I think the rollingpin attackby will end up ignoring this anyway. - -/obj/item/weapon/kitchen/rollingpin/attack(mob/living/M as mob, mob/living/user as mob) - if ((CLUMSY in user.mutations) && prob(50)) - user << "\red The [src] slips out of your hand and hits your head." - user.take_organ_damage(10) - user.Paralyse(2) - return - - M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (JMP)") - - var/t = user:zone_sel.selecting - if (t == "head") - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if (H.stat < 2 && H.health < 50 && prob(90)) - // ******* Check - if (istype(H, /obj/item/clothing/head) && H.flags & 8 && prob(80)) - H << "\red The helmet protects you from being hit hard in the head!" - return - var/time = rand(2, 6) - if (prob(75)) - H.Paralyse(time) - else - H.Stun(time) - if(H.stat != 2) H.stat = 1 - user.visible_message("\red [H] has been knocked unconscious!", "\red You knock [H] unconscious!") - return - else - H.visible_message("\red [user] tried to knock [H] unconscious!", "\red [user] tried to knock you unconscious!") - H.eye_blurry += 3 - return ..() - -/* - * Trays - Agouri - */ -/obj/item/weapon/tray - name = "tray" - icon = 'icons/obj/food.dmi' - icon_state = "tray" - desc = "A metal tray to lay food on." - throwforce = 12.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 5 - w_class = 3.0 - flags = CONDUCT - matter = list(DEFAULT_WALL_MATERIAL = 3000) - /* // NOPE - var/food_total= 0 - var/burger_amt = 0 - var/cheese_amt = 0 - var/fries_amt = 0 - var/classyalcdrink_amt = 0 - var/alcdrink_amt = 0 - var/bottle_amt = 0 - var/soda_amt = 0 - var/carton_amt = 0 - var/pie_amt = 0 - var/meatbreadslice_amt = 0 - var/salad_amt = 0 - var/miscfood_amt = 0 - */ - var/list/carrying = list() // List of things on the tray. - Doohl - var/max_carry = 10 // w_class = 1 -- takes up 1 - // w_class = 2 -- takes up 3 - // w_class = 3 -- takes up 5 - -/obj/item/weapon/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - - // Drop all the things. All of them. - overlays.Cut() - for(var/obj/item/I in carrying) - I.loc = M.loc - carrying.Remove(I) - if(isturf(I.loc)) - spawn() - for(var/i = 1, i <= rand(1,2), i++) - if(I) - step(I, pick(NORTH,SOUTH,EAST,WEST)) - sleep(rand(2,4)) - - - if((CLUMSY in user.mutations) && prob(50)) //What if he's a clown? - M << "\red You accidentally slam yourself with the [src]!" - M.Weaken(1) - user.take_organ_damage(2) - if(prob(50)) - playsound(M, 'sound/items/trayhit1.ogg', 50, 1) - return - else - playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' - return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3 - - var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later. - - - if(!(user.zone_sel.selecting == ("eyes" || "head"))) //////////////hitting anything else other than the eyes - if(prob(33)) - src.add_blood(H) - var/turf/location = H.loc - if (istype(location, /turf/simulated)) - location.add_blood(H) ///Plik plik, the sound of blood - - M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") - user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (JMP)") - - if(prob(15)) - M.Weaken(3) - M.take_organ_damage(3) - else - M.take_organ_damage(5) - if(prob(50)) - playsound(M, 'sound/items/trayhit1.ogg', 50, 1) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] slams [] with the tray!", user, M), 1) - return - else - playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //we applied the damage, we played the sound, we showed the appropriate messages. Time to return and stop the proc - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] slams [] with the tray!", user, M), 1) - return - - - - - if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) - M << "\red You get slammed in the face with the tray, against your mask!" - if(prob(33)) - src.add_blood(H) - if (H.wear_mask) - H.wear_mask.add_blood(H) - if (H.head) - H.head.add_blood(H) - if (H.glasses && prob(33)) - H.glasses.add_blood(H) - var/turf/location = H.loc - if (istype(location, /turf/simulated)) //Addin' blood! At least on the floor and item :v - location.add_blood(H) - - if(prob(50)) - playsound(M, 'sound/items/trayhit1.ogg', 50, 1) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] slams [] with the tray!", user, M), 1) - else - playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] slams [] with the tray!", user, M), 1) - if(prob(10)) - M.Stun(rand(1,3)) - M.take_organ_damage(3) - return - else - M.take_organ_damage(5) - return - - else //No eye or head protection, tough luck! - M << "\red You get slammed in the face with the tray!" - if(prob(33)) - src.add_blood(M) - var/turf/location = H.loc - if (istype(location, /turf/simulated)) - location.add_blood(H) - - if(prob(50)) - playsound(M, 'sound/items/trayhit1.ogg', 50, 1) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] slams [] in the face with the tray!", user, M), 1) - else - playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' again - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] slams [] in the face with the tray!", user, M), 1) - if(prob(30)) - M.Stun(rand(2,4)) - M.take_organ_damage(4) - return - else - M.take_organ_damage(8) - if(prob(30)) - M.Weaken(2) - return - return - -/obj/item/weapon/tray/var/cooldown = 0 //shield bash cooldown. based on world.time - -/obj/item/weapon/tray/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/kitchen/rollingpin)) - if(cooldown < world.time - 25) - user.visible_message("[user] bashes [src] with [W]!") - playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1) - cooldown = world.time - else - ..() - -/* -===============~~~~~================================~~~~~==================== -= = -= Code for trays carrying things. By Doohl for Doohl erryday Doohl Doohl~ = -= = -===============~~~~~================================~~~~~==================== -*/ -/obj/item/weapon/tray/proc/calc_carry() - // calculate the weight of the items on the tray - var/val = 0 // value to return - - for(var/obj/item/I in carrying) - if(I.w_class == 1.0) - val ++ - else if(I.w_class == 2.0) - val += 3 - else - val += 5 - - return val - -/obj/item/weapon/tray/pickup(mob/user) - - if(!isturf(loc)) - return - - for(var/obj/item/I in loc) - if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) ) - var/add = 0 - if(I.w_class == 1.0) - add = 1 - else if(I.w_class == 2.0) - add = 3 - else - add = 5 - if(calc_carry() + add >= max_carry) - break - - I.loc = src - carrying.Add(I) - overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer) - -/obj/item/weapon/tray/dropped(mob/user) - - var/mob/living/M - for(M in src.loc) //to handle hand switching - return - - var/foundtable = 0 - for(var/obj/structure/table/T in loc) - foundtable = 1 - break - - overlays.Cut() - - for(var/obj/item/I in carrying) - I.loc = loc - carrying.Remove(I) - if(!foundtable && isturf(loc)) - // if no table, presume that the person just shittily dropped the tray on the ground and made a mess everywhere! - spawn() - for(var/i = 1, i <= rand(1,2), i++) - if(I) - step(I, pick(NORTH,SOUTH,EAST,WEST)) - sleep(rand(2,4)) diff --git a/code/game/objects/items/weapons/bats.dm b/code/game/objects/items/weapons/material/bats.dm similarity index 100% rename from code/game/objects/items/weapons/bats.dm rename to code/game/objects/items/weapons/material/bats.dm diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm new file mode 100644 index 00000000000..f2f383bba98 --- /dev/null +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -0,0 +1,392 @@ +/obj/item/weapon/kitchen + icon = 'icons/obj/kitchen.dmi' + +/* + * Utensils + */ +/obj/item/weapon/kitchen/utensil + force = 5.0 + w_class = 1.0 + throwforce = 5.0 + throw_speed = 3 + throw_range = 5 + flags = CONDUCT + origin_tech = "materials=1" + attack_verb = list("attacked", "stabbed", "poked") + sharp = 0 + + var/loaded //Descriptive string for currently loaded food object. + +/obj/item/weapon/kitchen/utensil/New() + if (prob(60)) + src.pixel_y = rand(0, 4) + + create_reagents(5) + return + +/obj/item/weapon/kitchen/utensil/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + if(!istype(M)) + return ..() + + if(user.a_intent != I_HELP) + if(user.zone_sel.selecting == "head" || user.zone_sel.selecting == "eyes") + if((CLUMSY in user.mutations) && prob(50)) + M = user + return eyestab(M,user) + else + return ..() + + if (reagents.total_volume > 0) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + if(M == user) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\blue [] eats some [] from \the [].", user, loaded, src), 1) + M.reagents.add_reagent("nutriment", 1) + else + for(var/mob/O in viewers(M, null)) + O.show_message(text("\blue [] feeds [] some [] from \the []", user, M, loaded, src), 1) + M.reagents.add_reagent("nutriment", 1) + playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1) + overlays.Cut() + return + else + ..() + +/obj/item/weapon/kitchen/utensil/fork + name = "fork" + desc = "It's a fork. Sure is pointy." + icon_state = "fork" + +/obj/item/weapon/kitchen/utensil/pfork + name = "plastic fork" + desc = "Yay, no washing up to do." + icon_state = "pfork" + +/obj/item/weapon/kitchen/utensil/spoon + name = "spoon" + desc = "It's a spoon. You can see your own upside-down face in it." + icon_state = "spoon" + attack_verb = list("attacked", "poked") + +/obj/item/weapon/kitchen/utensil/pspoon + name = "plastic spoon" + desc = "It's a plastic spoon. How dull." + icon_state = "pspoon" + attack_verb = list("attacked", "poked") + +/* + * Knives + */ +/obj/item/weapon/kitchen/utensil/knife + name = "knife" + desc = "Can cut through any food." + icon_state = "knife" + force = 10.0 + throwforce = 10.0 + sharp = 1 + edge = 1 + + suicide_act(mob/user) + viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ + "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ + "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") + return (BRUTELOSS) + +/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob) + if ((CLUMSY in user.mutations) && prob(50)) + user << "\red You accidentally cut yourself with the [src]." + user.take_organ_damage(20) + return + playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) + return ..() + +/obj/item/weapon/kitchen/utensil/pknife + name = "plastic knife" + desc = "The bluntest of blades." + icon_state = "pknife" + force = 1 + throwforce = 1 + sharp = 0 + edge = 1 //for cutting pizzas + +/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob) + if ((CLUMSY in user.mutations) && prob(50)) + user << "\red You somehow managed to cut yourself with the [src]." + user.take_organ_damage(20) + return + playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) + return ..() + +/* + * Rolling Pins + */ + +/obj/item/weapon/kitchen/rollingpin + name = "rolling pin" + desc = "Used to knock out the Bartender." + icon_state = "rolling_pin" + force = 8.0 + throwforce = 10.0 + throw_speed = 2 + throw_range = 7 + w_class = 3.0 + attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") //I think the rollingpin attackby will end up ignoring this anyway. + +/obj/item/weapon/kitchen/rollingpin/attack(mob/living/M as mob, mob/living/user as mob) + if ((CLUMSY in user.mutations) && prob(50)) + user << "\red The [src] slips out of your hand and hits your head." + user.take_organ_damage(10) + user.Paralyse(2) + return + + M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") + msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (JMP)") + + var/t = user:zone_sel.selecting + if (t == "head") + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if (H.stat < 2 && H.health < 50 && prob(90)) + // ******* Check + if (istype(H, /obj/item/clothing/head) && H.flags & 8 && prob(80)) + H << "\red The helmet protects you from being hit hard in the head!" + return + var/time = rand(2, 6) + if (prob(75)) + H.Paralyse(time) + else + H.Stun(time) + if(H.stat != 2) H.stat = 1 + user.visible_message("\red [H] has been knocked unconscious!", "\red You knock [H] unconscious!") + return + else + H.visible_message("\red [user] tried to knock [H] unconscious!", "\red [user] tried to knock you unconscious!") + H.eye_blurry += 3 + return ..() + +/* + * Trays - Agouri + */ +/obj/item/weapon/tray + name = "tray" + icon = 'icons/obj/food.dmi' + icon_state = "tray" + desc = "A metal tray to lay food on." + throwforce = 12.0 + throwforce = 10.0 + throw_speed = 1 + throw_range = 5 + w_class = 3.0 + flags = CONDUCT + matter = list(DEFAULT_WALL_MATERIAL = 3000) + /* // NOPE + var/food_total= 0 + var/burger_amt = 0 + var/cheese_amt = 0 + var/fries_amt = 0 + var/classyalcdrink_amt = 0 + var/alcdrink_amt = 0 + var/bottle_amt = 0 + var/soda_amt = 0 + var/carton_amt = 0 + var/pie_amt = 0 + var/meatbreadslice_amt = 0 + var/salad_amt = 0 + var/miscfood_amt = 0 + */ + var/list/carrying = list() // List of things on the tray. - Doohl + var/max_carry = 10 // w_class = 1 -- takes up 1 + // w_class = 2 -- takes up 3 + // w_class = 3 -- takes up 5 + +/obj/item/weapon/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + + // Drop all the things. All of them. + overlays.Cut() + for(var/obj/item/I in carrying) + I.loc = M.loc + carrying.Remove(I) + if(isturf(I.loc)) + spawn() + for(var/i = 1, i <= rand(1,2), i++) + if(I) + step(I, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) + + + if((CLUMSY in user.mutations) && prob(50)) //What if he's a clown? + M << "\red You accidentally slam yourself with the [src]!" + M.Weaken(1) + user.take_organ_damage(2) + if(prob(50)) + playsound(M, 'sound/items/trayhit1.ogg', 50, 1) + return + else + playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' + return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3 + + var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later. + + + if(!(user.zone_sel.selecting == ("eyes" || "head"))) //////////////hitting anything else other than the eyes + if(prob(33)) + src.add_blood(H) + var/turf/location = H.loc + if (istype(location, /turf/simulated)) + location.add_blood(H) ///Plik plik, the sound of blood + + M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") + msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (JMP)") + + if(prob(15)) + M.Weaken(3) + M.take_organ_damage(3) + else + M.take_organ_damage(5) + if(prob(50)) + playsound(M, 'sound/items/trayhit1.ogg', 50, 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] slams [] with the tray!", user, M), 1) + return + else + playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //we applied the damage, we played the sound, we showed the appropriate messages. Time to return and stop the proc + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] slams [] with the tray!", user, M), 1) + return + + + if(istype(M, /mob/living/carbon/human) && ((H.head && H.head.flags & HEADCOVERSEYES) || (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || (H.glasses && H.glasses.flags & GLASSESCOVERSEYES))) + M << "\red You get slammed in the face with the tray, against your mask!" + if(prob(33)) + src.add_blood(H) + if (H.wear_mask) + H.wear_mask.add_blood(H) + if (H.head) + H.head.add_blood(H) + if (H.glasses && prob(33)) + H.glasses.add_blood(H) + var/turf/location = H.loc + if (istype(location, /turf/simulated)) //Addin' blood! At least on the floor and item :v + location.add_blood(H) + + if(prob(50)) + playsound(M, 'sound/items/trayhit1.ogg', 50, 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] slams [] with the tray!", user, M), 1) + else + playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] slams [] with the tray!", user, M), 1) + if(prob(10)) + M.Stun(rand(1,3)) + M.take_organ_damage(3) + return + else + M.take_organ_damage(5) + return + + else //No eye or head protection, tough luck! + M << "\red You get slammed in the face with the tray!" + if(prob(33)) + src.add_blood(M) + var/turf/location = H.loc + if (istype(location, /turf/simulated)) + location.add_blood(H) + + if(prob(50)) + playsound(M, 'sound/items/trayhit1.ogg', 50, 1) + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] slams [] in the face with the tray!", user, M), 1) + else + playsound(M, 'sound/items/trayhit2.ogg', 50, 1) //sound playin' again + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [] slams [] in the face with the tray!", user, M), 1) + if(prob(30)) + M.Stun(rand(2,4)) + M.take_organ_damage(4) + return + else + M.take_organ_damage(8) + if(prob(30)) + M.Weaken(2) + return + return + +/obj/item/weapon/tray/var/cooldown = 0 //shield bash cooldown. based on world.time + +/obj/item/weapon/tray/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/kitchen/rollingpin)) + if(cooldown < world.time - 25) + user.visible_message("[user] bashes [src] with [W]!") + playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1) + cooldown = world.time + else + ..() + +/* +===============~~~~~================================~~~~~==================== += = += Code for trays carrying things. By Doohl for Doohl erryday Doohl Doohl~ = += = +===============~~~~~================================~~~~~==================== +*/ +/obj/item/weapon/tray/proc/calc_carry() + // calculate the weight of the items on the tray + var/val = 0 // value to return + + for(var/obj/item/I in carrying) + if(I.w_class == 1.0) + val ++ + else if(I.w_class == 2.0) + val += 3 + else + val += 5 + + return val + +/obj/item/weapon/tray/pickup(mob/user) + + if(!isturf(loc)) + return + + for(var/obj/item/I in loc) + if( I != src && !I.anchored && !istype(I, /obj/item/clothing/under) && !istype(I, /obj/item/clothing/suit) && !istype(I, /obj/item/projectile) ) + var/add = 0 + if(I.w_class == 1.0) + add = 1 + else if(I.w_class == 2.0) + add = 3 + else + add = 5 + if(calc_carry() + add >= max_carry) + break + + I.loc = src + carrying.Add(I) + overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer) + +/obj/item/weapon/tray/dropped(mob/user) + + var/mob/living/M + for(M in src.loc) //to handle hand switching + return + + var/foundtable = 0 + for(var/obj/structure/table/T in loc) + foundtable = 1 + break + + overlays.Cut() + + for(var/obj/item/I in carrying) + I.loc = loc + carrying.Remove(I) + if(!foundtable && isturf(loc)) + // if no table, presume that the person just shittily dropped the tray on the ground and made a mess everywhere! + spawn() + for(var/i = 1, i <= rand(1,2), i++) + if(I) + step(I, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm new file mode 100644 index 00000000000..341ebb36cb1 --- /dev/null +++ b/code/game/objects/items/weapons/material/knives.dm @@ -0,0 +1,106 @@ +/obj/item/weapon/butterfly + name = "butterfly knife" + desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket." + icon_state = "butterflyknife" + item_state = null + hitsound = null + var/active = 0 + w_class = 2 + force = 2 + sharp = 0 + edge = 0 + throw_speed = 3 + throw_range = 4 + throwforce = 7 + attack_verb = list("patted", "tapped") + +/obj/item/weapon/butterfly/switchblade + name = "switchblade" + desc = "A classic switchblade with gold engraving. Just holding it makes you feel like a gangster." + icon_state = "switchblade" + +/obj/item/weapon/butterfly/attack_self(mob/user) + active = !active + if(active) + user << "You flip out your [src]." + playsound(user, 'sound/weapons/flipblade.ogg', 15, 1) + force = 15 //bay adjustments + throwforce = 12 + edge = 1 + sharp = 1 + hitsound = 'sound/weapons/bladeslice.ogg' + icon_state += "_open" + w_class = 3 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + else + user << "The butterfly knife can now be concealed." + force = initial(force) + edge = 0 + sharp = 0 + hitsound = initial(hitsound) + icon_state = initial(icon_state) + w_class = initial(w_class) + attack_verb = initial(attack_verb) + add_fingerprint(user) + +/* + * Kitchen knives + */ +/obj/item/weapon/kitchenknife + name = "kitchen knife" + icon = 'icons/obj/kitchen.dmi' + icon_state = "knife" + desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." + flags = CONDUCT + sharp = 1 + edge = 1 + force = 10.0 + w_class = 3.0 + throwforce = 6.0 + throw_speed = 3 + throw_range = 6 + matter = list(DEFAULT_WALL_MATERIAL = 12000) + origin_tech = "materials=1" + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + + suicide_act(mob/user) + viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ + "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ + "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") + return (BRUTELOSS) + +/obj/item/weapon/kitchenknife/hook + name = "meat hook" + desc = "A sharp, metal hook what sticks into things." + icon_state = "hook_knife" + item_state = "hook_knife" + +/obj/item/weapon/kitchenknife/ritual + name = "ritual knife" + desc = "The unearthly energies that once powered this blade are now dormant." + icon = 'icons/obj/wizard.dmi' + icon_state = "render" + +/* + * Bucher's cleaver + */ +/obj/item/weapon/butch + 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." + flags = CONDUCT + force = 15.0 + w_class = 2.0 + throwforce = 8.0 + throw_speed = 3 + throw_range = 6 + matter = list(DEFAULT_WALL_MATERIAL = 12000) + origin_tech = "materials=1" + attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + sharp = 1 + edge = 1 + +/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 ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm new file mode 100644 index 00000000000..8099e626dba --- /dev/null +++ b/code/game/objects/items/weapons/material/misc.dm @@ -0,0 +1,11 @@ +/obj/item/weapon/harpoon + name = "harpoon" + sharp = 1 + edge = 0 + desc = "Tharr she blows!" + icon_state = "harpoon" + item_state = "harpoon" + force = 20 + throwforce = 15 + w_class = 3 + attack_verb = list("jabbed","stabbed","ripped") \ No newline at end of file diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/material/shards.dm similarity index 96% rename from code/game/objects/items/weapons/shards.dm rename to code/game/objects/items/weapons/material/shards.dm index 593b3d019d9..8fea29b4f26 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -1,120 +1,120 @@ -// Glass shards - -/obj/item/weapon/shard - name = "shard" - icon = 'icons/obj/shards.dmi' - icon_state = "large" - sharp = 1 - edge = 1 - desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass) - w_class = 2.0 - force = 5.0 - throwforce = 8.0 - item_state = "shard-glass" - //matter = list("glass" = 3750) // Weld it into sheets before you use it! - attack_verb = list("stabbed", "slashed", "sliced", "cut") - - gender = "neuter" - var/material/material = null - -/obj/item/weapon/shard/suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with \the [src]! It looks like \he's trying to commit suicide.") - return (BRUTELOSS) - -/obj/item/weapon/shard/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() - -/obj/item/weapon/shard/Bump() - - spawn( 0 ) - if (prob(20)) - src.force = 15 - else - src.force = 4 - ..() - return - return - -/obj/item/weapon/shard/New(loc, material/material) - ..(loc) - - if(!material || !istype(material)) // We either don't have a material or we've been passed an invalid material. Use glass instead. - material = get_material_by_name("glass") - - set_material(material) - -/obj/item/weapon/shard/proc/set_material(material/material) - if(istype(material)) - src.material = material - icon_state = "[material.shard_icon][pick("large", "medium", "small")]" - pixel_x = rand(-8, 8) - pixel_y = rand(-8, 8) - update_material() - update_icon() - -/obj/item/weapon/shard/proc/update_material() - if(material) - if(material.shard_type) - name = "[material.display_name] [material.shard_type]" - desc = "A small piece of [material.display_name]. It looks sharp, you wouldn't want to step on it barefoot. Could probably be used as ... a throwing weapon?" - switch(material.shard_type) - if(SHARD_SPLINTER, SHARD_SHRAPNEL) - gender = "plural" - else - gender = "neuter" - else - qdel(src) - return - else - name = initial(name) - desc = initial(desc) - -/obj/item/weapon/shard/update_icon() - if(material) - color = material.icon_colour - // 1-(1-x)^2, so that glass shards with 0.3 opacity end up somewhat visible at 0.51 opacity - alpha = 255 * (1 - (1 - material.opacity)*(1 - material.opacity)) - else - color = "#ffffff" - alpha = 255 - -/obj/item/weapon/shard/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/weldingtool) && material.shard_can_repair) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0, user)) - material.place_sheet(loc) - qdel(src) - return - return ..() - -/obj/item/weapon/shard/Crossed(AM as mob|obj) - if(ismob(AM)) - var/mob/M = AM - M << "\red You step on \the [src]!" - playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - if(H.species.flags & IS_SYNTHETIC || (H.species.siemens_coefficient<0.5)) //Thick skin. - return - - if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) ) - var/obj/item/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot")) - if(affecting.status & ORGAN_ROBOT) - return - if(affecting.take_damage(5, 0)) - H.UpdateDamageIcon() - H.updatehealth() - if(!(H.species && (H.species.flags & NO_PAIN))) - H.Weaken(3) - ..() - -// Preset types - left here for the code that uses them - -/obj/item/weapon/shard/shrapnel/New(loc) - ..(loc, get_material_by_name("steel")) - -/obj/item/weapon/shard/phoron/New(loc) - ..(loc, get_material_by_name("phoron glass")) +// Glass shards + +/obj/item/weapon/shard + name = "shard" + icon = 'icons/obj/shards.dmi' + icon_state = "large" + sharp = 1 + edge = 1 + desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass) + w_class = 2.0 + force = 5.0 + throwforce = 8.0 + item_state = "shard-glass" + //matter = list("glass" = 3750) // Weld it into sheets before you use it! + attack_verb = list("stabbed", "slashed", "sliced", "cut") + + gender = "neuter" + var/material/material = null + +/obj/item/weapon/shard/suicide_act(mob/user) + viewers(user) << pick("\red [user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.", \ + "\red [user] is slitting \his throat with \the [src]! It looks like \he's trying to commit suicide.") + return (BRUTELOSS) + +/obj/item/weapon/shard/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) + return ..() + +/obj/item/weapon/shard/Bump() + + spawn( 0 ) + if (prob(20)) + src.force = 15 + else + src.force = 4 + ..() + return + return + +/obj/item/weapon/shard/New(loc, material/material) + ..(loc) + + if(!material || !istype(material)) // We either don't have a material or we've been passed an invalid material. Use glass instead. + material = get_material_by_name("glass") + + set_material(material) + +/obj/item/weapon/shard/proc/set_material(material/material) + if(istype(material)) + src.material = material + icon_state = "[material.shard_icon][pick("large", "medium", "small")]" + pixel_x = rand(-8, 8) + pixel_y = rand(-8, 8) + update_material() + update_icon() + +/obj/item/weapon/shard/proc/update_material() + if(material) + if(material.shard_type) + name = "[material.display_name] [material.shard_type]" + desc = "A small piece of [material.display_name]. It looks sharp, you wouldn't want to step on it barefoot. Could probably be used as ... a throwing weapon?" + switch(material.shard_type) + if(SHARD_SPLINTER, SHARD_SHRAPNEL) + gender = "plural" + else + gender = "neuter" + else + qdel(src) + return + else + name = initial(name) + desc = initial(desc) + +/obj/item/weapon/shard/update_icon() + if(material) + color = material.icon_colour + // 1-(1-x)^2, so that glass shards with 0.3 opacity end up somewhat visible at 0.51 opacity + alpha = 255 * (1 - (1 - material.opacity)*(1 - material.opacity)) + else + color = "#ffffff" + alpha = 255 + +/obj/item/weapon/shard/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/weldingtool) && material.shard_can_repair) + var/obj/item/weapon/weldingtool/WT = W + if(WT.remove_fuel(0, user)) + material.place_sheet(loc) + qdel(src) + return + return ..() + +/obj/item/weapon/shard/Crossed(AM as mob|obj) + if(ismob(AM)) + var/mob/M = AM + M << "\red You step on \the [src]!" + playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds + if(ishuman(M)) + var/mob/living/carbon/human/H = M + + if(H.species.flags & IS_SYNTHETIC || (H.species.siemens_coefficient<0.5)) //Thick skin. + return + + if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) ) + var/obj/item/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot")) + if(affecting.status & ORGAN_ROBOT) + return + if(affecting.take_damage(5, 0)) + H.UpdateDamageIcon() + H.updatehealth() + if(!(H.species && (H.species.flags & NO_PAIN))) + H.Weaken(3) + ..() + +// Preset types - left here for the code that uses them + +/obj/item/weapon/shard/shrapnel/New(loc) + ..(loc, get_material_by_name("steel")) + +/obj/item/weapon/shard/phoron/New(loc) + ..(loc, get_material_by_name("phoron glass")) diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm new file mode 100644 index 00000000000..ea8c2590048 --- /dev/null +++ b/code/game/objects/items/weapons/material/swords.dm @@ -0,0 +1,49 @@ +/obj/item/weapon/claymore + name = "claymore" + desc = "What are you standing around staring at this for? Get to killing!" + icon_state = "claymore" + item_state = "claymore" + flags = CONDUCT + slot_flags = SLOT_BELT + force = 40 + throwforce = 10 + sharp = 1 + edge = 1 + w_class = 3 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + + IsShield() + return 1 + + suicide_act(mob/user) + viewers(user) << "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide." + return(BRUTELOSS) + +/obj/item/weapon/claymore/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) + playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) + return ..() + +/obj/item/weapon/katana + name = "katana" + desc = "Woefully underpowered in D20" + icon_state = "katana" + item_state = "katana" + flags = CONDUCT + slot_flags = SLOT_BELT | SLOT_BACK + force = 40 + throwforce = 10 + sharp = 1 + edge = 1 + w_class = 3 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + + suicide_act(mob/user) + viewers(user) << "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku." + return(BRUTELOSS) + +/obj/item/weapon/katana/IsShield() + return 1 + +/obj/item/weapon/katana/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/material/thrown.dm b/code/game/objects/items/weapons/material/thrown.dm new file mode 100644 index 00000000000..ffba72c4cbb --- /dev/null +++ b/code/game/objects/items/weapons/material/thrown.dm @@ -0,0 +1,31 @@ +/obj/item/weapon/star + name = "shuriken" + desc = "A sharp, perfectly weighted piece of metal." + icon_state = "star" + force = 5 + throw_speed = 10 + throwforce = 15 + throw_range = 15 + sharp = 1 + edge = 1 + matter = list(DEFAULT_WALL_MATERIAL = 500) + + var/poisoned = 0 + +/obj/item/weapon/star/New() + ..() + src.pixel_x = rand(-12, 12) + src.pixel_y = rand(-12, 12) + +//TODO: consider making this something done with reagents. +/obj/item/weapon/star/throw_impact(atom/hit_atom) + ..() + if(poisoned && istype(hit_atom,/mob/living)) + var/mob/living/M = hit_atom + M.adjustToxLoss(rand(20,40)) + poisoned = 0 + color = null + +/obj/item/weapon/star/ninja + color = "#007700" + poisoned = 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm similarity index 100% rename from code/game/objects/items/weapons/twohanded.dm rename to code/game/objects/items/weapons/material/twohanded.dm diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index fbbc731f2ae..867c5155e08 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -89,215 +89,6 @@ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) return ..() -/obj/item/weapon/claymore - name = "claymore" - desc = "What are you standing around staring at this for? Get to killing!" - icon_state = "claymore" - item_state = "claymore" - flags = CONDUCT - slot_flags = SLOT_BELT - force = 40 - throwforce = 10 - sharp = 1 - edge = 1 - w_class = 3 - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - - IsShield() - return 1 - - suicide_act(mob/user) - viewers(user) << "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide." - return(BRUTELOSS) - -/obj/item/weapon/claymore/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() - -/obj/item/weapon/katana - name = "katana" - desc = "Woefully underpowered in D20" - icon_state = "katana" - item_state = "katana" - flags = CONDUCT - slot_flags = SLOT_BELT | SLOT_BACK - force = 40 - throwforce = 10 - sharp = 1 - edge = 1 - w_class = 3 - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - - suicide_act(mob/user) - viewers(user) << "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku." - return(BRUTELOSS) - -/obj/item/weapon/katana/IsShield() - return 1 - -/obj/item/weapon/katana/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() - -/obj/item/weapon/harpoon - name = "harpoon" - sharp = 1 - edge = 0 - desc = "Tharr she blows!" - icon_state = "harpoon" - item_state = "harpoon" - force = 20 - throwforce = 15 - w_class = 3 - attack_verb = list("jabbed","stabbed","ripped") - -/obj/item/weapon/butterfly - name = "butterfly knife" - desc = "A basic metal blade concealed in a lightweight plasteel grip. Small enough when folded to fit in a pocket." - icon_state = "butterflyknife" - item_state = null - hitsound = null - var/active = 0 - w_class = 2 - force = 2 - sharp = 0 - edge = 0 - throw_speed = 3 - throw_range = 4 - throwforce = 7 - attack_verb = list("patted", "tapped") - -/obj/item/butterflyconstruction - name = "unfinished concealed knife" - desc = "An unfinished concealed knife, it looks like the screws need to be tightened." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterflystep1" - -/obj/item/butterflyconstruction/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/weapon/screwdriver)) - user << "You finish the concealed blade weapon." - new /obj/item/weapon/butterfly(user.loc) - qdel(src) - return - -/obj/item/butterflyblade - name = "knife blade" - desc = "A knife blade. Unusable as a weapon without a grip." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterfly2" - matter = list(DEFAULT_WALL_MATERIAL = 5000) - -/obj/item/butterflyhandle - name = "concealed knife grip" - desc = "A plasteel grip with screw fittings for a blade." - icon = 'icons/obj/buildingobject.dmi' - icon_state = "butterfly1" - matter = list(DEFAULT_WALL_MATERIAL = 4000) - -/obj/item/butterflyhandle/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W,/obj/item/butterflyblade)) - user << "You attach the two concealed blade parts." - new /obj/item/butterflyconstruction(user.loc) - qdel(W) - qdel(src) - return - update_icon(user) - -/obj/item/weapon/butterfly/switchblade - name = "switchblade" - desc = "A classic switchblade with gold engraving. Just holding it makes you feel like a gangster." - icon_state = "switchblade" - -/obj/item/weapon/butterfly/attack_self(mob/user) - active = !active - if(active) - user << "You flip out your [src]." - playsound(user, 'sound/weapons/flipblade.ogg', 15, 1) - force = 15 //bay adjustments - throwforce = 12 - edge = 1 - sharp = 1 - hitsound = 'sound/weapons/bladeslice.ogg' - icon_state += "_open" - w_class = 3 - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - else - user << "The butterfly knife can now be concealed." - force = initial(force) - edge = 0 - sharp = 0 - hitsound = initial(hitsound) - icon_state = initial(icon_state) - w_class = initial(w_class) - attack_verb = initial(attack_verb) - add_fingerprint(user) - - -obj/item/weapon/wirerod - name = "wired rod" - desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." - icon_state = "wiredrod" - item_state = "rods" - flags = CONDUCT - force = 8 - throwforce = 10 - w_class = 3 - attack_verb = list("hit", "bludgeoned", "whacked", "bonked") - - -obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob) - ..() - if(istype(I, /obj/item/weapon/shard)) - var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear - - user.put_in_hands(S) - user << "You fasten the glass shard to the top of the rod with the cable." - qdel(I) - qdel(src) - update_icon(user) - - else if(istype(I, /obj/item/weapon/wirecutters)) - var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod - - user.put_in_hands(P) - user << "You fasten the wirecutters to the top of the rod with the cable, prongs outward." - qdel(I) - qdel(src) - update_icon(user) - update_icon(user) - -/obj/item/weapon/star - name = "shuriken" - desc = "A sharp, perfectly weighted piece of metal." - icon_state = "star" - force = 5 - throw_speed = 10 - throwforce = 15 - throw_range = 15 - sharp = 1 - edge = 1 - matter = list(DEFAULT_WALL_MATERIAL = 500) - - var/poisoned = 0 - -/obj/item/weapon/star/New() - ..() - src.pixel_x = rand(-12, 12) - src.pixel_y = rand(-12, 12) - -//TODO: consider making this something done with reagents. -/obj/item/weapon/star/throw_impact(atom/hit_atom) - ..() - if(poisoned && istype(hit_atom,/mob/living)) - var/mob/living/M = hit_atom - M.adjustToxLoss(rand(20,40)) - poisoned = 0 - color = null - -/obj/item/weapon/star/ninja - color = "#007700" - poisoned = 1 - /obj/item/weapon/energy_net name = "energy net" desc = "It's a net made of green energy."