diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index ef3c21fcdca..2481003dd0e 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -1,7 +1,7 @@ // AI (i.e. game AI, not the AI player) controlled bots /obj/machinery/bot - icon = 'icons/obj/aibots.dmi' + icon = 'icons/mob/npc/aibots.dmi' layer = MOB_LAYER light_range = 3 use_power = POWER_USE_OFF diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b3dbd9a6431..bcc18986875 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1057,7 +1057,10 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /obj/item/do_pickup_animation(atom/target, var/image/pickup_animation = image(icon, loc, icon_state, ABOVE_ALL_MOB_LAYER, dir, pixel_x, pixel_y)) if(!isturf(loc)) return - pickup_animation.overlays = overlays + if(overlays.len) + pickup_animation.overlays = overlays + if(underlays.len) + pickup_animation.underlays = underlays . = ..() /obj/item/proc/throw_fail_consequences(var/mob/living/carbon/C) diff --git a/code/modules/cargo/bounties/bot.dm b/code/modules/cargo/bounties/bot.dm index 69e54a475e8..9688af6cc94 100644 --- a/code/modules/cargo/bounties/bot.dm +++ b/code/modules/cargo/bounties/bot.dm @@ -14,10 +14,10 @@ required_count = 3 random_count = 1 wanted_types = list(/mob/living/bot/farmbot) - + /datum/bounty/item/bot/medbot - name = "Medbot" - description = "We were unable to recruit a sufficient number of qualified medical professionals this month. Ship us a few medbots to fill the void." + name = "Medibot" + description = "We were unable to recruit a sufficient number of qualified medical professionals this month. Ship us a few medibots to fill the void." reward_low = 5500 reward_high = 6000 required_count = 2 diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 5430986f7fd..f0f48e6de99 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -209,7 +209,7 @@ origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2) /obj/item/integrated_circuit/output/sound/medbot - name = "medbot sound circuit" + name = "medibot sound circuit" desc = "A miniature speaker is attached to this component, used to annoy patients while they get pricked by a medbot." sounds = list( "surgeon" = 'sound/voice/medbot/msurgeon.ogg', diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index d3538605bac..257b78a6083 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -3,7 +3,7 @@ accent = ACCENT_TTS health = 20 maxHealth = 20 - icon = 'icons/obj/aibots.dmi' + icon = 'icons/mob/npc/aibots.dmi' layer = MOB_LAYER universal_speak = TRUE density = FALSE diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index 0a0aaf30f91..f423c66fa3a 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -360,7 +360,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th /obj/item/bucket_sensor name = "proxy bucket" desc = "It's a bucket. With a sensor attached." - icon = 'icons/obj/aibots.dmi' + icon = 'icons/mob/npc/aibots.dmi' icon_state = "bucket_proxy" force = 3 throwforce = 10 diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index 776bab2dd61..f4a9cf06fff 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -7,7 +7,7 @@ /mob/living/bot/farmbot name = "Farmbot" desc = "The botanist's best friend. Various farming equipment seems haphazardly attached to it." - icon = 'icons/obj/aibots.dmi' + icon = 'icons/mob/npc/aibots.dmi' icon_state = "farmbot0" health = 50 maxHealth = 50 @@ -176,7 +176,7 @@ target = source frustration = 0 break - + /mob/living/bot/farmbot/proc/pathfind(var/atom/A) var/t = get_dir(A, src) // Turf with the tray is impassable, so a* can't navigate directly to it @@ -324,7 +324,7 @@ /obj/item/farmbot_arm_assembly name = "water tank/robot arm assembly" desc = "A water tank with a robot arm permanently grafted to it." - icon = 'icons/obj/aibots.dmi' + icon = 'icons/mob/npc/aibots.dmi' icon_state = "water_arm" var/build_step = 0 var/created_name = "Farmbot" diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index 7b00a301b8c..787fb3e7e5e 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -1,12 +1,12 @@ /mob/living/bot/medbot - name = "Medbot" + name = "Medibot" desc = "A little medical robot. He looks somewhat underwhelmed." icon_state = "medibot0" req_one_access = list(access_medical, access_robotics) - - var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. botcard_access = list(access_medical, access_morgue, access_surgery, access_pharmacy, access_virology, access_genetics) + var/obj/item/storage/firstaid/firstaid_item + //AI vars var/frustration = 0 var/list/path = list() @@ -29,6 +29,13 @@ var/treatment_emag = /singleton/reagent/toxin var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? +/mob/living/bot/medbot/Initialize() + var/list/firstaid_types = typesof(/obj/item/storage/firstaid) + var/firstaid_to_use = pick(firstaid_types) + firstaid_item = new firstaid_to_use(src) + + . = ..() + /mob/living/bot/medbot/Destroy() QDEL_NULL(reagent_glass) @@ -55,11 +62,13 @@ if(!path) path = list() if(path.len) + icon_state = "medibots" step_to(src, path[1]) path -= path[1] ++frustration if(get_dist(src, patient) > 7 || frustration > 8) patient = null + icon_state = "medibot[on]" else for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! if(valid_healing_target(H)) @@ -99,8 +108,7 @@ patient = null return - icon_state = "medibots" - visible_message("[src] is trying to inject [H]!") + visible_message(SPAN_WARNING("[src] is trying to inject [H]!")) if(declare_treatment) var/area/location = get_area(src) broadcast_medical_hud_message("[src] is treating [H] in [location]", src) @@ -111,22 +119,26 @@ reagent_glass.reagents.trans_to_mob(H, injection_amount, CHEM_BLOOD) else H.reagents.add_reagent(t, injection_amount) - visible_message("[src] injects [H] with the syringe!") + visible_message(SPAN_WARNING("[src] injects [H] with the syringe!")) currently_healing = 0 update_icon() /mob/living/bot/medbot/update_icon() - cut_overlays() - if(skin) - add_overlay("medskin_[skin]") + if(!underlays.len) + underlays += image(firstaid_item.icon, firstaid_item.icon_state) + var/matrix/M = matrix() + var/image/ha_image = image('icons/obj/device.dmi', "health") + M.Translate(5, 0) + ha_image.transform = M + underlays += ha_image if(currently_healing) - icon_state = "medibots" + icon_state = "mediboth" else icon_state = "medibot[on]" /mob/living/bot/medbot/attack_hand(var/mob/user) if (!has_ui_access(user)) - to_chat(user, "The unit's interface refuses to unlock!") + to_chat(user, SPAN_WARNING("The unit's interface refuses to unlock!")) return var/dat = "" @@ -167,15 +179,15 @@ /mob/living/bot/medbot/attackby(var/obj/item/O, var/mob/user) if(istype(O, /obj/item/reagent_containers/glass)) if(locked) - to_chat(user, "You cannot insert a beaker because the panel is locked.") + to_chat(user, SPAN_NOTICE("You cannot insert a beaker because the panel is locked.")) return if(!isnull(reagent_glass)) - to_chat(user, "There is already a beaker loaded.") + to_chat(user, SPAN_NOTICE("There is already a beaker loaded.")) return user.drop_from_inventory(O,src) reagent_glass = O - to_chat(user, "You insert [O].") + to_chat(user, SPAN_NOTICE("You insert [O].")) return 1 else ..() @@ -187,7 +199,7 @@ add_fingerprint(usr) if (!has_ui_access(usr)) - to_chat(usr, "Insufficient permissions.") + to_chat(usr, SPAN_WARNING("Insufficient permissions.")) return if (href_list["power"]) @@ -220,7 +232,7 @@ reagent_glass.forceMove(get_turf(src)) reagent_glass = null else - to_chat(usr, "You cannot eject the beaker because the panel is locked.") + to_chat(usr, SPAN_NOTICE("You cannot eject the beaker because the panel is locked.")) else if (href_list["declaretreatment"] && (!locked || issilicon(usr))) declare_treatment = !declare_treatment @@ -242,9 +254,9 @@ . = ..() if(!emagged) if(user) - to_chat(user, "You short out [src]'s reagent synthesis circuits.") - visible_message("[src] buzzes oddly!") - flick("medibot_spark", src) + to_chat(user, SPAN_WARNING("You short out [src]'s reagent synthesis circuits.")) + visible_message(SPAN_WARNING("[src] buzzes oddly!")) + flick_overlay("medibot_spark", src) patient = null currently_healing = 0 emagged = 1 @@ -254,11 +266,13 @@ ignored |= user /mob/living/bot/medbot/explode() - on = 0 - visible_message("[src] blows apart!") + on = FALSE + visible_message(SPAN_DANGER("\The [src] blows apart!")) var/turf/Tsec = get_turf(src) - - new /obj/item/storage/firstaid(Tsec) + if(firstaid_item) + firstaid_item.forceMove(Tsec) + firstaid_item.contents = null + firstaid_item = null new /obj/item/device/assembly/prox_sensor(Tsec) new /obj/item/device/healthanalyzer(Tsec) if (prob(50)) @@ -320,34 +334,27 @@ return if(contents.len >= 1) - to_chat(user, "You need to empty [src] out first.") + to_chat(user, SPAN_NOTICE("You need to empty [src] out first.")) return var/obj/item/firstaid_arm_assembly/A = new /obj/item/firstaid_arm_assembly - if(istype(src, /obj/item/storage/firstaid/fire)) - A.skin = "ointment" - else if(istype(src, /obj/item/storage/firstaid/toxin)) - A.skin = "tox" - else if(istype(src, /obj/item/storage/firstaid/o2)) - A.skin = "o2" - - if(A.skin) - A.add_overlay("kit_skin_[A.skin]") + A.underlays += image(icon, icon_state) + A.firstaid_item = src qdel(S) user.put_in_hands(A) - to_chat(user, "You add the robot arm to the first aid kit.") + to_chat(user, SPAN_NOTICE("You add the robot arm to the first aid kit.")) qdel(src) /obj/item/firstaid_arm_assembly name = "first aid/robot arm assembly" desc = "A first aid kit with a robot arm permanently grafted to it." - icon = 'icons/obj/aibots.dmi' + icon = 'icons/mob/npc/aibots.dmi' icon_state = "firstaid_arm" + w_class = ITEMSIZE_NORMAL var/build_step = 0 var/created_name = "Medibot" //To preserve the name if it's a unique medbot I guess - var/skin = null //Same as medbot, set to tox or ointment for the respective kits. - w_class = ITEMSIZE_NORMAL + var/obj/item/storage/firstaid/firstaid_item // store the firstaid type if it blows up /obj/item/firstaid_arm_assembly/attackby(obj/item/W as obj, mob/user as mob) ..() @@ -365,20 +372,25 @@ user.drop_from_inventory(W,get_turf(src)) qdel(W) build_step++ - to_chat(user, "You add the health sensor to [src].") - name = "First aid/robot arm/health analyzer assembly" - add_overlay("na_scanner") + to_chat(user, SPAN_NOTICE("You add the health sensor to [src].")) + name = "first-aid/robot arm/health analyzer assembly" + var/matrix/M = matrix() + var/image/ha_image = image('icons/obj/device.dmi', "health") + M.Translate(5, 0) + ha_image.transform = M + underlays += ha_image return 1 if(1) if(isprox(W)) user.drop_from_inventory(W,get_turf(src)) qdel(W) - to_chat(user, "You complete the Medibot! Beep boop.") + to_chat(user, SPAN_NOTICE("You complete the Medibot! Beep boop.")) var/turf/T = get_turf(src) var/mob/living/bot/medbot/S = new /mob/living/bot/medbot(T) - S.skin = skin S.name = created_name + S.underlays = src.underlays S.update_icon() + S.firstaid_item = firstaid_item qdel(src) return 1 diff --git a/html/changelogs/wezzy_radarputamaskon.yml b/html/changelogs/wezzy_radarputamaskon.yml new file mode 100644 index 00000000000..a0db6db6c38 --- /dev/null +++ b/html/changelogs/wezzy_radarputamaskon.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Wowzewow(Wezzy) + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds new sprites and updates sprite generation for medbots." diff --git a/icons/mob/npc/aibots.dmi b/icons/mob/npc/aibots.dmi index 7a6a723c0f0..b06da66797c 100644 Binary files a/icons/mob/npc/aibots.dmi and b/icons/mob/npc/aibots.dmi differ diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi deleted file mode 100644 index 980abdab750..00000000000 Binary files a/icons/obj/aibots.dmi and /dev/null differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index c2056a25b2a..cbf4c164ec2 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ