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 += "
| [tagger_locations[i]] | " + for(var/i = 1, i <= GLOB.tagger_locations.len, i++) + dat += "[GLOB.tagger_locations[i]] | " if (i%4==0) dat += "