diff --git a/aurorastation.dme b/aurorastation.dme index 35a9deab0ed..16fd217ed76 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -2275,6 +2275,7 @@ #include "code\modules\mob\living\simple_animal\friendly\mushroom.dm" #include "code\modules\mob\living\simple_animal\friendly\rat.dm" #include "code\modules\mob\living\simple_animal\friendly\ratking.dm" +#include "code\modules\mob\living\simple_animal\friendly\schlorrgo.dm" #include "code\modules\mob\living\simple_animal\friendly\slime.dm" #include "code\modules\mob\living\simple_animal\friendly\spiderbot.dm" #include "code\modules\mob\living\simple_animal\friendly\tomato.dm" diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index f6c9ac57b2b..b4116c2928a 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -663,7 +663,19 @@ var/list/holder_mob_icon_cache = list() /obj/item/holder/schlorrgo name = "schlorrgo" - icon = 'icons/mob/npc/livestock.dmi' + icon = 'icons/mob/npc/schlorrgo.dmi' icon_state = "schlorgo" item_state = "schlorgo" w_class = ITEMSIZE_NORMAL + +/obj/item/holder/schlorrgo/baby + name = "schlorrgo hatchling" + icon_state = "schlorrgo_baby" + item_state = "schlorrgo_baby" + w_class = ITEMSIZE_SMALL + +/obj/item/holder/schlorrgo/fat + name = "fat schlorrgo" + icon_state = "schlorrgo_fat" + item_state = "schlorrgo_fat" + w_class = ITEMSIZE_LARGE \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/adhomai.dm b/code/modules/mob/living/simple_animal/friendly/adhomai.dm index dcda3e9e717..fdf4da33ee0 100644 --- a/code/modules/mob/living/simple_animal/friendly/adhomai.dm +++ b/code/modules/mob/living/simple_animal/friendly/adhomai.dm @@ -97,63 +97,10 @@ melee_damage_lower = 15 melee_damage_upper = 15 - attacktext = "bitten" + attacktext = "gored" attack_sound = 'sound/weapons/bite.ogg' hostile_nameable = TRUE butchering_products = list(/obj/item/stack/material/animalhide = 5) meat_amount = 8 - -/mob/living/simple_animal/schlorrgo - name = "schlorrgo" - desc = "A fat creature native to the world of Hro'zamal." - icon = 'icons/mob/npc/livestock.dmi' - icon_state = "schlorgo" - icon_living = "schlorgo" - icon_dead = "schlorgo_dead" - speak = list("Ough!") - speak_emote = list("moans", "moans raucously") - emote_hear = list("moans", "moans raucously") - emote_see = list("rolls around") - - emote_sounds = list('sound/effects/creatures/ough.ogg') - - meat_amount = 3 - hunger_enabled = TRUE - canbrush = TRUE - - maxHealth = 50 - health = 50 - - has_udder = TRUE - milk_type = /decl/reagent/drink/milk/schlorrgo - - 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 = 5) - - holder_type = /obj/item/holder/schlorrgo - -/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.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 - ..() - -/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!")) - step(src, pick(alldirs), 1) - return FALSE 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 4f4439355e0..95853540301 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -285,20 +285,6 @@ if(chicken_count < MAX_CHICKENS && prob(10)) START_PROCESSING(SSprocessing, E) -/obj/item/reagent_containers/food/snacks/egg - var/amount_grown = 0 - -/obj/item/reagent_containers/food/snacks/egg/process() - if(isturf(loc)) - amount_grown += rand(1,2) - if(amount_grown >= 100) - visible_message("[src] hatches with a quiet cracking sound.") - new /mob/living/simple_animal/chick(get_turf(src)) - STOP_PROCESSING(SSprocessing, src) - qdel(src) - else - STOP_PROCESSING(SSprocessing, src) - // Penguins /mob/living/simple_animal/penguin diff --git a/code/modules/mob/living/simple_animal/friendly/schlorrgo.dm b/code/modules/mob/living/simple_animal/friendly/schlorrgo.dm new file mode 100644 index 00000000000..ab59782270c --- /dev/null +++ b/code/modules/mob/living/simple_animal/friendly/schlorrgo.dm @@ -0,0 +1,216 @@ +#define EGG_SCHLORRGO 0 +#define BABY_SCHLORRGO 1 +#define NORMAL_SCHLORRGO 2 +#define FAT_SCHLORRGO 3 +#define WIDE_SCHLORRGO 4 +#define COLOSSAL_SCHLORRGO 5 + +/mob/living/simple_animal/schlorrgo + name = "schlorrgo" + desc = "A fat creature native to the world of Hro'zamal." + icon = 'icons/mob/npc/schlorrgo.dmi' + icon_state = "schlorrgo" + icon_living = "schlorrgo" + icon_dead = "schlorrgo_dead" + speak = list("Ough!") + speak_emote = list("moans", "moans raucously") + 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 + + maxHealth = 30 + health = 30 + + has_udder = TRUE + milk_type = /decl/reagent/drink/milk/schlorrgo + + friendly = "bumped" + + 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) + + holder_type = /obj/item/holder/schlorrgo + + max_nutrition = 100 + + stomach_size_mult = 10 + + metabolic_factor = 0.3 + + var/starting_nutrition = 100 + var/nutrition_threshold = 80 + + var/current_size = BABY_SCHLORRGO + +/mob/living/simple_animal/schlorrgo/Initialize() + . = ..() + nutrition = starting_nutrition + check_wideness_change() + +/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()) + if(current_size >= WIDE_SCHLORRGO) + user.visible_message(SPAN_WARNING("[user] harmlessly kicks \the [src]!")) + var/obj/item/organ/external/leg = pick(right_leg, left_leg) + if(leg) + 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 + ..() + +/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!")) + step(src, pick(alldirs), 1) + return FALSE + +/mob/living/simple_animal/schlorrgo/process_food() + ..() + check_wideness_change() + +/mob/living/simple_animal/schlorrgo/proc/check_wideness_change() + if(nutrition >= nutrition_threshold) + increase_wideness() + +/mob/living/simple_animal/schlorrgo/proc/increase_wideness() + switch(current_size) + + if(EGG_SCHLORRGO) + 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 + nutrition_threshold = 80 + maxHealth = 30 + health = 30 + mob_size = MOB_TINY + meat_amount = 1 + butchering_products = list(/obj/item/reagent_containers/food/snacks/spreads/lard = 2) + icon_state = "schlorrgo_baby" + icon_living = "schlorrgo_baby" + icon_dead = "schlorrgo_baby_dead" + holder_type = /obj/item/holder/schlorrgo/baby + + if(BABY_SCHLORRGO) + name = "schlorrgo" + desc = "A fat creature native to the world of Hro'zamal." + current_size = NORMAL_SCHLORRGO + max_nutrition = 200 + nutrition_threshold = 150 + maxHealth = 50 + health = 50 + mob_size = MOB_SMALL + meat_amount = 3 + butchering_products = list(/obj/item/reagent_containers/food/snacks/spreads/lard = 5) + icon_state = "schlorrgo" + icon_living = "schlorrgo" + icon_dead = "schlorrgo_dead" + holder_type = /obj/item/holder/schlorrgo + + if(NORMAL_SCHLORRGO) + 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 + nutrition_threshold = 300 + maxHealth = 100 + health = 100 + mob_size = MOB_MEDIUM + meat_amount = 6 + butchering_products = list(/obj/item/reagent_containers/food/snacks/spreads/lard = 8) + icon_state = "schlorrgo_fat" + icon_living = "schlorrgo_fat" + icon_dead = "schlorrgo_fat_dead" + holder_type = /obj/item/holder/schlorrgo/fat + + if(FAT_SCHLORRGO) + 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 + nutrition_threshold = 800 + maxHealth = 250 + health = 250 + mob_size = MOB_LARGE + meat_amount = 12 + butchering_products = list(/obj/item/reagent_containers/food/snacks/spreads/lard = 12) + icon_state = "schlorrgo_wide" + icon_living = "schlorrgo_wide" + icon_dead = "schlorrgo_wide_dead" + 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 + a_intent = I_HURT + emote_sounds = list('sound/effects/creatures/schlorrgo_scream.ogg') + holder_type = null + + if(WIDE_SCHLORRGO) + 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 + maxHealth = 450 + health = 450 + mob_size = MOB_LARGE + meat_amount = 25 + butchering_products = list(/obj/item/reagent_containers/food/snacks/spreads/lard = 25) + icon = 'icons/mob/npc/colossal_schlorrgo.dmi' + icon_state = "schlorrgo_colossal" + icon_living = "schlorrgo_colossal" + icon_dead = "schlorrgo_colossal_dead" + pixel_x = -8 + anchored = TRUE + opacity = TRUE + melee_damage_lower = 25 + melee_damage_upper = 25 + environment_smash = 2 + resistance = 3 + mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY + mob_push_flags = ALLMOBS + a_intent = I_HURT + emote_sounds = list('sound/effects/creatures/schlorrgo_scream.ogg') + holder_type = null + + update_icon() + +/mob/living/simple_animal/schlorrgo/Move() + if(current_size >= COLOSSAL_SCHLORRGO) + return + ..() + +/mob/living/simple_animal/schlorrgo/attempt_grab(var/mob/living/grabber) + if(current_size >= WIDE_SCHLORRGO) + to_chat(grabber, SPAN_WARNING("\The [src] is too large to grab!")) + return FALSE + else + return TRUE + +/mob/living/simple_animal/schlorrgo/baby + max_nutrition = 50 + + starting_nutrition = 50 + nutrition_threshold = 30 + + current_size = EGG_SCHLORRGO \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index ecf6446d922..90844136bc9 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -730,6 +730,7 @@ filling_color = "#FDFFD1" volume = 10 reagents_to_add = list(/decl/reagent/nutriment/protein/egg = 3) + var/hatchling = /mob/living/simple_animal/chick /obj/item/reagent_containers/food/snacks/egg/afterattack(obj/O as obj, mob/user as mob, proximity) if(!(proximity && O.is_open_container())) @@ -761,6 +762,20 @@ else ..() +/obj/item/reagent_containers/food/snacks/egg + var/amount_grown = 0 + +/obj/item/reagent_containers/food/snacks/egg/process() + if(isturf(loc)) + amount_grown += rand(1,2) + if(amount_grown >= 100) + visible_message("[src] hatches with a quiet cracking sound.") + new hatchling(get_turf(src)) + STOP_PROCESSING(SSprocessing, src) + qdel(src) + else + STOP_PROCESSING(SSprocessing, src) + /obj/item/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" @@ -785,6 +800,14 @@ /obj/item/reagent_containers/food/snacks/egg/yellow icon_state = "egg-yellow" +/obj/item/reagent_containers/food/snacks/egg/schlorrgo + name = "alien egg" + desc = "A large mysterious egg." + icon_state = "schlorrgo_egg" + filling_color = "#e9ffd1" + volume = 20 + hatchling = /mob/living/simple_animal/schlorrgo/baby + /obj/item/reagent_containers/food/snacks/friedegg name = "fried egg" desc = "A fried egg, with a touch of salt and pepper." diff --git a/html/changelogs/alberyk_schlorrgo.yml b/html/changelogs/alberyk_schlorrgo.yml new file mode 100644 index 00000000000..dab1246c0c4 --- /dev/null +++ b/html/changelogs/alberyk_schlorrgo.yml @@ -0,0 +1,6 @@ +author: Alberyk, Kyres1 + +delete-after: True + +changes: + - rscadd: "Added new Schlorrgo mechanics." diff --git a/icons/mob/npc/colossal_schlorrgo.dmi b/icons/mob/npc/colossal_schlorrgo.dmi new file mode 100644 index 00000000000..92827777eac Binary files /dev/null and b/icons/mob/npc/colossal_schlorrgo.dmi differ diff --git a/icons/mob/npc/livestock.dmi b/icons/mob/npc/livestock.dmi index dab847b7512..4a6918ca795 100644 Binary files a/icons/mob/npc/livestock.dmi and b/icons/mob/npc/livestock.dmi differ diff --git a/icons/mob/npc/schlorrgo.dmi b/icons/mob/npc/schlorrgo.dmi new file mode 100644 index 00000000000..1f3d2318da8 Binary files /dev/null and b/icons/mob/npc/schlorrgo.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 7008d36937d..0f9505b2ec7 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/sound/effects/creatures/schlorrgo_scream.ogg b/sound/effects/creatures/schlorrgo_scream.ogg new file mode 100644 index 00000000000..6e4caeba703 Binary files /dev/null and b/sound/effects/creatures/schlorrgo_scream.ogg differ