From 3c82deb0a6e36458dd604a95ccaee27c755331a7 Mon Sep 17 00:00:00 2001 From: HIDgamer Date: Tue, 3 Sep 2024 07:05:44 +0300 Subject: [PATCH] CPR Buddy 9000 --- code/game/machinery/bots/cprbot.dm | 196 ++++++++++++++++++ .../vending/vendor_types/crew/synthetic.dm | 1 + code/game/objects/items/cprbot.dm | 112 ++++++++++ colonialmarines.dme | 2 + icons/obj/structures/machinery/aibots.dmi | Bin 11156 -> 18615 bytes 5 files changed, 311 insertions(+) create mode 100644 code/game/machinery/bots/cprbot.dm create mode 100644 code/game/objects/items/cprbot.dm diff --git a/code/game/machinery/bots/cprbot.dm b/code/game/machinery/bots/cprbot.dm new file mode 100644 index 000000000000..44c2f85976a1 --- /dev/null +++ b/code/game/machinery/bots/cprbot.dm @@ -0,0 +1,196 @@ +/obj/structure/machinery/bot/cprbot + name = "CPRbot" + desc = "Designed for urgent medical intervention, this CPRbot offers high-tech support in a compact form." + icon = 'icons/obj/structures/machinery/aibots.dmi' + icon_state = "cprbot0" + density = FALSE + anchored = FALSE + health = 100 + maxhealth = 100 + req_access = list(ACCESS_MARINE_MEDBAY) + var/const/search_radius = 10 + var/const/cprbot_proximity_check_radius = 2 // Radius to check for nearby CPRbots + var/processing = TRUE + var/mob/living/carbon/human/target = null + var/cpr_cooldown = 0 + var/path = list() // Path for movement logic + var/currently_healing = 0 + var/iff_signal = FACTION_MARINE // IFF signal to check for valid targets + var/list/medical_facts = list( + "Did you know? The human heart beats over 100,000 times a day.", + "Fun fact: Blood makes up about 7% of your body's weight.", + "Medical trivia: Your brain uses 20% of the oxygen you breathe.", + "Laughter really can increase your pain tolerance.", + "Did you know? The human skeleton is made up of 206 bones.", + "Fun fact: The average adult human body contains about 5 liters of blood.", + "Medical trivia: The human body has around 37.2 trillion cells.", + "The skin is the largest organ in the human body.", + "Did you know? The liver can regenerate itself if a portion is removed.", + "Fun fact: Your sense of smell is closely linked to your memory." + "The only muscle that never tires is that heart." + "Did you know? not breathing can lead to a premature cessation of life!" + ) + var/list/idle_messages = list( + "Stay still, I'm assessing the situation.", + "Just a routine check-up, don't worry.", + "Scanning the area for any casualties.", + "I’m ready to save lives, one compression at a time.", + "I hope everyone is feeling alright today!" + "It's not magic it's CPR Buddy 9000!" + "I should have been a plastic surgeon." + "What kind of medbay is this, everyone’s dropping like flies" + "Each breath a day keeps me at bay!" + "I sense a disturbance in my circuit board. as of a million people stopped breathing and were suddenly silent." + ) + var/motivational_message = "Live! Live! Don't die on me now!" + var/list/has_said_to_patient = list() // Track which patients have been warned + var/last_message_time = 0 // Tracks the last time a message was spoken + +/obj/structure/machinery/bot/cprbot/New() + ..() + spawn(5) // Wait for 5 seconds after spawning before starting initialization + src.initialize_cprbot() + +/obj/structure/machinery/bot/cprbot/proc/initialize_cprbot() + while (processing && health > 0) + src.find_and_move_to_patient() + if (target && world.time >= cpr_cooldown) + src.perform_cpr(target) + src.random_message() // Check if it's time to send a random message + sleep(2) // Slower processing loop, moves once every 2 seconds + +/obj/structure/machinery/bot/cprbot/proc/random_message() + if (world.time >= last_message_time + 600) // At least 1 minute (600 deciseconds) cooldown + if (currently_healing) + src.speak(motivational_message) + else + if (prob(50)) + src.speak(pick(medical_facts)) + else + src.speak(pick(idle_messages)) + last_message_time = world.time // Update the last message time + +/obj/structure/machinery/bot/cprbot/proc/speak(message) + if (!processing || !message) + return + visible_message("[src] beeps, \"[message]\"") + +/obj/structure/machinery/bot/cprbot/proc/find_and_move_to_patient() + var/list/humans = list() + for (var/mob/living/carbon/human/H in range(search_radius)) + if (H.stat == DEAD && H.check_tod() && H.is_revivable() && H.get_target_lock(iff_signal) && !src.has_nearby_cprbot(H)) + humans += H + + if (humans.len > 0) + target = src.get_nearest(humans) + if (target && !has_said_to_patient.Find(target)) + visible_message("[target] is injured! I'm coming!") + has_said_to_patient += target + src.move_to_target(target) + else + target = null + +/obj/structure/machinery/bot/cprbot/proc/has_nearby_cprbot(mob/living/carbon/human/H) + // Check if there are any other CPRbots within a two-tile radius of the target + for (var/obj/structure/machinery/bot/cprbot/nearby_cprbot in range(H, cprbot_proximity_check_radius)) + if (nearby_cprbot != src) // Ignore self + return TRUE + return FALSE + +/obj/structure/machinery/bot/cprbot/proc/get_nearest(list/humans) + var/mob/living/carbon/human/nearest = null + var/distance = search_radius + 1 + + for (var/mob/living/carbon/human/H in humans) + var/d = get_dist(src, H) + if (d < distance) + nearest = H + distance = d + + return nearest + +/obj/structure/machinery/bot/cprbot/proc/move_to_target(mob/living/carbon/human/H) + if (H) + var/pathfinding_result = AStar(src.loc, get_turf(H), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30) + if (length(pathfinding_result) == 0) + // No reachable path to the target, so stop looking for this patient + target = null + return + path = pathfinding_result + + // Begin moving towards the target if a path exists + if (get_dist(src, H) > 1) + if (length(path) > 0) + step_to(src, path[1]) + path -= path[1] + spawn(10) // Moves every 10 ticks (approximately 1 second) + if (length(path)) + step_to(src, path[1]) + path -= path[1] + else + currently_healing = 1 + else + // No valid target, stop looking + target = null + + +/obj/structure/machinery/bot/cprbot/proc/perform_cpr(mob/living/carbon/human/H) + if (!H || H.stat != DEAD || !H.is_revivable() || !ishuman_strict(H)) + target = null + icon_state = "cprbot0" + currently_healing = 0 + return + + if (get_dist(src, H) > 1) + src.move_to_target(H) + return + + icon_state = "cprbot_active" + H.revive_grace_period += 4 SECONDS + cpr_cooldown = world.time + 7 SECONDS + H.visible_message(SPAN_NOTICE("[src] automatically performs CPR on [H].")) + H.visible_message(SPAN_DANGER("Currently performing CPR on [H] do not intervene!")) + currently_healing = 1 + + spawn(0.5) + while (H.is_revivable() && H.stat == DEAD && get_dist(src, H) <= 1) + sleep(0.5) + icon_state = "cprbot0" + currently_healing = 0 + +/obj/structure/machinery/bot/cprbot/proc/self_destruct(mob/living/carbon/human/user = null) + var/obj/item/cprbot_item/I = new /obj/item/cprbot_item(src.loc) + + if (user) + if (!user.put_in_active_hand(I)) + if (!user.put_in_inactive_hand(I)) + I.forceMove(src.loc) + else + I.forceMove(src.loc) + + qdel(src) + +/obj/structure/machinery/bot/cprbot/attack_hand(mob/user as mob) + if (..()) + return TRUE + + SEND_SIGNAL(user, COMSIG_LIVING_ATTACKHAND_HUMAN, src) + + if (user != src) + visible_message(SPAN_DANGER("[user] begins to undeploy [src]!")) + src.self_destruct(user) + return TRUE + +/obj/structure/machinery/bot/cprbot/explode() + src.on = 0 + src.visible_message(SPAN_DANGER("[src] blows apart!"), null, null, 1) + var/turf/Tsec = get_turf(src) + + new /obj/item/cprbot_broken(Tsec) + + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, src) + s.start() + qdel(src) + return + diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index 240155176efa..841a146898ba 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -411,6 +411,7 @@ GLOBAL_LIST_INIT(cm_vending_synth_tools, list( list("Maintenance Jack", 15, /obj/item/maintenance_jack, null, VENDOR_ITEM_REGULAR), list("Portable Dialysis Machine", 15, /obj/item/tool/portadialysis, null, VENDOR_ITEM_REGULAR), list("Telescopic Baton", 15, /obj/item/weapon/telebaton, null, VENDOR_ITEM_REGULAR), + list("CPR Buddy 9k", 15, /obj/item/cprbot_item, null, VENDOR_ITEM_REGULAR), )) //------------EXPERIMENTAL TOOL KITS--------------- diff --git a/code/game/objects/items/cprbot.dm b/code/game/objects/items/cprbot.dm new file mode 100644 index 000000000000..32c8c2345cf4 --- /dev/null +++ b/code/game/objects/items/cprbot.dm @@ -0,0 +1,112 @@ +/obj/item/cprbot_item + name = "CPRbot" + desc = "A compact CPRbot 9000 asemply" + icon = 'icons/obj/structures/machinery/aibots.dmi' + icon_state = "cprbot" + w_class = SIZE_MEDIUM + var/deployment_path = /obj/structure/machinery/bot/cprbot + +/obj/item/cprbot_item/proc/deploy_cprbot(mob/user, atom/location) + if(!user || !location) + return + // Attempt to delete the item first + qdel(src) + world << "Deleting item [src]. Deploying CPRbot at [location]." + + // Proceed with the CPRbot deployment + var/obj/structure/machinery/bot/cprbot/R = new deployment_path(location) + if(R) + R.add_fingerprint(user) + world << "CPRbot deployed successfully at [location]." + else + world << "Failed to deploy CPRbot at [location]." + +/obj/item/cprbot_item/attack_self(mob/user) + if (..()) + return TRUE + if(user) + deploy_cprbot(user, user.loc) + +/obj/item/cprbot_item/afterattack(atom/target, mob/user, proximity) + if(proximity && isturf(target)) + var/turf/T = target + if(!T.density) + deploy_cprbot(user, T) + +/obj/item/cprbot_broken + name = "CPRbot" + desc = "A compact CPRbot 9000 asemply it appears to be in bad shape" + icon = 'icons/obj/structures/machinery/aibots.dmi' + icon_state = "cprbot_broken" + w_class = SIZE_MEDIUM + +/obj/item/cprbot_broken/attackby(obj/item/W, mob/living/user) + if(iswelder(W)) + if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH)) + to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) + return + + var/obj/item/tool/weldingtool/WT = W + if(!WT.isOn()) + to_chat(user, SPAN_WARNING("\The [WT] needs to be on!")) + return + + if(!WT.remove_fuel(5, user)) // Ensure the welder has enough fuel to operate + to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) + return + + playsound(src, 'sound/items/Welder.ogg', 25, 1) + + if(!do_after(user, 10 * user.get_skill_duration_multiplier(SKILL_CONSTRUCTION), INTERRUPT_ALL | BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) + return + + var/obj/item/cprbot_item/I = new /obj/item/cprbot_item(src.loc) + + if(user) + if(!user.put_in_active_hand(I)) + if(!user.put_in_inactive_hand(I)) + I.forceMove(src.loc) + else + I.forceMove(src.loc) + +/obj/item/cprbot_broken/attackby(obj/item/W, mob/living/user) + if(iswelder(W)) + if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH)) + to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) + return + + var/obj/item/tool/weldingtool/WT = W + if(!WT.isOn()) + to_chat(user, SPAN_WARNING("\The [WT] needs to be on!")) + return + + if(!WT.remove_fuel(5, user)) // Ensure enough fuel is available + to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) + return + + playsound(src, 'sound/items/Welder.ogg', 25, 1) + + if(!do_after(user, 10 * user.get_skill_duration_multiplier(SKILL_CONSTRUCTION), INTERRUPT_ALL | BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) + return + + // Create the repaired item + var/obj/item/cprbot_item/I = new /obj/item/cprbot_item(src.loc) + + // Check if the broken item is in the user's hand + var/hand_was_active = user.get_active_hand() == src + var/hand_was_inactive = user.get_inactive_hand() == src + + // Remove the broken item + qdel(src) + + // Attempt to place the new item into the user's hands + if (hand_was_active) + if (!user.put_in_active_hand(I)) + I.forceMove(user.loc) // Place it at user's location if hands are full + else if (hand_was_inactive) + if (!user.put_in_inactive_hand(I)) + I.forceMove(user.loc) // Place it at user's location if hands are full + else + I.forceMove(user.loc) // Place at the original location if not in hand + + diff --git a/colonialmarines.dme b/colonialmarines.dme index 48996a93ec30..f4a7f188cd9a 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -904,6 +904,7 @@ #include "code\game\machinery\atmoalter\scrubber.dm" #include "code\game\machinery\bots\bots.dm" #include "code\game\machinery\bots\cleanbot.dm" +#include "code\game\machinery\bots\cprbot.dm" #include "code\game\machinery\bots\floorbot.dm" #include "code\game\machinery\bots\medbot.dm" #include "code\game\machinery\bots\mulebot.dm" @@ -1088,6 +1089,7 @@ #include "code\game\objects\items\contraband.dm" #include "code\game\objects\items\cosmetics.dm" #include "code\game\objects\items\cpr_dummy.dm" +#include "code\game\objects\items\cprbot.dm" #include "code\game\objects\items\disks.dm" #include "code\game\objects\items\fulton.dm" #include "code\game\objects\items\gift_wrappaper.dm" diff --git a/icons/obj/structures/machinery/aibots.dmi b/icons/obj/structures/machinery/aibots.dmi index 18cf52cb43be8c819c28be6e280af091e4192bb3..1fecfe73b336e0f4425da2f9e3460cb7c8844ba8 100644 GIT binary patch literal 18615 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 literal 11156 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 Qv@M{oZFs#z%l5DT0|%)Fc>n+a