diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm
new file mode 100644
index 00000000000..09d076c0726
--- /dev/null
+++ b/code/_onclick/hud/blob_overmind.dm
@@ -0,0 +1,168 @@
+/mob/camera/blob/create_mob_hud()
+ if(client && !hud_used)
+ hud_used = new /datum/hud/blob_overmind(src)
+
+/obj/screen/blob
+ icon = 'icons/mob/blob.dmi'
+
+/obj/screen/blob/MouseEntered(location,control,params)
+ openToolTip(usr,src,params,title = name,content = desc, theme = "blob")
+
+/obj/screen/blob/MouseExited()
+ closeToolTip(usr)
+
+/obj/screen/blob/BlobHelp
+ icon_state = "ui_help"
+ name = "Blob Help"
+ desc = "Help on playing blob!"
+
+/obj/screen/blob/BlobHelp/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.blob_help()
+
+/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/MouseEntered(location,control,params)
+ if(hud && hud.mymob && isovermind(hud.mymob))
+ name = initial(name)
+ desc = initial(desc)
+ ..()
+
+/obj/screen/blob/JumpToCore/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.transport_core()
+
+/obj/screen/blob/Blobbernaut
+ icon_state = "ui_blobbernaut"
+ name = "Produce Blobbernaut (20)"
+ desc = "Produces a strong, but dumb blobbernaut from a factory blob for 20 resources.
The factory blob will be destroyed in the process."
+
+/obj/screen/blob/Blobbernaut/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.create_blobbernaut()
+
+/obj/screen/blob/ResourceBlob
+ icon_state = "ui_resource"
+ name = "Produce Resource Blob (40)"
+ desc = "Produces a resource blob for 40 resources.
Resource blobs will give you resources every few seconds."
+
+/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 resources.
Node blobs will expand and activate nearby resource and factory blobs."
+
+/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 factory blob for 60 resources.
Factory blobs will produce spores every few seconds."
+
+/obj/screen/blob/FactoryBlob/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.create_factory()
+
+/obj/screen/blob/ReadaptChemical
+ icon_state = "ui_chemswap"
+ name = "Readapt Chemical (50)"
+ desc = "Randomly rerolls your chemical for 50 resources."
+
+/obj/screen/blob/ReadaptChemical/MouseEntered(location,control,params)
+ if(hud && hud.mymob && isovermind(hud.mymob))
+ name = initial(name)
+ desc = initial(desc)
+ ..()
+
+/obj/screen/blob/ReadaptChemical/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.chemical_reroll()
+
+/obj/screen/blob/RelocateCore
+ icon_state = "ui_swap"
+ name = "Relocate Core (80)"
+ desc = "Swaps a node and your core for 80 resources."
+
+/obj/screen/blob/RelocateCore/Click()
+ if(isovermind(usr))
+ var/mob/camera/blob/B = usr
+ B.relocate_core()
+
+/datum/hud/blob_overmind/New(mob/user)
+ ..()
+ var/obj/screen/using
+
+ blobpwrdisplay = new /obj/screen()
+ blobpwrdisplay.name = "blob power"
+ blobpwrdisplay.icon_state = "block"
+ blobpwrdisplay.screen_loc = ui_health
+ static_inventory += blobpwrdisplay
+
+ blobhealthdisplay = new /obj/screen()
+ blobhealthdisplay.name = "blob health"
+ blobhealthdisplay.icon_state = "block"
+ blobhealthdisplay.screen_loc = ui_internal
+ static_inventory += blobhealthdisplay
+
+ using = new /obj/screen/blob/BlobHelp()
+ using.screen_loc = "WEST:6,NORTH:-3"
+ static_inventory += using
+
+ using = new /obj/screen/blob/JumpToNode()
+ using.screen_loc = ui_inventory
+ static_inventory += using
+
+ using = new /obj/screen/blob/JumpToCore()
+ using.screen_loc = ui_zonesel
+ using.hud = src
+ static_inventory += using
+
+ using = new /obj/screen/blob/Blobbernaut()
+ using.screen_loc = ui_belt
+ static_inventory += using
+
+ using = new /obj/screen/blob/ResourceBlob()
+ using.screen_loc = ui_back
+ static_inventory += using
+
+ using = new /obj/screen/blob/NodeBlob()
+ using.screen_loc = using.screen_loc = ui_rhand
+ static_inventory += using
+
+ using = new /obj/screen/blob/FactoryBlob()
+ using.screen_loc = using.screen_loc = ui_lhand
+ static_inventory += using
+
+ using = new /obj/screen/blob/ReadaptChemical()
+ using.screen_loc = ui_storage1
+ using.hud = src
+ static_inventory += using
+
+ using = new /obj/screen/blob/RelocateCore()
+ using.screen_loc = ui_storage2
+ static_inventory += using
\ No newline at end of file
diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm
index 8cf38a88eb9..a82c847a246 100644
--- a/code/_onclick/hud/other_mobs.dm
+++ b/code/_onclick/hud/other_mobs.dm
@@ -24,24 +24,4 @@
mymob.pullin.icon = 'icons/mob/screen_corgi.dmi'
mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_construct_pull
- static_inventory += mymob.pullin
-
-
-/mob/camera/blob/create_mob_hud()
- if(client && !hud_used)
- hud_used = new /datum/hud/blob_overmind(src)
-
-/datum/hud/blob_overmind/New(mob/user)
- ..()
-
- blobpwrdisplay = new /obj/screen()
- blobpwrdisplay.name = "blob power"
- blobpwrdisplay.icon_state = "block"
- blobpwrdisplay.screen_loc = ui_health
- static_inventory += blobpwrdisplay
-
- blobhealthdisplay = new /obj/screen()
- blobhealthdisplay.name = "blob health"
- blobhealthdisplay.icon_state = "block"
- blobhealthdisplay.screen_loc = ui_internal
- static_inventory += blobhealthdisplay
\ No newline at end of file
+ static_inventory += mymob.pullin
\ No newline at end of file
diff --git a/code/_onclick/overmind.dm b/code/_onclick/overmind.dm
index 91f24465569..612a5df2482 100644
--- a/code/_onclick/overmind.dm
+++ b/code/_onclick/overmind.dm
@@ -1,17 +1,35 @@
// Blob Overmind Controls
-/mob/camera/blob/CtrlClickOn(var/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)
-/mob/camera/blob/MiddleClickOn(var/atom/A) // Rally spores
+/mob/camera/blob/MiddleClickOn(atom/A) //Rally spores
var/turf/T = get_turf(A)
if(T)
rally_spores(T)
-/mob/camera/blob/AltClickOn(var/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
+ create_shield(T)
+
+/mob/camera/blob/AltClickOn(atom/A) //Remove a blob
+ var/turf/T = get_turf(A)
+ if(T)
+ revert(T)
\ No newline at end of file
diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm
index c0f2e4a4a9e..382fc8dd953 100644
--- a/code/game/gamemodes/blob/overmind.dm
+++ b/code/game/gamemodes/blob/overmind.dm
@@ -31,6 +31,7 @@
if(blob_core)
blob_core.adjustcolors(blob_reagent_datum.color)
+ color = blob_reagent_datum.complementary_color
ghostimage = image(src.icon,src,src.icon_state)
ghost_darkness_images |= ghostimage //so ghosts can see the blob cursor when they disable darkness
updateallghostimages()
@@ -51,16 +52,7 @@
/mob/camera/blob/Login()
..()
sync_mind()
- to_chat(src, "You are the overmind!")
- to_chat(src, "Your randomly chosen reagent is: [blob_reagent_datum.name]!")
- to_chat(src, "You are the overmind and can control the blob! You can expand, which will attack people, and place new blob pieces such as...")
- to_chat(src, "Normal Blob will expand your reach and allow you to upgrade into special blobs that perform certain functions.")
- to_chat(src, "Shield Blob is a strong and expensive blob which can take more damage. It is fireproof and can block air, use this to protect yourself from station fires.")
- to_chat(src, "Reflective Blobis an upgraded Shield Blob which has a high chance of deflecting energy projectiles, but is vulnerable to ballistics and brute damage.")
- to_chat(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.")
- to_chat(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.")
- to_chat(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.")
- to_chat(src, "Shortcuts: CTRL Click = Expand Blob / Middle Mouse Click = Rally Spores / Alt Click = Create Shield")
+ blob_help()
update_health()
/mob/camera/blob/proc/update_health()
diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm
index 4491b80d2e4..a3c219fefdc 100644
--- a/code/game/gamemodes/blob/powers.dm
+++ b/code/game/gamemodes/blob/powers.dm
@@ -43,7 +43,7 @@
var/obj/structure/blob/B = locate(/obj/structure/blob) in T
var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T
-
+
if(!S)
if(!B)//We are on a blob
to_chat(src, "There is no blob here!")
@@ -59,7 +59,7 @@
B.color = blob_reagent_datum.color
B.change_to(/obj/structure/blob/shield)
else
-
+
if(istype(S, /obj/structure/blob/shield/reflective))
to_chat(src, "There's already a reflector blob here!")
return
@@ -68,12 +68,12 @@
else if(S.health < S.maxHealth * 0.5)
to_chat(src, "This shield blob is too damaged to be modified properly!")
return
-
+
else if (!can_buy(15))
return
-
+
to_chat(src, "You secrete a reflective ooze over the shield blob, allowing it to reflect energy projectiles at the cost of reduced intregrity.")
-
+
S.change_to(/obj/structure/blob/shield/reflective)
S.color = blob_reagent_datum.color
return
@@ -409,7 +409,7 @@
/mob/camera/blob/verb/chemical_reroll()
set category = "Blob"
set name = "Reactive Chemical Adaptation (50)"
- set desc = "Replaces your chemical with a different one"
+ set desc = "Replaces your chemical with a random, different one."
if(!can_buy(50))
return
@@ -417,10 +417,31 @@
var/datum/reagent/blob/B = pick((subtypesof(/datum/reagent/blob) - blob_reagent_datum.type))
blob_reagent_datum = new B
+ color = blob_reagent_datum.complementary_color
+
for(var/obj/structure/blob/BL in blobs)
BL.adjustcolors(blob_reagent_datum.color)
for(var/mob/living/simple_animal/hostile/blob/BLO)
BLO.adjustcolors(blob_reagent_datum.color)
- to_chat(src, "Your reagent is now: [blob_reagent_datum.name]!")
+ to_chat(src, "Your reagent is now: [blob_reagent_datum.name] - [blob_reagent_datum.description]")
+
+/mob/camera/blob/verb/blob_help()
+ set category = "Blob"
+ set name = "*Blob Help*"
+ set desc = "Help on how to blob."
+ to_chat(src, "As the overmind, you can control the blob!")
+ to_chat(src, "Your blob reagent is: [blob_reagent_datum.name] - [blob_reagent_datum.description]")
+ to_chat(src, "You can expand, which will attack people, damage objects, or place a Normal Blob if the tile is clear.")
+ to_chat(src, "Normal Blobs will expand your reach and can be upgraded into special blobs that perform certain functions.")
+ to_chat(src, "You can upgrade normal blobs into the following types of blob:")
+ to_chat(src, "Shield Blobs are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires. Upgrading them again will result in a Reflective blob, capable of reflecting laser projectiles at the cost of the strong blob's extra health.")
+ to_chat(src, "Resource Blobs are blobs which produce more resources for you, build as many of these as possible to consume the station. This type of blob must be placed near node blobs or your core to work.")
+ to_chat(src, "Factory Blobs are blobs that spawn blob spores which will attack nearby enemies. This type of blob must be placed near node blobs or your core to work.")
+ to_chat(src, "Blobbernauts can be produced from factories for a cost, and are hard to kill, powerful, but ultimately dumb. The factory used to create one will be destroyed in the process.")
+ to_chat(src, "Storage Blobs are storage towers which will store extra resources for you. This increases your max resource cap by 50.")
+ to_chat(src, "Node Blobs are blobs which grow, like the core. Like the core it can activate resource and factory blobs.")
+ to_chat(src, "In addition to the buttons on your HUD, there are a few click shortcuts to speed up expansion and defense.")
+ to_chat(src, "Shortcuts: Click = Expand Blob | CTRL Click = Create Shield Blob | Middle Mouse Click = Rally Spores | Alt Click = Remove Blob")
+ to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.")
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/reagents/blob.dm b/code/modules/reagents/chemistry/reagents/blob.dm
index c7dd046664c..d06ab6443ad 100644
--- a/code/modules/reagents/chemistry/reagents/blob.dm
+++ b/code/modules/reagents/chemistry/reagents/blob.dm
@@ -2,6 +2,7 @@
// The 4 damage
/datum/reagent/blob
description = ""
+ var/complementary_color = "#000000"
var/message = "The blob strikes you" //message sent to any mob hit by the blob
var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt
can_synth = FALSE
@@ -11,8 +12,10 @@
/datum/reagent/blob/ripping_tendrils //does brute and a little stamina damage
name = "Ripping Tendrils"
+ description = "Deals High Brute damage, as well as Stamina damage."
id = "ripping_tendrils"
color = "#7F0000"
+ complementary_color = "#a15656"
message_living = ", and you feel your skin ripping and tearing off"
/datum/reagent/blob/ripping_tendrils/reaction_mob(mob/living/M, method=TOUCH, volume)
@@ -25,8 +28,10 @@
/datum/reagent/blob/boiling_oil //sets you on fire, does burn damage
name = "Boiling Oil"
+ description = "Deals High Burn damage, and sets the victim aflame."
id = "boiling_oil"
color = "#B68D00"
+ complementary_color = "#c0a856"
message = "The blob splashes you with burning oil"
message_living = ", and you feel your skin char and melt"
@@ -40,8 +45,10 @@
/datum/reagent/blob/envenomed_filaments //toxin, hallucination, and some bonus spore toxin
name = "Envenomed Filaments"
+ description = "Deals High Toxin damage, causes Hallucinations, and injects Spores into the bloodstream."
id = "envenomed_filaments"
color = "#9ACD32"
+ complementary_color = "#b0cd73"
message_living = ", and you feel sick and nauseated"
/datum/reagent/blob/envenomed_filaments/reaction_mob(mob/living/M, method=TOUCH, volume)
@@ -53,8 +60,10 @@
/datum/reagent/blob/lexorin_jelly //does tons of oxygen damage and a little brute
name = "Lexorin Jelly"
+ description = "Deals Medium Brute damage, but massive amounts of Respiration Damage."
id = "lexorin_jelly"
color = "#00FFC5"
+ complementary_color = "#56ebc9"
message_living = ", and your lungs feel heavy and weak"
/datum/reagent/blob/lexorin_jelly/reaction_mob(mob/living/M, method=TOUCH, volume)
@@ -67,8 +76,10 @@
/datum/reagent/blob/kinetic //does semi-random brute damage
name = "Kinetic Gelatin"
+ description = "Deals Randomized damage, between 0.33 to 2.33 times the standard amount."
id = "kinetic"
color = "#FFA500"
+ complementary_color = "#ebb756"
message = "The blob pummels you"
/datum/reagent/blob/kinetic/reaction_mob(mob/living/M, method=TOUCH, volume)
@@ -79,8 +90,10 @@
/datum/reagent/blob/cryogenic_liquid //does low burn damage and stamina damage and cools targets down
name = "Cryogenic Liquid"
+ description = "Deals Medium Brute damage, Stamina Damage, and injects Frost Oil into its victims, freezing them to death."
id = "cryogenic_liquid"
color = "#8BA6E9"
+ complementary_color = "#a8b7df"
message = "The blob splashes you with an icy liquid"
message_living = ", and you feel cold and tired"
@@ -93,8 +106,10 @@
/datum/reagent/blob/dark_matter
name = "Dark Matter"
+ description = "Deals High Brute damage and sucks everyone and everything closer, creating a vortex of death."
id = "dark_matter"
color = "#61407E"
+ complementary_color = "#8f7ca0"
message = "You feel a thrum as the blob strikes you, and everything flies at you"
/datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, volume)
@@ -106,8 +121,10 @@
/datum/reagent/blob/b_sorium
name = "Sorium"
+ description = "Deals High Brute damage, and sends people flying away."
id = "b_sorium"
color = "#808000"
+ complementary_color = "#a2a256"
message = "The blob slams into you, and sends you flying"
/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, volume)
diff --git a/icons/mob/blob.dmi b/icons/mob/blob.dmi
index 56c39b9a75d..ef70ac3155e 100644
Binary files a/icons/mob/blob.dmi and b/icons/mob/blob.dmi differ
diff --git a/paradise.dme b/paradise.dme
index faf1b5b937b..3fd34a5ab06 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -131,6 +131,7 @@
#include "code\_onclick\hud\alert.dm"
#include "code\_onclick\hud\alien.dm"
#include "code\_onclick\hud\alien_larva.dm"
+#include "code\_onclick\hud\blob_overmind.dm"
#include "code\_onclick\hud\bot.dm"
#include "code\_onclick\hud\constructs.dm"
#include "code\_onclick\hud\devil.dm"