diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index fbd9114c325..8c81a622508 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -210,6 +210,8 @@ var/datum/global_hud/global_hud = new()
hoggod_hud()
else if(isguardian(mymob))
guardian_hud()
+ else if(isovermind(mymob))
+ blob_hud()
//Version denotes which style should be displayed. blank or 0 means "next version"
/datum/hud/proc/show_hud(version = 0)
diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm
index 8b12ed73b8e..cfcfd7566fe 100644
--- a/code/_onclick/hud/other_mobs.dm
+++ b/code/_onclick/hud/other_mobs.dm
@@ -14,25 +14,6 @@
mymob.client.screen += list(mymob.blind)
mymob.client.screen += mymob.client.void
-/datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen_midnight.dmi')
-
- blobpwrdisplay = new /obj/screen()
- blobpwrdisplay.name = "blob power"
- blobpwrdisplay.icon_state = "block"
- blobpwrdisplay.screen_loc = ui_health
- blobpwrdisplay.layer = 20
-
- blobhealthdisplay = new /obj/screen()
- blobhealthdisplay.name = "blob health"
- blobhealthdisplay.icon_state = "block"
- blobhealthdisplay.screen_loc = ui_internal
- blobhealthdisplay.layer = 20
-
- mymob.client.screen = list()
- mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay)
- mymob.client.screen += mymob.client.void
-
-
/datum/hud/proc/hoggod_hud(ui_style = 'icons/mob/screen_midnight.dmi')
deity_health_display = new /obj/screen()
deity_health_display.name = "Nexus Health"
diff --git a/code/_onclick/overmind.dm b/code/_onclick/overmind.dm
index dc4cca11421..eb454e2dcc4 100644
--- a/code/_onclick/overmind.dm
+++ b/code/_onclick/overmind.dm
@@ -1,7 +1,20 @@
// Blob Overmind Controls
-/mob/camera/blob/CtrlClickOn(atom/A) // Expand blob
+/mob/camera/blob/ClickOn(var/atom/A, var/params) // Expand blob
+ var/list/modifiers = params2list(params)
+ if(modifiers["middle"])
+ MiddleClickOn(A)
+ return
+ if(modifiers["shift"])
+ ShiftClickOn(A)
+ return
+ if(modifiers["alt"])
+ AltClickOn(A)
+ return
+ if(modifiers["ctrl"])
+ CtrlClickOn(A)
+ return
var/turf/T = get_turf(A)
if(T)
expand_blob(T)
@@ -11,7 +24,7 @@
if(T)
rally_spores(T)
-/mob/camera/blob/AltClickOn(atom/A) // Create a shield
+/mob/camera/blob/CtrlClickOn(atom/A) // Create a shield
var/turf/T = get_turf(A)
if(T)
create_shield(T)
\ No newline at end of file
diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm
index f97ae377668..55ce81f51d6 100644
--- a/code/game/gamemodes/blob/overmind.dm
+++ b/code/game/gamemodes/blob/overmind.dm
@@ -60,7 +60,7 @@
src << "Resource Blob is a blob which will collect more resources for you, try to build these earlier to get a strong income. It will benefit from being near your core or multiple nodes, by having an increased resource rate; put it alone and it won't create resources at all."
src << "Node Blob is a blob which will grow, like the core. Unlike the core it won't give you a small income but it can power resource and factory blobs to increase their rate."
src << "Factory Blob is a blob which will spawn blob spores which will attack nearby food. Putting this nearby nodes and your core will increase the spawn rate; put it alone and it will not spawn any spores."
- src << "Shortcuts: CTRL Click = Expand Blob / Middle Mouse Click = Rally Spores / Alt Click = Create Shield"
+ src << "Shortcuts: Click = Expand Blob / Middle Mouse Click = Rally Spores / Ctrl Click = Create Shield"
update_health()
/mob/camera/blob/proc/update_health()
@@ -126,3 +126,113 @@
/mob/camera/blob/proc/can_attack()
return (world.time > (last_attack + CLICK_CD_RANGE))
+
+/obj/screen/blob
+ icon = 'icons/mob/blob.dmi'
+
+/obj/screen/blob/JumpToNode
+ icon_state = "ui_tonode"
+ name = "Jump to Node"
+ desc = "Moves your camera to a selected blob node."
+
+/obj/screen/blob/JumpToNode/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.jump_to_node()
+
+/obj/screen/blob/JumpToCore
+ icon_state = "ui_tocore"
+ name = "Jump to Core"
+ desc = "Moves your camera to your blob core."
+
+/obj/screen/blob/JumpToCore/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.transport_core()
+
+/obj/screen/blob/ResourceBlob
+ icon_state = "ui_resource"
+ name = "Produce Resource Blob (40)"
+ desc = "Produces a resource blob for 40 points."
+
+/obj/screen/blob/ResourceBlob/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.create_resource()
+
+/obj/screen/blob/NodeBlob
+ icon_state = "ui_node"
+ name = "Produce Node Blob (60)"
+ desc = "Produces a node blob for 60 points."
+
+/obj/screen/blob/NodeBlob/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.create_node()
+
+/obj/screen/blob/FactoryBlob
+ icon_state = "ui_factory"
+ name = "Produce Factory Blob (60)"
+ desc = "Produces a resource blob for 60 points."
+
+/obj/screen/blob/FactoryBlob/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.create_factory()
+
+/obj/screen/blob/RelocateCore
+ icon_state = "ui_swap"
+ name = "Relocate Core (80)"
+ desc = "Swaps a node and your core for 80 points."
+
+/obj/screen/blob/RelocateCore/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.relocate_core()
+
+/datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen_midnight.dmi')
+ adding = list()
+
+ var/obj/screen/using
+
+ blobpwrdisplay = new /obj/screen()
+ blobpwrdisplay.name = "blob power"
+ blobpwrdisplay.icon_state = "block"
+ blobpwrdisplay.screen_loc = ui_health
+ blobpwrdisplay.layer = 20
+ adding += blobpwrdisplay
+
+ blobhealthdisplay = new /obj/screen()
+ blobhealthdisplay.name = "blob health"
+ blobhealthdisplay.icon_state = "block"
+ blobhealthdisplay.screen_loc = ui_internal
+ blobhealthdisplay.layer = 20
+ adding += blobhealthdisplay
+
+ using = new /obj/screen/blob/JumpToNode()
+ using.screen_loc = ui_inventory
+ adding += using
+
+ using = new /obj/screen/blob/JumpToCore()
+ using.screen_loc = ui_zonesel
+ adding += using
+
+ using = new /obj/screen/blob/ResourceBlob()
+ using.screen_loc = ui_back
+ adding += using
+
+ using = new /obj/screen/blob/NodeBlob()
+ using.screen_loc = ui_lhand
+ adding += using
+
+ using = new /obj/screen/blob/FactoryBlob()
+ using.screen_loc = ui_rhand
+ adding += using
+
+ using = new /obj/screen/blob/RelocateCore()
+ using.screen_loc = ui_storage1
+ adding += using
+
+ mymob.client.screen = list()
+ mymob.client.screen += mymob.client.void
+ mymob.client.screen += adding
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index 8de84f7db2d..5dc03c9222f 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -91,10 +91,10 @@
var/turf/T = get_turf(src)
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
if(!B)
- src << "You must be on a blob!"
+ src << "You must be on a blob!"
return
if(!istype(B, /obj/effect/blob/factory))
- src << "Unable to use this blob, find a factory blob."
+ src << "Unable to use this blob, find a factory blob."
return
if(!can_buy(20))
return
@@ -112,7 +112,7 @@
var/turf/T = get_turf(src)
var/obj/effect/blob/node/B = locate(/obj/effect/blob/node) in T
if(!B)
- src << "You must be on a blob node!"
+ src << "You must be on a blob node!"
return
if(!can_buy(80))
return
@@ -127,16 +127,16 @@
var/turf/T = get_turf(src)
var/obj/effect/blob/B = locate(/obj/effect/blob) in T
if(!B)
- src << "You must be on a blob!"
+ src << "You must be on a blob!"
return
if(istype(B, /obj/effect/blob/core))
- src << "Unable to remove this blob."
+ src << "Unable to remove this blob."
return
qdel(B)
/mob/camera/blob/verb/expand_blob_power()
set category = "Blob"
- set name = "Expand/Attack Blob (4)"
+ set name = "Expand/Attack Blob (5)"
set desc = "Attempts to create a new blob in this tile. If the tile isn't clear we will attack it, which might clear it."
var/turf/T = get_turf(src)
expand_blob(T)
@@ -146,13 +146,13 @@
return
var/obj/effect/blob/B = locate() in T
if(B)
- src << "There is a blob here!"
+ src << "There is a blob here!"
return
var/obj/effect/blob/OB = locate() in circlerange(T, 1)
if(!OB)
- src << "There is no blob adjacent to you."
+ src << "There is no blob adjacent to you."
return
- if(!can_buy(4))
+ if(!can_buy(5))
return
last_attack = world.time
OB.expand(T, 0, blob_reagent_datum.color)
diff --git a/icons/mob/blob.dmi b/icons/mob/blob.dmi
index 21a976f7003..fee376088e3 100644
Binary files a/icons/mob/blob.dmi and b/icons/mob/blob.dmi differ