mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-09 00:43:55 +00:00
Restructuring a bunch of files in prep for widespread path changes.
This commit is contained in:
@@ -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"
|
||||
|
||||
68
code/game/objects/items/weapons/improvised_components.dm
Normal file
68
code/game/objects/items/weapons/improvised_components.dm
Normal file
@@ -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 << "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>"
|
||||
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 << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
update_icon(user)
|
||||
update_icon(user)
|
||||
@@ -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 <b>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>")
|
||||
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 <b>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>")
|
||||
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()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
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 <B>[H] has been knocked unconscious!</B>", "\red <B>You knock [H] unconscious!</B>")
|
||||
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()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] in the face with the tray!</B>", 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 <B>[] slams [] in the face with the tray!</B>", 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("<span class='warning'>[user] bashes [src] with [W]!</span>")
|
||||
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))
|
||||
|
||||
392
code/game/objects/items/weapons/material/kitchen.dm
Normal file
392
code/game/objects/items/weapons/material/kitchen.dm
Normal file
@@ -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 <b>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>")
|
||||
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()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
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 <B>[H] has been knocked unconscious!</B>", "\red <B>You knock [H] unconscious!</B>")
|
||||
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()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to attack [M.name] ([M.ckey]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] with the tray!</B>", 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 <B>[] slams [] in the face with the tray!</B>", 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 <B>[] slams [] in the face with the tray!</B>", 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("<span class='warning'>[user] bashes [src] with [W]!</span>")
|
||||
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))
|
||||
106
code/game/objects/items/weapons/material/knives.dm
Normal file
106
code/game/objects/items/weapons/material/knives.dm
Normal file
@@ -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 << "<span class='notice'>You flip out your [src].</span>"
|
||||
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 << "<span class='notice'>The butterfly knife can now be concealed.</span>"
|
||||
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 <b>[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>")
|
||||
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 ..()
|
||||
11
code/game/objects/items/weapons/material/misc.dm
Normal file
11
code/game/objects/items/weapons/material/misc.dm
Normal file
@@ -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")
|
||||
@@ -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 <b>[user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his throat with \the [src]! It looks like \he's trying to commit suicide.</b>")
|
||||
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 <B>You step on \the [src]!</B>"
|
||||
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 <b>[user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.</b>", \
|
||||
"\red <b>[user] is slitting \his throat with \the [src]! It looks like \he's trying to commit suicide.</b>")
|
||||
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 <B>You step on \the [src]!</B>"
|
||||
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"))
|
||||
49
code/game/objects/items/weapons/material/swords.dm
Normal file
49
code/game/objects/items/weapons/material/swords.dm
Normal file
@@ -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) << "<span class='danger'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
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) << "<span class='danger'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"
|
||||
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 ..()
|
||||
31
code/game/objects/items/weapons/material/thrown.dm
Normal file
31
code/game/objects/items/weapons/material/thrown.dm
Normal file
@@ -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
|
||||
@@ -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) << "<span class='danger'>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</span>"
|
||||
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) << "<span class='danger'>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</span>"
|
||||
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 << "<span class='notice'>You flip out your [src].</span>"
|
||||
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 << "<span class='notice'>The butterfly knife can now be concealed.</span>"
|
||||
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 << "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>"
|
||||
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 << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
|
||||
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."
|
||||
|
||||
Reference in New Issue
Block a user