diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 9a830e17773..d82d5636a96 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -6,6 +6,7 @@
// No comment
/atom/proc/attackby(obj/item/W, mob/living/user, params)
return
+
/atom/movable/attackby(obj/item/W, mob/living/user, params)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
@@ -15,12 +16,11 @@
/mob/living/attackby(obj/item/I, mob/user, params)
user.changeNext_move(CLICK_CD_MELEE)
- if((butcher_results) && (stat == DEAD))
- var/sharpness = is_sharp(I)
- if(sharpness)
+ if(user.a_intent == I_HARM && stat == DEAD && butcher_results) //can we butcher it?
+ if(is_sharp(I))
user << "You begin to butcher [src]..."
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
- if(do_mob(user, src, 80/sharpness))
+ if(do_mob(user, src, 80))
harvest(user)
return
diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm
index 576e87f3741..e14fe9029ec 100644
--- a/code/game/gamemodes/miniantags/guardian/guardian.dm
+++ b/code/game/gamemodes/miniantags/guardian/guardian.dm
@@ -32,7 +32,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
AIStatus = AI_OFF
- butcher_results = list(/obj/item/weapon/ectoplasm = 1)
+ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/ectoplasm = 1)
var/summoned = FALSE
var/cooldown = 0
var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index a9aefdd7d0b..037852f463d 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -250,7 +250,7 @@
occupant.reagents.trans_to(new_meat, round(occupant.reagents.total_volume/slab_count,1))
if(occupant.get_species() == "Human")
- new /obj/item/stack/sheet/animalhide/human
+ new /obj/item/stack/sheet/animalhide/human(src)
new /obj/effect/decal/cleanable/blood/gibs(src)
if(!UserOverride)
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 7e1ef361a32..297c63a333c 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -23,7 +23,7 @@
if(R.get_amount() >= 4)
R.use(4)
user << "You add spikes to the frame."
- new /obj/structure/kitchenspike(src.loc,)
+ new /obj/structure/kitchenspike(loc)
add_fingerprint(user)
qdel(src)
@@ -42,12 +42,12 @@
/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob)
if(istype(G, /obj/item/weapon/crowbar))
- if(!src.buckled_mob)
+ if(!buckled_mob)
playsound(loc, 'sound/items/Crowbar.ogg', 100, 1)
if(do_after(user, 20, target = src))
user << "You pry the spikes out of the frame."
new /obj/item/stack/rods(loc, 4)
- new /obj/structure/kitchenspike_frame(src.loc,)
+ new /obj/structure/kitchenspike_frame(loc)
add_fingerprint(user)
qdel(src)
else
@@ -58,11 +58,13 @@
if(buckled_mob)
user << "The spike already has something on it, finish collecting its meat first!"
else
- if(istype(G.affecting, /mob/living/))
+ if(isliving(G.affecting))
if(!buckled_mob)
- if(do_mob(src, src, 120))
+ if(do_mob(user, src, 120))
if(spike(G.affecting))
+ G.affecting.visible_message("[user] slams [G.affecting] onto the meat spike!", "[user] slams you onto the meat spike!", "You hear a squishy wet noise.")
qdel(G)
+ return
user << "You can't use that on the spike!"
return
@@ -77,9 +79,8 @@
if(victim.buckled)
return 0
var/mob/living/H = victim
- playsound(src.loc, "sound/effects/splat.ogg", 25, 1)
- H.visible_message("[src] slams [victim] onto the meat spike!", "[src] slams you onto the meat spike!", "You hear a squishy wet noise.")
- H.loc = src.loc
+ playsound(loc, "sound/effects/splat.ogg", 25, 1)
+ H.forceMove(loc)
H.emote("scream")
if(istype(H, /mob/living/carbon/human)) //So you don't get human blood when you spike a giant spidere
var/turf/simulated/pos = get_turf(H)
@@ -131,7 +132,7 @@
animate(M, transform = m180, time = 3)
M.pixel_y = M.get_standard_pixel_y_offset(180)
M.adjustBruteLoss(30)
- src.visible_message(text("[M] falls free of the [src]!"))
+ visible_message("[M] falls free of the [src]!")
unbuckle_mob()
M.emote("scream")
M.AdjustWeakened(10)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 52e6ea759c3..af4ccc91928 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -955,12 +955,12 @@
return 0
/mob/living/proc/harvest(mob/living/user)
- //if(qdeleted(src))
- // return//Replace with what?
- if(butcher_results)
- for(var/path in butcher_results)
- for(var/i = 1; i <= butcher_results[path];i++)
- new path(src.loc)
- butcher_results.Remove(path) //In case you want to have things like simple_animals drop their butcher results on gib, so it won't double up below.
- visible_message("[user] butchers [src].")
- gib()
\ No newline at end of file
+ if(qdeleted(src))
+ return
+ if(butcher_results)
+ for(var/path in butcher_results)
+ for(var/i = 1, i <= butcher_results[path], i++)
+ new path(loc)
+ butcher_results.Remove(path) //In case you want to have things like simple_animals drop their butcher results on gib, so it won't double up below.
+ visible_message("[user] butchers [src].")
+ gib()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/butterfly.dm b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
index a2a25da11c1..27df35c5bf9 100644
--- a/code/modules/mob/living/simple_animal/friendly/butterfly.dm
+++ b/code/modules/mob/living/simple_animal/friendly/butterfly.dm
@@ -17,7 +17,7 @@
density = 0
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = 2
- butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 1)
+ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat = 0)
/mob/living/simple_animal/butterfly/New()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm
index 39efa5227b5..f6d0bf9752e 100644
--- a/code/modules/mob/living/simple_animal/friendly/tomato.dm
+++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm
@@ -8,7 +8,7 @@
turns_per_move = 5
maxHealth = 15
health = 15
- butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/tomatomeat = 2)
+ butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/tomatomeat = 3)
response_help = "prods the"
response_disarm = "pushes aside the"
response_harm = "smacks the"