From 9bab79534273e4f99fe4aa3decbbdcd9c3dda14e Mon Sep 17 00:00:00 2001 From: DGamerL <108773801+DGamerL@users.noreply.github.com> Date: Thu, 12 Oct 2023 18:25:54 +0200 Subject: [PATCH] Yeet this shit (#22790) --- code/__DEFINES/mob_defines.dm | 9 - .../gamemodes/miniantags/abduction/gland.dm | 4 +- .../living/simple_animal/slime/slime_life.dm | 155 +----------------- .../living/simple_animal/slime/slime_mob.dm | 19 +-- .../simple_animal/slime/slime_powers.dm | 1 - .../living/simple_animal/slime/slime_say.dm | 8 - 6 files changed, 10 insertions(+), 186 deletions(-) diff --git a/code/__DEFINES/mob_defines.dm b/code/__DEFINES/mob_defines.dm index c9f02b2e449..bde8ac4801d 100644 --- a/code/__DEFINES/mob_defines.dm +++ b/code/__DEFINES/mob_defines.dm @@ -128,15 +128,6 @@ //Slime extract crossing. Controls how many extracts is required to feed to a slime to core-cross. #define SLIME_EXTRACT_CROSSING_REQUIRED 10 -//Slime commands defines -#define SLIME_FRIENDSHIP_FOLLOW 3 //Min friendship to order it to follow -#define SLIME_FRIENDSHIP_STOPEAT 5 //Min friendship to order it to stop eating someone -#define SLIME_FRIENDSHIP_STOPEAT_NOANGRY 7 //Min friendship to order it to stop eating someone without it losing friendship -#define SLIME_FRIENDSHIP_STOPCHASE 4 //Min friendship to order it to stop chasing someone (their target) -#define SLIME_FRIENDSHIP_STOPCHASE_NOANGRY 6 //Min friendship to order it to stop chasing someone (their target) without it losing friendship -#define SLIME_FRIENDSHIP_STAY 3 //Min friendship to order it to stay -#define SLIME_FRIENDSHIP_ATTACK 8 //Min friendship to order it to attack - //If you add a new status, be sure to add a list for it to the simple_animals global in _globalvars/lists/mobs.dm //Hostile Mob AI Status #define AI_ON 1 diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 397d199dbb8..5495f914de1 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -136,9 +136,7 @@ to_chat(owner, "You feel nauseous!") owner.vomit(20) - var/mob/living/simple_animal/slime/Slime = new(get_turf(owner), "grey") - Slime.Friends = list(owner) - Slime.Leader = owner + new /mob/living/simple_animal/slime(get_turf(owner), "grey") /obj/item/organ/internal/heart/gland/mindshock origin_tech = "materials=4;biotech=4;magnets=6;abductor=3" diff --git a/code/modules/mob/living/simple_animal/slime/slime_life.dm b/code/modules/mob/living/simple_animal/slime/slime_life.dm index 60d8d0e9499..0394ffb60a5 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_life.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_life.dm @@ -173,15 +173,7 @@ Feedstop(silent = TRUE) if(M.stat == DEAD) // our victim died - if(!client) - if(!rabid && !attacked) - if(M.LAssailant && M.LAssailant != M) - if(prob(50)) - if(!(M.LAssailant in Friends)) - Friends[M.LAssailant] = 1 - else - ++Friends[M.LAssailant] - else + if(client) to_chat(src, "This subject does not have a strong enough life energy anymore...") if(M.client && ishuman(M)) @@ -309,11 +301,6 @@ else if (nutrition < get_grow_nutrition() && prob(25) || nutrition < get_hunger_nutrition()) hungry = 1 - if(hungry == 2 && !client) // if a slime is starving, it starts losing its friends - if(Friends.len > 0 && prob(1)) - var/mob/nofriend = pick(Friends) - --Friends[nofriend] - if(!Target) if(will_hunt() && hungry || attacked || rabid) // Only add to the list if we need to var/list/targets = list() @@ -323,9 +310,6 @@ if(L.stat == DEAD) // Ignore dead mobs continue - if(L in Friends) // No eating friends! - continue - var/ally = FALSE for(var/F in faction) if(F == "neutral") //slimes are neutral so other mobs not target them, but they can target neutral mobs @@ -363,26 +347,9 @@ if(is_adult) target_patience += 3 - if(!Target) // If we have no target, we are wandering or following orders - if(Leader) - if(holding_still) - holding_still = max(holding_still - 1, 0) - else if(isturf(loc)) - step_to(src, Leader) - - else if(hungry) - if (holding_still) - holding_still = max(holding_still - hungry, 0) - else if(isturf(loc) && prob(50)) - step(src, pick(GLOB.cardinal)) - - else - if(holding_still) - holding_still = max(holding_still - 1, 0) - else if (docile && pulledby) - holding_still = 10 - else if(isturf(loc) && prob(33)) - step(src, pick(GLOB.cardinal)) + if(!Target) // If we have no target, we are wandering + if(hungry && isturf(loc) && prob(50)) + step(src, pick(GLOB.cardinal)) else if(!AIproc) INVOKE_ASYNC(src, PROC_REF(AIprocess)) @@ -416,115 +383,17 @@ regenerate_icons() /mob/living/simple_animal/slime/proc/handle_speech() - //Speech understanding starts here - var/to_say - if(speech_buffer.len > 0) - var/who = speech_buffer[1] // Who said it? - var/phrase = speech_buffer[2] // What did they say? - if((findtext(phrase, num2text(number)) || findtext(phrase, "slimes"))) // Talking to us - if(findtext(phrase, "hello") || findtext(phrase, "hi")) - to_say = pick("Hello...", "Hi...") - else if(findtext(phrase, "follow")) - if(Leader) - if(Leader == who) // Already following him - to_say = pick("Yes...", "Lead...", "Follow...") - else if(Friends[who] > Friends[Leader]) // VIVA - Leader = who - to_say = "Yes... I follow [who]..." - else - to_say = "No... I follow [Leader]..." - else - if(Friends[who] >= SLIME_FRIENDSHIP_FOLLOW) - Leader = who - to_say = "I follow..." - else // Not friendly enough - to_say = pick("No...", "I no follow...") - else if(findtext(phrase, "stop")) - if(buckled) // We are asked to stop feeding - if (Friends[who] >= SLIME_FRIENDSHIP_STOPEAT) - Feedstop() - Target = null - if (Friends[who] < SLIME_FRIENDSHIP_STOPEAT_NOANGRY) - --Friends[who] - to_say = "Grrr..." // I'm angry but I do it - else - to_say = "Fine..." - else if(Target) // We are asked to stop chasing - if(Friends[who] >= SLIME_FRIENDSHIP_STOPCHASE) - Target = null - if(Friends[who] < SLIME_FRIENDSHIP_STOPCHASE_NOANGRY) - --Friends[who] - to_say = "Grrr..." // I'm angry but I do it - else - to_say = "Fine..." - else if(Leader) // We are asked to stop following - if(Leader == who) - to_say = "Yes... I stay..." - Leader = null - else - if(Friends[who] > Friends[Leader]) - Leader = null - to_say = "Yes... I stop..." - else - to_say = "No... keep follow..." - else if(findtext(phrase, "stay")) - if(Leader) - if (Leader == who) - holding_still = Friends[who] * 10 - to_say = "Yes... stay..." - else if(Friends[who] > Friends[Leader]) - holding_still = (Friends[who] - Friends[Leader]) * 10 - to_say = "Yes... stay..." - else - to_say = "No... keep follow..." - else - if(Friends[who] >= SLIME_FRIENDSHIP_STAY) - holding_still = Friends[who] * 10 - to_say = "Yes... stay..." - else - to_say = "No... won't stay..." - else if(findtext(phrase, "attack")) - if(rabid && prob(20)) - Target = who - AIprocess() //Wake up the slime's Target AI, needed otherwise this doesn't work - to_say = "ATTACK!?!?" - else if(Friends[who] >= SLIME_FRIENDSHIP_ATTACK) - for(var/mob/living/L in view(7,src)-list(src,who)) - if(findtext(phrase, lowertext(L.name))) - if(isslime(L)) - to_say = "NO... [L] slime friend..." - --Friends[who] //Don't ask a slime to attack its friend - else if(!Friends[L] || Friends[L] < 1) - Target = L - AIprocess()//Wake up the slime's Target AI, needed otherwise this doesn't work - to_say = "Ok... I attack [Target]..." - else - to_say = "No... like [L]..." - --Friends[who] //Don't ask a slime to attack its friend - break - else - to_say = "No... no listen..." - - speech_buffer = list() - - //Speech starts here - if(to_say) - say (to_say) - else if(prob(1)) + if(prob(1)) emote(pick("bounce", "sway", "light", "vibrate", "jiggle")) else var/t = 10 var/slimes_near = 0 var/dead_slimes = 0 - var/friends_near = list() for(var/mob/living/L in view(7,src)) if(isslime(L) && L != src) ++slimes_near if (L.stat == DEAD) ++dead_slimes - if(L in Friends) - t += 20 - friends_near += L if(nutrition < get_hunger_nutrition()) t += 10 if(nutrition < get_starve_nutrition()) @@ -580,10 +449,6 @@ phrases += "What happened?" if(!slimes_near) phrases += "Lonely..." - for(var/M in friends_near) - phrases += "[M]... friend..." - if(nutrition < get_hunger_nutrition()) - phrases += "[M]... feed me..." if(!stat) say (pick(phrases)) @@ -613,11 +478,7 @@ /mob/living/simple_animal/slime/proc/will_hunt(hunger = -1) // Check for being stopped from feeding and chasing if(docile) - return 0 + return FALSE if(hunger == 2 || rabid || attacked) - return 1 - if(Leader) - return 0 - if(holding_still) - return 0 - return 1 + return TRUE + return TRUE diff --git a/code/modules/mob/living/simple_animal/slime/slime_mob.dm b/code/modules/mob/living/simple_animal/slime/slime_mob.dm index 3c01975dbf0..be334c1b223 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_mob.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_mob.dm @@ -43,17 +43,11 @@ var/number = 0 // Used to understand when someone is talking to it var/mob/living/Target = null // AI variable - tells the slime to hunt this down - var/mob/living/Leader = null // AI variable - tells the slime to follow this person var/attacked = 0 // Determines if it's been attacked recently. Can be any number, is a cooloff-ish variable var/rabid = FALSE // If set to 1, the slime will attack and eat anything it comes in contact with - var/holding_still = 0 // AI variable, cooloff-ish for how long it's going to stay in one place var/target_patience = 0 // AI variable, cooloff-ish for how long it's going to follow its target - var/list/Friends = list() // A list of friends; they are not considered targets for feeding; passed down after splitting - - var/list/speech_buffer = list() // Last phrase said near it and person who said it - var/mood = "" // To show its face var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime var/force_stasis = FALSE @@ -101,9 +95,6 @@ var/datum/action/AC = A AC.Remove(src) Target = null - Leader = null - Friends.Cut() - speech_buffer.Cut() return ..() /mob/living/simple_animal/slime/proc/set_colour(new_colour) @@ -360,14 +351,10 @@ if(S.next_step(user, src)) return 1 if(istype(I, /obj/item/stack/sheet/mineral/plasma) && !stat) //Let's you feed slimes plasma. - if(user in Friends) - ++Friends[user] - else - Friends[user] = 1 - RegisterSignal(user, COMSIG_PARENT_QDELETING, PROC_REF(clear_friend)) to_chat(user, "You feed the slime the plasma. It chirps happily.") var/obj/item/stack/sheet/mineral/plasma/S = I S.use(1) + discipline_slime(user) return if(I.force > 0) attacked += 10 @@ -386,10 +373,6 @@ discipline_slime(user) ..() -/mob/living/simple_animal/slime/proc/clear_friend(mob/living/friend) - UnregisterSignal(friend, COMSIG_PARENT_QDELETING) - Friends -= friend - /mob/living/simple_animal/slime/water_act(volume, temperature, source, method = REAGENT_TOUCH) . = ..() var/water_damage = rand(10, 15) * volume diff --git a/code/modules/mob/living/simple_animal/slime/slime_powers.dm b/code/modules/mob/living/simple_animal/slime/slime_powers.dm index e8686b5f09a..669fe30a10e 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_powers.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_powers.dm @@ -191,7 +191,6 @@ M.powerlevel = new_powerlevel if(i != 1) step_away(M, get_turf(src)) - M.Friends = Friends.Copy() babies += M M.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour) diff --git a/code/modules/mob/living/simple_animal/slime/slime_say.dm b/code/modules/mob/living/simple_animal/slime/slime_say.dm index 8679d64a699..17b1f9cbc8b 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_say.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_say.dm @@ -8,11 +8,3 @@ verb = "loudly blorbles" return verb - -/mob/living/simple_animal/slime/hear_say(list/message_pieces, verb = "says", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol, sound_frequency, use_voice = TRUE) - if(speaker != src && !stat) - if(speaker in Friends) - speech_buffer = list() - speech_buffer.Add(speaker) - speech_buffer.Add(lowertext(html_decode(multilingual_to_message(message_pieces)))) - ..()