mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-28 10:31:59 +00:00
* Basic Mob Carp Part VIII: Basic Mob Carp * maps * missed killing main carp file * shorki and ocean biomes * shorki 2: pet-a-boogaloo Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: tastyfish <crazychris32@gmail.com>
71 lines
2.4 KiB
Plaintext
71 lines
2.4 KiB
Plaintext
/**
|
|
* ## basic eating element!
|
|
*
|
|
* Small behavior for non-carbons to eat certain stuff they interact with
|
|
*/
|
|
/datum/element/basic_eating
|
|
element_flags = ELEMENT_BESPOKE
|
|
argument_hash_start_idx = 2
|
|
/// Amount to heal
|
|
var/heal_amt
|
|
/// Amount to hurt
|
|
var/damage_amount
|
|
/// Type of hurt to apply
|
|
var/damage_type
|
|
/// Types the animal can eat.
|
|
var/list/food_types
|
|
|
|
/datum/element/basic_eating/Attach(datum/target, heal_amt = 0, damage_amount = 0, damage_type = null, food_types = list())
|
|
. = ..()
|
|
|
|
if(!isliving(target))
|
|
return ELEMENT_INCOMPATIBLE
|
|
|
|
src.heal_amt = heal_amt
|
|
src.damage_amount = damage_amount
|
|
src.damage_type = damage_type
|
|
src.food_types = food_types
|
|
|
|
//this lets players eat
|
|
RegisterSignal(target, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarm_attack))
|
|
//this lets ai eat. yes, i'm serious
|
|
RegisterSignal(target, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(on_pre_attackingtarget))
|
|
|
|
/datum/element/basic_eating/Detach(datum/target)
|
|
UnregisterSignal(target, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_HOSTILE_PRE_ATTACKINGTARGET))
|
|
return ..()
|
|
|
|
/datum/element/basic_eating/proc/on_unarm_attack(mob/living/eater, atom/target, proximity, modifiers)
|
|
SIGNAL_HANDLER
|
|
try_eating(eater, target)
|
|
|
|
/datum/element/basic_eating/proc/on_pre_attackingtarget(mob/living/eater, atom/target)
|
|
SIGNAL_HANDLER
|
|
try_eating(eater, target)
|
|
|
|
/datum/element/basic_eating/proc/try_eating(mob/living/eater, atom/target)
|
|
if(!is_type_in_list(target, food_types))
|
|
return
|
|
var/eat_verb = pick("bite","chew","nibble","gnaw","gobble","chomp")
|
|
|
|
if (heal_amt > 0)
|
|
var/healed = heal_amt && eater.health < eater.maxHealth
|
|
if(heal_amt)
|
|
eater.heal_overall_damage(heal_amt)
|
|
eater.visible_message(span_notice("[eater] [eat_verb]s [target]."), span_notice("You [eat_verb] [target][healed ? ", restoring some health" : ""]."))
|
|
finish_eating(eater, target)
|
|
return
|
|
|
|
if (damage_amount > 0 && damage_type)
|
|
eater.apply_damage(damage_amount, damage_type)
|
|
eater.visible_message(span_notice("[eater] [eat_verb]s [target], and seems to hurt itself."), span_notice("You [eat_verb] [target], hurting yourself in the process."))
|
|
finish_eating(eater, target)
|
|
return
|
|
|
|
eater.visible_message(span_notice("[eater] [eat_verb]s [target]."), span_notice("You [eat_verb] [target]."))
|
|
finish_eating(eater, target)
|
|
|
|
/datum/element/basic_eating/proc/finish_eating(mob/living/eater, atom/target)
|
|
playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE)
|
|
qdel(target)
|