diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm
index b1776e58c52..98579eb7473 100644
--- a/code/game/objects/effects/portals.dm
+++ b/code/game/objects/effects/portals.dm
@@ -15,23 +15,31 @@
var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent
/obj/effect/portal/Bumped(mob/M as mob|obj)
- src.teleport(M)
+ teleport(M)
-/obj/effect/portal/New(loc, turf/target, creator, lifespan=300)
+/obj/effect/portal/attack_hand(mob/user)
+ if(Adjacent(user))
+ teleport(user)
+
+/obj/effect/portal/attackby(obj/item/weapon/W, mob/user, params)
+ if(user && Adjacent(user))
+ teleport(user)
+
+
+
+/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
+ ..()
portals += src
- src.loc = loc
src.target = target
src.creator = creator
- var/area/A = target.loc
- if(A.noteleport) // No point in persisting if the target is unreachable.
+
+ var/area/A = get_area(target)
+ if(A && A.noteleport) // No point in persisting if the target is unreachable.
qdel(src)
return
- for(var/mob/M in src.loc)
- src.teleport(M)
if(lifespan > 0)
spawn(lifespan)
qdel(src)
- return
/obj/effect/portal/Destroy()
portals -= src
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index eaad0d76502..7f25dbfe5e9 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -304,6 +304,11 @@
return
if(cyborg && (cyborg.stat != DEAD) && on)
+ if(!cyborg.cell)
+ cyborg << "Self-repair module deactivated. Please, insert the power cell."
+ deactivate()
+ return
+
if(cyborg.cell.charge < powercost * 2)
cyborg << "Self-repair module deactivated. Please recharge."
deactivate()
diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm
index f421032ecc2..2fc857d23c4 100644
--- a/code/modules/hydroponics/grown/replicapod.dm
+++ b/code/modules/hydroponics/grown/replicapod.dm
@@ -108,6 +108,6 @@
seed_count++
for(var/i=0,iYou remove the dead plant from [src]."
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index c1edd43e2c1..a946ed11e82 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -141,18 +141,19 @@
return TRUE
/datum/plant_gene/trait/proc/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc)
- if(origin_tech) // This ugly code segment adds RnD tech levels to resulting plants.
- if(G.origin_tech)
- var/list/tech = params2list(G.origin_tech)
- for(var/t in origin_tech)
- if(t in tech)
- tech[t] = max(tech[t], origin_tech[t])
- else
- tech[t] = origin_tech[t]
- G.origin_tech = list2params(tech)
- else
- G.origin_tech = list2params(origin_tech)
- return
+ if(!origin_tech) // This ugly code segment adds RnD tech levels to resulting plants.
+ return
+
+ if(G.origin_tech)
+ var/list/tech = params2list(G.origin_tech)
+ for(var/t in origin_tech)
+ if(t in tech)
+ tech[t] = max(text2num(tech[t]), origin_tech[t])
+ else
+ tech[t] = origin_tech[t]
+ G.origin_tech = list2params(tech)
+ else
+ G.origin_tech = list2params(origin_tech)
/datum/plant_gene/trait/proc/on_consume(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
return
@@ -171,7 +172,7 @@
// For code, see grown.dm
name = "Liquid Contents"
examine_line = "It has a lot of liquid contents inside."
- origin_tech = list("bio" = 5)
+ origin_tech = list("biotech" = 5)
/*/datum/plant_gene/trait/squash/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/target)
G.squash(target)*/
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 214886607ec..e3e179721fa 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -109,14 +109,14 @@
//Drops the item in our left hand
/mob/proc/drop_l_hand()
- if(!loc.allow_drop())
+ if(!loc || !loc.allow_drop())
return
return unEquip(l_hand) //All needed checks are in unEquip
//Drops the item in our right hand
/mob/proc/drop_r_hand()
- if(!loc.allow_drop())
+ if(!loc || !loc.allow_drop())
return
return unEquip(r_hand)
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 2fe2fb90f66..43454906259 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -98,8 +98,11 @@ Borg Hypospray
if(M.reagents)
var/trans = R.trans_to(M, amount_per_transfer_from_this)
user << "[trans] unit\s injected. [R.total_volume] unit\s remaining."
- var/contained = english_list(R)
- add_logs(user, M, "injected", src, "(CHEMICALS: [contained])")
+
+ var/list/injected = list()
+ for(var/datum/reagent/RG in R.reagent_list)
+ injected += RG.name
+ add_logs(user, M, "injected", src, "(CHEMICALS: [english_list(injected)])")
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user)
var/chosen_reagent = modes[input(user, "What reagent do you want to dispense?") as null|anything in reagent_ids]