diff --git a/_maps/away_missions/140x140/snow_outpost.dmm b/_maps/away_missions/140x140/snow_outpost.dmm index 9921493f453..f2c2c6c109d 100644 --- a/_maps/away_missions/140x140/snow_outpost.dmm +++ b/_maps/away_missions/140x140/snow_outpost.dmm @@ -1320,7 +1320,7 @@ /area/awaymission/snow_outpost/powered) "eB" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/effect/floor_decal/corner/green/border{ icon_state = "bordercolor"; dir = 10 diff --git a/_maps/away_missions/archive/jungle.dmm b/_maps/away_missions/archive/jungle.dmm index 08c2c0e2bce..98f944c2fa9 100644 --- a/_maps/away_missions/archive/jungle.dmm +++ b/_maps/away_missions/archive/jungle.dmm @@ -533,7 +533,7 @@ /turf/simulated/floor/outdoors/grass, /area/jungle) "cT" = ( -/obj/item/firstaid_arm_assembly, +/obj/item/bot_assembly/medibot, /turf/simulated/floor/outdoors/grass, /area/jungle) "cU" = ( diff --git a/_maps/away_missions/archive/stationCollision.dmm b/_maps/away_missions/archive/stationCollision.dmm index 3fdffe2a48c..3aa1409ce8c 100644 --- a/_maps/away_missions/archive/stationCollision.dmm +++ b/_maps/away_missions/archive/stationCollision.dmm @@ -275,7 +275,7 @@ /turf/simulated/wall/r_wall, /area/awaymission/research) "bA" = ( -/mob/living/bot/medbot/mysterious{ +/mob/living/bot/medibot/mysterious{ desc = "A dark little medical robot. She looks somewhat underwhelmed."; name = "Nightingale" }, diff --git a/_maps/map_files/tether/tether-03-surface3.dmm b/_maps/map_files/tether/tether-03-surface3.dmm index f95326092f2..0b09ecc0bc5 100644 --- a/_maps/map_files/tether/tether-03-surface3.dmm +++ b/_maps/map_files/tether/tether-03-surface3.dmm @@ -847,7 +847,7 @@ /area/tether/surfacebase/medical/triage) "abp" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/radio/intercom{ dir = 4; name = "Station Intercom (General)"; @@ -26017,7 +26017,7 @@ /area/tether/surfacebase/medical/surgery2) "aUH" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/radio/intercom{ dir = 8; pixel_x = -24 @@ -34569,7 +34569,7 @@ /area/tether/surfacebase/medical/triage) "blM" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/radio/intercom{ dir = 4; name = "Station Intercom (General)"; @@ -40462,7 +40462,7 @@ /area/crew_quarters/recreation_area) "oTu" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/paper{ desc = ""; info = "Stop installing NIFs in here you clods! Unless it's on a synth. Otherwise, STOP DOING IT! You're killing people! -Management"; diff --git a/_maps/map_files/tether/tether_misc.dmm b/_maps/map_files/tether/tether_misc.dmm index 198642015da..a22738332e1 100644 --- a/_maps/map_files/tether/tether_misc.dmm +++ b/_maps/map_files/tether/tether_misc.dmm @@ -6115,7 +6115,7 @@ /area/centcom/simulated/medical) "XQ" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled/white, /area/centcom/simulated/medical) "XR" = ( diff --git a/_maps/map_files/triumph/triumph-03-deck3.dmm b/_maps/map_files/triumph/triumph-03-deck3.dmm index 576fcd7e6dc..896c70ded70 100644 --- a/_maps/map_files/triumph/triumph-03-deck3.dmm +++ b/_maps/map_files/triumph/triumph-03-deck3.dmm @@ -4297,7 +4297,7 @@ /area/medical/psych_ward) "dEx" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled, /area/medical/surgery) "dEG" = ( @@ -4536,7 +4536,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/autopsy_scanner, /turf/simulated/floor/tiled, /area/medical/morgue) @@ -6917,7 +6917,7 @@ pixel_y = 22 }, /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled, /area/medical/surgery2) "fIP" = ( @@ -11925,7 +11925,7 @@ /area/rnd/test_area) "jRc" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/surgical/bioregen, /turf/simulated/floor/tiled, /area/medical/surgery2) @@ -18631,7 +18631,7 @@ /area/teleporter/departing) "pdK" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/paper{ desc = ""; info = "Stop installing NIFs in here you clods! Unless it's on a synth. Otherwise, STOP DOING IT! You're killing people! -Management"; @@ -19837,7 +19837,7 @@ /area/medical/sleeper) "pPl" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/surgical/bioregen, /turf/simulated/floor/tiled, /area/medical/surgery) @@ -26505,7 +26505,7 @@ /turf/simulated/floor/plating, /area/rnd/test_area) "uJg" = ( -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/structure/table/standard, /obj/item/autopsy_scanner, /obj/item/storage/box/bodybags, @@ -26746,6 +26746,10 @@ }, /turf/simulated/floor/tiled, /area/rnd/xenobiology/xenoflora/lab_atmos) +"uRJ" = ( +/mob/living/bot/medibot/medass, +/turf/simulated/floor/tiled/white, +/area/medical/sleeper) "uRN" = ( /obj/machinery/light{ dir = 4 @@ -27338,7 +27342,7 @@ /area/medical/ward) "vol" = ( /obj/structure/table/steel, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/plating, /area/maintenance/research) "voq" = ( @@ -40953,7 +40957,7 @@ ujM rMx saO iHe -vMK +uRJ mzf fWw dTK diff --git a/_maps/map_files/triumph/triumph-05-flagship.dmm b/_maps/map_files/triumph/triumph-05-flagship.dmm index 51ae452f271..540472d11f3 100644 --- a/_maps/map_files/triumph/triumph-05-flagship.dmm +++ b/_maps/map_files/triumph/triumph-05-flagship.dmm @@ -369,7 +369,7 @@ /obj/item/clothing/mask/surgical, /obj/item/stack/nanopaste, /obj/item/stack/nanopaste, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/unsimulated/floor{ dir = 5; icon_state = "vault" diff --git a/_maps/map_levels/140x140/lavaland_east.dmm b/_maps/map_levels/140x140/lavaland_east.dmm index cfdcc15fc33..7e759cca460 100644 --- a/_maps/map_levels/140x140/lavaland_east.dmm +++ b/_maps/map_levels/140x140/lavaland_east.dmm @@ -2531,7 +2531,7 @@ /area/lavaland/east/colony) "XF" = ( /obj/structure/table/glass, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/effect/floor_decal/borderfloorwhite{ dir = 4 }, diff --git a/_maps/map_levels/140x140/talon/talon1.dmm b/_maps/map_levels/140x140/talon/talon1.dmm index 4f4be3cac16..f2c602f0e78 100644 --- a/_maps/map_levels/140x140/talon/talon1.dmm +++ b/_maps/map_levels/140x140/talon/talon1.dmm @@ -3250,7 +3250,7 @@ dir = 1 }, /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/stack/nanopaste{ pixel_x = -7; pixel_y = -4 diff --git a/_maps/map_levels/140x140/tradeport.dmm b/_maps/map_levels/140x140/tradeport.dmm index 71a5a1b81b0..ee5b9f32f24 100644 --- a/_maps/map_levels/140x140/tradeport.dmm +++ b/_maps/map_levels/140x140/tradeport.dmm @@ -6014,7 +6014,7 @@ /area/tradeport/atmospherics) "vC" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/stack/nanopaste{ pixel_x = -7; pixel_y = -4 diff --git a/_maps/submaps/level_specific/class_d/Possesed_mech_cave.dmm b/_maps/submaps/level_specific/class_d/Possesed_mech_cave.dmm index c0f36568908..d6d0a61b7f5 100644 --- a/_maps/submaps/level_specific/class_d/Possesed_mech_cave.dmm +++ b/_maps/submaps/level_specific/class_d/Possesed_mech_cave.dmm @@ -215,7 +215,7 @@ /area/class_d/explored/underground) "PI" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/classd/indoors, /area/class_d/explored/underground) "PU" = ( diff --git a/_maps/submaps/level_specific/debrisfield/ship_med_crashed.dmm b/_maps/submaps/level_specific/debrisfield/ship_med_crashed.dmm index 47289020082..16eb483a3b6 100644 --- a/_maps/submaps/level_specific/debrisfield/ship_med_crashed.dmm +++ b/_maps/submaps/level_specific/debrisfield/ship_med_crashed.dmm @@ -129,7 +129,7 @@ /turf/simulated/shuttle/floor/airless, /area/space/debrisfield/medshuttlecrash) "B" = ( -/mob/living/bot/medbot{ +/mob/living/bot/medibot{ name = "Dr. Crusty" }, /turf/simulated/shuttle/floor/airless, diff --git a/_maps/submaps/level_specific/debrisfield_vr/ship_med_crashed.dmm b/_maps/submaps/level_specific/debrisfield_vr/ship_med_crashed.dmm index 7238c75bf1c..7a789892b8a 100644 --- a/_maps/submaps/level_specific/debrisfield_vr/ship_med_crashed.dmm +++ b/_maps/submaps/level_specific/debrisfield_vr/ship_med_crashed.dmm @@ -55,7 +55,7 @@ /area/submap/debrisfield_vr/misc_debris) "n" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/bot/medbot{ +/mob/living/bot/medibot{ name = "Dr. Crusty" }, /turf/simulated/shuttle/plating/airless, diff --git a/_maps/submaps/level_specific/lavaland/idleruins2.dmm b/_maps/submaps/level_specific/lavaland/idleruins2.dmm index b0ec8d0ac7d..5425e6d1423 100644 --- a/_maps/submaps/level_specific/lavaland/idleruins2.dmm +++ b/_maps/submaps/level_specific/lavaland/idleruins2.dmm @@ -86,7 +86,7 @@ /turf/simulated/floor/plating/lavaland, /area/lavaland/idleruins) "yQ" = ( -/mob/living/bot/medbot{ +/mob/living/bot/medibot{ name = "Dr. Crusty" }, /turf/simulated/shuttle/floor/lavaland, diff --git a/_maps/submaps/level_specific/virgo2/Blackshuttledown.dmm b/_maps/submaps/level_specific/virgo2/Blackshuttledown.dmm index 35e44b9977f..85040a321bf 100644 --- a/_maps/submaps/level_specific/virgo2/Blackshuttledown.dmm +++ b/_maps/submaps/level_specific/virgo2/Blackshuttledown.dmm @@ -186,7 +186,7 @@ /area/submap/virgo2/Blackshuttledown) "aG" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled/steel, /area/submap/virgo2/Blackshuttledown) "aH" = ( diff --git a/_maps/submaps/level_specific/virgo2/Rockybase.dmm b/_maps/submaps/level_specific/virgo2/Rockybase.dmm index 388491515d7..658a554a262 100644 --- a/_maps/submaps/level_specific/virgo2/Rockybase.dmm +++ b/_maps/submaps/level_specific/virgo2/Rockybase.dmm @@ -785,7 +785,7 @@ /area/submap/virgo2/Rockybase) "cL" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/bot/medbot, +/mob/living/bot/medibot, /turf/simulated/floor/tiled/techfloor/virgo2, /area/submap/virgo2/Rockybase) "cM" = ( diff --git a/_maps/submaps/mountains/CrashedMedShuttle1.dmm b/_maps/submaps/mountains/CrashedMedShuttle1.dmm index 8d48be6a0b5..6971cb3632f 100644 --- a/_maps/submaps/mountains/CrashedMedShuttle1.dmm +++ b/_maps/submaps/mountains/CrashedMedShuttle1.dmm @@ -130,7 +130,7 @@ /area/submap/CrashedMedShuttle) "az" = ( /obj/effect/decal/cleanable/blood/gibs/robot, -/obj/item/firstaid_arm_assembly, +/obj/item/bot_assembly/medibot, /mob/living/simple_mob/animal/giant_spider/frost, /turf/simulated/shuttle/floor/white, /area/submap/CrashedMedShuttle) @@ -145,7 +145,7 @@ /area/submap/CrashedMedShuttle) "aC" = ( /obj/effect/decal/cleanable/blood/oil, -/obj/item/firstaid_arm_assembly, +/obj/item/bot_assembly/medibot, /turf/simulated/shuttle/floor/white, /area/submap/CrashedMedShuttle) "aD" = ( diff --git a/_maps/submaps/mountains/CrashedMedShuttle1_vr.dmm b/_maps/submaps/mountains/CrashedMedShuttle1_vr.dmm index bbca56a8b7c..dbcd31c9a6a 100644 --- a/_maps/submaps/mountains/CrashedMedShuttle1_vr.dmm +++ b/_maps/submaps/mountains/CrashedMedShuttle1_vr.dmm @@ -130,7 +130,7 @@ /area/submap/CrashedMedShuttle) "az" = ( /obj/effect/decal/cleanable/blood/gibs/robot, -/obj/item/firstaid_arm_assembly, +/obj/item/bot_assembly/medibot, /mob/living/simple_mob/animal/giant_spider/frost, /turf/simulated/shuttle/floor/white, /area/submap/CrashedMedShuttle) @@ -145,7 +145,7 @@ /area/submap/CrashedMedShuttle) "aC" = ( /obj/effect/decal/cleanable/blood/oil, -/obj/item/firstaid_arm_assembly, +/obj/item/bot_assembly/medibot, /turf/simulated/shuttle/floor/white, /area/submap/CrashedMedShuttle) "aD" = ( diff --git a/_maps/submaps/wilderness/Blackshuttledown.dmm b/_maps/submaps/wilderness/Blackshuttledown.dmm index 4ff9547e805..75268de5fd1 100644 --- a/_maps/submaps/wilderness/Blackshuttledown.dmm +++ b/_maps/submaps/wilderness/Blackshuttledown.dmm @@ -298,7 +298,7 @@ /area/submap/Blackshuttledown) "aV" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/effect/floor_decal/corner/green/border{ icon_state = "bordercolor"; dir = 10 diff --git a/_maps/submaps/wilderness/Blueshuttledown.dmm b/_maps/submaps/wilderness/Blueshuttledown.dmm index 65a7e46472a..1fd76f0f195 100644 --- a/_maps/submaps/wilderness/Blueshuttledown.dmm +++ b/_maps/submaps/wilderness/Blueshuttledown.dmm @@ -300,7 +300,7 @@ /area/submap/Blackshuttledown) "aV" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/effect/floor_decal/corner/green/border{ icon_state = "bordercolor"; dir = 10 diff --git a/_maps/submaps/wilderness/Rockybase.dmm b/_maps/submaps/wilderness/Rockybase.dmm index ae836c2afd1..5683a1578c2 100644 --- a/_maps/submaps/wilderness/Rockybase.dmm +++ b/_maps/submaps/wilderness/Rockybase.dmm @@ -1060,7 +1060,7 @@ /area/submap/Rockybase) "dB" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/bot/medbot{ +/mob/living/bot/medibot{ faction = "malf_drone" }, /turf/simulated/floor/tiled, diff --git a/_maps/templates/admin/dhael_centcom.dmm b/_maps/templates/admin/dhael_centcom.dmm index 7e64b90b953..6fd7c0e000e 100644 --- a/_maps/templates/admin/dhael_centcom.dmm +++ b/_maps/templates/admin/dhael_centcom.dmm @@ -226,7 +226,7 @@ /obj/item/clothing/mask/surgical, /obj/item/stack/nanopaste/advanced, /obj/item/stack/nanopaste/advanced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/unsimulated/floor{ dir = 5; icon_state = "vault" diff --git a/_maps/templates/admin/ert.dmm b/_maps/templates/admin/ert.dmm index ee85b447097..bf06e694ef0 100644 --- a/_maps/templates/admin/ert.dmm +++ b/_maps/templates/admin/ert.dmm @@ -137,7 +137,7 @@ /area/ship/ert/hangar) "aQ" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/machinery/light{ dir = 8 }, @@ -4015,8 +4015,8 @@ /area/ship/ert/atmos) "DM" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/surgical/bone_clamp, /obj/item/surgical/bone_clamp, /obj/item/surgical/scalpel/manager, diff --git a/_maps/templates/admin/ert_base.dmm b/_maps/templates/admin/ert_base.dmm index 5d3049cc084..4477f737203 100644 --- a/_maps/templates/admin/ert_base.dmm +++ b/_maps/templates/admin/ert_base.dmm @@ -1330,7 +1330,7 @@ dir = 4 }, /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/stack/nanopaste, /turf/simulated/shuttle/floor/black, /area/shuttle/specops/centcom) diff --git a/_maps/templates/admin/kk_mercship.dmm b/_maps/templates/admin/kk_mercship.dmm index 8aaef941718..54a930c339d 100644 --- a/_maps/templates/admin/kk_mercship.dmm +++ b/_maps/templates/admin/kk_mercship.dmm @@ -2241,7 +2241,7 @@ /area/ship/manta/recreation) "kF" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/stack/nanopaste/advanced, /obj/item/surgical/bone_clamp, /obj/item/surgical/scalpel/manager, diff --git a/_maps/templates/admin/wizard.dmm b/_maps/templates/admin/wizard.dmm index f8f45bb3274..6e828f6cc0a 100644 --- a/_maps/templates/admin/wizard.dmm +++ b/_maps/templates/admin/wizard.dmm @@ -1067,7 +1067,7 @@ }, /area/wizard_station) "cw" = ( -/obj/item/firstaid_arm_assembly, +/obj/item/bot_assembly/medibot, /turf/unsimulated/floor{ icon_state = "vault"; dir = 5 diff --git a/_maps/templates/shelters/shelter_4.dmm b/_maps/templates/shelters/shelter_4.dmm index efb9b66e990..6e37b98fdf2 100644 --- a/_maps/templates/shelters/shelter_4.dmm +++ b/_maps/templates/shelters/shelter_4.dmm @@ -176,7 +176,7 @@ /area/survivalpod) "s" = ( /obj/structure/table/survival_pod, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/structure/sink/kitchen{ icon_state = "sink_alt"; dir = 4; diff --git a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm index 43da9b8cd52..b9a1103a8fd 100644 --- a/_maps/templates/shuttles/overmaps/generic/cruiser.dmm +++ b/_maps/templates/shuttles/overmaps/generic/cruiser.dmm @@ -2890,7 +2890,7 @@ /area/mothership/security) "gb" = ( /obj/structure/table/steel_reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/reagent_containers/spray/cleaner{ desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; diff --git a/_maps/templates/shuttles/overmaps/generic/curashuttle.dmm b/_maps/templates/shuttles/overmaps/generic/curashuttle.dmm index 845272d820c..f986d3ffa8f 100644 --- a/_maps/templates/shuttles/overmaps/generic/curashuttle.dmm +++ b/_maps/templates/shuttles/overmaps/generic/curashuttle.dmm @@ -139,7 +139,7 @@ /turf/simulated/wall/rdshull, /area/shuttle/curabitur/curashuttle/cockpit) "ar" = ( -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/surgical/scalpel/manager, /obj/item/surgical/scalpel/ripper, /obj/item/surgical/circular_saw/manager, diff --git a/_maps/templates/shuttles/overmaps/generic/itglight.dmm b/_maps/templates/shuttles/overmaps/generic/itglight.dmm index 70de691d36b..cb32f9df128 100644 --- a/_maps/templates/shuttles/overmaps/generic/itglight.dmm +++ b/_maps/templates/shuttles/overmaps/generic/itglight.dmm @@ -4065,7 +4065,7 @@ /area/itglight/passengersleeping) "AH" = ( /obj/structure/table/standard, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/healthanalyzer, /obj/item/reagent_containers/spray/cleaner{ desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; diff --git a/_maps/templates/shuttles/overmaps/generic/mercenarybase.dmm b/_maps/templates/shuttles/overmaps/generic/mercenarybase.dmm index 43b9d00aace..a8ca86121d5 100644 --- a/_maps/templates/shuttles/overmaps/generic/mercenarybase.dmm +++ b/_maps/templates/shuttles/overmaps/generic/mercenarybase.dmm @@ -2805,7 +2805,7 @@ /area/mercbase/barracks) "ma" = ( /obj/structure/table/reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled/dark, /area/mercbase/medicalOR) "mb" = ( diff --git a/_maps/templates/shuttles/overmaps/generic/mercship.dmm b/_maps/templates/shuttles/overmaps/generic/mercship.dmm index 19168a3bb3c..5e2d49d354f 100644 --- a/_maps/templates/shuttles/overmaps/generic/mercship.dmm +++ b/_maps/templates/shuttles/overmaps/generic/mercship.dmm @@ -4275,7 +4275,7 @@ /obj/effect/floor_decal/borderfloorblack{ dir = 6 }, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled/white, /area/ship/mercenary/fighter) "hH" = ( diff --git a/_maps/templates/shuttles/overmaps/generic/shelter_6.dmm b/_maps/templates/shuttles/overmaps/generic/shelter_6.dmm index b5d0bba6cfb..5aeb315517b 100644 --- a/_maps/templates/shuttles/overmaps/generic/shelter_6.dmm +++ b/_maps/templates/shuttles/overmaps/generic/shelter_6.dmm @@ -898,7 +898,7 @@ /obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/regular, /obj/item/storage/firstaid/regular, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/storage/mre/menu11, /obj/item/storage/mre/menu11, /obj/item/storage/mre/menu11, @@ -1459,7 +1459,7 @@ /obj/item/reagent_containers/blood/prelabeled/OMinus, /obj/item/reagent_containers/blood/prelabeled/OMinus, /obj/item/storage/box/gloves, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/reagent_containers/spray/cleaner{ desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; @@ -1632,7 +1632,7 @@ /turf/simulated/floor/tiled/white, /area/shuttle/tabiranth) "bD" = ( -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /obj/item/reagent_containers/spray/cleaner{ desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; diff --git a/_maps/templates/shuttles/overmaps/generic/vespa.dmm b/_maps/templates/shuttles/overmaps/generic/vespa.dmm index f52dfbb6f9c..b9c3d137b0e 100644 --- a/_maps/templates/shuttles/overmaps/generic/vespa.dmm +++ b/_maps/templates/shuttles/overmaps/generic/vespa.dmm @@ -10707,7 +10707,7 @@ dir = 8 }, /obj/structure/table/reinforced, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled/white, /area/ship/expe/medicalsur) "tJ" = ( @@ -10728,7 +10728,7 @@ icon_state = "bordercolor"; dir = 4 }, -/obj/item/storage/firstaid/surgery, +/obj/item/storage/toolbox/surgery, /turf/simulated/floor/tiled/white, /area/ship/expe/medicalsur) "tM" = ( diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm new file mode 100644 index 00000000000..771bbd6e5ae --- /dev/null +++ b/code/__DEFINES/robots.dm @@ -0,0 +1,79 @@ +/*ALL DEFINES FOR AIS, CYBORGS, AND BOTS*/ + +//Mode defines. If you add a new one make sure you update mode_name in /mob/living/simple_animal/bot +/* +#define BOT_IDLE 0 // idle +#define BOT_HUNT 1 // found target, hunting +#define BOT_PREP_ARREST 2 // at target, preparing to arrest +#define BOT_ARREST 3 // arresting target +#define BOT_START_PATROL 4 // start patrol +#define BOT_PATROL 5 // patrolling +#define BOT_SUMMON 6 // summoned by PDA +#define BOT_CLEANING 7 // cleaning (cleanbots) +#define BOT_REPAIRING 8 // repairing hull breaches (floorbots) +#define BOT_MOVING 9 // for clean/floor/med bots, when moving. +#define BOT_HEALING 10 // healing people (medibots) +#define BOT_RESPONDING 11 // responding to a call from the AI +#define BOT_DELIVER 12 // moving to deliver +#define BOT_GO_HOME 13 // returning to home +#define BOT_BLOCKED 14 // blocked +#define BOT_NAV 15 // computing navigation +#define BOT_WAIT_FOR_NAV 16 // waiting for nav computation +#define BOT_NO_ROUTE 17 // no destination beacon found (or no route) +#define BOT_SHOWERSTANCE 18 // cleaning unhygienic humans +#define BOT_TIPPED 19 // someone tipped a medibot over ;_; +*/ +//Bot types +#define SEC_BOT (1<<0) // Secutritrons (Beepsky) and ED-209s +#define MULE_BOT (1<<1) // MULEbots +#define FLOOR_BOT (1<<2) // Floorbots +#define CLEAN_BOT (1<<3) // Cleanbots +#define MED_BOT (1<<4) // Medibots +#define HONK_BOT (1<<5) // Honkbots & ED-Honks +#define FIRE_BOT (1<<6) // Firebots +#define HYGIENE_BOT (1<<7) // Hygienebots +/* +//AI notification defines +#define NEW_BORG 1 +#define NEW_MODULE 2 +#define RENAME 3 +#define AI_SHELL 4 +#define DISCONNECT 5 +*/ +//Assembly defines +#define ASSEMBLY_FIRST_STEP 0 +#define ASSEMBLY_SECOND_STEP 1 +#define ASSEMBLY_THIRD_STEP 2 +#define ASSEMBLY_FOURTH_STEP 3 +#define ASSEMBLY_FIFTH_STEP 4 +/* +//Bot Upgrade defines +#define UPGRADE_CLEANER_ADVANCED_MOP (1<<0) +#define UPGRADE_CLEANER_BROOM (1<<1) + +#define UPGRADE_MEDICAL_HYPOSPRAY (1<<0) +#define UPGRADE_MEDICAL_CHEM_BOARD (1<<1) +#define UPGRADE_MEDICAL_CRYO_BOARD (1<<2) +#define UPGRADE_MEDICAL_CHEM_MASTER (1<<3) +#define UPGRADE_MEDICAL_SLEEP_BOARD (1<<4) +#define UPGRADE_MEDICAL_PIERERCING (1<<5) + +#define UPGRADE_FLOOR_ARTBOX (1<<0) +#define UPGRADE_FLOOR_SYNDIBOX (1<<1) + +//Checks to determine borg availability depending on the server's config. These are defines in the interest of reducing copypasta +#define BORG_SEC_AVAILABLE (!CONFIG_GET(flag/disable_secborg) && GLOB.security_level >= CONFIG_GET(number/minimum_secborg_alert)) + +//silicon_priviledges flags +#define PRIVILEGES_SILICON (1<<0) +#define PRIVILEGES_PAI (1<<1) +#define PRIVILEGES_BOT (1<<2) +#define PRIVILEGES_DRONE (1<<3) + +#define BORG_LAMP_CD_RESET -1 //special value to reset cyborg's lamp_cooldown + +/// Defines for whether or not module slots are broken. +#define BORG_MODULE_ALL_DISABLED (1<<0) +#define BORG_MODULE_TWO_DISABLED (1<<1) +#define BORG_MODULE_THREE_DISABLED (1<<2) +*/ diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index a0435674961..2e029de8497 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -153,7 +153,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_OIL_FRIED "oil_fried" #define TRAIT_MEDICAL_HUD "med_hud" #define TRAIT_SECURITY_HUD "sec_hud" -#define TRAIT_MEDIBOTCOMINGTHROUGH "medbot" //Is a medbot healing you +#define TRAIT_MEDIBOTCOMINGTHROUGH "medibot" //Is a medibot healing you #define TRAIT_PASSTABLE "passtable" //non-mob traits diff --git a/code/_globalvars/lists/misc.dm b/code/_globalvars/lists/misc.dm index b35405d3e06..92bef9e0099 100644 --- a/code/_globalvars/lists/misc.dm +++ b/code/_globalvars/lists/misc.dm @@ -4,3 +4,6 @@ GLOBAL_LIST_EMPTY(meteor_list) /// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc. GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value. + +// Reference list for disposal sort junctions. Filled up by sorting junction's New() +GLOBAL_LIST_EMPTY(tagger_locations) diff --git a/code/controllers/subsystems/circuits.dm b/code/controllers/subsystems/circuits.dm index 82767fe5f4e..f17ebf9040d 100644 --- a/code/controllers/subsystems/circuits.dm +++ b/code/controllers/subsystems/circuits.dm @@ -73,7 +73,7 @@ SUBSYSTEM_DEF(circuit) /obj/item/electronic_assembly/drone/default, /obj/item/electronic_assembly/drone/arms, /obj/item/electronic_assembly/drone/secbot, - /obj/item/electronic_assembly/drone/medbot, + /obj/item/electronic_assembly/drone/medibot, /obj/item/electronic_assembly/drone/genbot, /obj/item/electronic_assembly/drone/android, /obj/item/electronic_assembly/wallmount/tiny, diff --git a/code/datums/components/crafting/recipes/recipes_robot.dm b/code/datums/components/crafting/recipes/recipes_robot.dm index 5b00b99c279..b38dec44ed4 100644 --- a/code/datums/components/crafting/recipes/recipes_robot.dm +++ b/code/datums/components/crafting/recipes/recipes_robot.dm @@ -46,9 +46,9 @@ time = 40 category = CAT_ROBOT -/datum/crafting_recipe/medbot - name = "Medbot" - result = /mob/living/bot/medbot +/datum/crafting_recipe/medibot + name = "Medibot" + result = /mob/living/bot/medibot reqs = list(/obj/item/healthanalyzer = 1, /obj/item/storage/firstaid = 1, /obj/item/assembly/prox_sensor = 1, diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index 5815b0a5241..7145d057135 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -329,7 +329,7 @@ /obj/item/healthanalyzer/apidean = 1, /obj/item/analyzer/apidean = 1, /obj/item/reagent_scanner/apidean = 1, - /mob/living/bot/medbot/apidean = 1, + /mob/living/bot/medibot/apidean = 1, /obj/item/reagent_containers/food/drinks/bottle/ambrosia_mead = 2, /obj/item/reagent_containers/food/drinks/bottle/royaljelly = 1 ) diff --git a/code/datums/uplink/medical.dm b/code/datums/uplink/medical.dm index 2af71c86c40..0784e1037d5 100644 --- a/code/datums/uplink/medical.dm +++ b/code/datums/uplink/medical.dm @@ -62,7 +62,7 @@ /datum/uplink_item/item/medical/surgery name = "Surgery kit" item_cost = 45 - path = /obj/item/storage/firstaid/surgery + path = /obj/item/storage/toolbox/surgery /datum/uplink_item/item/medical/combat name = "Combat medical kit" @@ -158,4 +158,3 @@ name = "Combat organ kit" item_cost = 120 path = /obj/item/storage/firstaid/insiderepair - diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index ce71863cc93..f4a8a7a8fe0 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -63,7 +63,7 @@
List Records

Virus Database -
Medbot Tracking +
Medibot Tracking

Record Maintenance
{Log Out}
@@ -123,7 +123,7 @@ dat += "Back" dat += "
Medical Robots:" var/bdat = null - for(var/mob/living/bot/medbot/M in GLOB.mob_list) + for(var/mob/living/bot/medibot/M in GLOB.mob_list) if(M.z != src.z) continue //only find medibots on the same z-level as the computer var/turf/bl = get_turf(M) diff --git a/code/game/machinery/computer3/computers/medical.dm b/code/game/machinery/computer3/computers/medical.dm index a849c10bdad..7d7137755a8 100644 --- a/code/game/machinery/computer3/computers/medical.dm +++ b/code/game/machinery/computer3/computers/medical.dm @@ -69,7 +69,7 @@
List Records

Virus Database -
Medbot Tracking +
Medibot Tracking

Record Maintenance
{Log Out}
@@ -126,7 +126,7 @@ dat += "Back" dat += "
Medical Robots:" var/bdat = null - for(var/mob/living/bot/medbot/M in GLOB.mob_list) + for(var/mob/living/bot/medibot/M in GLOB.mob_list) if(M.z != computer.z) continue //only find medibots on the same z-level as the computer var/turf/bl = get_turf(M) diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm index bea3bbfbd53..8eec91baf18 100644 --- a/code/game/mecha/mech_prosthetics.dm +++ b/code/game/mecha/mech_prosthetics.dm @@ -3,8 +3,8 @@ icon_state = "prosfab" name = "Prosthetics Fabricator" desc = "A machine used for construction of prosthetics." - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE use_power = USE_POWER_IDLE idle_power_usage = 20 active_power_usage = 5000 @@ -20,19 +20,19 @@ materials = list( DEFAULT_WALL_MATERIAL = 0, - "glass" = 0, - "plastic" = 0, + MAT_GLASS = 0, + MAT_PLASTIC = 0, MAT_GRAPHITE = 0, MAT_PLASTEEL = 0, - "gold" = 0, - "silver" = 0, + MAT_GOLD = 0, + MAT_SILVER = 0, MAT_COPPER = 0, MAT_LEAD = 0, - "osmium" = 0, - "diamond" = 0, + MAT_OSMIUM = 0, + MAT_DIAMOND = 0, MAT_DURASTEEL = 0, - "phoron" = 0, - "uranium" = 0, + MAT_PHORON = 0, + MAT_URANIUM = 0, MAT_VERDANTIUM = 0, MAT_MORPHIUM = 0) res_max_amount = 200000 @@ -49,9 +49,9 @@ "Vehicle", "Rigsuit", "Phazon", - "Gopher", // VOREStation Add - "Polecat", // VOREStation Add - "Weasel", // VOREStation Add + "Gopher", + "Polecat", + "Weasel", "Exosuit Equipment", "Exosuit Internals", "Exosuit Ammunition", @@ -132,29 +132,29 @@ /obj/machinery/mecha_part_fabricator/pros/attackby(var/obj/item/I, var/mob/user) if(..()) - return 1 + return TRUE if(istype(I,/obj/item/disk/limb)) var/obj/item/disk/limb/D = I if(!D.company || !(D.company in all_robolimbs)) - to_chat(user, "This disk seems to be corrupted!") + to_chat(user, SPAN_WARNING("This disk seems to be corrupted!")) else - to_chat(user, "Installing blueprint files for [D.company]...") + to_chat(user, SPAN_NOTICE("Installing blueprint files for [D.company]...")) if(do_after(user,50,src)) var/datum/robolimb/R = all_robolimbs[D.company] R.unavailable_to_build = 0 - to_chat(user, "Installed [D.company] blueprints!") + to_chat(user, SPAN_NOTICE("Installed [D.company] blueprints!")) qdel(I) return if(istype(I,/obj/item/disk/species)) var/obj/item/disk/species/D = I if(!D.species || !(D.species in GLOB.all_species)) - to_chat(user, "This disk seems to be corrupted!") + to_chat(user, SPAN_WARNING("This disk seems to be corrupted!")) else - to_chat(user, "Uploading modification files for [D.species]...") + to_chat(user, SPAN_NOTICE("Uploading modification files for [D.species]...")) if(do_after(user,50,src)) species_types |= D.species - to_chat(user, "Uploaded [D.species] files!") + to_chat(user, SPAN_NOTICE("Uploaded [D.species] files!")) qdel(I) return diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 1610d3fbd35..de27cb03dd9 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -117,10 +117,10 @@ /obj/item/healthanalyzer/advanced ) -/obj/item/storage/firstaid/surgery +/obj/item/storage/toolbox/surgery name = "surgery kit" desc = "Contains tools for surgery. Has precise foam fitting for safe transport and automatically sterilizes the content between uses." - icon = 'icons/obj/storage.dmi' // VOREStation edit + icon = 'icons/obj/storage.dmi' icon_state = "surgerykit" item_state = "firstaid-surgery" max_w_class = ITEMSIZE_NORMAL @@ -145,14 +145,14 @@ /obj/item/surgical/bonegel, /obj/item/surgical/FixOVein, /obj/item/stack/medical/advanced/bruise_pack, - ///obj/item/healthanalyzer/advanced, //VOREStation Removal, + ///obj/item/healthanalyzer/advanced, /obj/item/autopsy_scanner ) /obj/item/storage/firstaid/clotting name = "clotting kit" desc = "Contains chemicals to stop bleeding." - icon_state = "clottingkit" // VOREStation edit + icon_state = "clottingkit" max_storage_space = ITEMSIZE_COST_SMALL * 7 starts_with = list(/obj/item/reagent_containers/hypospray/autoinjector/biginjector/clotting = 8) diff --git a/code/global.dm b/code/global.dm index cec6ecd1277..46b7a1dfcbf 100644 --- a/code/global.dm +++ b/code/global.dm @@ -112,9 +112,6 @@ var/custom_event_msg = null var/DBConnection/dbcon = new() // Feedback database (New database) var/DBConnection/dbcon_old = new() // /tg/station database (Old database) -- see the files in the SQL folder for information on what goes where. -// Reference list for disposal sort junctions. Filled up by sorting junction's New() -/var/list/tagger_locations = list() - // Added for Xenoarchaeology, might be useful for other stuff. var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z") diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index f728e1dff19..f5542b80af4 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -71,7 +71,7 @@ "blank" = 'icons/pda_icons/pda_blank.png', "boom" = 'icons/pda_icons/pda_boom.png', "bucket" = 'icons/pda_icons/pda_bucket.png', - //"medbot" = 'icons/pda_icons/pda_medbot.png', + //"medibot" = 'icons/pda_icons/pda_medbot.png', //"floorbot" = 'icons/pda_icons/pda_floorbot.png', //"cleanbot" = 'icons/pda_icons/pda_cleanbot.png', "crate" = 'icons/pda_icons/pda_crate.png', diff --git a/code/modules/integrated_electronics/core/assemblies/generic.dm b/code/modules/integrated_electronics/core/assemblies/generic.dm index bcc75c6c0a0..8f071f621b7 100644 --- a/code/modules/integrated_electronics/core/assemblies/generic.dm +++ b/code/modules/integrated_electronics/core/assemblies/generic.dm @@ -179,7 +179,7 @@ icon_state = "setup_drone_secbot" desc = "It's a case, for building mobile electronics with. This one resembles a Securitron." -/obj/item/electronic_assembly/drone/medbot +/obj/item/electronic_assembly/drone/medibot name = "type-d electronic drone" icon_state = "setup_drone_medbot" desc = "It's a case, for building mobile electronics with. This one resembles a Medibot." diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 621d6666860..a552334a34e 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -156,7 +156,7 @@ if(!istype(H)) //Invalid input return - if(H in view(get_turf(H))) // Like medbot's analyzer it can be used in range.. + if(H in view(get_turf(H))) // Like medibot's analyzer it can be used in range.. var/total_health = round(H.health/H.getMaxHealth(), 0.01)*100 var/missing_health = H.getMaxHealth() - H.health diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index ff167dab017..5873edcb406 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -233,25 +233,25 @@ spawn_flags = IC_SPAWN_RESEARCH origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_ILLEGAL = 1) -/obj/item/integrated_circuit/output/sound/medbot - name = "medbot sound circuit" - desc = "A miniature speaker is attached to this component, used to annoy patients while they get pricked by a medbot." +/obj/item/integrated_circuit/output/sound/medibot + name = "medibot sound circuit" + desc = "A miniature speaker is attached to this component, used to annoy patients while they get pricked by a medibot." sounds = list( - "surgeon" = 'sound/voice/medbot/msurgeon.ogg', - "radar" = 'sound/voice/medbot/mradar.ogg', - "feel better" = 'sound/voice/medbot/mfeelbetter.ogg', - "patched up" = 'sound/voice/medbot/mpatchedup.ogg', - "injured" = 'sound/voice/medbot/minjured.ogg', - "insult" = 'sound/voice/medbot/minsult.ogg', - "coming" = 'sound/voice/medbot/mcoming.ogg', - "help" = 'sound/voice/medbot/mhelp.ogg', - "live" = 'sound/voice/medbot/mlive.ogg', - "lost" = 'sound/voice/medbot/mlost.ogg', - "flies" = 'sound/voice/medbot/mflies.ogg', - "catch" = 'sound/voice/medbot/mcatch.ogg', - "delicious" = 'sound/voice/medbot/mdelicious.ogg', - "apple" = 'sound/voice/medbot/mapple.ogg', - "no" = 'sound/voice/medbot/mno.ogg', + "surgeon" = 'sound/voice/medibot/msurgeon.ogg', + "radar" = 'sound/voice/medibot/mradar.ogg', + "feel better" = 'sound/voice/medibot/mfeelbetter.ogg', + "patched up" = 'sound/voice/medibot/mpatchedup.ogg', + "injured" = 'sound/voice/medibot/minjured.ogg', + "insult" = 'sound/voice/medibot/minsult.ogg', + "coming" = 'sound/voice/medibot/mcoming.ogg', + "help" = 'sound/voice/medibot/mhelp.ogg', + "live" = 'sound/voice/medibot/mlive.ogg', + "lost" = 'sound/voice/medibot/mlost.ogg', + "flies" = 'sound/voice/medibot/mflies.ogg', + "catch" = 'sound/voice/medibot/mcatch.ogg', + "delicious" = 'sound/voice/medibot/mdelicious.ogg', + "apple" = 'sound/voice/medibot/mapple.ogg', + "no" = 'sound/voice/medibot/mno.ogg', ) spawn_flags = IC_SPAWN_RESEARCH origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2, TECH_BIO = 1) diff --git a/code/modules/mob/living/bot/assembly.dm b/code/modules/mob/living/bot/assembly.dm new file mode 100644 index 00000000000..22c10fc6ab3 --- /dev/null +++ b/code/modules/mob/living/bot/assembly.dm @@ -0,0 +1,36 @@ +/obj/item/bot_assembly + icon = 'icons/obj/bots/aibots.dmi' + w_class = WEIGHT_CLASS_NORMAL + force = 3 + throw_speed = 2 + throw_range = 5 + var/created_name + var/build_step = ASSEMBLY_FIRST_STEP + var/robot_arm = /obj/item/robot_parts/l_arm + var/skin = null //Same as medibot, set to tox or ointment for the respective kits. + +/obj/item/bot_assembly/attackby(obj/item/I, mob/user, params) + ..() + if(istype(I, /obj/item/pen)) + rename_bot() + return + +/obj/item/bot_assembly/proc/rename_bot() + var/t = sanitizeSafe(input(usr, "Enter new robot name", name, created_name), MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && loc != usr) + return + created_name = t + +/obj/item/bot_assembly/proc/can_finish_build(obj/item/I, mob/user) + if(contents.len >= 1) + to_chat(user, SPAN_WARNING("You need to empty [src] out first.")) + return FALSE + user.drop_item() + return TRUE + +/obj/item/bot_assembly/proc/is_valid_arm(obj/item/I, mob/user) + if(istype(I, /obj/item/robot_parts/l_arm) || istype(I, /obj/item/robot_parts/r_arm) || (istype(I, /obj/item/organ/external/arm) && (I.name == "robotic right arm") || (I.name == "robotic left arm"))) + return TRUE + return FALSE diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 5cf15d5505e..b082e9b5125 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -22,7 +22,7 @@ /datum/category_item/catalogue/technology/bot/ed209/slime, /datum/category_item/catalogue/technology/bot/farmbot, /datum/category_item/catalogue/technology/bot/floorbot, - /datum/category_item/catalogue/technology/bot/medbot, + /datum/category_item/catalogue/technology/bot/medibot, /datum/category_item/catalogue/technology/bot/mulebot, /datum/category_item/catalogue/technology/bot/secbot, /datum/category_item/catalogue/technology/bot/secbot/slime @@ -35,19 +35,20 @@ icon = 'icons/obj/aibots.dmi' layer = MOB_LAYER universal_speak = 1 - density = 0 + density = FALSE silicon_privileges = PRIVILEGES_BOT makes_dirt = FALSE // No more dirt from Beepsky var/obj/item/card/id/botcard = null var/list/botcard_access = list() - var/on = 1 - var/open = 0 - var/locked = 1 - var/emagged = 0 + var/on = TRUE + var/open = FALSE + var/locked = TRUE + var/emagged = FALSE var/light_strength = 3 - var/busy = 0 + var/busy = FALSE //Are they doing something? + var/skin = null // For variants of a bot, like Burn medkit Medibots! var/obj/access_scanner = null var/list/req_access = list() @@ -59,8 +60,8 @@ var/list/target_path = list() var/turf/obstacle = null - var/wait_if_pulled = 0 // Only applies to moving to the target - var/will_patrol = 0 // If set to 1, will patrol, duh + var/wait_if_pulled = FALSE // Only applies to moving to the target + var/will_patrol = FALSE // If set to 1, will patrol, duh var/patrol_speed = 1 // How many times per tick we move when patrolling var/target_speed = 2 // Ditto for chasing the target var/panic_on_alert = FALSE // Will the bot go faster when the alert level is raised? @@ -71,6 +72,7 @@ var/target_patience = 5 var/frustration = 0 var/max_frustration = 0 + var/robot_arm = /obj/item/robot_parts/r_arm /mob/living/bot/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index d045a19dfbb..bf138677841 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -13,7 +13,7 @@ /mob/living/bot/farmbot name = "Farmbot" desc = "The botanist's best friend." - icon = 'icons/obj/aibots.dmi' + icon = 'icons/obj/bots/farmbots.dmi' icon_state = "farmbot0" health = 50 maxHealth = 50 @@ -314,7 +314,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/obj/bots/farmbots.dmi' icon_state = "water_arm" var/build_step = 0 var/created_name = "Farmbot" diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 8747168b748..c27254062f8 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -15,7 +15,9 @@ /mob/living/bot/floorbot name = "Floorbot" desc = "A little floor repairing robot, it looks so excited!" - icon_state = "floorbot0" + icon = 'icons/obj/bots/floorbots.dmi' + icon_state = "floorbot" + base_icon_state = "toolbox" req_one_access = list(access_robotics, access_construction) wait_if_pulled = 1 min_target_dist = 0 @@ -29,14 +31,32 @@ var/maketiles = 0 var/targetdirection = null var/floor_build_type = /decl/flooring/tiling // Basic steel floor. + var/toolbox = /obj/item/storage/toolbox/mechanical + skin = "blue" // Blue Toolbox is the default -/mob/living/bot/floorbot/update_icons() +/mob/living/bot/floorbot/Initialize(mapload, new_skin) + . = ..() + skin = new_skin + update_icon() + +/mob/living/bot/floorbot/update_icon() + . = ..() + cut_overlays() + + if(skin) + icon_state = "[base_icon_state]-[skin]" + add_overlay("[base_icon_state]-prox-[skin]") if(busy) - icon_state = "floorbot-c" - else if(amount > 0) - icon_state = "floorbot[on]" + add_overlay("[base_icon_state]-action") else - icon_state = "floorbot[on]e" + add_overlay("[base_icon_state]-arms") + if(amount > 0) + add_overlay("[base_icon_state]-tile") + if(emagged) + add_overlay("[base_icon_state]-[emagged ? "spark" : null]") + else + add_overlay("[base_icon_state]-[on]") + /mob/living/bot/floorbot/attack_hand(var/mob/user) user.set_machine(src) @@ -337,81 +357,84 @@ /* Assembly */ -/obj/item/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/living/user as mob) +/obj/item/storage/toolbox/attackby(var/obj/item/stack/tile/floor/T, mob/living/user, params) if(!istype(T, /obj/item/stack/tile/floor)) ..() return + if(contents.len >= 1) - to_chat(user, "They wont fit in as there is already stuff inside.") + to_chat(user, SPAN_NOTICE("They wont fit in as there is already stuff inside.")) return + if(user.s_active) user.s_active.close(user) + if(T.use(10)) - var/obj/item/toolbox_tiles/B = new /obj/item/toolbox_tiles + var/obj/item/bot_assembly/floorbot/B = new + if(istype(src, /obj/item/storage/toolbox/mechanical/)) + B.skin = "blue" + else if(istype(src, /obj/item/storage/toolbox/emergency)) + B.skin = "red" + else if(istype(src, /obj/item/storage/toolbox/electrical)) + B.skin = "yellow" + else if(istype(src, /obj/item/storage/toolbox/gold_fake)) + B.skin = "gold" + else if(istype(src, /obj/item/storage/toolbox/syndicate)) + B.skin = "syndicate" + else if(istype(src, /obj/item/storage/toolbox/surgery)) + B.skin = "surgerykit" user.put_in_hands(B) - to_chat(user, "You add the tiles into the empty toolbox. They protrude from the top.") + to_chat(user, SPAN_NOTICE("You add the tiles into the empty toolbox. They protrude from the top.")) + B.toolbox = type user.drop_from_inventory(src) qdel(src) else - to_chat(user, "You need 10 floor tiles for a floorbot.") - return + to_chat(user, SPAN_WARNING("You need 10 floor tiles for a floorbot.")) + return -/obj/item/toolbox_tiles +/obj/item/bot_assembly/floorbot desc = "It's a toolbox with tiles sticking out the top" name = "tiles and toolbox" - icon = 'icons/obj/aibots.dmi' - icon_state = "toolbox_tiles" - force = 3.0 - throwforce = 10.0 + icon = 'icons/obj/bots/floorbots.dmi' + icon_state = "toolbox-blue" + base_icon_state = "toolbox" + skin = "blue" + force = 3 + throwforce = 10 throw_speed = 2 throw_range = 5 w_class = ITEMSIZE_NORMAL - var/created_name = "Floorbot" + created_name = "Floorbot" + var/toolbox = /obj/item/storage/toolbox -/obj/item/toolbox_tiles/attackby(var/obj/item/W, mob/user as mob) +/obj/item/bot_assembly/floorbot/Initialize() + . = ..() + spawn(1) + icon_state = "[base_icon_state]-[skin]" + add_overlay("[base_icon_state]-tile") + +/obj/item/bot_assembly/floorbot/attackby(obj/item/W, mob/user, params) ..() - if(isprox(W)) - qdel(W) - var/obj/item/toolbox_tiles_sensor/B = new /obj/item/toolbox_tiles_sensor() - B.created_name = created_name - user.put_in_hands(B) - to_chat(user, "You add the sensor to the toolbox and tiles!") - user.drop_from_inventory(src) - qdel(src) - else if (istype(W, /obj/item/pen)) - var/t = sanitizeSafe(input(user, "Enter new robot name", name, created_name), MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - created_name = t + switch(build_step) + if(ASSEMBLY_FIRST_STEP) + if(isprox(W)) + user.drop_item() + to_chat(user, SPAN_NOTICE("You add the proximity sensor to [src].")) + qdel(W) + name = "incomplete floorbot assembly" + desc = "It's a toolbox with tiles sticking out the top and a sensor attached." + add_overlay("[base_icon_state]-prox-[skin]") + build_step++ -/obj/item/toolbox_tiles_sensor - desc = "It's a toolbox with tiles sticking out the top and a sensor attached" - name = "tiles, toolbox and sensor arrangement" - icon = 'icons/obj/aibots.dmi' - icon_state = "toolbox_tiles_sensor" - force = 3.0 - throwforce = 10.0 - throw_speed = 2 - throw_range = 5 - w_class = ITEMSIZE_NORMAL - var/created_name = "Floorbot" - -/obj/item/toolbox_tiles_sensor/attackby(var/obj/item/W, mob/user as mob) - ..() - if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm) || (istype(W, /obj/item/organ/external/arm) && ((W.name == "robotic right arm") || (W.name == "robotic left arm")))) - qdel(W) - var/turf/T = get_turf(user.loc) - var/mob/living/bot/floorbot/A = new /mob/living/bot/floorbot(T) - A.name = created_name - to_chat(user, "You add the robot arm to the odd looking toolbox assembly! Boop beep!") - user.drop_from_inventory(src) - qdel(src) - else if(istype(W, /obj/item/pen)) - var/t = sanitizeSafe(input(user, "Enter new robot name", name, created_name), MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, user) && loc != user) - return - created_name = t + if(ASSEMBLY_SECOND_STEP) + if(is_valid_arm(W)) + if(!can_finish_build(W, user)) + return + qdel(W) + var/mob/living/bot/floorbot/S = new(drop_location(), skin) + to_chat(user, SPAN_NOTICE("You complete the Floorbot! Beep boop.")) + S.name = created_name + S.toolbox = toolbox + S.robot_arm = robot_arm + user.drop_from_inventory(src) + qdel(src) diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medibot.dm similarity index 57% rename from code/modules/mob/living/bot/medbot.dm rename to code/modules/mob/living/bot/medibot.dm index 4e6c6b94670..204872de339 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medibot.dm @@ -1,4 +1,4 @@ -/datum/category_item/catalogue/technology/bot/medbot +/datum/category_item/catalogue/technology/bot/medibot name = "Bot - Medibot" desc = "Medibots have become vital additions to hazardous workplaces \ across the galaxy. A common sight on the Frontier, Medibots utilize \ @@ -7,15 +7,18 @@ can stabilize a severely injured worker as easily as it can treat a minor scrape." value = CATALOGUER_REWARD_TRIVIAL -/mob/living/bot/medbot +/mob/living/bot/medibot name = "Medibot" desc = "A little medical robot. He looks somewhat underwhelmed." - icon_state = "medibot0" + icon = 'icons/obj/bots/medibots.dmi' + icon_state = "medibot" + base_icon_state = "medkit" req_one_access = list(access_robotics, access_medical) botcard_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) - catalogue_data = list(/datum/category_item/catalogue/technology/bot/medbot) + catalogue_data = list(/datum/category_item/catalogue/technology/bot/medibot) - var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. + var/healthanalyzer = /obj/item/healthanalyzer + var/firstaid = /obj/item/storage/firstaid //AI vars var/last_newpatient_speak = 0 @@ -34,58 +37,145 @@ var/treatment_emag = "toxin" var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? -/mob/living/bot/medbot/handleIdle() +/mob/living/bot/medibot/Initialize(mapload, new_skin) + . = ..() + skin = new_skin + update_icon() + +/mob/living/bot/medibot/update_icon() + . = ..() + cut_overlays() + + if(skin) + icon_state = "[base_icon_state]-[skin]" + add_overlay("[base_icon_state]-scanner") + if(busy) + add_overlay("[base_icon_state]-arm-syringe") + add_overlay("[base_icon_state]-flash") + else + add_overlay("[base_icon_state]-arm") + if(emagged) + add_overlay("[base_icon_state]-spark") + else + add_overlay("[base_icon_state]-[on]") + +//Subtypes & Cosmetics +/mob/living/bot/medibot/fire + name = "\improper Mr. Burns" + skin = "burn" + +/mob/living/bot/medibot/toxin + name = "\improper Toxic" + skin = "antitoxin" + +/mob/living/bot/medibot/o2 + name = "\improper Lifeless" + skin = "o2" + +/mob/living/bot/medibot/red + name = "\improper Super Medibot" + skin = "advfirstaid" + +/mob/living/bot/medibot/mysterious + name = "\improper Mysterious Medibot" + desc = "International Medibot of mystery." + skin = "bezerk" + treatment_brute = "bicaridine" + treatment_fire = "dermaline" + treatment_oxy = "dexalin" + treatment_tox = "anti_toxin" + +/mob/living/bot/medibot/purple + name = "\improper Leaky" + skin = "clottingkit" + +/mob/living/bot/medibot/pink + name = "\improper Pinky" + skin = "pinky" + +/mob/living/bot/medibot/medass //Don't laugh, she's trying her hardest :( + name = "\improper Miss Bandages" + desc = "A little medical robot. This one looks very busy." + skin = "assistant" + +/mob/living/bot/medibot/apidean + name = "\improper Apidean Beebot" + desc = "An organic creature heavily augmented with components from a medical drone. It was made to assist nurses in Apidaen hives." + icon_state = "beebot0" + base_icon_state = "beebot" + +/mob/living/bot/medibot/apidean/update_icons() + cut_overlays() + if(skin) + add_overlay("[base_icon_state]-[skin]") + if(busy) + icon_state = "beebots" + else + icon_state = "beebot[on]" + +/mob/living/bot/medibot/apidean/handleIdle() if(vocal && prob(1)) var/message_options = list( - "Radar, put a mask on!" = 'sound/voice/medbot/mradar.ogg', - "There's always a catch, and it's the best there is." = 'sound/voice/medbot/mcatch.ogg', - "I knew it, I should've been a plastic surgeon." = 'sound/voice/medbot/msurgeon.ogg', - "What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/medbot/mflies.ogg', - "Delicious!" = 'sound/voice/medbot/mdelicious.ogg' + "Bzzz bzzz!" = 'sound/voice/moth/scream_moth.ogg', + "Chk scchk hhk!" = 'sound/voice/moth/mothchitter.ogg', + "Hhhk bzchk." = 'sound/voice/moth/mothsqueak.ogg', ) var/message = pick(message_options) say(message) playsound(loc, message_options[message], 50, 0) -/mob/living/bot/medbot/handleAdjacentTarget() +/mob/living/bot/medibot/handleIdle() + if(vocal && prob(1)) + var/message_options = list( + "Radar, put a mask on!" = 'sound/voice/medibot/mradar.ogg', + "There's always a catch, and it's the best there is." = 'sound/voice/medibot/mcatch.ogg', + "I knew it, I should've been a plastic surgeon." = 'sound/voice/medibot/msurgeon.ogg', + "What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/medibot/mflies.ogg', + "Delicious!" = 'sound/voice/medibot/mdelicious.ogg' + ) + var/message = pick(message_options) + say(message) + playsound(loc, message_options[message], 50, 0) + +/mob/living/bot/medibot/handleAdjacentTarget() UnarmedAttack(target) -/mob/living/bot/medbot/handlePanic() // Speed modification based on alert level. +/mob/living/bot/medibot/handlePanic() // Speed modification based on alert level. . = 0 switch(get_security_level()) - if("green") + if(SEC_LEVEL_GREEN) . = 0 - if("yellow") + if(SEC_LEVEL_BLUE) . = 0 - if("violet") + if(SEC_LEVEL_YELLOW) . = 1 - if("orange") - . = 0 - - if("blue") + if(SEC_LEVEL_VIOLET) . = 1 - if("red") + if(SEC_LEVEL_ORANGE) . = 2 - if("delta") - . = 2 + if(SEC_LEVEL_RED) + . = 3 + + if(SEC_LEVEL_DELTA) //FAST AS FUCK BOOOYYEEEE + . = 4 return . -/mob/living/bot/medbot/lookForTargets() +/mob/living/bot/medibot/lookForTargets() for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! if(confirmTarget(H)) target = H if(last_newpatient_speak + 30 SECONDS < world.time) if(vocal) var/message_options = list( - "Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/mcoming.ogg', - "Wait [H.name]! I want to help!" = 'sound/voice/medbot/mhelp.ogg', - "[H.name], you appear to be injured!" = 'sound/voice/medbot/minjured.ogg' + "Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medibot/mcoming.ogg', + "Wait [H.name]! I want to help!" = 'sound/voice/medibot/mhelp.ogg', + "[H.name], you appear to be injured!" = 'sound/voice/medibot/minjured.ogg' ) var/message = pick(message_options) say(message) @@ -94,7 +184,7 @@ last_newpatient_speak = world.time break -/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H) +/mob/living/bot/medibot/UnarmedAttack(var/mob/living/carbon/human/H) if(!..()) return @@ -111,30 +201,30 @@ if(!t) return - 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) GLOB.global_announcer.autosay("[src] is treating [H] in [location]", "[src]", "Medical") - busy = 1 + busy = TRUE update_icons() if(do_mob(src, H, 30)) if(t == 1) 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!")) - if(H.stat == DEAD) // This is down here because this proc won't be called again due to losing a target because of parent AI loop. + if(H.stat == DEAD) //This is down here because this proc won't be called again due to losing a target because of parent AI loop. target = null if(vocal) var/death_messages = list( - "No! Stay with me!" = 'sound/voice/medbot/mno.ogg', - "Live, damnit! LIVE!" = 'sound/voice/medbot/mlive.ogg', - "I... I've never lost a patient before. Not today, I mean." = 'sound/voice/medbot/mlost.ogg' + "No! Stay with me!" = 'sound/voice/medibot/mno.ogg', + "Live, damnit! LIVE!" = 'sound/voice/medibot/mlive.ogg', + "I... I've never lost a patient before. Not today, I mean." = 'sound/voice/medibot/mlost.ogg' ) var/message = pick(death_messages) say(message) - playsound(loc, death_messages[message], 50, 0) + playsound(loc, death_messages[message], 50, FALSE) // This is down here for the same reason as above. else @@ -143,27 +233,18 @@ target = null if(vocal) var/possible_messages = list( - "All patched up!" = 'sound/voice/medbot/mpatchedup.ogg', - "An apple a day keeps me away." = 'sound/voice/medbot/mapple.ogg', - "Feel better soon!" = 'sound/voice/medbot/mfeelbetter.ogg' + "All patched up!" = 'sound/voice/medibot/mpatchedup.ogg', + "An apple a day keeps me away." = 'sound/voice/medibot/mapple.ogg', + "Feel better soon!" = 'sound/voice/medibot/mfeelbetter.ogg' ) var/message = pick(possible_messages) say(message) - playsound(loc, possible_messages[message], 50, 0) + playsound(loc, possible_messages[message], 50, FALSE) - busy = 0 + busy = FALSE update_icons() -/mob/living/bot/medbot/update_icons() - overlays.Cut() - if(skin) - overlays += image('icons/obj/aibots.dmi', "medskin_[skin]") - if(busy) - icon_state = "medibots" - else - icon_state = "medibot[on]" - -/mob/living/bot/medbot/attack_hand(var/mob/user) +/mob/living/bot/medibot/attack_hand(var/mob/user) var/dat dat += "Automatic Medical Unit v1.0

" dat += "Status: [on ? "On" : "Off"]
" @@ -200,24 +281,24 @@ onclose(user, "automed") return -/mob/living/bot/medbot/attackby(var/obj/item/O, var/mob/user) +/mob/living/bot/medibot/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_item() O.loc = src reagent_glass = O - to_chat(user, "You insert [O].") + to_chat(user, SPAN_NOTICE("You insert [O].")) return else ..() -/mob/living/bot/medbot/Topic(href, href_list) +/mob/living/bot/medibot/Topic(href, href_list) if(..()) return usr.set_machine(src) @@ -252,7 +333,7 @@ reagent_glass.loc = 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["togglevoice"]) && (!locked || issilicon(usr))) vocal = !vocal @@ -263,24 +344,24 @@ attack_hand(usr) return -/mob/living/bot/medbot/emag_act(var/remaining_uses, var/mob/user) +/mob/living/bot/medibot/emag_act(var/remaining_uses, var/mob/user) . = ..() 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("[base_icon_state]-light-spark", src) target = null - busy = 0 - emagged = 1 - on = 1 + busy = FALSE + emagged = TRUE + on = TRUE update_icons() - . = 1 + . = TRUE ignore_list |= user -/mob/living/bot/medbot/explode() - on = 0 - visible_message("[src] blows apart!") +/mob/living/bot/medibot/explode() + on = FALSE + visible_message(SPAN_DANGER("[src] blows apart!")) var/turf/Tsec = get_turf(src) new /obj/item/storage/firstaid(Tsec) @@ -294,25 +375,25 @@ reagent_glass = null if(emagged && prob(25)) - playsound(loc, 'sound/voice/medbot/minsult.ogg', 50, 0) + playsound(loc, 'sound/voice/medibot/minsult.ogg', 50, 0) var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(3, 1, src) s.start() qdel(src) -/mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) +/mob/living/bot/medibot/confirmTarget(var/mob/living/carbon/human/H) if(!..()) - return 0 + return FALSE if(H.isSynthetic()) // Don't treat FBPs - return 0 + return FALSE if(H.stat == DEAD) // He's dead, Jim - return 0 + return FALSE if(H.suiciding) - return 0 + return FALSE if(emagged) return treatment_emag @@ -338,139 +419,89 @@ /* Construction */ -/obj/item/storage/firstaid/attackby(var/obj/item/robot_parts/S, mob/user as mob) - if ((!istype(S, /obj/item/robot_parts/l_arm)) && (!istype(S, /obj/item/robot_parts/r_arm))) +/obj/item/storage/firstaid/attackby(var/obj/item/robot_parts/I, mob/user, params) + + if ((!istype(I, /obj/item/robot_parts/l_arm)) && (!istype(I, /obj/item/robot_parts/r_arm))) ..() 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 + var/obj/item/bot_assembly/medibot/A = new /obj/item/bot_assembly/medibot if(istype(src, /obj/item/storage/firstaid/fire)) - A.skin = "ointment" + A.created_name = "\improper Mr. Burns" + A.skin = "burn" else if(istype(src, /obj/item/storage/firstaid/toxin)) - A.skin = "tox" + A.created_name = "\improper Toxic" + A.skin = "toxin" else if(istype(src, /obj/item/storage/firstaid/o2)) + A.created_name = "\improper Lifeless" A.skin = "o2" + else if(istype(src, /obj/item/storage/firstaid/adv)) + A.created_name = "\improper Super Medibot" + A.skin = "advfirstaid" + else if(istype(src, /obj/item/storage/firstaid/clotting)) + A.created_name = "\improper Leaky" + A.skin = "clottingkit" + else if(istype(src, /obj/item/storage/firstaid/bonemed)) + A.created_name = "\improper Pinky" + A.skin = "bonemed" + else if(istype(src, /obj/item/storage/firstaid/combat)) + A.created_name = "\improper Mysterious Medibot" + A.desc = "International Medibot of mystery. Though after a closer look, it looks like a fraud." + A.skin = "bezerk" - qdel(S) user.put_in_hands(A) - to_chat(user, "You add the robot arm to the first aid kit.") - user.drop_from_inventory(src) + to_chat(user, SPAN_NOTICE("You add [I] to [src].")) + A.robot_arm = I.type + A.firstaid = type + qdel(I) qdel(src) -/obj/item/storage/firstaid/attackby(var/obj/item/organ/external/S, mob/user as mob) - if (!istype(S, /obj/item/organ/external/arm) || S.robotic != ORGAN_ROBOT) - ..() - return - - if(contents.len >= 1) - to_chat(user, "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" - - qdel(S) - user.put_in_hands(A) - to_chat(user, "You add the robot arm to the first aid kit.") - user.drop_from_inventory(src) - qdel(src) - -/obj/item/firstaid_arm_assembly - name = "first aid/robot arm assembly" +/obj/item/bot_assembly/medibot + name = "incomplete medibot assembly" desc = "A first aid kit with a robot arm permanently grafted to it." - icon = 'icons/obj/aibots.dmi' - icon_state = "firstaid_arm" - 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. + icon = 'icons/obj/bots/medibots.dmi' + icon_state = "medibot" + base_icon_state = "medkit" w_class = ITEMSIZE_NORMAL + created_name = "Medibot" //To preserve the name if it's a unique medibot I guess + var/healthanalyzer = /obj/item/healthanalyzer + var/firstaid = /obj/item/storage/firstaid -/obj/item/firstaid_arm_assembly/LateInitialize() +/obj/item/bot_assembly/medibot/Initialize() . = ..() - if(skin) - overlays += image('icons/obj/aibots.dmi', "kit_skin_[src.skin]") + spawn(1) + if(skin) + add_overlay("[base_icon_state]-[skin]") + add_overlay("[base_icon_state]-arm") -/obj/item/firstaid_arm_assembly/attackby(obj/item/W as obj, mob/user as mob) + +/obj/item/bot_assembly/medibot/attackby(obj/item/W, mob/user, params) ..() - if(istype(W, /obj/item/pen)) - var/t = sanitizeSafe(input(user, "Enter new robot name", name, created_name), MAX_NAME_LEN) - if(!t) - return - if(!in_range(src, usr) && loc != usr) - return - created_name = t - else - switch(build_step) - if(0) - if(istype(W, /obj/item/healthanalyzer)) - user.drop_item() - qdel(W) - build_step++ - to_chat(user, "You add the health sensor to [src].") - name = "First aid/robot arm/health analyzer assembly" - overlays += image('icons/obj/aibots.dmi', "na_scanner") + switch(build_step) + if(ASSEMBLY_FIRST_STEP) + if(istype(W, /obj/item/healthanalyzer)) + user.drop_item() + healthanalyzer = W.type + to_chat(user, SPAN_NOTICE("You add the health sensor to [src].")) + qdel(W) + name = "First aid/robot arm/health analyzer assembly" + add_overlay("[base_icon_state]-scanner") + build_step++ - if(1) - if(isprox(W)) - user.drop_item() - qdel(W) - to_chat(user, "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 - user.drop_from_inventory(src) - qdel(src) - -//Subtypes & Cosmetics -/mob/living/bot/medbot/yellow - skin = "ointment" - -/mob/living/bot/medbot/green - skin = "tox" - -/mob/living/bot/medbot/blue - skin = "o2" - -/mob/living/bot/medbot/mysterious - name = "\improper Mysterious Medibot" - desc = "International Medibot of mystery." - skin = "bezerk" - treatment_brute = "bicaridine" - treatment_fire = "dermaline" - treatment_oxy = "dexalin" - treatment_tox = "anti_toxin" - -/mob/living/bot/medbot/apidean - name = "\improper Apidean Beebot" - desc = "An organic creature heavily augmented with components from a medical drone. It was made to assist nurses in Apidaen hives." - icon_state = "beebot0" - -/mob/living/bot/medbot/apidean/update_icons() - overlays.Cut() - if(skin) - overlays += image('icons/obj/aibots.dmi', "beebot_[skin]") - if(busy) - icon_state = "beebots" - else - icon_state = "beebot[on]" - -/mob/living/bot/medbot/apidean/handleIdle() - if(vocal && prob(1)) - var/message_options = list( - "Bzzz bzzz!" = 'sound/voice/moth/scream_moth.ogg', - "Chk scchk hhk!" = 'sound/voice/moth/mothchitter.ogg', - "Hhhk bzchk." = 'sound/voice/moth/mothsqueak.ogg', - ) - var/message = pick(message_options) - say(message) - playsound(loc, message_options[message], 50, 0) + if(ASSEMBLY_SECOND_STEP) + if(isprox(W)) + if(!can_finish_build(W, user)) + return + qdel(W) + var/mob/living/bot/medibot/S = new(drop_location(), skin) + to_chat(user, SPAN_NOTICE("You complete the Medibot! Beep boop.")) + S.name = created_name + S.firstaid = firstaid + S.robot_arm = robot_arm + S.healthanalyzer = healthanalyzer + user.drop_from_inventory(src) + qdel(src) diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index ee554012432..6bb7fdf3f1a 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -19,9 +19,10 @@ /mob/living/bot/mulebot name = "Mulebot" desc = "A Multiple Utility Load Effector bot." + icon = 'icons/obj/bots/mulebots.dmi' icon_state = "mulebot0" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE health = 150 maxHealth = 150 mob_bump_flag = HEAVY @@ -35,10 +36,10 @@ var/atom/movable/load - var/paused = 0 - var/crates_only = 1 - var/auto_return = 1 - var/safety = 1 + var/paused = FALSE + var/crates_only = TRUE + var/auto_return = TRUE + var/safety = TRUE var/targetName var/turf/home @@ -69,70 +70,58 @@ load(C) -/mob/living/bot/mulebot/ui_interact(mob/user) - var/dat - dat += "Multiple Utility Load Effector Mk. III

" - dat += "ID: [suffix]
" - dat += "Power: [on ? "On" : "Off"]
" +/mob/living/bot/mulebot/interact(mob/user) + ui_interact(user) - if(!open) - dat += "
Current Load: [load ? load.name : "none"]
" +/mob/living/bot/mulebot/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MuleBot", "Mulebot [suffix ? "([suffix])" : ""]") + ui.open() - if(locked) - dat += "
Controls are locked" - else - dat += "
Controls are unlocked

" +/mob/living/bot/mulebot/ui_data(mob/user) + var/list/data = list( + "suffix" = suffix, + "power" = on, + "issilicon" = issilicon(user), + "load" = load, + "locked" = locked, + "auto_return" = auto_return, + "crates_only" = crates_only, + "hatch" = open, + "safety" = safety, + ) + return data - if(!locked || issilicon(user)) - dat += "Toggle power
" - dat += "Stop
" - dat += "Proceed
" - dat += "Return to home
" - dat += "Set destination
" - dat += "Set home
" - dat += "Toggle auto return home ([auto_return ? "On" : "Off"])
" - dat += "Toggle non-standard cargo ([crates_only ? "Off" : "On"])
" - - if(load) - dat += "Unload now
" - dat += "
The maintenance hatch is closed.
" - - else - if(!issilicon(user)) - dat += "The maintenance hatch is open.

" - - dat += "Toggle safety ([safety ? "On" : "Off - DANGER"])
" - else - dat += "The bot is in maintenance mode and cannot be controlled.
" - - user << browse("Mulebot [suffix ? "([suffix])" : ""][dat]", "window=mulebot;size=350x500") - onclose(user, "mulebot") - return - -/mob/living/bot/mulebot/Topic(href, href_list) +/mob/living/bot/mulebot/ui_act(action, params) if(..()) - return - usr.set_machine(src) + return TRUE + add_fingerprint(usr) - switch(href_list["op"]) + switch(action) if("power") if(on) turn_off() else turn_on() visible_message("[usr] switches [on ? "on" : "off"] [src].") + . = TRUE if("stop") obeyCommand("Stop") + . = TRUE if("go") obeyCommand("GoTD") + . = TRUE if("home") obeyCommand("Home") + . = TRUE if("destination") obeyCommand("SetD") + . = TRUE if("sethome") var/new_dest @@ -144,20 +133,23 @@ if(new_dest) home = get_turf(beaconlist[new_dest]) homeName = new_dest + . = TRUE if("unload") unload() + . = TRUE if("autoret") auto_return = !auto_return + . = TRUE if("cargotypes") crates_only = !crates_only + . = TRUE if("safety") safety = !safety - - ui_interact(usr) + . = TRUE /mob/living/bot/mulebot/attackby(var/obj/item/O, var/mob/user) ..() @@ -331,7 +323,7 @@ return busy = 1 - overlays.Cut() + cut_overlays() load.forceMove(loc) load.pixel_y -= 9 diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index a503b77fcc8..8f75a77724c 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -4,19 +4,19 @@ set desc = "Tag yourself for delivery through the disposals system." set category = "Robot Commands" - var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in tagger_locations + var/new_tag = input("Select the desired destination.", "Set Mail Tag", null) as null|anything in GLOB.tagger_locations if(!new_tag) mail_destination = "" return - to_chat(src, "You configure your internal beacon, tagging yourself for delivery to '[new_tag]'.") + to_chat(src, SPAN_NOTICE("You configure your internal beacon, tagging yourself for delivery to '[new_tag]'.")) mail_destination = new_tag //Auto flush if we use this verb inside a disposal chute. var/obj/machinery/disposal/D = src.loc if(istype(D)) - to_chat(src, "\The [D] acknowledges your signal.") + to_chat(src, SPAN_NOTICE("\The [D] acknowledges your signal.")) D.flush_count = D.flush_every_ticks return @@ -28,7 +28,7 @@ if(H.a_intent == "grab" && hat && !(H.l_hand && H.r_hand)) hat.loc = get_turf(src) H.put_in_hands(hat) - H.visible_message("\The [H] removes \the [src]'s [hat].") + H.visible_message(SPAN_DANGER("\The [H] removes \the [src]'s [hat].")) hat = null updateicon() return diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index 93eb72dffad..89a97979d3a 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -2,7 +2,7 @@ name = "Maintenance Drone Control" desc = "Used to monitor the station's drone population and the assembler that services them." icon_keyboard = "power_key" - icon_screen = "generic" //VOREStation Edit + icon_screen = "generic" req_access = list(access_engine_equip) circuit = /obj/item/circuitboard/drone_control @@ -14,111 +14,108 @@ /obj/machinery/computer/drone_control/attack_ai(var/mob/user as mob) return src.attack_hand(user) +/obj/machinery/computer/drone_control/ui_status(mob/user) + if(!allowed(user)) + return UI_CLOSE + return ..() + /obj/machinery/computer/drone_control/attack_hand(var/mob/user as mob) if(..()) return - if(!allowed(user)) - to_chat(user, "Access denied.") - return + ui_interact(user) - user.set_machine(src) - var/dat - dat += "Maintenance Units
" +/obj/machinery/computer/drone_control/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DroneConsole", name) + ui.open() +/obj/machinery/computer/drone_control/ui_data(mob/user) + var/list/data = list() + + var/list/drones = list() for(var/mob/living/silicon/robot/drone/D in GLOB.mob_list) - if(D.z != src.z) + if(!(D.z in GLOB.using_map.get_map_levels(z, TRUE, 0))) continue if(D.foreign_droid) continue - dat += "
[D.real_name] ([D.stat == 2 ? "INACTIVE" : "ACTIVE"])" - dat += "
Cell charge: [D.cell.charge]/[D.cell.maxcharge]." - dat += "
Currently located in: [get_area(D)]." - dat += "
Resync | Shutdown
" + drones.Add(list(list( + "name" = D.real_name, + "active" = D.stat != 2, + "charge" = D.cell.charge, + "maxCharge" = D.cell.maxcharge, + "loc" = "[get_area(D)]", + "ref" = "\ref[D]", + ))) + data["drones"] = drones - dat += "

Request drone presence in area: [drone_call_area] (Send ping)" + data["fabricator"] = dronefab + data["fabPower"] = dronefab?.produce_drones - dat += "

Drone fabricator: " - dat += "[dronefab ? "[(dronefab.produce_drones && !(dronefab.stat & NOPOWER)) ? "ACTIVE" : "INACTIVE"]" : "FABRICATOR NOT DETECTED. (search)"]" - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - return + data["areas"] = GLOB.tagger_locations + data["selected_area"] = "[drone_call_area]" + return data -/obj/machinery/computer/drone_control/Topic(href, href_list) +/obj/machinery/computer/drone_control/ui_act(action, params) if(..()) - return + return TRUE - if(!allowed(usr)) - to_chat(usr, "Access denied.") - return + switch(action) + if("set_dcall_area") + var/t_area = params["area"] + if(!t_area || !(t_area in GLOB.tagger_locations)) + return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) + drone_call_area = t_area + to_chat(usr, SPAN_NOTICE("You set the area selector to [drone_call_area].")) - if (href_list["setarea"]) + if("ping") + to_chat(usr, SPAN_NOTICE("You issue a maintenance request for all active drones, highlighting [drone_call_area].")) + for(var/mob/living/silicon/robot/drone/D in player_list) + if(D.stat == 0) + to_chat(D, "-- Maintenance drone presence requested in: [drone_call_area].") - //Probably should consider using another list, but this one will do. - var/t_area = input("Select the area to ping.", "Set Target Area", null) as null|anything in tagger_locations + if("resync") + var/mob/living/silicon/robot/drone/D = locate(params["ref"]) - if(!t_area) - return + if(D.stat != 2) + to_chat(usr, SPAN_DANGER("You issue a law synchronization directive for the drone.")) + D.law_resync() - drone_call_area = t_area - to_chat(usr, "You set the area selector to [drone_call_area].") + if("shutdown") + var/mob/living/silicon/robot/drone/D = locate(params["ref"]) - else if (href_list["ping"]) + if(D.stat != 2) + to_chat(usr, SPAN_DANGER("You issue a kill command for the unfortunate drone.")) + message_admins("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.") + log_game("[key_name(usr)] issued kill order for [key_name(src)] from control console.") + D.shut_down() - to_chat(usr, "You issue a maintenance request for all active drones, highlighting [drone_call_area].") - for(var/mob/living/silicon/robot/drone/D in player_list) - if(D.stat == 0) - to_chat(D, "-- Maintenance drone presence requested in: [drone_call_area].") + if("search_fab") + if(dronefab) + return - else if (href_list["resync"]) + for(var/obj/machinery/drone_fabricator/fab in oview(3,src)) + if(fab.stat & NOPOWER) + continue - var/mob/living/silicon/robot/drone/D = locate(href_list["resync"]) + dronefab = fab + to_chat(usr, SPAN_NOTICE("Drone fabricator located.")) + return - if(D.stat != 2) - to_chat(usr, "You issue a law synchronization directive for the drone.") - D.law_resync() + to_chat(usr, SPAN_DANGER("Unable to locate drone fabricator.")) - else if (href_list["shutdown"]) + if("toggle_fab") + if(!dronefab) + return - var/mob/living/silicon/robot/drone/D = locate(href_list["shutdown"]) + if(get_dist(src,dronefab) > 3) + dronefab = null + to_chat(usr, SPAN_DANGER("Unable to locate drone fabricator.")) + return - if(D.stat != 2) - to_chat(usr, "You issue a kill command for the unfortunate drone.") - message_admins("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.") - log_game("[key_name(usr)] issued kill order for [key_name(src)] from control console.") - D.shut_down() - - else if (href_list["search_fab"]) - if(dronefab) - return - - for(var/obj/machinery/drone_fabricator/fab in oview(3,src)) - - if(fab.stat & NOPOWER) - continue - - dronefab = fab - to_chat(usr, "Drone fabricator located.") - return - - to_chat(usr, "Unable to locate drone fabricator.") - - else if (href_list["toggle_fab"]) - - if(!dronefab) - return - - if(get_dist(src,dronefab) > 3) - dronefab = null - to_chat(usr, "Unable to locate drone fabricator.") - return - - dronefab.produce_drones = !dronefab.produce_drones - to_chat(usr, "You [dronefab.produce_drones ? "enable" : "disable"] drone production in the nearby fabricator.") - - src.updateUsrDialog() + dronefab.produce_drones = !dronefab.produce_drones + to_chat(usr, SPAN_NOTICE("You [dronefab.produce_drones ? "enable" : "disable"] drone production in the nearby fabricator.")) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station/medical.dm b/code/modules/mob/living/silicon/robot/robot_modules/station/medical.dm index 94c50802baf..95cffa332be 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station/medical.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station/medical.dm @@ -16,7 +16,7 @@ "Telemachus" = "toiletbotsurgeon", "WTOperator" = "sleekcmo", "XI-ALP" = "heavyMed", - "Basic" = "Medbot", + "Basic" = "Medibot", "Advanced Droid" = "droid-medical", "Needles" = "medicalrobot", "Drone" = "drone-surgery", @@ -190,4 +190,3 @@ if(R.client && (R.client.ckey in list("nezuli"))) sprites += "Alina" sprites["Alina"] = "alina-med" - diff --git a/code/modules/organs/internal/adherent.dm b/code/modules/organs/internal/adherent.dm index 3a7b00a9685..2fa118c5999 100644 --- a/code/modules/organs/internal/adherent.dm +++ b/code/modules/organs/internal/adherent.dm @@ -5,7 +5,6 @@ desc = "The self-contained, self-supporting internal 'brain' of an Adherent unit." icon = 'icons/mob/human_races/adherent/organs.dmi' icon_state = "brain" - robotic = ORGAN_ROBOT organ_tag = O_BRAIN robotic = ORGAN_CRYSTAL diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 2af4abcaa64..93d3a8bab9b 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -34,7 +34,7 @@ /obj/machinery/atmospherics/unary/cryo_cell, /obj/machinery/dna_scannernew, /obj/item/grenade/chem_grenade, - /mob/living/bot/medbot, + /mob/living/bot/medibot, /obj/item/storage/secure/safe, /obj/machinery/iv_drip, /obj/machinery/disease2/incubator, diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 03824506063..28fd19bbca7 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -14,13 +14,13 @@ desc = "A pneumatic waste disposal unit." icon = 'icons/obj/pipes/disposal.dmi' icon_state = "disposal" - anchored = 1 - density = 1 + anchored = TRUE + density = TRUE var/datum/gas_mixture/air_contents // internal reservoir var/mode = 1 // item mode 0=off 1=charging 2=charged - var/flush = 0 // true if flush handle is pulled + var/flush = FALSE // true if flush handle is pulled var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk - var/flushing = 0 // true if flushing in progress + var/flushing = FALSE // true if flushing in progress var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush. var/last_sound = 0 @@ -38,7 +38,7 @@ trunk = locate() in src.loc if(!trunk) mode = 0 - flush = 0 + flush = FALSE else trunk.linked = src // link the pipe trunk to self @@ -1157,7 +1157,7 @@ New() . = ..() dpdir = dir | turn(dir, 180) - if(sort_tag) tagger_locations |= sort_tag + if(sort_tag) GLOB.tagger_locations |= sort_tag updatename() updatedesc() update() @@ -1223,7 +1223,7 @@ New() . = ..() - if(sortType) tagger_locations |= sortType + if(sortType) GLOB.tagger_locations |= sortType updatedir() updatename() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 844d2619741..3b2f59039f0 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -335,8 +335,8 @@ var/dat = "

TagMaster 2.3

" dat += "" - for(var/i = 1, i <= tagger_locations.len, i++) - dat += "" + for(var/i = 1, i <= GLOB.tagger_locations.len, i++) + dat += "" if (i%4==0) dat += "" @@ -352,7 +352,7 @@ Topic(href, href_list) src.add_fingerprint(usr) - if(href_list["nextTag"] && (href_list["nextTag"] in tagger_locations)) + if(href_list["nextTag"] && (href_list["nextTag"] in GLOB.tagger_locations)) src.currTag = href_list["nextTag"] openwindow(usr) diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi index 06b0cf4de7a..122b5b1df87 100644 Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ diff --git a/icons/obj/bots/aibots - Copy.dmi b/icons/obj/bots/aibots - Copy.dmi new file mode 100644 index 00000000000..729863aafee Binary files /dev/null and b/icons/obj/bots/aibots - Copy.dmi differ diff --git a/icons/obj/bots/aibots.dmi b/icons/obj/bots/aibots.dmi new file mode 100644 index 00000000000..144204710a1 Binary files /dev/null and b/icons/obj/bots/aibots.dmi differ diff --git a/icons/obj/bots/farmbots.dmi b/icons/obj/bots/farmbots.dmi new file mode 100644 index 00000000000..64d15c45263 Binary files /dev/null and b/icons/obj/bots/farmbots.dmi differ diff --git a/icons/obj/bots/floorbots.dmi b/icons/obj/bots/floorbots.dmi new file mode 100644 index 00000000000..fa8bd9ca2f5 Binary files /dev/null and b/icons/obj/bots/floorbots.dmi differ diff --git a/icons/obj/bots/medibots.dmi b/icons/obj/bots/medibots.dmi new file mode 100644 index 00000000000..7b6d56ea344 Binary files /dev/null and b/icons/obj/bots/medibots.dmi differ diff --git a/icons/obj/bots/mulebots.dmi b/icons/obj/bots/mulebots.dmi new file mode 100644 index 00000000000..fe2682d76f9 Binary files /dev/null and b/icons/obj/bots/mulebots.dmi differ diff --git a/sound/voice/medibot/apple.ogg b/sound/voice/medibot/apple.ogg new file mode 100644 index 00000000000..0cfd6705220 Binary files /dev/null and b/sound/voice/medibot/apple.ogg differ diff --git a/sound/voice/medibot/catch.ogg b/sound/voice/medibot/catch.ogg new file mode 100644 index 00000000000..fd6895a5606 Binary files /dev/null and b/sound/voice/medibot/catch.ogg differ diff --git a/sound/voice/medibot/close.ogg b/sound/voice/medibot/close.ogg new file mode 100644 index 00000000000..9e0efcefd20 Binary files /dev/null and b/sound/voice/medibot/close.ogg differ diff --git a/sound/voice/medibot/coming.ogg b/sound/voice/medibot/coming.ogg new file mode 100644 index 00000000000..f4d863db4fe Binary files /dev/null and b/sound/voice/medibot/coming.ogg differ diff --git a/sound/voice/medibot/delicious.ogg b/sound/voice/medibot/delicious.ogg new file mode 100644 index 00000000000..410efbf0b03 Binary files /dev/null and b/sound/voice/medibot/delicious.ogg differ diff --git a/sound/voice/medibot/dont_like.ogg b/sound/voice/medibot/dont_like.ogg new file mode 100644 index 00000000000..06fc84af2fa Binary files /dev/null and b/sound/voice/medibot/dont_like.ogg differ diff --git a/sound/voice/medibot/feelbetter.ogg b/sound/voice/medibot/feelbetter.ogg new file mode 100644 index 00000000000..adbae4ff799 Binary files /dev/null and b/sound/voice/medibot/feelbetter.ogg differ diff --git a/sound/voice/medibot/flies.ogg b/sound/voice/medibot/flies.ogg new file mode 100644 index 00000000000..a714f8a0bc9 Binary files /dev/null and b/sound/voice/medibot/flies.ogg differ diff --git a/sound/voice/medibot/forgive.ogg b/sound/voice/medibot/forgive.ogg new file mode 100644 index 00000000000..729eaa5c78e Binary files /dev/null and b/sound/voice/medibot/forgive.ogg differ diff --git a/sound/voice/medibot/fuck_you.ogg b/sound/voice/medibot/fuck_you.ogg new file mode 100644 index 00000000000..5eacff615fe Binary files /dev/null and b/sound/voice/medibot/fuck_you.ogg differ diff --git a/sound/voice/medibot/help.ogg b/sound/voice/medibot/help.ogg new file mode 100644 index 00000000000..9a26ee2e969 Binary files /dev/null and b/sound/voice/medibot/help.ogg differ diff --git a/sound/voice/medibot/hey_wait.ogg b/sound/voice/medibot/hey_wait.ogg new file mode 100644 index 00000000000..6c88b761ec7 Binary files /dev/null and b/sound/voice/medibot/hey_wait.ogg differ diff --git a/sound/voice/medibot/i_require_asst.ogg b/sound/voice/medibot/i_require_asst.ogg new file mode 100644 index 00000000000..18fabc630f5 Binary files /dev/null and b/sound/voice/medibot/i_require_asst.ogg differ diff --git a/sound/voice/medibot/i_trusted_you.ogg b/sound/voice/medibot/i_trusted_you.ogg new file mode 100644 index 00000000000..602baa2f674 Binary files /dev/null and b/sound/voice/medibot/i_trusted_you.ogg differ diff --git a/sound/voice/medibot/im_different.ogg b/sound/voice/medibot/im_different.ogg new file mode 100644 index 00000000000..42eb8564f1a Binary files /dev/null and b/sound/voice/medibot/im_different.ogg differ diff --git a/sound/voice/medibot/injured.ogg b/sound/voice/medibot/injured.ogg new file mode 100644 index 00000000000..27b601349b3 Binary files /dev/null and b/sound/voice/medibot/injured.ogg differ diff --git a/sound/voice/medibot/insult.ogg b/sound/voice/medibot/insult.ogg new file mode 100644 index 00000000000..91b9b1b1c61 Binary files /dev/null and b/sound/voice/medibot/insult.ogg differ diff --git a/sound/voice/medibot/is_this_the_end.ogg b/sound/voice/medibot/is_this_the_end.ogg new file mode 100644 index 00000000000..a2e0e2330a3 Binary files /dev/null and b/sound/voice/medibot/is_this_the_end.ogg differ diff --git a/sound/voice/medibot/live.ogg b/sound/voice/medibot/live.ogg new file mode 100644 index 00000000000..0118af0f324 Binary files /dev/null and b/sound/voice/medibot/live.ogg differ diff --git a/sound/voice/medibot/lost.ogg b/sound/voice/medibot/lost.ogg new file mode 100644 index 00000000000..52f570c5850 Binary files /dev/null and b/sound/voice/medibot/lost.ogg differ diff --git a/sound/voice/medbot/mapple.ogg b/sound/voice/medibot/mapple.ogg similarity index 100% rename from sound/voice/medbot/mapple.ogg rename to sound/voice/medibot/mapple.ogg diff --git a/sound/voice/medbot/mcatch.ogg b/sound/voice/medibot/mcatch.ogg similarity index 100% rename from sound/voice/medbot/mcatch.ogg rename to sound/voice/medibot/mcatch.ogg diff --git a/sound/voice/medbot/mcoming.ogg b/sound/voice/medibot/mcoming.ogg similarity index 100% rename from sound/voice/medbot/mcoming.ogg rename to sound/voice/medibot/mcoming.ogg diff --git a/sound/voice/medbot/mdelicious.ogg b/sound/voice/medibot/mdelicious.ogg similarity index 100% rename from sound/voice/medbot/mdelicious.ogg rename to sound/voice/medibot/mdelicious.ogg diff --git a/sound/voice/medbot/mfeelbetter.ogg b/sound/voice/medibot/mfeelbetter.ogg similarity index 100% rename from sound/voice/medbot/mfeelbetter.ogg rename to sound/voice/medibot/mfeelbetter.ogg diff --git a/sound/voice/medbot/mflies.ogg b/sound/voice/medibot/mflies.ogg similarity index 100% rename from sound/voice/medbot/mflies.ogg rename to sound/voice/medibot/mflies.ogg diff --git a/sound/voice/medbot/mhelp.ogg b/sound/voice/medibot/mhelp.ogg similarity index 100% rename from sound/voice/medbot/mhelp.ogg rename to sound/voice/medibot/mhelp.ogg diff --git a/sound/voice/medbot/minjured.ogg b/sound/voice/medibot/minjured.ogg similarity index 100% rename from sound/voice/medbot/minjured.ogg rename to sound/voice/medibot/minjured.ogg diff --git a/sound/voice/medbot/minsult.ogg b/sound/voice/medibot/minsult.ogg similarity index 100% rename from sound/voice/medbot/minsult.ogg rename to sound/voice/medibot/minsult.ogg diff --git a/sound/voice/medbot/mlive.ogg b/sound/voice/medibot/mlive.ogg similarity index 100% rename from sound/voice/medbot/mlive.ogg rename to sound/voice/medibot/mlive.ogg diff --git a/sound/voice/medbot/mlost.ogg b/sound/voice/medibot/mlost.ogg similarity index 100% rename from sound/voice/medbot/mlost.ogg rename to sound/voice/medibot/mlost.ogg diff --git a/sound/voice/medbot/mno.ogg b/sound/voice/medibot/mno.ogg similarity index 100% rename from sound/voice/medbot/mno.ogg rename to sound/voice/medibot/mno.ogg diff --git a/sound/voice/medbot/mpatchedup.ogg b/sound/voice/medibot/mpatchedup.ogg similarity index 100% rename from sound/voice/medbot/mpatchedup.ogg rename to sound/voice/medibot/mpatchedup.ogg diff --git a/sound/voice/medbot/mradar.ogg b/sound/voice/medibot/mradar.ogg similarity index 100% rename from sound/voice/medbot/mradar.ogg rename to sound/voice/medibot/mradar.ogg diff --git a/sound/voice/medbot/msurgeon.ogg b/sound/voice/medibot/msurgeon.ogg similarity index 100% rename from sound/voice/medbot/msurgeon.ogg rename to sound/voice/medibot/msurgeon.ogg diff --git a/sound/voice/medibot/no.ogg b/sound/voice/medibot/no.ogg new file mode 100644 index 00000000000..5f94eaa7ded Binary files /dev/null and b/sound/voice/medibot/no.ogg differ diff --git a/sound/voice/medibot/nooo.ogg b/sound/voice/medibot/nooo.ogg new file mode 100644 index 00000000000..102fd1fb042 Binary files /dev/null and b/sound/voice/medibot/nooo.ogg differ diff --git a/sound/voice/medibot/oh_fuck.ogg b/sound/voice/medibot/oh_fuck.ogg new file mode 100644 index 00000000000..95d21ef2550 Binary files /dev/null and b/sound/voice/medibot/oh_fuck.ogg differ diff --git a/sound/voice/medibot/pain_is_real.ogg b/sound/voice/medibot/pain_is_real.ogg new file mode 100644 index 00000000000..9cfa3a71be1 Binary files /dev/null and b/sound/voice/medibot/pain_is_real.ogg differ diff --git a/sound/voice/medibot/patchedup.ogg b/sound/voice/medibot/patchedup.ogg new file mode 100644 index 00000000000..15cd46497fe Binary files /dev/null and b/sound/voice/medibot/patchedup.ogg differ diff --git a/sound/voice/medibot/please_dont.ogg b/sound/voice/medibot/please_dont.ogg new file mode 100644 index 00000000000..a77ee09cb45 Binary files /dev/null and b/sound/voice/medibot/please_dont.ogg differ diff --git a/sound/voice/medibot/please_im_scared.ogg b/sound/voice/medibot/please_im_scared.ogg new file mode 100644 index 00000000000..7bd53b39c89 Binary files /dev/null and b/sound/voice/medibot/please_im_scared.ogg differ diff --git a/sound/voice/medibot/please_put_me_back.ogg b/sound/voice/medibot/please_put_me_back.ogg new file mode 100644 index 00000000000..84700fbdd57 Binary files /dev/null and b/sound/voice/medibot/please_put_me_back.ogg differ diff --git a/sound/voice/medibot/radar.ogg b/sound/voice/medibot/radar.ogg new file mode 100644 index 00000000000..f44785740ad Binary files /dev/null and b/sound/voice/medibot/radar.ogg differ diff --git a/sound/voice/medibot/reported.ogg b/sound/voice/medibot/reported.ogg new file mode 100644 index 00000000000..d5469c19ced Binary files /dev/null and b/sound/voice/medibot/reported.ogg differ diff --git a/sound/voice/medibot/shindemashou.ogg b/sound/voice/medibot/shindemashou.ogg new file mode 100644 index 00000000000..1ee2858eaf9 Binary files /dev/null and b/sound/voice/medibot/shindemashou.ogg differ diff --git a/sound/voice/medibot/surgeon.ogg b/sound/voice/medibot/surgeon.ogg new file mode 100644 index 00000000000..de045467717 Binary files /dev/null and b/sound/voice/medibot/surgeon.ogg differ diff --git a/sound/voice/medibot/thank_you.ogg b/sound/voice/medibot/thank_you.ogg new file mode 100644 index 00000000000..3fabe7d4a63 Binary files /dev/null and b/sound/voice/medibot/thank_you.ogg differ diff --git a/sound/voice/medibot/turn_off.ogg b/sound/voice/medibot/turn_off.ogg new file mode 100644 index 00000000000..87a4d6bdd0e Binary files /dev/null and b/sound/voice/medibot/turn_off.ogg differ diff --git a/sound/voice/medibot/why.ogg b/sound/voice/medibot/why.ogg new file mode 100644 index 00000000000..415020b89b0 Binary files /dev/null and b/sound/voice/medibot/why.ogg differ diff --git a/sound/voice/medibot/youre_good.ogg b/sound/voice/medibot/youre_good.ogg new file mode 100644 index 00000000000..62c325f8341 Binary files /dev/null and b/sound/voice/medibot/youre_good.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 6c5eb33cf2c..011bec9912a 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -65,6 +65,7 @@ #include "code\__DEFINES\planets.dm" #include "code\__DEFINES\qdel.dm" #include "code\__DEFINES\research.dm" +#include "code\__DEFINES\robots.dm" #include "code\__DEFINES\roguemining_vr.dm" #include "code\__DEFINES\rust_g.dm" #include "code\__DEFINES\shields.dm" @@ -2479,13 +2480,14 @@ #include "code\modules\mob\living\logout.dm" #include "code\modules\mob\living\say.dm" #include "code\modules\mob\living\status_indicators.dm" +#include "code\modules\mob\living\bot\assembly.dm" #include "code\modules\mob\living\bot\bot.dm" #include "code\modules\mob\living\bot\cleanbot.dm" #include "code\modules\mob\living\bot\ed209bot.dm" #include "code\modules\mob\living\bot\edCLNbot.dm" #include "code\modules\mob\living\bot\farmbot.dm" #include "code\modules\mob\living\bot\floorbot.dm" -#include "code\modules\mob\living\bot\medbot.dm" +#include "code\modules\mob\living\bot\medibot.dm" #include "code\modules\mob\living\bot\mulebot.dm" #include "code\modules\mob\living\bot\secbot.dm" #include "code\modules\mob\living\bot\SLed209bot.dm"
[tagger_locations[i]][GLOB.tagger_locations[i]]