From 97adf828ec0d901655e021aa034a6013242b8327 Mon Sep 17 00:00:00 2001 From: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> Date: Tue, 24 Feb 2026 01:14:25 -0500 Subject: [PATCH 1/5] new butchery system --- cev_eris.dme | 1 + code/datums/components/butchering.dm | 131 ++++++++++++++++++ code/game/machinery/kitchen/gibber.dm | 12 +- code/game/objects/items.dm | 2 + .../items/weapons/tools/mods/_upgrades.dm | 2 + code/modules/holodeck/HolodeckObjects.dm | 3 +- .../living/carbon/superior_animal/defense.dm | 25 +--- .../giant_spider/giant_spider.dm | 5 +- .../giant_spider/types/hunter.dm | 6 +- .../giant_spider/types/nurse.dm | 5 +- .../carbon/superior_animal/golem/golem.dm | 3 +- .../carbon/superior_animal/roach/life.dm | 4 +- .../carbon/superior_animal/roach/roach.dm | 4 +- .../superior_animal/roach/types/benzin.dm | 5 +- .../superior_animal/roach/types/bluespace.dm | 5 +- .../superior_animal/roach/types/fuhrer.dm | 8 +- .../superior_animal/roach/types/hunter.dm | 7 +- .../superior_animal/roach/types/kaiser.dm | 17 ++- .../superior_animal/roach/types/nanites.dm | 6 +- .../superior_animal/roach/types/roachling.dm | 2 +- .../superior_animal/roach/types/support.dm | 5 +- .../superior_animal/roach/types/tank.dm | 8 +- .../superior_animal/roach/types/toxic.dm | 1 - .../carbon/superior_animal/stalker/stalker.dm | 3 +- .../carbon/superior_animal/superior_animal.dm | 5 +- code/modules/mob/living/living.dm | 12 ++ code/modules/mob/living/living_defines.dm | 9 ++ .../mob/living/simple_animal/friendly/cat.dm | 3 +- .../living/simple_animal/friendly/corgi.dm | 5 +- .../mob/living/simple_animal/friendly/crab.dm | 3 +- .../simple_animal/friendly/farm_animals.dm | 26 ++-- .../living/simple_animal/friendly/iriska.dm | 8 +- .../living/simple_animal/friendly/mouse.dm | 3 +- .../living/simple_animal/friendly/mushroom.dm | 3 +- .../living/simple_animal/friendly/tomato.dm | 6 +- .../mob/living/simple_animal/hostile/alien.dm | 4 +- .../mob/living/simple_animal/hostile/bat.dm | 2 +- .../mob/living/simple_animal/hostile/bear.dm | 5 +- .../mob/living/simple_animal/hostile/carp.dm | 8 +- .../mob/living/simple_animal/hostile/mimic.dm | 1 - .../mob/living/simple_animal/hostile/pike.dm | 12 +- .../mob/living/simple_animal/hostile/tree.dm | 3 +- .../mob/living/simple_animal/parrot.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 21 --- .../reagent_containers/food/snacks/meat.dm | 14 ++ 45 files changed, 310 insertions(+), 115 deletions(-) create mode 100644 code/datums/components/butchering.dm diff --git a/cev_eris.dme b/cev_eris.dme index 7ce2e1a32fe..78fa0794e19 100644 --- a/cev_eris.dme +++ b/cev_eris.dme @@ -405,6 +405,7 @@ #include "code\datums\autolathe\security.dm" #include "code\datums\autolathe\tools.dm" #include "code\datums\changelog\changelog.dm" +#include "code\datums\components\butchering.dm" #include "code\datums\components\_component.dm" #include "code\datums\components\clothing_sanity_protection.dm" #include "code\datums\components\fabric.dm" diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm new file mode 100644 index 00000000000..35ffc5d694f --- /dev/null +++ b/code/datums/components/butchering.dm @@ -0,0 +1,131 @@ +/datum/component/butchering + /// Whether or not this component can be used to butcher currently. Used to temporarily disable an existing butcher component for later + var/butchering_enabled = TRUE + + /// Whether or not this component is compatible with blunt tools. + var/can_be_blunt = FALSE + +/datum/component/butchering/Initialize( + disabled = FALSE, + can_be_blunt = FALSE, +) + if(disabled) + src.butchering_enabled = FALSE + src.can_be_blunt = can_be_blunt + if(isitem(parent)) + RegisterSignal(parent, COMSIG_IATTACK, PROC_REF(onItemAttack)) + RegisterSignal(parent, COMSIG_APPVAL, PROC_REF(onStatusChange)) + +///datum/component/butchering/proc/onItemAttack(obj/item/source, mob/living/m, mob/living/user) +///datum/component/butchering/proc/onItemAttack(atom/A, mob/living/user, params) +///checks if we can butcher, and intercepts the attack chain if we successfully do so +/datum/component/butchering/proc/onItemAttack(atom/target, mob/living/user, params) + SIGNAL_HANDLER + var/obj/item/ourparent + if(isitem(parent)) + ourparent = parent + + if(!(user.a_intent == I_HURT))//are we on harm intent? + return + + if(isliving(target)) + var/mob/living/ourmob = target + if(ourmob.stat == DEAD && (ourmob.butcher_results)) //can we butcher it? + if(butchering_enabled && (can_be_blunt || ourparent.sharp)) + INVOKE_ASYNC(src, PROC_REF(startButcher), ourparent, ourmob, user) + return TRUE //ends attack chain, so all we do is butcher + return + +///handles the use tool containing our butchering action. needed since signal_handler procs hate do afters +/datum/component/butchering/proc/startButcher(obj/item/source, mob/living/meat, mob/living/user) + to_chat(user, span_notice("You begin to butcher \the [meat]...")) + if(source.use_tool(user, meat, WORKTIME_NORMAL, QUALITY_CUTTING, FAILCHANCE_NORMAL, required_stat = STAT_BIO)) + on_butchering(user, meat, source) +/** + * Handles a user butchering a target + * + * Arguments: + * - [butcher][/mob/living]: The mob doing the butchering + * - [meat][/mob/living]: The mob being butchered + */ +/datum/component/butchering/proc/on_butchering(mob/living/butcher, mob/living/meat, obj/item/source) + //our final items to spawn + var/list/butchered = list() + //did we fail to extract something? + var/mulched + var/turf/dropturf = get_turf(meat) + var/bio = butcher.stats.getStat(STAT_BIO) + //mult to success chance based on tool quality + var/toolpowr = 0.5 + + if(source.has_quality(QUALITY_CUTTING))//otherwise, we're working with something stupid like a glass shard or a beartrap(truly, advanced cutting tool) + toolpowr = round((source.get_tool_quality(QUALITY_CUTTING) / 10)) + + if(!meat.butcher_results) + log_runtime(" [meat.type] was butchered without any possible butcher results.") + meat.gib() + + //for getting the dialogue hinting at relative power + var/msgpowr = toolpowr * (max((bio / 35), 0.25)) + switch(msgpowr) + if(0 to 0.8)//go get an actual knife you gross-ass roundstart vagabond + butcher.visible_message(span_bolddanger("[butcher] can't get anywhere with this tool! Instead, they rip \the [meat] to shreds like an animal!")) + if(0.9 to 3.5) + butcher.visible_message(span_danger("[butcher] messily chops up \the [meat]!")) + if(3.6 to 6) + butcher.visible_message(span_danger("[butcher] carefully butchers \the [meat].")) + if(6.1 to 99) + butcher.visible_message(span_notice("[butcher] precisely dissects \the [meat].")) + + // Chance of triggering an additional hazard effect when butchering an animal. + var/hazard_chance = 5 + for(var/thing in meat.butcher_results) + var/obj/result = thing + //get the base percentage of awarding this result + var/difficulty = meat.butcher_results[result] + //takes difficulty and multiplies it by tool and bio stat to get final chance + var/trueprob = clamp((difficulty * toolpowr) * max((bio / 35), 0.25), 1, 100) + if(prob(trueprob)) + butchered += result + else + mulched++ + hazard_chance = hazard_chance + 10//chance of complications increases for each item you fail to harvest + + if(mulched) + to_chat(butcher, span_warning("You [LAZYLEN(meat.butcher_results) <= mulched ? "completely destroyed all of" : "lost some of"] the meat from \the [meat].")) + + if(LAZYLEN(butchered)) + for(var/reward in butchered) + var/obj/item/ourmeat = new reward(dropturf) + ourmeat.name = "[meat.name] [ourmeat.name]" + + //try to invoke a hazard effect on the butcher + if(meat.butchery_hazard && prob(hazard_chance)) + butcher.visible_message(span_danger("While cutting up \the [src], [user]'s hand slips..."), span_danger("While cutting up \the [src], your hand slips...")) + meat.butchery_fail(butcher) + + //let's finish up. + meat.drop_embedded() + meat.gib() + if(meat.client)//if a player just got hardgibbed, tattle + message_admins("[meat] ([key_name(meat)]) was butchered for meat by [butcher] ([key_name(butcher)]) [ADMIN_JMP(butcher)].") + +///Enables the butchering mechanic. +/datum/component/butchering/proc/enable_butchering(datum/source) + SIGNAL_HANDLER + butchering_enabled = TRUE + +///Disables the butchering mechanic. +/datum/component/butchering/proc/disable_butchering(datum/source) + SIGNAL_HANDLER + butchering_enabled = FALSE + +///signal check to see if our holder is still sharp, for variable butchering items. If not, shut down the component till sharpness comes back. +/datum/component/butchering/proc/onStatusChange(atom/holder) + SIGNAL_HANDLER + if(isitem(holder)) + var/obj/item/itemholder = holder + if(!itemholder.sharp && !can_be_blunt) + disable_butchering() + else if(itemholder.sharp && butchering_enabled == FALSE) + enable_butchering() diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index ede77a8a344..e3c920aaada 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -186,17 +186,17 @@ var/meat_amount = occupant.mob_size / 2 var/meat_type = /obj/item/reagent_containers/food/snacks/meat - if(issuperioranimal(occupant)) - var/mob/living/carbon/superior_animal/S = occupant - meat_type = S.meat_type + if(issuperioranimal(occupant) || isanimal(occupant)) + if(occupant.butcher_results)//nab a meat from the occupant's butcher results. Otherwise use default meat + for(var/possiblemeat in occupant.butcher_results) + if(istype(possiblemeat, /obj/item/reagent_containers/food/snacks/meat)) + meat_type = possiblemeat + break else if(iscarbon(occupant)) var/mob/living/carbon/C = occupant meat_type = C.species.meat_type if(occupant.stats.getPerk(PERK_SURVIVOR)) meat_type = /obj/item/reagent_containers/food/snacks/meat/pork - else if(isanimal(occupant)) - var/mob/living/simple_animal/A = occupant - meat_type = A.meat_type for(var/i in 1 to meat_amount) var/obj/item/reagent_containers/food/snacks/meat/new_meat = new meat_type(src) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5cb260454cb..1953bbbc933 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -162,6 +162,8 @@ if(chameleon_type) verbs.Add(/obj/item/proc/set_chameleon_appearance) tact_visual = new /obj/effect/effect/melee/alert + if(sharp && !isProjectile(src))//any item with sharpness on spawn gets butchering + AddComponent(/datum/component/butchering, FALSE, FALSE) . = ..() /obj/item/Destroy(force) diff --git a/code/game/objects/items/weapons/tools/mods/_upgrades.dm b/code/game/objects/items/weapons/tools/mods/_upgrades.dm index 6fbf1edb226..dcaadd45fc1 100644 --- a/code/game/objects/items/weapons/tools/mods/_upgrades.dm +++ b/code/game/objects/items/weapons/tools/mods/_upgrades.dm @@ -300,6 +300,8 @@ T.max_upgrades += tool_upgrades[UPGRADE_MAXUPGRADES] if(tool_upgrades[UPGRADE_SHARP]) T.sharp = tool_upgrades[UPGRADE_SHARP] + if(!T.GetComponent(/datum/component/butchering)) + AddComponent(/datum/component/butchering, FALSE, FALSE) if(tool_upgrades[UPGRADE_COLOR]) T.color = tool_upgrades[UPGRADE_COLOR] if(tool_upgrades[UPGRADE_ITEMFLAGPLUS]) diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index d7e1b7e0e66..2adc05f0243 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -487,8 +487,7 @@ icon_dead = "holo4" alpha = 127 icon_gib = null - meat_amount = 0 - meat_type = null + butcher_results = null /mob/living/simple_animal/hostile/carp/holodeck/New() ..() diff --git a/code/modules/mob/living/carbon/superior_animal/defense.dm b/code/modules/mob/living/carbon/superior_animal/defense.dm index 0bd682f968c..4a0e59aeeea 100644 --- a/code/modules/mob/living/carbon/superior_animal/defense.dm +++ b/code/modules/mob/living/carbon/superior_animal/defense.dm @@ -1,20 +1,3 @@ -/mob/living/carbon/superior_animal/proc/harvest(mob/user) - var/actual_meat_amount = max(1,(meat_amount/2)) - if(meat_type && actual_meat_amount>0 && (stat == DEAD)) - drop_embedded() - for(var/i=0;i item.attack -> mob.resolve_item_attack -> item.apply_hit_effect diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm index 51b9305ec5a..0b7729b0d4c 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm @@ -24,8 +24,9 @@ move_to_delay = 5 turns_per_move = 5 see_in_dark = 10 - meat_type = /obj/item/reagent_containers/food/snacks/meat/spider - meat_amount = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider = 35,\ + /obj/item/reagent_containers/food/snacks/meat/spider = 35,\ + /obj/item/reagent_containers/food/snacks/meat/spider = 35) stop_automated_movement_when_pulled = 0 melee_damage_lower = 12 diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm index a73dec49078..6ec310cdb0b 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm @@ -10,6 +10,8 @@ melee_damage_upper = 20 poison_per_bite = 8 move_to_delay = 3 - meat_type = /obj/item/reagent_containers/food/snacks/meat/spider/hunter - meat_amount = 4 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35,\ + /obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35,\ + /obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35,\ + /obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35) rarity_value = 75 diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm index 499dc3d0a8e..3a3a75e6e08 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm @@ -16,9 +16,10 @@ poison_per_bite = 3 var/atom/cocoon_target poison_type = "aranecolmin" - meat_type = /obj/item/reagent_containers/food/snacks/meat/spider/nurse + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider/nurse = 35,\ + /obj/item/reagent_containers/food/snacks/meat/spider/nurse = 35,\ + /obj/item/reagent_containers/food/snacks/meat/spider/nurse = 35) move_to_delay = 4 - meat_amount = 3 rarity_value = 75 var/fed = 0 var/egg_inject_chance = 4 diff --git a/code/modules/mob/living/carbon/superior_animal/golem/golem.dm b/code/modules/mob/living/carbon/superior_animal/golem/golem.dm index 5147003260b..ca820261e7c 100644 --- a/code/modules/mob/living/carbon/superior_animal/golem/golem.dm +++ b/code/modules/mob/living/carbon/superior_animal/golem/golem.dm @@ -40,8 +40,7 @@ speak_chance = 5 see_in_dark = 10 - meat_type = null - meat_amount = 0 + butcher_results = null stop_automated_movement_when_pulled = 0 wander = FALSE viewRange = 8 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/life.dm b/code/modules/mob/living/carbon/superior_animal/roach/life.dm index 9505409d66d..1de59729bba 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/life.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/life.dm @@ -91,12 +91,12 @@ // End message src.visible_message(span_warning("\The [src] finishes eating \the [eat_target], leaving only bones.")) // Get fed - fed += rand(1,tasty.meat_amount) + fed += rand(1,LAZYLEN(tasty.butcher_results)) if (isroach(tasty)) var/mob/living/carbon/superior_animal/roach/cannibalism = tasty fed += cannibalism.fed if(istype(src, /mob/living/carbon/superior_animal/roach/roachling)) - if(tasty.meat_amount >= 6)// ate a fuhrer or kaiser + if(istype(tasty, /mob/living/carbon/superior_animal/roach/kaiser) || istype(tasty, /mob/living/carbon/superior_animal/roach/fuhrer))// ate a fuhrer or kaiser var/mob/living/carbon/superior_animal/roach/roachling/bigboss = src bigboss.big_boss = TRUE clearEatTarget() diff --git a/code/modules/mob/living/carbon/superior_animal/roach/roach.dm b/code/modules/mob/living/carbon/superior_animal/roach/roach.dm index d7eda87832e..d7f3a829017 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/roach.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/roach.dm @@ -13,8 +13,8 @@ turns_per_move = 4 turns_since_move = 0 - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer - meat_amount = 2 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = 45,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = 35) maxHealth = 10 health = 10 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm index 3fe0fccf470..6524d1e4737 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/benzin.dm @@ -7,8 +7,9 @@ maxHealth = 25 health = 25 melee_damage_upper = 3 - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/benzin - meat_amount = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/benzin = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/benzin = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/benzin = 35) rarity_value = 15 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm index f52dafbbae4..052269c4de9 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm @@ -4,7 +4,10 @@ icon_state = "bluespaceroach" maxHealth = 25 health = 25 - meat_type = /obj/item/bluespace_crystal + butcher_results = list(/obj/item/bluespace_crystal = 35,\ + /obj/item/bluespace_crystal = 15,\ + /obj/item/bluespace_crystal = 15,\ + /obj/item/bluespace_crystal = 15) melee_damage_lower = 4 melee_damage_upper = 11 armor_divisor = ARMOR_PEN_MAX // Hits through armor diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm index d0a273d5bb1..147e9c769e1 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm @@ -17,8 +17,12 @@ extra_burrow_chance = 100 blattedin_revives_left = 0 //He only lives once, cuz he's huge - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer - meat_amount = 6 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 45,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 25) sanity_damage = 1 rarity_value = 90 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm index e4c7e03b94a..4b5056a4cfb 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm @@ -15,8 +15,11 @@ attacktext = list("slashed", "rended", "diced") - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager - meat_amount = 3 + + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 25) rarity_value = 11.25 // Armor related variables - jager jacket diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm index 97453313386..129fe1e3b0a 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm @@ -32,8 +32,21 @@ Has ability of every roach. blattedin_revives_left = 0 - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser - meat_amount = 15 + //big enough to feed a whole clan of vagabonds + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25) sanity_damage = 3 ranged = 1 // RUN, COWARD! diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm index d5b0dcff61f..c390f6b987c 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm @@ -3,8 +3,10 @@ desc = "A deformed mess of a roach that is covered in metallic outcrops and formations. It seems to have a production center on its thorax." icon_state = "naniteroach" - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk - meat_amount = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 25) turns_per_move = 1 maxHealth = 30 health = 30 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm index 32e6bb1c07a..cd88d0117e6 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm @@ -14,7 +14,7 @@ mob_size = MOB_SMALL * 0.8 // 8 - meat_amount = 1 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = 35) probability_egg_laying = 0 var/amount_grown = 0 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm index a82ef106a47..a268a605919 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm @@ -7,8 +7,9 @@ health = 20 melee_damage_lower = 2 melee_damage_upper = 4 - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche - meat_amount = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = 35) rarity_value = 11.25 var/datum/reagents/gas_sac //Stores gas. Can't use the default reagents since that is now bloodstream diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm index 7a657a1d468..593587347f9 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm @@ -2,14 +2,18 @@ name = "Panzer Roach" desc = "A monstrous, dog-sized cockroach. This one looks more robust than others." icon_state = "panzer" - meat_amount = 4 turns_per_move = 2 maxHealth = 45 health = 45 move_to_delay = 6 mob_size = MOB_SMALL * 1.5 // 15 density = TRUE - meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer + //beefy boy + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 45,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 25,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 25) rarity_value = 22.5 attacktext = list("slammed into", "pounded into", "crushed") diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm index 910f00d182f..41cb2f0ef04 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/toxic.dm @@ -3,7 +3,6 @@ desc = "A hulking beast of green, congealed waste. It has an enlarged salivatory gland for lobbing projectiles." icon_state = "radioactiveroach" - meat_amount = 3 turns_per_move = 1 maxHealth = 40 health = 40 diff --git a/code/modules/mob/living/carbon/superior_animal/stalker/stalker.dm b/code/modules/mob/living/carbon/superior_animal/stalker/stalker.dm index c9fbace5c83..ade29af9a2e 100644 --- a/code/modules/mob/living/carbon/superior_animal/stalker/stalker.dm +++ b/code/modules/mob/living/carbon/superior_animal/stalker/stalker.dm @@ -27,8 +27,7 @@ move_to_delay = 6 turns_per_move = 5 see_in_dark = 10 - meat_type = null - meat_amount = 0 + butcher_results = null stop_automated_movement_when_pulled = 0 melee_damage_lower = 12 diff --git a/code/modules/mob/living/carbon/superior_animal/superior_animal.dm b/code/modules/mob/living/carbon/superior_animal/superior_animal.dm index 5d1e0a3d4d1..fe36885dbbf 100644 --- a/code/modules/mob/living/carbon/superior_animal/superior_animal.dm +++ b/code/modules/mob/living/carbon/superior_animal/superior_animal.dm @@ -55,8 +55,9 @@ var/attack_sound_chance = 33 var/attack_sound_volume = 20 - var/meat_type = /obj/item/reagent_containers/food/snacks/meat/roachmeat - var/meat_amount = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat = 35,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat = 35) var/melee_damage_lower = 0 var/melee_damage_upper = 10 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 44c08bd8a7a..af3cf6e0e47 100755 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -951,3 +951,15 @@ default behaviour is: exp_list[mind.assigned_role] = minutes return exp_list + +///WIP: negative effect that may be triggered by butchering the mob, especially with low stats +/mob/living/proc/butchery_fail(mob/butcher) + return + //fuhrer will release a final scream, triggering nearby burrows + //benzins will explode + //kraftwerk will create a bunch of nanite swarms + //unbekannt blinks you randomly and creates a bunch of bluespace entropy + //the farty one (name forgot) will create a cloud + //other roaches get blattedin in your eyes/face...unless you're wearing face protection, in which case you're fine + //spiders will do the same but with their toxins + //non toxic animals will just temporarily blind you diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 05bcbe0b008..76175037e44 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -110,6 +110,15 @@ var/can_multiz_pb = FALSE var/is_watching = FALSE + /** + * possible drops from this mob when butchering. If set to null, butchery is disabled + * stored like [typepath] = [base chance of getting it](which should be expressed as a number) + * for multiple copies of a single item(such as 3 possible meat slices from 1 creature), add more instances to the list. + */ + var/list/butcher_results + ///Whether this animal has a chance for complications when butchered. Set up complications under the butchery_fail() proc + var/butcher_hazard = FALSE + spawn_frequency = 10 bad_type = /mob/living diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index ebcd5cabf5b..91a7f2a0cf8 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -9,7 +9,8 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - meat_type = /obj/item/reagent_containers/food/snacks/meat + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/cat = 35, + /obj/item/reagent_containers/food/snacks/meat/cat = 35) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index cc775134805..d4ff26b6c89 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -9,8 +9,9 @@ emote_see = list("shakes its head", "shivers") speak_chance = 1 turns_per_move = 10 - meat_type = /obj/item/reagent_containers/food/snacks/meat/corgi - meat_amount = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 35, \ + /obj/item/reagent_containers/food/snacks/meat/corgi = 35,\ + /obj/item/reagent_containers/food/snacks/meat/corgi = 35) response_help = "pets" response_disarm = "bops" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 9bce2f28068..1e9ba16e806 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -8,7 +8,8 @@ emote_see = list("clacks") speak_chance = 1 turns_per_move = 5 - meat_type = /obj/item/reagent_containers/food/snacks/meat/crab + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/crab = 35, \ + /obj/item/reagent_containers/food/snacks/meat/crab = 25) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 1dc85a3cd04..ca1573bb32b 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -8,8 +8,11 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - meat_type = /obj/item/reagent_containers/food/snacks/meat - meat_amount = 4 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 50, \ + /obj/item/reagent_containers/food/snacks/meat = 35,\ + /obj/item/reagent_containers/food/snacks/meat = 35,\ + /obj/item/reagent_containers/food/snacks/meat = 25,\ + /obj/item/reagent_containers/food/snacks/meat = 25) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -92,8 +95,13 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - meat_type = /obj/item/reagent_containers/food/snacks/meat - meat_amount = 6 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 50, \ + /obj/item/reagent_containers/food/snacks/meat = 50,\ + /obj/item/reagent_containers/food/snacks/meat = 35,\ + /obj/item/reagent_containers/food/snacks/meat = 35,\ + /obj/item/reagent_containers/food/snacks/meat = 35,\ + /obj/item/reagent_containers/food/snacks/meat = 25,\ + /obj/item/reagent_containers/food/snacks/meat = 25) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -151,8 +159,7 @@ emote_see = list("pecks at the ground","flaps its tiny wings","cheeps") speak_chance = 2 turns_per_move = 2 - meat_type = /obj/item/reagent_containers/food/snacks/meat - meat_amount = 1 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/chicken = 35) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -192,8 +199,11 @@ var/global/chicken_count = 0 emote_see = list("pecks at the ground","flaps its wings viciously") speak_chance = 2 turns_per_move = 3 - meat_type = /obj/item/reagent_containers/food/snacks/meat/chicken - meat_amount = 4 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/chicken = 35, \ + /obj/item/reagent_containers/food/snacks/meat/chicken = 35,\ + /obj/item/reagent_containers/food/snacks/meat/chicken = 35,\ + /obj/item/reagent_containers/food/snacks/meat/chicken = 25,\ + /obj/item/reagent_containers/food/snacks/meat/chicken = 25) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/iriska.dm b/code/modules/mob/living/simple_animal/friendly/iriska.dm index febeb0e1158..7a2d5849861 100644 --- a/code/modules/mob/living/simple_animal/friendly/iriska.dm +++ b/code/modules/mob/living/simple_animal/friendly/iriska.dm @@ -11,8 +11,12 @@ speak_emote = list("purrs.", "meows.") emote_see = list("shakes her head.", "shivers.") speak_chance = 0.75 - meat_amount = 6 - meat_type = /obj/item/reagent_containers/food/snacks/meat + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/cat/iriska = 50, \ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 50,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 50,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 35,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 35,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 25) response_help = "pets" response_disarm = "rubs" response_harm = "makes terrible mistake by kicking" diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 770da6cfdbf..77c1d2e2341 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -43,8 +43,7 @@ can_pull_size = ITEM_SIZE_TINY can_pull_mobs = MOB_PULL_NONE - meat_type = /obj/item/reagent_containers/food/snacks/meat - meat_amount = 1 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 35) can_burrow = TRUE diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm index c61c8fb7964..fe8d37808e2 100644 --- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm +++ b/code/modules/mob/living/simple_animal/friendly/mushroom.dm @@ -7,7 +7,8 @@ turns_per_move = 1 maxHealth = 5 health = 5 - meat_type = /obj/item/reagent_containers/food/snacks/hugemushroomslice + butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = 45, \ + /obj/item/reagent_containers/food/snacks/hugemushroomslice = 35) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "whacks" diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm index 303e0dc167f..87204bd2873 100644 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm @@ -8,11 +8,13 @@ turns_per_move = 5 maxHealth = 15 health = 15 - meat_type = /obj/item/reagent_containers/food/snacks/tomatomeat + butcher_results = list(/obj/item/reagent_containers/food/snacks/tomatomeat = 35, \ + /obj/item/reagent_containers/food/snacks/tomatomeat = 35,\ + /obj/item/reagent_containers/food/snacks/tomatomeat = 25) response_help = "prods" response_disarm = "pushes aside" response_harm = "smacks" harm_intent_damage = 5 melee_damage_upper = 15 melee_damage_lower = 10 - attacktext = "mauled" \ No newline at end of file + attacktext = "mauled" diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index db0a091bd86..37c74dfa4d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -10,7 +10,9 @@ response_disarm = "shoves" response_harm = "hits" speed = -1 - meat_type = /obj/item/reagent_containers/food/snacks/meat/xenomeat + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/xenomeat = 35, \ + /obj/item/reagent_containers/food/snacks/meat/xenomeat = 35,\ + /obj/item/reagent_containers/food/snacks/meat/xenomeat = 25) maxHealth = 100 health = 100 harm_intent_damage = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 56c941cc284..50d71d1beda 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -7,7 +7,7 @@ bubble_icon = "alien" speak_chance = 0 turns_per_move = 3 - meat_type = /obj/item/reagent_containers/food/snacks/meat + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 35) response_help = "pets the" response_disarm = "gently pushes aside the" response_harm = "hits the" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 1b2092d0cb2..a39a3b44f27 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -9,7 +9,10 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - meat_type = /obj/item/reagent_containers/food/snacks/meat/bearmeat + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/bearmeat = 35,\ + /obj/item/reagent_containers/food/snacks/meat/bearmeat = 35,\ + /obj/item/reagent_containers/food/snacks/meat/bearmeat = 25,\ + /obj/item/reagent_containers/food/snacks/meat/bearmeat = 25) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "pokes" diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 46d095e0674..c54dfaaa50f 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -5,7 +5,11 @@ icon_gib = "carp_gib" speak_chance = 0 turns_per_move = 5 - meat_type = /obj/item/reagent_containers/food/snacks/meat/carp + + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/carp = 35, \ + /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 25,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 25) response_help = "pets the" response_disarm = "gently pushes aside the" response_harm = "hits the" @@ -48,4 +52,4 @@ if(istype(L)) if(prob(15)) L.Weaken(3) - L.visible_message(span_danger("\the [src] knocks down \the [L]!")) \ No newline at end of file + L.visible_message(span_danger("\the [src] knocks down \the [L]!")) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 85e63fd8faf..53af3b71251 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -8,7 +8,6 @@ icon = 'icons/obj/crate.dmi' icon_state = "crate" - meat_type = /obj/item/reagent_containers/food/snacks/meat/carp response_help = "touches" response_disarm = "pushes" response_harm = "hits" diff --git a/code/modules/mob/living/simple_animal/hostile/pike.dm b/code/modules/mob/living/simple_animal/hostile/pike.dm index 27cb1dff15c..f36addbf11c 100644 --- a/code/modules/mob/living/simple_animal/hostile/pike.dm +++ b/code/modules/mob/living/simple_animal/hostile/pike.dm @@ -3,7 +3,15 @@ desc = "A bigger, angrier cousin of the space carp." icon = 'icons/mob/spaceshark.dmi' icon_state = "shark" - meat_amount = 10 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/carp = 50, \ + /obj/item/reagent_containers/food/snacks/meat/carp = 50,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 50,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 25,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 25,\ + /obj/item/reagent_containers/food/snacks/meat/carp = 25) turns_per_move = 2 move_to_delay = 2 speed = 0 @@ -18,4 +26,4 @@ melee_damage_lower = 20 melee_damage_upper = 25 - break_stuff_probability = 100 \ No newline at end of file + break_stuff_probability = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index e6c1a473ba7..ee2fcea7bbb 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -7,7 +7,6 @@ icon_gib = "pine_1" speak_chance = 0 turns_per_move = 5 - meat_type = /obj/item/reagent_containers/food/snacks/meat/carp response_help = "brushes" response_disarm = "pushes" response_harm = "hits" @@ -52,4 +51,4 @@ /mob/living/simple_animal/hostile/tree/death() ..(null,"is hacked into pieces!") new /obj/item/stack/material/wood(loc) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index dc545fa8ea2..64d876f238e 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -39,7 +39,7 @@ speak_chance = 1//1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s turns_per_move = 5 - meat_type = /obj/item/reagent_containers/food/snacks/cracker/ + butcher_results = list(/obj/item/reagent_containers/food/snacks/cracker = 10) response_help = "pets" response_disarm = "gently moves aside" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 2b660ccac35..99f44a3f788 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -28,8 +28,6 @@ var/turns_per_move = 1 var/turns_since_move = 0 universal_speak = 0 //No, just no. - var/meat_amount = 0 - var/meat_type var/stop_automated_movement = FALSE //Use this to temporarely stop random movement or to if you write special movement code for animals. var/wander = TRUE // Does the mob wander around when idle? var/stop_automated_movement_when_pulled = TRUE //When set to 1 this stops the animal from moving when someone is pulling it. @@ -435,10 +433,6 @@ else if(istype(O, /obj/item/reagent_containers) || istype(O, /obj/item/stack/medical)) ..() - else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. - if(QUALITY_CUTTING in O.tool_qualities) - if(O.use_tool(user, src, WORKTIME_NORMAL, QUALITY_CUTTING, FAILCHANCE_NORMAL, required_stat = STAT_BIO)) - harvest(user) else O.attack(src, user, user.targeted_organ) @@ -509,21 +503,6 @@ W.loc = get_turf(src) return 1 -// Harvest an animal's delicious byproducts -/mob/living/simple_animal/proc/harvest(mob/user) - var/actual_meat_amount = max(1,(meat_amount/2)) - if(meat_type && actual_meat_amount>0 && (stat == DEAD)) - for(var/i=0;i Date: Tue, 24 Feb 2026 01:39:01 -0500 Subject: [PATCH 2/5] minor spelling mistake, I win --- code/datums/components/butchering.dm | 4 +--- code/modules/mob/living/living_defines.dm | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 35ffc5d694f..c8819673e4f 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -16,8 +16,6 @@ RegisterSignal(parent, COMSIG_IATTACK, PROC_REF(onItemAttack)) RegisterSignal(parent, COMSIG_APPVAL, PROC_REF(onStatusChange)) -///datum/component/butchering/proc/onItemAttack(obj/item/source, mob/living/m, mob/living/user) -///datum/component/butchering/proc/onItemAttack(atom/A, mob/living/user, params) ///checks if we can butcher, and intercepts the attack chain if we successfully do so /datum/component/butchering/proc/onItemAttack(atom/target, mob/living/user, params) SIGNAL_HANDLER @@ -101,7 +99,7 @@ //try to invoke a hazard effect on the butcher if(meat.butchery_hazard && prob(hazard_chance)) - butcher.visible_message(span_danger("While cutting up \the [src], [user]'s hand slips..."), span_danger("While cutting up \the [src], your hand slips...")) + butcher.visible_message(span_danger("While cutting up \the [src], [butcher]'s hand slips..."), span_danger("While cutting up \the [src], your hand slips...")) meat.butchery_fail(butcher) //let's finish up. diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 76175037e44..6f203a988d2 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -117,7 +117,7 @@ */ var/list/butcher_results ///Whether this animal has a chance for complications when butchered. Set up complications under the butchery_fail() proc - var/butcher_hazard = FALSE + var/butchery_hazard = FALSE spawn_frequency = 10 bad_type = /mob/living From ea3bca69ef7c9afb37bc13660358bc5b35e5ed41 Mon Sep 17 00:00:00 2001 From: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> Date: Tue, 24 Feb 2026 01:44:48 -0500 Subject: [PATCH 3/5] ticked file enforcement --- cev_eris.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cev_eris.dme b/cev_eris.dme index 78fa0794e19..58c2aa81850 100644 --- a/cev_eris.dme +++ b/cev_eris.dme @@ -405,8 +405,8 @@ #include "code\datums\autolathe\security.dm" #include "code\datums\autolathe\tools.dm" #include "code\datums\changelog\changelog.dm" -#include "code\datums\components\butchering.dm" #include "code\datums\components\_component.dm" +#include "code\datums\components\butchering.dm" #include "code\datums\components\clothing_sanity_protection.dm" #include "code\datums\components\fabric.dm" #include "code\datums\components\jamming.dm" From 60a37e2aa290395889b77d48891fc986a5627e47 Mon Sep 17 00:00:00 2001 From: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> Date: Tue, 24 Feb 2026 06:03:21 -0500 Subject: [PATCH 4/5] defines for butchering + fixes --- code/__DEFINES/mobs.dm | 12 +++++++ code/datums/components/butchering.dm | 6 +++- .../items/weapons/tools/mods/_upgrades.dm | 2 +- .../giant_spider/giant_spider.dm | 6 ++-- .../giant_spider/types/hunter.dm | 8 ++--- .../giant_spider/types/nurse.dm | 6 ++-- .../carbon/superior_animal/roach/roach.dm | 4 +-- .../superior_animal/roach/types/bluespace.dm | 8 ++--- .../superior_animal/roach/types/fuhrer.dm | 12 +++---- .../superior_animal/roach/types/hunter.dm | 8 ++--- .../superior_animal/roach/types/kaiser.dm | 28 +++++++-------- .../superior_animal/roach/types/nanites.dm | 8 ++--- .../superior_animal/roach/types/roachling.dm | 2 +- .../superior_animal/roach/types/support.dm | 6 ++-- .../superior_animal/roach/types/tank.dm | 10 +++--- .../carbon/superior_animal/superior_animal.dm | 7 ++-- .../mob/living/simple_animal/friendly/cat.dm | 4 +-- .../living/simple_animal/friendly/corgi.dm | 6 ++-- .../mob/living/simple_animal/friendly/crab.dm | 4 +-- .../simple_animal/friendly/farm_animals.dm | 36 +++++++++---------- .../living/simple_animal/friendly/iriska.dm | 12 +++---- .../living/simple_animal/friendly/mouse.dm | 2 +- .../living/simple_animal/friendly/mushroom.dm | 4 +-- .../living/simple_animal/friendly/tomato.dm | 6 ++-- .../mob/living/simple_animal/hostile/alien.dm | 6 ++-- .../mob/living/simple_animal/hostile/bat.dm | 2 +- .../mob/living/simple_animal/hostile/bear.dm | 9 ++--- .../mob/living/simple_animal/hostile/carp.dm | 8 ++--- .../mob/living/simple_animal/hostile/pike.dm | 18 +++++----- .../mob/living/simple_animal/parrot.dm | 2 +- 30 files changed, 134 insertions(+), 118 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 8c1feb98bf9..b9ae737c2a0 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -255,3 +255,15 @@ GLOBAL_REAL_VAR(list/voice_type2sound = list( ///Managed global that is a reference to the real global GLOBAL_LIST_INIT(voice_type2sound_ref, voice_type2sound) + +//butchering defines +//defines for base success chance +#define BUTCHER_IMPOSSIBLE 5 +#define BUTCHER_VERY_HARD 10 +#define BUTCHER_HARD 25 +#define BUTCHER_CHALLENGING 35 +#define BUTCHER_DIFFICULT 45 +#define BUTCHER_NORMAL 55 +#define BUTCHER_EASY 65 +#define BUTCHER_VERY_EASY 80 +#define BUTCHER_EFFORTLESS 100//still technically possible to fail with terrible tool + 0 bio, so not 'zero' diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index c8819673e4f..e3a899e2df1 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -37,7 +37,10 @@ ///handles the use tool containing our butchering action. needed since signal_handler procs hate do afters /datum/component/butchering/proc/startButcher(obj/item/source, mob/living/meat, mob/living/user) to_chat(user, span_notice("You begin to butcher \the [meat]...")) - if(source.use_tool(user, meat, WORKTIME_NORMAL, QUALITY_CUTTING, FAILCHANCE_NORMAL, required_stat = STAT_BIO)) + var/needed_quality = QUALITY_CUTTING + if(!source.has_quality(QUALITY_CUTTING)) + needed_quality = null + if(source.use_tool(user, meat, WORKTIME_NORMAL, needed_quality, FAILCHANCE_NORMAL, required_stat = STAT_BIO)) on_butchering(user, meat, source) /** * Handles a user butchering a target @@ -45,6 +48,7 @@ * Arguments: * - [butcher][/mob/living]: The mob doing the butchering * - [meat][/mob/living]: The mob being butchered + * - [source][/obj/item]: The item holding our component, expressly typed */ /datum/component/butchering/proc/on_butchering(mob/living/butcher, mob/living/meat, obj/item/source) //our final items to spawn diff --git a/code/game/objects/items/weapons/tools/mods/_upgrades.dm b/code/game/objects/items/weapons/tools/mods/_upgrades.dm index dcaadd45fc1..e2d6fcd02e7 100644 --- a/code/game/objects/items/weapons/tools/mods/_upgrades.dm +++ b/code/game/objects/items/weapons/tools/mods/_upgrades.dm @@ -301,7 +301,7 @@ if(tool_upgrades[UPGRADE_SHARP]) T.sharp = tool_upgrades[UPGRADE_SHARP] if(!T.GetComponent(/datum/component/butchering)) - AddComponent(/datum/component/butchering, FALSE, FALSE) + T.AddComponent(/datum/component/butchering, FALSE, FALSE) if(tool_upgrades[UPGRADE_COLOR]) T.color = tool_upgrades[UPGRADE_COLOR] if(tool_upgrades[UPGRADE_ITEMFLAGPLUS]) diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm index 0b7729b0d4c..375e0fb16c6 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/giant_spider.dm @@ -24,9 +24,9 @@ move_to_delay = 5 turns_per_move = 5 see_in_dark = 10 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider = 35,\ - /obj/item/reagent_containers/food/snacks/meat/spider = 35,\ - /obj/item/reagent_containers/food/snacks/meat/spider = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/spider = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/spider = BUTCHER_DIFFICULT) stop_automated_movement_when_pulled = 0 melee_damage_lower = 12 diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm index 6ec310cdb0b..109730dc0b1 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/hunter.dm @@ -10,8 +10,8 @@ melee_damage_upper = 20 poison_per_bite = 8 move_to_delay = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35,\ - /obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35,\ - /obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35,\ - /obj/item/reagent_containers/food/snacks/meat/spider/hunter = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider/hunter = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/spider/hunter = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/spider/hunter = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/spider/hunter = BUTCHER_DIFFICULT) rarity_value = 75 diff --git a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm index 3a3a75e6e08..2da5ce5b262 100644 --- a/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm +++ b/code/modules/mob/living/carbon/superior_animal/giant_spider/types/nurse.dm @@ -16,9 +16,9 @@ poison_per_bite = 3 var/atom/cocoon_target poison_type = "aranecolmin" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider/nurse = 35,\ - /obj/item/reagent_containers/food/snacks/meat/spider/nurse = 35,\ - /obj/item/reagent_containers/food/snacks/meat/spider/nurse = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/spider/nurse = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/spider/nurse = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/spider/nurse = BUTCHER_DIFFICULT) move_to_delay = 4 rarity_value = 75 var/fed = 0 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/roach.dm b/code/modules/mob/living/carbon/superior_animal/roach/roach.dm index d7f3a829017..5d06fe727ec 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/roach.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/roach.dm @@ -13,8 +13,8 @@ turns_per_move = 4 turns_since_move = 0 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = 45,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = BUTCHER_NORMAL) maxHealth = 10 health = 10 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm index 052269c4de9..3a1c9f7d151 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/bluespace.dm @@ -4,10 +4,10 @@ icon_state = "bluespaceroach" maxHealth = 25 health = 25 - butcher_results = list(/obj/item/bluespace_crystal = 35,\ - /obj/item/bluespace_crystal = 15,\ - /obj/item/bluespace_crystal = 15,\ - /obj/item/bluespace_crystal = 15) + butcher_results = list(/obj/item/bluespace_crystal = BUTCHER_CHALLENGING,\ + /obj/item/bluespace_crystal = BUTCHER_HARD,\ + /obj/item/bluespace_crystal = BUTCHER_HARD,\ + /obj/item/bluespace_crystal = BUTCHER_HARD) melee_damage_lower = 4 melee_damage_upper = 11 armor_divisor = ARMOR_PEN_MAX // Hits through armor diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm index 147e9c769e1..20770c98e48 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/fuhrer.dm @@ -17,12 +17,12 @@ extra_burrow_chance = 100 blattedin_revives_left = 0 //He only lives once, cuz he's huge - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 45,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = BUTCHER_EASY,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/fuhrer = BUTCHER_DIFFICULT) sanity_damage = 1 rarity_value = 90 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm index 4b5056a4cfb..3dd51009bd6 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/hunter.dm @@ -16,10 +16,10 @@ attacktext = list("slashed", "rended", "diced") - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/jager = BUTCHER_DIFFICULT) rarity_value = 11.25 // Armor related variables - jager jacket diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm index 129fe1e3b0a..27ab63cf824 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/kaiser.dm @@ -33,20 +33,20 @@ Has ability of every roach. blattedin_revives_left = 0 //big enough to feed a whole clan of vagabonds - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 50,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_VERY_EASY,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_EASY,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_EASY,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_EASY,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kaiser = BUTCHER_DIFFICULT) sanity_damage = 3 ranged = 1 // RUN, COWARD! diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm index c390f6b987c..5c91301f8a0 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/nanites.dm @@ -3,10 +3,10 @@ desc = "A deformed mess of a roach that is covered in metallic outcrops and formations. It seems to have a production center on its thorax." icon_state = "naniteroach" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/kraftwerk = BUTCHER_DIFFICULT) turns_per_move = 1 maxHealth = 30 health = 30 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm index cd88d0117e6..adc3fc24c41 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/roachling.dm @@ -14,7 +14,7 @@ mob_size = MOB_SMALL * 0.8 // 8 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/kampfer = BUTCHER_EASY) probability_egg_laying = 0 var/amount_grown = 0 diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm index a268a605919..1293bbc5156 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/support.dm @@ -7,9 +7,9 @@ health = 20 melee_damage_lower = 2 melee_damage_upper = 4 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/seuche = BUTCHER_DIFFICULT) rarity_value = 11.25 var/datum/reagents/gas_sac //Stores gas. Can't use the default reagents since that is now bloodstream diff --git a/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm b/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm index 593587347f9..a6a96fbd765 100644 --- a/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm +++ b/code/modules/mob/living/carbon/superior_animal/roach/types/tank.dm @@ -9,11 +9,11 @@ mob_size = MOB_SMALL * 1.5 // 15 density = TRUE //beefy boy - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 45,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 25,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat/panzer = BUTCHER_DIFFICULT) rarity_value = 22.5 attacktext = list("slammed into", "pounded into", "crushed") diff --git a/code/modules/mob/living/carbon/superior_animal/superior_animal.dm b/code/modules/mob/living/carbon/superior_animal/superior_animal.dm index fe36885dbbf..9352a4190dd 100644 --- a/code/modules/mob/living/carbon/superior_animal/superior_animal.dm +++ b/code/modules/mob/living/carbon/superior_animal/superior_animal.dm @@ -13,6 +13,9 @@ // AI activation for players is handled in sanity , if it has sanity damage it activates AI. sanity_damage = 0.5 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/roachmeat = BUTCHER_DIFFICULT) var/icon_living var/icon_dead var/icon_rest //resting/unconscious animation @@ -55,10 +58,6 @@ var/attack_sound_chance = 33 var/attack_sound_volume = 20 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/roachmeat = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat = 35,\ - /obj/item/reagent_containers/food/snacks/meat/roachmeat = 35) - var/melee_damage_lower = 0 var/melee_damage_upper = 10 var/melee_sharp = FALSE //whether mob attacks have sharp property diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 91a7f2a0cf8..0f91d15d312 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -9,8 +9,8 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/cat = 35, - /obj/item/reagent_containers/food/snacks/meat/cat = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/cat = BUTCHER_NORMAL, + /obj/item/reagent_containers/food/snacks/meat/cat = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index d4ff26b6c89..8576a88580c 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -9,9 +9,9 @@ emote_see = list("shakes its head", "shivers") speak_chance = 1 turns_per_move = 10 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 35, \ - /obj/item/reagent_containers/food/snacks/meat/corgi = 35,\ - /obj/item/reagent_containers/food/snacks/meat/corgi = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = BUTCHER_NORMAL, \ + /obj/item/reagent_containers/food/snacks/meat/corgi = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/corgi = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "bops" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 1e9ba16e806..7c0908532e5 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -8,8 +8,8 @@ emote_see = list("clacks") speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/crab = 35, \ - /obj/item/reagent_containers/food/snacks/meat/crab = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/crab = BUTCHER_NORMAL, \ + /obj/item/reagent_containers/food/snacks/meat/crab = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index ca1573bb32b..975f16f479b 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -8,11 +8,11 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 50, \ - /obj/item/reagent_containers/food/snacks/meat = 35,\ - /obj/item/reagent_containers/food/snacks/meat = 35,\ - /obj/item/reagent_containers/food/snacks/meat = 25,\ - /obj/item/reagent_containers/food/snacks/meat = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = BUTCHER_EASY, \ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -95,13 +95,13 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 50, \ - /obj/item/reagent_containers/food/snacks/meat = 50,\ - /obj/item/reagent_containers/food/snacks/meat = 35,\ - /obj/item/reagent_containers/food/snacks/meat = 35,\ - /obj/item/reagent_containers/food/snacks/meat = 35,\ - /obj/item/reagent_containers/food/snacks/meat = 25,\ - /obj/item/reagent_containers/food/snacks/meat = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = BUTCHER_EASY, \ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_EASY,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -159,7 +159,7 @@ emote_see = list("pecks at the ground","flaps its tiny wings","cheeps") speak_chance = 2 turns_per_move = 2 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/chicken = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/chicken = BUTCHER_CHALLENGING) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -199,11 +199,11 @@ var/global/chicken_count = 0 emote_see = list("pecks at the ground","flaps its wings viciously") speak_chance = 2 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/chicken = 35, \ - /obj/item/reagent_containers/food/snacks/meat/chicken = 35,\ - /obj/item/reagent_containers/food/snacks/meat/chicken = 35,\ - /obj/item/reagent_containers/food/snacks/meat/chicken = 25,\ - /obj/item/reagent_containers/food/snacks/meat/chicken = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/chicken = BUTCHER_NORMAL, \ + /obj/item/reagent_containers/food/snacks/meat/chicken = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/chicken = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/chicken = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/chicken = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" diff --git a/code/modules/mob/living/simple_animal/friendly/iriska.dm b/code/modules/mob/living/simple_animal/friendly/iriska.dm index 7a2d5849861..b0c871df987 100644 --- a/code/modules/mob/living/simple_animal/friendly/iriska.dm +++ b/code/modules/mob/living/simple_animal/friendly/iriska.dm @@ -11,12 +11,12 @@ speak_emote = list("purrs.", "meows.") emote_see = list("shakes her head.", "shivers.") speak_chance = 0.75 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/cat/iriska = 50, \ - /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 50,\ - /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 50,\ - /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 35,\ - /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 35,\ - /obj/item/reagent_containers/food/snacks/meat/cat/iriska = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/cat/iriska = BUTCHER_EASY, \ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = BUTCHER_EASY,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/cat/iriska = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "rubs" response_harm = "makes terrible mistake by kicking" diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 77c1d2e2341..98b7a11e445 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -43,7 +43,7 @@ can_pull_size = ITEM_SIZE_TINY can_pull_mobs = MOB_PULL_NONE - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = BUTCHER_DIFFICULT) can_burrow = TRUE diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm index fe8d37808e2..c391237f79e 100644 --- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm +++ b/code/modules/mob/living/simple_animal/friendly/mushroom.dm @@ -7,8 +7,8 @@ turns_per_move = 1 maxHealth = 5 health = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = 45, \ - /obj/item/reagent_containers/food/snacks/hugemushroomslice = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = BUTCHER_NORMAL, \ + /obj/item/reagent_containers/food/snacks/hugemushroomslice = BUTCHER_NORMAL) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "whacks" diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm index 87204bd2873..eef6101c331 100644 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm @@ -8,9 +8,9 @@ turns_per_move = 5 maxHealth = 15 health = 15 - butcher_results = list(/obj/item/reagent_containers/food/snacks/tomatomeat = 35, \ - /obj/item/reagent_containers/food/snacks/tomatomeat = 35,\ - /obj/item/reagent_containers/food/snacks/tomatomeat = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/tomatomeat = BUTCHER_NORMAL, \ + /obj/item/reagent_containers/food/snacks/tomatomeat = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/tomatomeat = BUTCHER_DIFFICULT) response_help = "prods" response_disarm = "pushes aside" response_harm = "smacks" diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 37c74dfa4d8..e9048b9098f 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -10,9 +10,9 @@ response_disarm = "shoves" response_harm = "hits" speed = -1 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/xenomeat = 35, \ - /obj/item/reagent_containers/food/snacks/meat/xenomeat = 35,\ - /obj/item/reagent_containers/food/snacks/meat/xenomeat = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/xenomeat = BUTCHER_DIFFICULT, \ + /obj/item/reagent_containers/food/snacks/meat/xenomeat = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/xenomeat = BUTCHER_CHALLENGING) maxHealth = 100 health = 100 harm_intent_damage = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 50d71d1beda..7f8bd02eb4c 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -7,7 +7,7 @@ bubble_icon = "alien" speak_chance = 0 turns_per_move = 3 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 35) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = BUTCHER_DIFFICULT) response_help = "pets the" response_disarm = "gently pushes aside the" response_harm = "hits the" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index a39a3b44f27..332e8020a97 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -9,10 +9,11 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/bearmeat = 35,\ - /obj/item/reagent_containers/food/snacks/meat/bearmeat = 35,\ - /obj/item/reagent_containers/food/snacks/meat/bearmeat = 25,\ - /obj/item/reagent_containers/food/snacks/meat/bearmeat = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/bearmeat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/bearmeat = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/bearmeat = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/bearmeat = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/bearmeat = BUTCHER_DIFFICULT) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "pokes" diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index c54dfaaa50f..bf95a8e41fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -6,10 +6,10 @@ speak_chance = 0 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/carp = 35, \ - /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 25,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_DIFFICULT, \ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_CHALLENGING) response_help = "pets the" response_disarm = "gently pushes aside the" response_harm = "hits the" diff --git a/code/modules/mob/living/simple_animal/hostile/pike.dm b/code/modules/mob/living/simple_animal/hostile/pike.dm index f36addbf11c..6f3555038d7 100644 --- a/code/modules/mob/living/simple_animal/hostile/pike.dm +++ b/code/modules/mob/living/simple_animal/hostile/pike.dm @@ -3,15 +3,15 @@ desc = "A bigger, angrier cousin of the space carp." icon = 'icons/mob/spaceshark.dmi' icon_state = "shark" - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/carp = 50, \ - /obj/item/reagent_containers/food/snacks/meat/carp = 50,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 50,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 35,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 25,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 25,\ - /obj/item/reagent_containers/food/snacks/meat/carp = 25) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_EASY, \ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_NORMAL,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_DIFFICULT,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_CHALLENGING,\ + /obj/item/reagent_containers/food/snacks/meat/carp = BUTCHER_CHALLENGING) turns_per_move = 2 move_to_delay = 2 speed = 0 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 64d876f238e..24ea8fd68b7 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -39,7 +39,7 @@ speak_chance = 1//1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/cracker = 10) + butcher_results = list(/obj/item/reagent_containers/food/snacks/cracker = BUTCHER_VERY_HARD) response_help = "pets" response_disarm = "gently moves aside" From 8aed5940e7448e6e92ca101ee069e478d4f3068a Mon Sep 17 00:00:00 2001 From: Sun-Soaked <45698967+Sun-Soaked@users.noreply.github.com> Date: Tue, 24 Feb 2026 21:23:30 -0500 Subject: [PATCH 5/5] bio divisor define & club roles get bio --- code/__DEFINES/mobs.dm | 4 ++++ code/datums/components/butchering.dm | 4 ++-- code/game/jobs/job/civilian.dm | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index b9ae737c2a0..7a4fbbbb9e4 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -267,3 +267,7 @@ GLOBAL_LIST_INIT(voice_type2sound_ref, voice_type2sound) #define BUTCHER_EASY 65 #define BUTCHER_VERY_EASY 80 #define BUTCHER_EFFORTLESS 100//still technically possible to fail with terrible tool + 0 bio, so not 'zero' + +//divisor for BIO effect on butchering +//values of bio above this will improve butchering chances, values below will dmg it +#define BUTCHER_BIO_DIVISOR 28 diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index e3a899e2df1..caff342da39 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -68,7 +68,7 @@ meat.gib() //for getting the dialogue hinting at relative power - var/msgpowr = toolpowr * (max((bio / 35), 0.25)) + var/msgpowr = toolpowr * (max((bio / BUTCHER_BIO_DIVISOR), 0.25)) switch(msgpowr) if(0 to 0.8)//go get an actual knife you gross-ass roundstart vagabond butcher.visible_message(span_bolddanger("[butcher] can't get anywhere with this tool! Instead, they rip \the [meat] to shreds like an animal!")) @@ -86,7 +86,7 @@ //get the base percentage of awarding this result var/difficulty = meat.butcher_results[result] //takes difficulty and multiplies it by tool and bio stat to get final chance - var/trueprob = clamp((difficulty * toolpowr) * max((bio / 35), 0.25), 1, 100) + var/trueprob = clamp((difficulty * toolpowr) * max((bio / BUTCHER_BIO_DIVISOR), 0.25), 1, 100) if(prob(trueprob)) butchered += result else diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 6328690f2d8..128e8dedbcd 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -21,6 +21,7 @@ wage = WAGE_NONE // Makes his own money department_account_access = TRUE stat_modifiers = list( + STAT_BIO = 25, STAT_ROB = 15, STAT_TGH = 15, STAT_VIG = 15, @@ -59,6 +60,7 @@ wage = WAGE_NONE //They should get paid by the club owner, otherwise you know what to do. department_account_access = TRUE stat_modifiers = list( + STAT_BIO = 18, STAT_ROB = 10, STAT_TGH = 10, STAT_VIG = 5,