mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-25 22:12:58 +01:00
Schlorrgo Powercreep (#19420)
Schlorrgo mob given various tweaks to increase resposiveness and QOL Eggs now process growth as intended (let me know if the way i did it wasn't the right way, far as I can tell eggs didnt process yet. Testing shows eggs in cartoons not growing even went removed.) - Look into Egg Wierdness (No longer doing since better to have that handled in own PR) - Make Schlorrgos roll down stairs (Stair PR reverted lol, maybe another time) - [x] Make Schlorrgos lay eggs (use ice tunnelers as baseline) - [x] Kill Commander Nated - [x] More Schlorrgo interactions? --------- Signed-off-by: Ben <91219575+Ben10083@users.noreply.github.com> Co-authored-by: Ben10083 <Ben10083@users.noreply.github.com>
This commit is contained in:
@@ -47,7 +47,10 @@
|
||||
if(!stat && prob(3) && eggsleft > 0 && (gender = FEMALE))
|
||||
visible_message("[src] lays an egg.")
|
||||
eggsleft--
|
||||
new /obj/item/reagent_containers/food/snacks/egg/ice_tunnelers(get_turf(src))
|
||||
var/obj/item/reagent_containers/food/snacks/egg/ice_tunnelers/egg = new /obj/item/reagent_containers/food/snacks/egg/ice_tunnelers(get_turf(src))
|
||||
egg.fertilize()
|
||||
egg.pixel_x = rand(-6,6)
|
||||
egg.pixel_y = rand(-6,6)
|
||||
|
||||
/mob/living/simple_animal/ice_tunneler/male
|
||||
icon_state = "tunneler_m"
|
||||
|
||||
@@ -279,6 +279,7 @@
|
||||
visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]")
|
||||
eggsleft--
|
||||
var/obj/item/reagent_containers/food/snacks/egg/E = new(get_turf(src))
|
||||
E.fertilize()
|
||||
E.pixel_x = rand(-6,6)
|
||||
E.pixel_y = rand(-6,6)
|
||||
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
icon_dead = "schlorrgo_dead"
|
||||
speak = list("Ough!")
|
||||
speak_emote = list("moans", "moans raucously")
|
||||
speak_chance = 1
|
||||
emote_hear = list("moans", "moans raucously")
|
||||
emote_see = list("rolls around")
|
||||
|
||||
emote_sounds = list('sound/effects/creatures/ough.ogg')
|
||||
|
||||
meat_amount = 1
|
||||
hunger_enabled = TRUE
|
||||
canbrush = TRUE
|
||||
|
||||
@@ -30,7 +30,9 @@
|
||||
milk_type = /singleton/reagent/drink/milk/schlorrgo
|
||||
|
||||
friendly = "bumped"
|
||||
response_help = "pets"
|
||||
|
||||
meat_amount = 1
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/meat/adhomai
|
||||
organ_names = list("head", "chest", "fatty core", "blubberous torso", "thick centre", "left leg", "right leg")
|
||||
butchering_products = list(/obj/item/reagent_containers/food/snacks/spreads/lard = 2)
|
||||
@@ -38,37 +40,73 @@
|
||||
holder_type = /obj/item/holder/schlorrgo
|
||||
|
||||
max_nutrition = 100
|
||||
|
||||
stomach_size_mult = 10
|
||||
|
||||
digest_factor = 0.6 // fast eater
|
||||
metabolic_factor = 0.3
|
||||
forbidden_foods = list(/obj/item/reagent_containers/food/snacks/egg/schlorrgo)
|
||||
|
||||
faction = "Hro'zamal"
|
||||
|
||||
var/starting_nutrition = 100
|
||||
/// When this threshold is reached, grow the Schlorrgo
|
||||
var/nutrition_threshold = 80
|
||||
|
||||
/// Current size of the Schlorrgo.
|
||||
var/current_size = BABY_SCHLORRGO
|
||||
|
||||
/// How many eggs the Schlorrgo is able to lay
|
||||
var/eggs_left = 0
|
||||
/// Bigger Schlorrgos can lay more eggs. Starts to increase after schlorrgo becomes fat. When set to 0, Schlorrgo will never lay eggs
|
||||
var/max_eggs = 0
|
||||
|
||||
/mob/living/simple_animal/schlorrgo/Initialize()
|
||||
. = ..()
|
||||
nutrition = starting_nutrition
|
||||
check_wideness_change()
|
||||
|
||||
/mob/living/simple_animal/schlorrgo/Life(seconds_per_tick, times_fired)
|
||||
. =..()
|
||||
if(!.)
|
||||
return
|
||||
if(!stat && prob(3) && eggs_left > 0) // Only fat schlorrgos lay eggs
|
||||
lay_egg()
|
||||
|
||||
/mob/living/simple_animal/schlorrgo/proc/lay_egg()
|
||||
if(!eggs_left)
|
||||
return FALSE
|
||||
// If colossal, high chance for egg to be crushed under weight.....
|
||||
if(current_size >= COLOSSAL_SCHLORRGO && prob(75))
|
||||
visible_message("[src] attempts to lift up high enough to lay an egg, but fails, crushing the egg!")
|
||||
audible_emote("cries out in agony!",0)
|
||||
make_noise()
|
||||
eggs_left--
|
||||
new /obj/effect/decal/cleanable/egg_smudge(get_turf(src))
|
||||
return
|
||||
visible_message("[src] lays an egg.")
|
||||
eggs_left--
|
||||
var/obj/item/reagent_containers/food/snacks/egg/schlorrgo/egg = new /obj/item/reagent_containers/food/snacks/egg/schlorrgo(get_turf(src))
|
||||
egg.fertilize()
|
||||
egg.pixel_x = rand(-6,6)
|
||||
egg.pixel_y = rand(-6,6)
|
||||
|
||||
/mob/living/simple_animal/schlorrgo/unarmed_harm_attack(mob/living/carbon/human/user)
|
||||
var/obj/item/organ/external/left_leg = user.get_organ(BP_L_LEG)
|
||||
var/obj/item/organ/external/right_leg = user.get_organ(BP_R_LEG)
|
||||
|
||||
if(left_leg?.is_usable() && right_leg?.is_usable())
|
||||
user.do_attack_animation(src)
|
||||
make_noise()
|
||||
audible_emote("[pick(emote_hear)].")
|
||||
if(current_size >= WIDE_SCHLORRGO)
|
||||
user.visible_message(SPAN_WARNING("[user] harmlessly kicks \the [src]!"))
|
||||
user.visible_message(SPAN_WARNING("[user] kicks \the [src], but it doesn't move an inch!"), SPAN_DANGER("Your kick is suddenly stopped by \the [src]'s sheer fat!"))
|
||||
var/obj/item/organ/external/leg = pick(right_leg, left_leg)
|
||||
if(leg)
|
||||
if(current_size >= COLOSSAL_SCHLORRGO) //break leg
|
||||
leg.fracture()
|
||||
leg.take_damage(10)
|
||||
leg.take_damage(5)
|
||||
else
|
||||
user.visible_message(SPAN_WARNING("[user] punts \the [src]!"))
|
||||
user.do_attack_animation(src)
|
||||
make_noise()
|
||||
throw_at(get_edge_target_turf(user, get_dir(user, src)), 4, 1)
|
||||
poke(TRUE)
|
||||
else
|
||||
@@ -77,15 +115,19 @@
|
||||
/mob/living/simple_animal/schlorrgo/turf_collision(var/turf/T, var/speed = THROWFORCE_SPEED_DIVISOR)
|
||||
visible_message(SPAN_WARNING("[src] harmlessly bounces off \the [T]!"))
|
||||
playsound(T, 'sound/effects/bangtaper.ogg', 50, 1, 1)
|
||||
make_noise()
|
||||
|
||||
/mob/living/simple_animal/schlorrgo/fall_impact()
|
||||
visible_message(SPAN_NOTICE("\The [src] bounces after landing!"))
|
||||
playsound(src, 'sound/effects/bangtaper.ogg', 50, 1, 1)
|
||||
audible_emote("[pick(emote_hear)].",0)
|
||||
make_noise()
|
||||
step(src, pick(GLOB.alldirs), 1)
|
||||
return FALSE
|
||||
|
||||
/mob/living/simple_animal/schlorrgo/process_food()
|
||||
..()
|
||||
if(prob(6) && eggs_left < max_eggs) // Change to add egg when fat
|
||||
eggs_left += 1 // only +1 since this can proc often
|
||||
check_wideness_change()
|
||||
|
||||
/mob/living/simple_animal/schlorrgo/proc/check_wideness_change()
|
||||
@@ -96,7 +138,8 @@
|
||||
switch(current_size)
|
||||
|
||||
if(EGG_SCHLORRGO)
|
||||
name = "schlorrgo hatchling"
|
||||
if(!named)
|
||||
name = "schlorrgo hatchling"
|
||||
desc = "A fat creature native to the world of Hro'zamal. This one just hatched from an egg."
|
||||
current_size = BABY_SCHLORRGO
|
||||
max_nutrition = 100
|
||||
@@ -112,7 +155,8 @@
|
||||
holder_type = /obj/item/holder/schlorrgo/baby
|
||||
|
||||
if(BABY_SCHLORRGO)
|
||||
name = "schlorrgo"
|
||||
if(!named)
|
||||
name = "schlorrgo"
|
||||
desc = "A fat creature native to the world of Hro'zamal."
|
||||
current_size = NORMAL_SCHLORRGO
|
||||
max_nutrition = 200
|
||||
@@ -128,7 +172,8 @@
|
||||
holder_type = /obj/item/holder/schlorrgo
|
||||
|
||||
if(NORMAL_SCHLORRGO)
|
||||
name = "fat schlorrgo"
|
||||
if(!named)
|
||||
name = "fat schlorrgo"
|
||||
desc = "A fat creature native to the world of Hro'zamal. This one is fatter than most schlorrgo."
|
||||
current_size = FAT_SCHLORRGO
|
||||
max_nutrition = 400
|
||||
@@ -142,9 +187,11 @@
|
||||
icon_living = "schlorrgo_fat"
|
||||
icon_dead = "schlorrgo_fat_dead"
|
||||
holder_type = /obj/item/holder/schlorrgo/fat
|
||||
max_eggs = 3
|
||||
|
||||
if(FAT_SCHLORRGO)
|
||||
name = "massive schlorrgo"
|
||||
if(!named)
|
||||
name = "massive schlorrgo"
|
||||
desc = "A fat creature native to the world of Hro'zamal. This one is so big it can barely walk."
|
||||
current_size = WIDE_SCHLORRGO
|
||||
max_nutrition = 1000
|
||||
@@ -157,19 +204,22 @@
|
||||
icon_state = "schlorrgo_wide"
|
||||
icon_living = "schlorrgo_wide"
|
||||
icon_dead = "schlorrgo_wide_dead"
|
||||
response_help = "rubs [name]'s belly"
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "crushed"
|
||||
environment_smash = 1
|
||||
resistance = 2
|
||||
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
|
||||
mob_push_flags = ALLMOBS
|
||||
mob_swap_flags = HUMAN|ROBOT
|
||||
mob_push_flags = HUMAN|ROBOT
|
||||
a_intent = I_HURT
|
||||
emote_sounds = list('sound/effects/creatures/schlorrgo_scream.ogg')
|
||||
holder_type = null
|
||||
max_eggs = 6
|
||||
|
||||
if(WIDE_SCHLORRGO)
|
||||
name = "colossal schlorrgo"
|
||||
if(!named)
|
||||
name = "colossal schlorrgo"
|
||||
desc = "A fat creature native to the world of Hro'zamal. This one has been immobilized by its massive weight."
|
||||
current_size = COLOSSAL_SCHLORRGO
|
||||
max_nutrition = 1500
|
||||
@@ -182,6 +232,8 @@
|
||||
icon_state = "schlorrgo_colossal"
|
||||
icon_living = "schlorrgo_colossal"
|
||||
icon_dead = "schlorrgo_colossal_dead"
|
||||
response_help = "rubs a part of the [name]'s fat mass"
|
||||
emote_see = list("attempts to roll")
|
||||
pixel_x = -8
|
||||
anchored = TRUE
|
||||
opacity = TRUE
|
||||
@@ -189,11 +241,14 @@
|
||||
melee_damage_upper = 25
|
||||
environment_smash = 2
|
||||
resistance = 3
|
||||
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
|
||||
mob_push_flags = ALLMOBS
|
||||
mob_bump_flag = HEAVY // Oh lord he comin
|
||||
mob_swap_flags = HEAVY
|
||||
mob_push_flags = HEAVY
|
||||
can_be_buckled = FALSE
|
||||
a_intent = I_HURT
|
||||
emote_sounds = list('sound/effects/creatures/schlorrgo_scream.ogg')
|
||||
holder_type = null
|
||||
max_eggs = 9
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -278,7 +333,7 @@
|
||||
emote_hear = list("beeps", "beeps maliciously")
|
||||
emote_sounds = list('sound/effects/creatures/evil_cybeough.ogg')
|
||||
|
||||
faction = "Hro'zamal"
|
||||
faction = "PRA" // Evil PRA Machine
|
||||
|
||||
maxHealth = 80
|
||||
health = 80
|
||||
|
||||
@@ -14,50 +14,69 @@
|
||||
mob_swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
mob_push_flags = MONKEY|SLIME|SIMPLE_ANIMAL
|
||||
|
||||
/// The type of damage this mob deals.
|
||||
/// The type of damage this mob deals
|
||||
var/damage_type = DAMAGE_BRUTE
|
||||
|
||||
var/show_stat_health = 1 //does the percentage health show in the stat panel for the mob
|
||||
/// Does the percentage health show in the stat panel for the mob
|
||||
var/show_stat_health = 1
|
||||
var/in_stasis = FALSE
|
||||
|
||||
var/icon_living = ""
|
||||
var/icon_dead = ""
|
||||
var/icon_gib = null //We only try to show a gibbing animation if this exists.
|
||||
/// We only try to show a gibbing animation if this exists
|
||||
var/icon_gib = null
|
||||
|
||||
appearance_flags = KEEP_TOGETHER
|
||||
var/blood_type = COLOR_HUMAN_BLOOD //Blood colour for impact visuals.
|
||||
|
||||
/// Blood colour for impact visuals
|
||||
var/blood_type = COLOR_HUMAN_BLOOD
|
||||
var/blood_overlay_icon = 'icons/mob/npc/blood_overlay.dmi'
|
||||
var/blood_state = BLOOD_NONE
|
||||
var/image/blood_overlay
|
||||
|
||||
/// If the animal is bleeding.
|
||||
var/bleeding = FALSE
|
||||
var/blood_amount = 20 // set a limit to the amount of blood it can bleed, otherwise it will keep bleeding forever and crunk the server
|
||||
var/previous_bleed_timer = 0 // they only bleed for as many seconds as force damage was applied to them
|
||||
var/blood_timer_mod = 0.25 // tweak to change the amount of seconds a mob will bleed
|
||||
/// Set a limit to the amount of blood it can bleed, otherwise it will keep bleeding forever and crunk the server
|
||||
var/blood_amount = 20
|
||||
/// They only bleed for as many seconds as force damage was applied to them
|
||||
var/previous_bleed_timer = 0
|
||||
/// Tweak to change the amount of seconds a mob will bleed
|
||||
var/blood_timer_mod = 0.25
|
||||
|
||||
/// What language a animal would speak by default. Try not to think about it too hard
|
||||
var/simple_default_language = LANGUAGE_TCB
|
||||
universal_speak = TRUE // since most mobs verbalize sounds, this is the better option, just set this to false on mobs that don't make noise
|
||||
|
||||
var/list/speak = list()
|
||||
var/speak_chance = 0
|
||||
var/list/emote_hear = list() //Hearable emotes
|
||||
var/list/emote_see = list() //Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps
|
||||
/// Hearable emotes
|
||||
var/list/emote_hear = list()
|
||||
/// Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps
|
||||
var/list/emote_see = list()
|
||||
|
||||
///A list of sounds that this animal will randomly play, lazy list
|
||||
/// A list of sounds that this animal will randomly play, lazy list
|
||||
var/list/emote_sounds
|
||||
var/sound_time = TRUE
|
||||
|
||||
var/turns_per_move = 1
|
||||
var/turns_since_move = 0
|
||||
universal_speak = 0 //No, just no.
|
||||
/// How much meat is provided when butchering
|
||||
var/meat_amount = 0
|
||||
/// What kind of meat is provided. Do not set this to non meats, use butchering_products instead
|
||||
var/meat_type
|
||||
var/stop_thinking = FALSE // prevents them from doing any AI stuff whatsoever
|
||||
var/stop_automated_movement = 0 //Use this to temporarely stop random movement or to if you write special movement code for animals.
|
||||
var/wander = 1 // Does the mob wander around when idle?
|
||||
var/wanders_diagonally = FALSE // does the mob move diagonally when wandering?
|
||||
var/stop_automated_movement_when_pulled = 1 //When set to 1 this stops the animal from moving when someone is pulling it.
|
||||
var/atom/movement_target = null//Thing we're moving towards
|
||||
/// Prevents them from doing any AI stuff whatsoever
|
||||
var/stop_thinking = FALSE
|
||||
/// Use this to temporarely stop random movement or to if you write special movement code for animals
|
||||
var/stop_automated_movement = FALSE
|
||||
/// Does the mob wander around when idle?
|
||||
var/wander = TRUE
|
||||
/// does the mob move diagonally when wandering?
|
||||
var/wanders_diagonally = FALSE
|
||||
/// When set to TRUE this stops the animal from moving when someone is pulling it
|
||||
var/stop_automated_movement_when_pulled = TRUE
|
||||
/// Thing we're moving towards
|
||||
var/atom/movement_target = null
|
||||
var/turns_since_scan = 0
|
||||
|
||||
//Interaction
|
||||
@@ -65,18 +84,22 @@
|
||||
var/response_help = "tries to help"
|
||||
var/response_disarm = "tries to disarm"
|
||||
var/response_harm = "hurts"
|
||||
var/harm_intent_damage = 3 //The maximum amount of damage this mob can take from simple unarmed attacks that don't have damage values, like punches
|
||||
/// The maximum amount of damage this mob can take from simple unarmed attacks that don't have damage values, like punches
|
||||
var/harm_intent_damage = 3
|
||||
|
||||
//Temperature effect
|
||||
var/minbodytemp = 250
|
||||
var/maxbodytemp = 350
|
||||
var/heat_damage_per_tick = 3 //amount of damage applied if animal's body temperature is higher than maxbodytemp
|
||||
var/cold_damage_per_tick = 2 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
|
||||
/// Amount of damage applied if animal's body temperature is higher than maxbodytemp
|
||||
var/heat_damage_per_tick = 3
|
||||
/// Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
|
||||
var/cold_damage_per_tick = 2
|
||||
var/fire_alert = 0
|
||||
|
||||
//Atmos effect - Yes, you can make creatures that require phoron or co2 to survive. N2O is a trace gas and handled separately, hence why it isn't here. It'd be hard to add it. Hard and me don't mix (Yes, yes make all the dick jokes you want with that.) - Errorage
|
||||
//Leaving something at 0 means it's off - has no maximum
|
||||
var/min_oxy = 5
|
||||
var/max_oxy = 0 //Leaving something at 0 means it's off - has no maximum
|
||||
var/max_oxy = 0
|
||||
var/min_tox = 0
|
||||
var/max_tox = 1
|
||||
var/min_co2 = 0
|
||||
@@ -85,8 +108,10 @@
|
||||
var/max_n2 = 0
|
||||
var/min_h2 = 0
|
||||
var/max_h2 = 5
|
||||
var/unsuitable_atoms_damage = 2 //This damage is taken when atmos doesn't fit all the requirements above
|
||||
var/speed = 0 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
|
||||
/// This damage is taken when atmos doesn't fit all the requirements above
|
||||
var/unsuitable_atoms_damage = 2
|
||||
/// Higher speed is slower, negative speed is faster
|
||||
var/speed = 0 // LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING!!!
|
||||
|
||||
//LETTING SIMPLE ANIMALS ATTACK? WHAT COULD GO WRONG. Defaults to zero so Ian can still be cuddly
|
||||
var/melee_damage_lower = 0
|
||||
@@ -97,8 +122,10 @@
|
||||
var/attack_sound = /singleton/sound_category/swing_hit_sound
|
||||
var/friendly = "nuzzles"
|
||||
var/environment_smash = 0
|
||||
var/resistance = 0 // Damage reduction
|
||||
var/resist_mod = 1 // a multiplier for the chance the animal has to break out
|
||||
/// Damage reduction
|
||||
var/resistance = 0
|
||||
/// A multiplier for the chance the animal has to break out
|
||||
var/resist_mod = 1
|
||||
|
||||
//Null rod stuff
|
||||
var/supernatural = 0
|
||||
@@ -106,38 +133,51 @@
|
||||
|
||||
|
||||
//Hunger/feeding vars
|
||||
var/hunger_enabled = 1//If set to 0, a creature ignores hunger
|
||||
/// If set to FALSE, creature ignores hunger
|
||||
var/hunger_enabled = TRUE
|
||||
max_nutrition = 50
|
||||
var/metabolic_factor = 1//A multiplier on how fast nutrition is lost. used to tweak the rates on a per-animal basis
|
||||
var/nutrition_step = 0.2 //nutrition lost per tick and per step, calculated from mob_size, 0.2 is a fallback
|
||||
/// A multiplier on how fast nutrition is lost. used to tweak the rates on a per-animal basis
|
||||
var/metabolic_factor = 1
|
||||
/// Nutrition lost per tick and per step, calculated from mob_size, 0.2 is a fallback
|
||||
var/nutrition_step = 0.2
|
||||
var/bite_factor = 0.4
|
||||
var/digest_factor = 0.2 //A multiplier on how quickly reagents are digested
|
||||
/// A multiplier on how quickly reagents are digested
|
||||
var/digest_factor = 0.2
|
||||
var/stomach_size_mult = 5
|
||||
var/list/forbidden_foods = list() //Foods this animal should never eat
|
||||
/// Foods this animal should never eat
|
||||
var/list/forbidden_foods = list()
|
||||
|
||||
//Seeking/Moving behaviour vars
|
||||
var/min_scan_interval = 1//Minimum and maximum number of procs between a scan
|
||||
var/min_scan_interval = 1
|
||||
var/max_scan_interval = 15
|
||||
var/scan_interval = 5//current scan interval, clamped between min and max
|
||||
//It gradually increases up to max when its left alone, to save performance
|
||||
/// current scan interval, clamped between min and max.
|
||||
/// It gradually increases up to max when its left alone, to save performance
|
||||
var/scan_interval = 5
|
||||
|
||||
var/seek_speed = 2//How many tiles per second the animal will move towards something
|
||||
/// How many tiles per second the animal will move towards something
|
||||
var/seek_speed = 2
|
||||
var/seek_move_delay
|
||||
var/scan_range = 6//How far around the animal will look for something
|
||||
/// How far around the animal will look for something
|
||||
var/scan_range = 6
|
||||
|
||||
var/kitchen_tag = "animal" //Used for cooking with animals
|
||||
/// Used for cooking with animals
|
||||
var/kitchen_tag = "animal"
|
||||
|
||||
//brushing
|
||||
var/canbrush = FALSE //can we brush this beautiful creature?
|
||||
var/brush = /obj/item/haircomb //What can we brush it with? Use a rag for things with scales/carapaces/etc
|
||||
/// Can we brush this beautiful creature?
|
||||
var/canbrush = FALSE
|
||||
/// What can we brush it with? Use a rag for things with scales/carapaces/etc
|
||||
var/brush = /obj/item/haircomb
|
||||
|
||||
//Napping
|
||||
var/can_nap = 0
|
||||
var/icon_rest = null
|
||||
|
||||
var/tameable = TRUE //if you can tame it, used by the dociler for now
|
||||
/// If you can tame it, used by the dociler for now
|
||||
var/tameable = TRUE
|
||||
|
||||
var/flying = FALSE //if they can fly, which stops them from falling down and allows z-space travel
|
||||
/// If they can fly, which stops them from falling down and allows z-space travel
|
||||
var/flying = FALSE
|
||||
|
||||
/// Whether this animal can be milked or not.
|
||||
var/can_be_milked = FALSE
|
||||
@@ -151,18 +191,21 @@
|
||||
/// What the animal's milking product is.
|
||||
var/milk_type = /singleton/reagent/drink/milk
|
||||
|
||||
var/list/butchering_products //if anything else is created when butchering this creature, like bones and leather
|
||||
/// If anything else is created when butchering this creature, like bones and leather
|
||||
var/list/butchering_products
|
||||
|
||||
var/psi_pingable = TRUE
|
||||
|
||||
var/armor_type = /datum/component/armor
|
||||
var/list/natural_armor //what armor animal has
|
||||
/// What armor animal has
|
||||
var/list/natural_armor
|
||||
|
||||
//for simple animals that reflect damage when attacked in melee
|
||||
var/return_damage_min
|
||||
var/return_damage_max
|
||||
|
||||
var/dead_on_map = FALSE //if true, kills the mob when it spawns (it is for mapping)
|
||||
/// If true, kills the mob when it spawns (it is for mapping)
|
||||
var/dead_on_map = FALSE
|
||||
var/vehicle_version = null
|
||||
|
||||
/**
|
||||
@@ -440,9 +483,9 @@
|
||||
if(food_choices.len) //Only when sufficiently hungry
|
||||
UnarmedAttack(pick(food_choices))
|
||||
|
||||
//Simple reagent processing for simple animals
|
||||
//This allows animals to digest food, and only food
|
||||
//Most drugs, poisons etc, are designed to work on carbons and affect many values a simple animal doesnt have
|
||||
/// Simple reagent processing for simple animals
|
||||
/// This allows animals to digest food, and only food
|
||||
/// Most drugs, poisons etc, are designed to work on carbons and affect many values a simple animal doesnt have
|
||||
/mob/living/simple_animal/proc/process_food()
|
||||
if (hunger_enabled)
|
||||
if (nutrition)
|
||||
@@ -489,7 +532,7 @@
|
||||
if(act)
|
||||
..(act, type, desc)
|
||||
|
||||
//This is called when an animal 'speaks'. It does nothing here, but descendants should override it to add audio
|
||||
/// This is called when an animal 'speaks'. It does nothing here, but descendants should override it to add audio
|
||||
/mob/living/simple_animal/proc/speak_audio()
|
||||
if(LAZYLEN(emote_sounds))
|
||||
make_noise(TRUE)
|
||||
@@ -813,7 +856,7 @@
|
||||
named = TRUE
|
||||
do_nickname(M) //This is for commanded mobs who can have a short name, like guard dogs
|
||||
|
||||
//This is for commanded mobs who can have a short name, like guard dogs. Does nothing for other mobs for now
|
||||
/// This is for commanded mobs who can have a short name, like guard dogs. Does nothing for other mobs for now
|
||||
/mob/living/simple_animal/proc/do_nickname(var/mob/living/M)
|
||||
|
||||
|
||||
@@ -843,7 +886,7 @@
|
||||
item_to_equip.forceMove(get_turf(src))
|
||||
return FALSE
|
||||
|
||||
// Harvest an animal's delicious byproducts
|
||||
/// Harvest an animal's delicious byproducts
|
||||
/mob/living/simple_animal/proc/harvest(var/mob/user)
|
||||
var/actual_meat_amount = max(1,(meat_amount*0.75))
|
||||
if(meat_type && actual_meat_amount>0 && (stat == DEAD))
|
||||
@@ -866,7 +909,7 @@
|
||||
user.visible_message("<b>\The [user]</b> butchers \the [src] messily!")
|
||||
gib()
|
||||
|
||||
//For picking up small animals
|
||||
/// For picking up small animals
|
||||
/mob/living/simple_animal/MouseDrop(atom/over_object)
|
||||
if (holder_type)//we need a defined holder type in order for picking up to work
|
||||
var/mob/living/carbon/H = over_object
|
||||
@@ -879,14 +922,14 @@
|
||||
|
||||
|
||||
//I wanted to call this proc alert but it already exists.
|
||||
//Basically makes the mob pay attention to the world, resets sleep timers, awakens it from a sleeping state sometimes
|
||||
/// Basically makes the mob pay attention to the world, resets sleep timers, awakens it from a sleeping state sometimes
|
||||
/mob/living/simple_animal/proc/poke(var/force_wake = 0)
|
||||
if (stat != DEAD)
|
||||
scan_interval = min_scan_interval
|
||||
if (force_wake || (!client && prob(30)))
|
||||
wake_up()
|
||||
|
||||
//Puts the mob to sleep
|
||||
/// Puts the mob to sleep
|
||||
/mob/living/simple_animal/proc/fall_asleep()
|
||||
if (stat != DEAD)
|
||||
resting = 1
|
||||
@@ -897,7 +940,7 @@
|
||||
movement_target = null
|
||||
update_icon()
|
||||
|
||||
//Wakes the mob up from sleeping
|
||||
/// Wakes the mob up from sleeping
|
||||
/mob/living/simple_animal/proc/wake_up()
|
||||
if (stat != DEAD)
|
||||
set_stat(CONSCIOUS)
|
||||
|
||||
Reference in New Issue
Block a user