From ff13d51b52d97124d467ed96f61d0ee590dab2f3 Mon Sep 17 00:00:00 2001 From: VerySoft Date: Thu, 19 Aug 2021 04:19:02 -0400 Subject: [PATCH] Catslugs and Simplemob QoL Adds Catslug mob! -Can pick up and use/throw many things. -Can ventcrawl, can carry various materials and objects into the vents -Speaks in sign -Can eat and be fed foods, which allows them to naturally heal from injuries. Also makes it so: -All simplemobs understand galactic common without being able to speek it regardless of other settings or languages unless otherwise disabled with the understands_common var, for facilitating RP mostly, since there's basically no situation I can think of where I would prefer that a player controlled mob couldn't at least understand common. -Simplemobs with hands can pick up and handle micros like human mobs can. -Simplemob grabs will now disappear appropriately when dropped rather than waiting for when they feel like it. --- code/modules/mob/living/simple_mob/hands.dm | 7 - .../modules/mob/living/simple_mob/on_click.dm | 5 +- .../mob/living/simple_mob/simple_mob.dm | 8 + .../subtypes/animal/alien animals/catslug.dm | 196 ++++++++++++++++++ .../subtypes/animal/alien animals/teppi.dm | 2 +- code/modules/mob/mob_grab.dm | 1 + icons/mob/alienanimals_x32.dmi | Bin 2669 -> 4230 bytes vorestation.dme | 1 + 8 files changed, 210 insertions(+), 10 deletions(-) create mode 100644 code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm diff --git a/code/modules/mob/living/simple_mob/hands.dm b/code/modules/mob/living/simple_mob/hands.dm index 9d869df6317..a7aab1bee8e 100644 --- a/code/modules/mob/living/simple_mob/hands.dm +++ b/code/modules/mob/living/simple_mob/hands.dm @@ -135,13 +135,6 @@ to_chat(src, "Your [hand_form] are not fit for use of \the [display_name].") return humanoid_hands -/mob/living/simple_mob/drop_from_inventory(var/obj/item/W, var/atom/target = null) - . = ..(W, target) - if(!target) - target = src.loc - if(.) - W.forceMove(src.loc) - /mob/living/simple_mob/is_holding_item_of_type(typepath) for(var/obj/item/I in list(l_hand, r_hand)) if(istype(I, typepath)) diff --git a/code/modules/mob/living/simple_mob/on_click.dm b/code/modules/mob/living/simple_mob/on_click.dm index 4b824c9580d..e5dd3a5f2dc 100644 --- a/code/modules/mob/living/simple_mob/on_click.dm +++ b/code/modules/mob/living/simple_mob/on_click.dm @@ -13,14 +13,15 @@ switch(a_intent) if(I_HELP) - if(isliving(A)) + var/mob/living/L = A + if(istype(L) && (!has_hands || !L.attempt_to_scoop(src))) custom_emote(1,"[pick(friendly)] \the [A]!") if(I_HURT) if(can_special_attack(A) && special_attack_target(A)) return - else if(melee_damage_upper == 0 && istype(A,/mob/living)) + else if(melee_damage_upper == 0 && isliving(A)) custom_emote(1,"[pick(friendly)] \the [A]!") else diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index 6687b1f3804..1c8f1f69ad1 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -160,6 +160,7 @@ var/limb_icon // Used for if the mob can drop limbs. Overrides the icon cache key, so it doesn't keep remaking the icon needlessly. var/limb_icon_key + var/understands_common = TRUE //VOREStation Edit - Makes it so that simplemobs can understand galcomm without being able to speak it. /mob/living/simple_mob/Initialize() verbs -= /mob/verb/observe @@ -280,3 +281,10 @@ hud_list[STATUS_HUD] = gen_hud_image(buildmode_hud, src, "ai_0", plane = PLANE_BUILDMODE) hud_list[LIFE_HUD] = gen_hud_image(buildmode_hud, src, "ais_1", plane = PLANE_BUILDMODE) add_overlay(hud_list) + +//VOREStation Add Start Makes it so that simplemobs can understand galcomm without being able to speak it. +/mob/living/simple_mob/say_understands(var/mob/other, var/datum/language/speaking = null) + if(understands_common && speaking?.name == LANGUAGE_GALCOM) + return TRUE + return ..() +//Vorestation Add End \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm new file mode 100644 index 00000000000..7d6df51f444 --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm @@ -0,0 +1,196 @@ +//No relation to slugcat :) + +/datum/category_item/catalogue/fauna/catslug + name = "Alien Wildlife - Catslug" + desc = "The Catslug is an omnivorous terrestrial creature.\ + Exhibiting properties of both a cat and a slug (hence its name)\ + it moves somewhat awkwardly. However, the unique qualities of\ + its body make it exceedingly flexible and smooth, allowing it to\ + wiggle into and move effectively in even extremely tight spaces.\ + Additionally, it has surprisingly capable hands, and moves quite\ + well on two legs or four. Caution is advised when interacting\ + with these creatures, they are quite intelligent, and proficient\ + tool users." + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/vore/alienanimals/catslug + name = "catslug" + desc = "A noodley bodied creature with thin arms and legs, and gloomy dark eyes." + tt_desc = "Mollusca Feline" + icon_state = "catslug" + icon_living = "catslug" + icon_dead = "catslug_dead" + icon_rest = "catslug_rest" + icon = 'icons/mob/alienanimals_x32.dmi' + + faction = "catslug" + maxHealth = 50 + health = 50 + movement_cooldown = 2 + meat_amount = 2 + meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat + + response_help = "hugs" + response_disarm = "rudely paps" + response_harm = "punches" + + harm_intent_damage = 2 + melee_damage_lower = 2 + melee_damage_upper = 5 + + has_hands = TRUE + mob_size = MOB_MEDIUM + friendly = list("hugs") + + catalogue_data = list(/datum/category_item/catalogue/fauna/catslug) + ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug + player_msg = "You have escaped the foul weather, into this much more pleasant place. You are an intelligent creature capable of more than most think. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds!
- - - - -
Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason." + + has_langs = list("Sign Language") + + var/heal_countdown = 0 + var/picked_color = FALSE + + can_enter_vent_with = list( + /obj/item/weapon/implant, + /obj/item/device/radio/borg, + /obj/item/weapon/holder, + /obj/machinery/camera, + /obj/belly, + /obj/screen, + /atom/movable/emissive_blocker, + /obj/item/weapon/material, + /obj/item/weapon/melee, + /obj/item/stack/material, + /obj/item/weapon/tool, + /obj/item/weapon/reagent_containers/food + ) + + vore_active = 1 + vore_capacity = 1 + vore_bump_chance = 1 + vore_ignores_undigestable = 0 + vore_default_mode = DM_DIGEST + vore_icons = SA_ICON_LIVING + vore_stomach_name = "Stomach" + vore_default_contamination_flavor = "Wet" + vore_default_contamination_color = "grey" + vore_default_item_mode = IM_DIGEST + + +/mob/living/simple_mob/vore/alienanimals/catslug/init_vore() + ..() + var/obj/belly/B = vore_selected + B.name = "stomach" + B.desc = "The hot slick gut of a catslug!! Copious slime smears over you as you’re packed away into the gloom and oppressive humidity of this churning gastric sac. The pressure around you is intense, the squashy flesh bends and forms to your figure, clinging to you insistently! There’s basically no free space at all as your ears are filled with the slick slide of flesh against flesh and the burbling of gastric juices glooping all around you. The thumping of a heart booms from somewhere nearby, making everything pulse in against you in time with it! This is it! You’ve been devoured by a catslug!!!" + B.mode_flags = 40 + B.belly_fullscreen = "yet_another_tumby" + B.digest_brute = 0.5 + B.digest_burn = 0.5 + B.digestchance = 10 + B.absorbchance = 1 + B.escapechance = 15 + +/datum/ai_holder/simple_mob/melee/evasive/catslug + hostile = FALSE + cooperative = FALSE + retaliate = TRUE + speak_chance = 0 + wander = TRUE + +/mob/living/simple_mob/vore/alienanimals/catslug/Initialize() + . = ..() + verbs += /mob/living/proc/ventcrawl + verbs += /mob/living/proc/hide + verbs += /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color + +/mob/living/simple_mob/vore/alienanimals/catslug/attackby(var/obj/item/weapon/reagent_containers/food/snacks/O as obj, var/mob/user as mob) + if(!istype(O, /obj/item/weapon/reagent_containers/food/snacks)) + return ..() + if(resting) + to_chat(user, "\The [src] is napping, and doesn't respond to \the [O].") + return + if(nutrition >= max_nutrition) + if(user == src) + to_chat(src, "You're too full to eat another bite.") + return + to_chat(user, "\The [src] seems too full to eat.") + return + var/nutriment_amount = O.reagents?.get_reagent_amount("nutriment") //does it have nutriment, if so how much? + var/protein_amount = O.reagents?.get_reagent_amount("protein") //does it have protein, if so how much? + var/glucose_amount = O.reagents?.get_reagent_amount("glucose") //does it have glucose, if so how much? + var/yum = nutriment_amount + protein_amount + glucose_amount + if(yum) + yum = (yum * 20) / 3 + adjust_nutrition(yum) //add the nutriment! + O.bitecount ++ + if(O.bitecount >= 3) + user.drop_from_inventory(O) + qdel(O) + visible_message("\The [src] eats \the [O].") + else + to_chat(user, "\The [src] takes a bite of \the [O].") + if(user != src) + to_chat(user, "\The [user] feeds \the [O] to you.") + playsound(src, 'sound/items/eatfood.ogg', 75, 1) + +/mob/living/simple_mob/vore/alienanimals/catslug/Life() + . = ..() + if(nutrition < 150) + return + if(health == maxHealth) + return + if(heal_countdown > 0) + heal_countdown -- + return + if(resting) + if(bruteloss > 0) + adjustBruteLoss(-10) + else if(fireloss > 0) + adjustFireLoss(-10) + nutrition -= 50 + heal_countdown = 5 + return + if(bruteloss > 0) + adjustBruteLoss(-1) + else if(fireloss > 0) + adjustFireLoss(-1) + nutrition -= 5 + heal_countdown = 5 + +/mob/living/simple_mob/vore/alienanimals/catslug/Login() //If someone plays as us let's just be a passive mob in case accidents happen if the player D/Cs + . = ..() + ai_holder.hostile = FALSE + ai_holder.wander = FALSE + +/mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color() + set name = "Pick Color" + set category = "Abilities" + set desc = "You can set your color!" + if(picked_color) + to_chat(src, "You have already picked a color! If you picked the wrong color, ask an admin to change your picked_color variable to 0.") + return + var/newcolor = input(usr, "Choose a color.", "", color) as color|null + if(newcolor) + color = newcolor + picked_color = TRUE + +/datum/ai_holder/simple_mob/melee/evasive/catslug/handle_wander_movement() + if(holder.client) + return + if(holder.resting) + if(prob(5)) + holder.lay_down() + return + if(prob(0.5)) + holder.lay_down() + return + return ..() + +/datum/ai_holder/simple_mob/melee/evasive/catslug/on_hear_say(mob/living/speaker, message) + if(holder.client) + return + if(!speaker.client) + return + if(findtext(message, "psps") || stance == STANCE_IDLE) + set_follow(speaker, follow_for = 5 SECONDS) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm index 93c9f0d25a8..59ab8e7585a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm @@ -129,7 +129,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? mob_size = MOB_LARGE - has_langs = list("Teppi", "Galactic Common") + has_langs = list("Teppi") say_list_type = /datum/say_list/teppi player_msg = "Teppi are large omnivorous quadrupeds. You have four toes on each paw, a long, strong tail, and are quite tough and powerful. You’re a lot more intimidating than you are actually harmful though. Your kind are ordinarily rather passive, only really rising to violence when someone does violence to you or others like you. You’re not stupid though, you can commiunicate with others of your kind, and form bonds with those who are kind to you, be they Teppi or otherwise.
- - - - -
While you may have access to galactic common, this is purely meant for making it so you can understand people in an OOC manner, for facilitating roleplay. You almost certainly should not be speaking to people or roleplaying as though you understand everything everyone says perfectly, but it's not unreasonable to be able to intuit intent and such through people's tones when they speak. Teppi are kind of smart, but they are animals, and should be roleplayed as such. ADDITIONALLY, you have the ability to produce offspring if you're well fed enough every once in a while, and the ability to disable this from happening to you. These verbs exist for to preserve the mechanical functionality of the mob you are playing. You should be aware of your surroundings when you use this verb, and NEVER use it to prefbreak or be disruptive. If in doubt, don't use it. Also, to note, AI Teppi will never initiate breeding with player Teppi." loot_list = list(/obj/item/weapon/bone/horn = 100) diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 88101fdc6c9..3ca22757826 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -34,6 +34,7 @@ abstract = 1 item_state = "nothing" w_class = ITEMSIZE_HUGE + destroy_on_drop = TRUE //VOREStation Edit /obj/item/weapon/grab/New(mob/user, mob/victim) diff --git a/icons/mob/alienanimals_x32.dmi b/icons/mob/alienanimals_x32.dmi index 2f94d618da608e395bc901ccb6d9cf445790c61c..c6fc251dc3876d374f8bccae9158800ccf25a3f5 100644 GIT binary patch literal 4230 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 Ue!NUQ`nLg$^x(Qx+KAZy0A8IF2LJ#7 diff --git a/vorestation.dme b/vorestation.dme index 06323137d8e..44abb87e730 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2941,6 +2941,7 @@ #include "code\modules\mob\living\simple_mob\simple_mob_vr.dm" #include "code\modules\mob\living\simple_mob\taming.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\animal.dm" +#include "code\modules\mob\living\simple_mob\subtypes\animal\alien animals\catslug.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\alien animals\teppi.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer.dm" #include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_captive.dm"