From cc82a47163d47233c90ea79bfa83dd62b7536e98 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 6 Nov 2014 19:48:26 -0500 Subject: [PATCH] Cleans up food slicing --- .../objects/items/weapons/melee/energy.dm | 33 +++--- .../reagent_containers/food/snacks.dm | 106 +++++++----------- 2 files changed, 59 insertions(+), 80 deletions(-) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 93453e843e..83f42ed021 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -7,7 +7,7 @@ edge = 0 flags = FPRINT | TABLEPASS | NOBLOODY -/obj/item/weapon/melee/energy/proc/activate() +/obj/item/weapon/melee/energy/proc/activate(mob/living/user) active = 1 force = active_force throwforce = active_throwforce @@ -16,7 +16,7 @@ w_class = active_w_class playsound(user, 'sound/weapons/saberon.ogg', 50, 1) -/obj/item/weapon/melee/energy/proc/deactivate() +/obj/item/weapon/melee/energy/proc/deactivate(mob/living/user) active = 0 force = initial(force) throwforce = initial(throwforce) @@ -30,9 +30,9 @@ if ((CLUMSY in user.mutations) && prob(50)) user.visible_message("\red [user] accidentally cuts \himself with \the [src].", "\red You accidentally cut yourself with \the [src].") user.take_organ_damage(5,5) - deactivate() + deactivate(user) else - activate() + activate(user) if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user @@ -72,12 +72,12 @@ sharp = 1 edge = 1 -/obj/item/weapon/melee/energy/axe/activate() +/obj/item/weapon/melee/energy/axe/activate(mob/living/user) ..() icon_state = "axe1" user << "\blue \The [src] is now energised." -/obj/item/weapon/melee/energy/axe/deactivate() +/obj/item/weapon/melee/energy/axe/deactivate(mob/living/user) ..() icon_state = initial(icon_state) user << "\blue \The [src] is de-energised. It's just a regular axe now." @@ -104,7 +104,6 @@ w_class = 2 flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY origin_tech = "magnets=3;syndicate=4" - var/attack_verb_active = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") /obj/item/weapon/melee/energy/sword/New() item_color = pick("red","blue","green","purple") @@ -121,15 +120,15 @@ /obj/item/weapon/melee/energy/sword/purple/New() item_color = "purple" -/obj/item/weapon/melee/energy/sword/activate() +/obj/item/weapon/melee/energy/sword/activate(mob/living/user) ..() - attack_verb = attack_verb_active + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") icon_state = "sword[item_color]" user << "\blue \The [src] is now energised." -/obj/item/weapon/melee/energy/sword/deactivate() +/obj/item/weapon/melee/energy/sword/deactivate(mob/living/user) ..() - attack_verb = initial(attack_verb) + attack_verb = list() icon_state = initial(icon_state) user << "\blue It can now be concealed." @@ -143,7 +142,7 @@ desc = "Arrrr matey." icon_state = "cutlass0" -/obj/item/weapon/melee/energy/sword/pirate/activate() +/obj/item/weapon/melee/energy/sword/pirate/activate(mob/living/user) ..() icon_state = "cutlass1" @@ -151,8 +150,8 @@ *Energy Blade */ -//Can't be activated or deactivated, so not actually a subtype of energy -/obj/item/weapon/melee/energy_blade +//Can't be activated or deactivated, so no reason to be a subtype of energy +/obj/item/weapon/melee/energy/blade name = "energy blade" desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." icon_state = "blade" @@ -167,13 +166,13 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") var/datum/effect/effect/system/spark_spread/spark_system -/obj/item/weapon/melee/energy_blade/New() +/obj/item/weapon/melee/energy/blade/New() spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) -/obj/item/weapon/melee/energy_blade/dropped() +/obj/item/weapon/melee/energy/blade/dropped() del(src) -/obj/item/weapon/melee/energy_blade/proc/throw() +/obj/item/weapon/melee/energy/blade/proc/throw() del(src) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 1f8a84f6db..6f73830770 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -10,6 +10,7 @@ var/slice_path var/slices_num center_of_mass = list("x"=15, "y"=15) + w_class = 2 //Placeholder for effect that trigger on eating that aren't tied to reagents. /obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M) @@ -126,11 +127,10 @@ /obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/storage)) ..() // -> item/attackby() - if(istype(W,/obj/item/weapon/storage)) - ..() // -> item/attackby() - + return + + // Eating with forks if(istype(W,/obj/item/weapon/kitchen/utensil)) - var/obj/item/weapon/kitchen/utensil/U = W if(!U.reagents) @@ -157,65 +157,46 @@ if (reagents.total_volume <= 0) del(src) return + + if (is_sliceable()) + //these are used to allow hiding edge items in food that is not on a table/tray + var/can_slice_here = isturf(src.loc) && ((locate(/obj/structure/table) in src.loc) || (locate(/obj/machinery/optable) in src.loc) || (locate(/obj/item/weapon/tray) in src.loc)) + var/hide_item = !has_edge(W) || !can_slice_here + + if (hide_item) + if (W.w_class >= src.w_class || W.is_robot_module()) + return + + user << "\red You slip [W] inside [src]." + user.u_equip(W) + if ((user.client && user.s_active != src)) + user.client.screen -= W + W.dropped(user) + add_fingerprint(user) + contents += W + return + + if (has_edge(W)) + if (!can_slice_here) + user << "\red You cannot slice [src] here! You need a table or at least a tray to do it." + return + + var/slices_lost = 0 + if (W.w_class > 3) + user.visible_message("\blue [user] crudely slices \the [src] with [W]!", "\blue You crudely slice \the [src] with your [W]!") + slices_lost = rand(1,min(1,round(slices_num/2))) + else + user.visible_message("\blue [user] slices \the [src]!", "\blue You slice \the [src]!") + + var/reagents_per_slice = reagents.total_volume/slices_num + for(var/i=1 to (slices_num-slices_lost)) + var/obj/slice = new slice_path (src.loc) + reagents.trans_to(slice,reagents_per_slice) + del(src) + return - if((slices_num <= 0 || !slices_num) || !slice_path) - return 0 - - var/inaccurate = 0 - if( \ - istype(W, /obj/item/weapon/kitchenknife) || \ - istype(W, /obj/item/weapon/butch) || \ - istype(W, /obj/item/weapon/scalpel) || \ - istype(W, /obj/item/weapon/kitchen/utensil/knife) \ - ) - else if( \ - istype(W, /obj/item/weapon/circular_saw) || \ - istype(W, /obj/item/weapon/melee/energy/sword) && W:active || \ - istype(W, /obj/item/weapon/melee/energy/blade) || \ - istype(W, /obj/item/weapon/shovel) || \ - istype(W, /obj/item/weapon/hatchet) \ - ) - inaccurate = 1 - else if(W.w_class <= 2 && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable)) - if(!iscarbon(user)) - return 1 - user << "\red You slip [W] inside [src]." - user.u_equip(W) - if ((user.client && user.s_active != src)) - user.client.screen -= W - W.dropped(user) - add_fingerprint(user) - contents += W - return - else - return 1 - if ( \ - !isturf(src.loc) || \ - !(locate(/obj/structure/table) in src.loc) && \ - !(locate(/obj/machinery/optable) in src.loc) && \ - !(locate(/obj/item/weapon/tray) in src.loc) \ - ) - user << "\red You cannot slice [src] here! You need a table or at least a tray to do it." - return 1 - var/slices_lost = 0 - if (!inaccurate) - user.visible_message( \ - "\blue [user] slices \the [src]!", \ - "\blue You slice \the [src]!" \ - ) - else - user.visible_message( \ - "\blue [user] crudely slices \the [src] with [W]!", \ - "\blue You crudely slice \the [src] with your [W]!" \ - ) - slices_lost = rand(1,min(1,round(slices_num/2))) - var/reagents_per_slice = reagents.total_volume/slices_num - for(var/i=1 to (slices_num-slices_lost)) - var/obj/slice = new slice_path (src.loc) - reagents.trans_to(slice,reagents_per_slice) - del(src) - - return +/obj/item/weapon/reagent_containers/food/snacks/proc/is_sliceable() + return (slices_num <= 0 || !slices_num || !slice_path) /obj/item/weapon/reagent_containers/food/snacks/Del() if(contents) @@ -242,7 +223,6 @@ //N.emote("nibbles away at the [src]") N.health = min(N.health + 1, N.maxHealth) - //////////////////////////////////////////////////////////////////////////////// /// FOOD END ////////////////////////////////////////////////////////////////////////////////