diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index a7a5c9dda20..6a538c4ab16 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -143,10 +143,10 @@
if(occupant)
user << "\blue The DNA Scanner is already occupied!"
return
- if(isrobot(user))
+/* if(isrobot(user))
if(!istype(user:module, /obj/item/weapon/robot_module/medical))
user << "You do not have the means to do this!"
- return
+ return*/
var/mob/living/L = O
if(!istype(L) || L.buckled)
return
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 4aee671b3c9..09d1b570545 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -396,10 +396,10 @@
if(occupant)
user << "\blue The sleeper is already occupied!"
return
- if(isrobot(user))
+/* if(isrobot(user))
if(!istype(user:module, /obj/item/weapon/robot_module/medical))
user << "You do not have the means to do this!"
- return
+ return*/
var/mob/living/L = O
if(!istype(L) || L.buckled)
return
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 49e4d912d78..6f802a84fd1 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -53,10 +53,10 @@
if(occupant)
user << "\blue The cryo cell is already occupied!"
return
- if(isrobot(user))
+/* if(isrobot(user))
if(!istype(user:module, /obj/item/weapon/robot_module/medical))
user << "You do not have the means to do this!"
- return
+ return*/
var/mob/living/L = O
if(!istype(L) || L.buckled)
return
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 46d60632b4b..3e2c06a66f7 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -126,11 +126,47 @@
icon_state = "folded"
w_class = 4.0 // Can't be put in backpacks. Oh well.
- attack_self(mob/user)
+/obj/item/roller/attack_self(mob/user)
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
R.add_fingerprint(user)
del(src)
+/obj/item/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
+
+ if(istype(W,/obj/item/roller_holder))
+ var/obj/item/roller_holder/RH = W
+ if(!RH.held)
+ user << "\blue You collect the roller bed."
+ src.loc = RH
+ RH.held = src
+ return
+
+ ..()
+
+/obj/item/roller_holder
+ name = "roller bed rack"
+ desc = "A rack for carrying a collapsed roller bed."
+ icon = 'icons/obj/rollerbed.dmi'
+ icon_state = "folded"
+ var/obj/item/roller/held
+
+/obj/item/roller_holder/New()
+ ..()
+ held = new /obj/item/roller(src)
+
+/obj/item/roller_holder/attack_self(mob/user as mob)
+
+ if(!held)
+ user << "\blue The rack is empty."
+ return
+
+ user << "\blue You deploy the roller bed."
+ var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
+ R.add_fingerprint(user)
+ del(held)
+ held = null
+
+
/obj/structure/stool/bed/roller/Move()
..()
if(buckled_mob)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 2fea276cd28..8beec1fc435 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -181,7 +181,7 @@
if(module)
return
- var/list/modules = list("Standard", "Engineering", "Medical", "Miner", "Janitor", "Service", "Security")
+ var/list/modules = list("Standard", "Engineering", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Security")
if(security_level == (SEC_LEVEL_GAMMA || SEC_LEVEL_EPSILON) || crisis)
src << "\red Crisis mode active. Combat module available."
modules+="Combat"
@@ -219,15 +219,26 @@
module_sprites["Advanced Droid"] = "droid-miner"
module_sprites["Treadhead"] = "Miner"
- if("Medical")
- module = new /obj/item/weapon/robot_module/medical(src)
+ if("Crisis")
+ module = new /obj/item/weapon/robot_module/crisis(src)
channels = list("Medical" = 1)
if(camera && "Robots" in camera.network)
camera.network.Add("Medical")
module_sprites["Basic"] = "Medbot"
+ module_sprites["Standard"] = "surgeon"
module_sprites["Advanced Droid"] = "droid-medical"
module_sprites["Needles"] = "medicalrobot"
+
+ if("Surgeon")
+ module = new /obj/item/weapon/robot_module/surgeon(src)
+ channels = list("Medical" = 1)
+ if(camera && "Robots" in camera.network)
+ camera.network.Add("Medical")
+
+ module_sprites["Basic"] = "Medbot"
module_sprites["Standard"] = "surgeon"
+ module_sprites["Advanced Droid"] = "droid-medical"
+ module_sprites["Needles"] = "medicalrobot"
if("Security")
module = new /obj/item/weapon/robot_module/security(src)
@@ -246,6 +257,15 @@
module_sprites["Antique"] = "engineerrobot"
module_sprites["Landmate"] = "landmate"
+ if("Construction")
+ module = new /obj/item/weapon/robot_module/engineering(src)
+ channels = list("Engineering" = 1)
+ if(camera && "Robots" in camera.network)
+ camera.network.Add("Engineering")
+ module_sprites["Basic"] = "Engineering"
+ module_sprites["Antique"] = "engineerrobot"
+ module_sprites["Landmate"] = "landmate"
+
if("Janitor")
module = new /obj/item/weapon/robot_module/janitor(src)
module_sprites["Basic"] = "JanBot2"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 36fc0af33a4..299e2641f0c 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -9,6 +9,7 @@
var/list/modules = list()
var/obj/item/emag = null
var/obj/item/borg/upgrade/jetpack = null
+ var/list/stacktypes
emp_act(severity)
@@ -32,7 +33,21 @@
/obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R)
- return
+
+ if(!stacktypes || !stacktypes.len) return
+
+ for(var/T in stacktypes)
+ var/O = locate(T) in src.modules
+ var/obj/item/stack/S = O
+
+ if(!S)
+ src.modules -= null
+ S = new T(src)
+ src.modules += S
+ S.amount = 1
+
+ if(S && S.amount < stacktypes[T])
+ S.amount++
/obj/item/weapon/robot_module/proc/rebuild()//Rebuilds the list so it's possible to add/remove items from the module
var/list/temp_list = modules
@@ -56,9 +71,49 @@
src.emag = new /obj/item/weapon/melee/energy/sword(src)
return
+/obj/item/weapon/robot_module/surgeon
+ name = "surgeon robot module"
+ stacktypes = list(
+ /obj/item/stack/medical/advanced/bruise_pack = 5,
+ /obj/item/stack/nanopaste = 5
+ )
-/obj/item/weapon/robot_module/medical
- name = "medical robot module"
+ New()
+ src.modules += new /obj/item/device/flashlight(src)
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/device/healthanalyzer(src)
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo/surgeon(src)
+ src.modules += new /obj/item/weapon/scalpel(src)
+ src.modules += new /obj/item/weapon/hemostat(src)
+ src.modules += new /obj/item/weapon/retractor(src)
+ src.modules += new /obj/item/weapon/cautery(src)
+ src.modules += new /obj/item/weapon/bonegel(src)
+ src.modules += new /obj/item/weapon/bonesetter(src)
+ src.modules += new /obj/item/weapon/circular_saw(src)
+ src.modules += new /obj/item/weapon/surgicaldrill(src)
+ src.modules += new /obj/item/weapon/extinguisher/mini(src)
+ src.modules += new /obj/item/stack/medical/advanced/bruise_pack(src)
+ src.modules += new /obj/item/stack/nanopaste(src)
+
+ src.emag = new /obj/item/weapon/reagent_containers/spray(src)
+
+ src.emag.reagents.add_reagent("pacid", 250)
+ src.emag.name = "Polyacid spray"
+ return
+
+/obj/item/weapon/robot_module/surgeon/respawn_consumable(var/mob/living/silicon/robot/R)
+ if(src.emag)
+ var/obj/item/weapon/reagent_containers/spray/PS = src.emag
+ PS.reagents.add_reagent("pacid", 2)
+ ..()
+
+/obj/item/weapon/robot_module/crisis
+ name = "crisis robot module"
+ stacktypes = list(
+ /obj/item/stack/medical/ointment = 5,
+ /obj/item/stack/medical/bruise_pack = 5,
+ /obj/item/stack/medical/splint = 5
+ )
New()
@@ -67,31 +122,71 @@
src.modules += new /obj/item/borg/sight/hud/med(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/reagent_scanner/adv(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)
+ src.modules += new /obj/item/roller_holder(src)
+ src.modules += new /obj/item/stack/medical/ointment(src)
+ src.modules += new /obj/item/stack/medical/bruise_pack(src)
+ src.modules += new /obj/item/stack/medical/splint(src)
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
- src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("pacid", 250)
src.emag.name = "Polyacid spray"
return
+/obj/item/weapon/robot_module/crisis/respawn_consumable(var/mob/living/silicon/robot/R)
+ var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
+ if(S.mode == 2)
+ S.reagents.clear_reagents()
+ S.mode = initial(S.mode)
+ S.desc = initial(S.desc)
+ S.update_icon()
-/obj/item/weapon/robot_module/engineering
- name = "engineering robot module"
+ if(src.emag)
+ var/obj/item/weapon/reagent_containers/spray/PS = src.emag
+ PS.reagents.add_reagent("pacid", 2)
+ ..()
+
+/obj/item/weapon/robot_module/construction
+ name = "construction robot module"
+
+ stacktypes = list(
+ /obj/item/stack/sheet/metal = 50,
+ /obj/item/stack/sheet/plasteel = 10,
+ /obj/item/stack/sheet/rglass = 50
+ )
+
+ New()
+ src.modules += new /obj/item/device/flashlight(src)
+ src.modules += new /obj/item/device/flash(src)
+ src.modules += new /obj/item/borg/sight/meson(src)
+ src.modules += new /obj/item/weapon/extinguisher(src)
+ src.modules += new /obj/item/weapon/rcd/borg(src)
+ src.modules += new /obj/item/weapon/screwdriver(src)
+ src.modules += new /obj/item/weapon/wrench(src)
+ src.modules += new /obj/item/weapon/crowbar(src)
+ src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
+
+/obj/item/weapon/robot_module/engineering
+ name = "engineering robot module"
+
+ stacktypes = list(
+ /obj/item/stack/sheet/metal = 50,
+ /obj/item/stack/sheet/rglass = 50,
+ /obj/item/stack/cable_coil = 50,
+ /obj/item/stack/rods = 15,
+ /obj/item/stack/tile/plasteel = 15
+ )
New()
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/meson(src)
- src.emag = new /obj/item/borg/stun(src)
- src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/extinguisher(src)
-// src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
@@ -101,6 +196,10 @@
src.modules += new /obj/item/device/t_scanner(src)
src.modules += new /obj/item/device/analyzer(src)
src.modules += new /obj/item/taperoll/engineering(src)
+ src.modules += new /obj/item/weapon/gripper(src)
+ src.modules += new /obj/item/weapon/matter_decompiler(src)
+
+ src.emag = new /obj/item/borg/stun(src)
var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src)
M.amount = 50
@@ -116,23 +215,6 @@
return
-
- respawn_consumable(var/mob/living/silicon/robot/R)
- var/list/what = list (
- /obj/item/stack/sheet/metal,
- /obj/item/stack/sheet/rglass,
- /obj/item/stack/cable_coil,
- )
- for (var/T in what)
- if (!(locate(T) in src.modules))
- src.modules -= null
- var/O = new T(src)
- src.modules += O
- O:amount = 1
- return
-
-
-
/obj/item/weapon/robot_module/security
name = "security robot module"
@@ -216,11 +298,11 @@
src.modules += new /obj/item/device/flashlight(src)
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/meson(src)
- src.emag = new /obj/item/borg/stun(src)
+ src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/storage/bag/ore(src)
src.modules += new /obj/item/weapon/pickaxe/borgdrill(src)
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
-// src.modules += new /obj/item/weapon/shovel(src) Uneeded due to buffed drill
+ src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
return
/obj/item/weapon/robot_module/syndicate
@@ -269,7 +351,7 @@
/obj/item/weapon/robot_module/drone
name = "drone module"
- var/list/stacktypes = list(
+ stacktypes = list(
/obj/item/stack/sheet/wood/cyborg = 1,
/obj/item/stack/sheet/mineral/plastic/cyborg = 1,
/obj/item/stack/sheet/rglass/cyborg = 5,
@@ -307,22 +389,11 @@
var/obj/item/weapon/reagent_containers/spray/cleaner/C = locate() in src.modules
C.reagents.add_reagent("cleaner", 3)
- for(var/T in stacktypes)
- var/O = locate(T) in src.modules
- var/obj/item/stack/sheet/S = O
-
- if(!S)
- src.modules -= null
- S = new T(src)
- src.modules += S
- S.amount = 1
-
- if(S && S.amount < stacktypes[T])
- S.amount++
-
var/obj/item/device/lightreplacer/LR = locate() in src.modules
LR.Charge(R)
+ ..()
+
return
//checks whether this item is a module of the robot it is located in.
diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm
index f1a62754b4b..c3b7d43c05c 100644
--- a/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -1,3 +1,8 @@
+/mob/living/silicon/robot/Process_Spaceslipping(var/prob_slip)
+ if(module && (istype(module,/obj/item/weapon/robot_module/construction) || istype(module,/obj/item/weapon/robot_module/drone)))
+ return 0
+ ..(prob_slip)
+
/mob/living/silicon/robot/Process_Spacemove()
if(module)
for(var/obj/item/weapon/tank/jetpack/J in module.modules)
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 2b2e3be4527..8ce9b636b01 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -18,6 +18,12 @@
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin")
//var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin")
+/obj/item/weapon/reagent_containers/borghypo/surgeon
+ reagent_ids = list("bicaridine", "inaprovaline", "dexalin")
+
+/obj/item/weapon/reagent_containers/borghypo/crisis
+ reagent_ids = list("tricordrazine", "inaprovaline", "tramadol")
+
/obj/item/weapon/reagent_containers/borghypo/New()
..()
for(var/R in reagent_ids)