Complete Blob UI, Blob mobs now use complementary colors, special blob tiles refund, node requirement verb, minor refactors, remove shortcut improvement, dark matter removed from blob reagents, custom icons

This commit is contained in:
Arkatos1
2019-03-30 02:16:30 +01:00
parent b16ec46bff
commit a22d31f350
13 changed files with 95 additions and 21 deletions

View File

@@ -57,6 +57,16 @@
var/mob/camera/blob/B = usr var/mob/camera/blob/B = usr
B.create_blobbernaut() B.create_blobbernaut()
/obj/screen/blob/StorageBlob
icon_state = "ui_storage"
name = "Produce Storage Blob (40)"
desc = "Produces a storage blob for 40 resources.<br>Storage blobs will raise your max resource cap by 50."
/obj/screen/blob/StorageBlob/Click()
if(isovermind(usr))
var/mob/camera/blob/B = usr
B.create_storage()
/obj/screen/blob/ResourceBlob /obj/screen/blob/ResourceBlob
icon_state = "ui_resource" icon_state = "ui_resource"
name = "Produce Resource Blob (40)" name = "Produce Resource Blob (40)"
@@ -113,6 +123,16 @@
var/mob/camera/blob/B = usr var/mob/camera/blob/B = usr
B.relocate_core() B.relocate_core()
/obj/screen/blob/Split
icon_state = "ui_split"
name = "Split consciousness (100)"
desc = "Creates another Blob Overmind at the nearest node. One use only.<br>Offsprings are be unable to use this ability."
/obj/screen/blob/Split/Click()
if(isovermind(usr))
var/mob/camera/blob/B = usr
B.split_consciousness()
/datum/hud/blob_overmind/New(mob/user) /datum/hud/blob_overmind/New(mob/user)
..() ..()
var/obj/screen/using var/obj/screen/using
@@ -143,6 +163,10 @@
static_inventory += using static_inventory += using
using = new /obj/screen/blob/Blobbernaut() using = new /obj/screen/blob/Blobbernaut()
using.screen_loc = ui_id
static_inventory += using
using = new /obj/screen/blob/StorageBlob()
using.screen_loc = ui_belt using.screen_loc = ui_belt
static_inventory += using static_inventory += using
@@ -165,4 +189,8 @@
using = new /obj/screen/blob/RelocateCore() using = new /obj/screen/blob/RelocateCore()
using.screen_loc = ui_storage2 using.screen_loc = ui_storage2
static_inventory += using
using = new /obj/screen/blob/Split()
using.screen_loc = ui_acti
static_inventory += using static_inventory += using

View File

@@ -32,4 +32,4 @@
/mob/camera/blob/AltClickOn(atom/A) //Remove a blob /mob/camera/blob/AltClickOn(atom/A) //Remove a blob
var/turf/T = get_turf(A) var/turf/T = get_turf(A)
if(T) if(T)
revert(T) remove_blob(T)

View File

@@ -135,9 +135,9 @@
..() ..()
if(overmind && overmind.blob_reagent_datum) if(overmind && overmind.blob_reagent_datum)
adjustcolors(overmind.blob_reagent_datum.color) adjustcolors(overmind.blob_reagent_datum.complementary_color)
else else
adjustcolors(color) //to ensure zombie/other overlays update adjustcolors(overmind.blob_reagent_datum.complementary_color) //to ensure zombie/other overlays update
/mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(var/a_color) /mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(var/a_color)
@@ -147,8 +147,8 @@
overlays.Cut() overlays.Cut()
overlays = human_overlays overlays = human_overlays
var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head") var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head")
I.color = color I.color = overmind.blob_reagent_datum.complementary_color
color = initial(color)//looks better. color = initial(overmind.blob_reagent_datum.complementary_color)//looks better.
overlays += I overlays += I
///////////////// /////////////////

View File

@@ -4,6 +4,7 @@
icon_state = "blank_blob" icon_state = "blank_blob"
health = 200 health = 200
fire_resist = 2 fire_resist = 2
point_return = -1
var/mob/camera/blob/overmind = null // the blob core's overmind var/mob/camera/blob/overmind = null // the blob core's overmind
var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 5 minutes var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 5 minutes
var/resource_delay = 0 var/resource_delay = 0
@@ -120,7 +121,8 @@
B.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND B.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
spawn(0) spawn(0)
if(is_offspring) if(is_offspring)
B.verbs -= /mob/camera/blob/verb/split_consciousness B.is_offspring = TRUE
/obj/structure/blob/core/proc/lateblobtimer() /obj/structure/blob/core/proc/lateblobtimer()
addtimer(CALLBACK(src, .proc/lateblobcheck), 50) addtimer(CALLBACK(src, .proc/lateblobcheck), 50)

View File

@@ -4,6 +4,7 @@
icon_state = "blob_factory" icon_state = "blob_factory"
health = 100 health = 100
fire_resist = 2 fire_resist = 2
point_return = 18
var/list/spores = list() var/list/spores = list()
var/max_spores = 3 var/max_spores = 3
var/spore_delay = 0 var/spore_delay = 0
@@ -27,7 +28,7 @@
return 0 return 0
spore_delay = world.time + 100 // 10 seconds spore_delay = world.time + 100 // 10 seconds
var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src) var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src)
BS.color = color BS.color = overmind.blob_reagent_datum.complementary_color
BS.overmind = overmind BS.overmind = overmind
overmind.blob_mobs.Add(BS) overmind.blob_mobs.Add(BS)
return 0 return 0

View File

@@ -4,6 +4,7 @@
icon_state = "blank_blob" icon_state = "blank_blob"
health = 100 health = 100
fire_resist = 2 fire_resist = 2
point_return = 18
var/mob/camera/blob/overmind var/mob/camera/blob/overmind
/obj/structure/blob/node/New(loc, var/h = 100) /obj/structure/blob/node/New(loc, var/h = 100)

View File

@@ -4,6 +4,7 @@
icon_state = "blob_resource" icon_state = "blob_resource"
health = 30 health = 30
fire_resist = 2 fire_resist = 2
point_return = 12
var/mob/camera/blob/overmind = null var/mob/camera/blob/overmind = null
var/resource_delay = 0 var/resource_delay = 0

View File

@@ -5,6 +5,7 @@
desc = "Some blob creature thingy" desc = "Some blob creature thingy"
health = 75 health = 75
fire_resist = 2 fire_resist = 2
point_return = 4
var/maxHealth = 75 var/maxHealth = 75
/obj/structure/blob/shield/update_icon() /obj/structure/blob/shield/update_icon()
@@ -27,6 +28,7 @@
brute_resist = 0 brute_resist = 0
health = 50 health = 50
maxHealth = 50 maxHealth = 50
point_return = 9
flags_2 = CHECK_RICOCHET_1 flags_2 = CHECK_RICOCHET_1
var/reflect_chance = 80 //80% chance to reflect var/reflect_chance = 80 //80% chance to reflect

View File

@@ -4,6 +4,7 @@
icon_state = "blob_resource" icon_state = "blob_resource"
health = 30 health = 30
fire_resist = 2 fire_resist = 2
point_return = 12
var/mob/camera/blob/overmind = null var/mob/camera/blob/overmind = null
/obj/structure/blob/storage/update_icon() /obj/structure/blob/storage/update_icon()

View File

@@ -15,6 +15,9 @@
var/blob_points = 0 var/blob_points = 0
var/max_blob_points = 100 var/max_blob_points = 100
var/last_attack = 0 var/last_attack = 0
var/nodes_required = 1 //if the blob needs nodes to place resource and factory blobs
var/split_used = FALSE
var/is_offspring = FALSE
var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob() var/datum/reagent/blob/blob_reagent_datum = new/datum/reagent/blob()
var/list/blob_mobs = list() var/list/blob_mobs = list()
var/ghostimage = null var/ghostimage = null

View File

@@ -31,6 +31,16 @@
if(chosen_node) if(chosen_node)
src.loc = chosen_node.loc src.loc = chosen_node.loc
/mob/camera/blob/verb/toggle_node_req()
set category = "Blob"
set name = "Toggle Node Requirement"
set desc = "Toggle requiring nodes to place resource and factory blobs."
nodes_required = !nodes_required
if(nodes_required)
to_chat(src, "<span class='warning'>You now require a nearby node or core to place factory and resource blobs.</span>")
else
to_chat(src, "<span class='warning'>You no longer require a nearby node or core to place factory and resource blobs.</span>")
/mob/camera/blob/verb/create_shield_power() /mob/camera/blob/verb/create_shield_power()
set category = "Blob" set category = "Blob"
set name = "Create/Upgrade Shield Blob (15)" set name = "Create/Upgrade Shield Blob (15)"
@@ -103,6 +113,11 @@
to_chat(src, "There is a resource blob nearby, move more than 4 tiles away from it!") to_chat(src, "There is a resource blob nearby, move more than 4 tiles away from it!")
return return
if(nodes_required)
if(!(locate(/obj/structure/blob/node) in orange(3, T)) && !(locate(/obj/structure/blob/core) in orange(4, T)))
to_chat(src, "<span class='warning'>You need to place this blob closer to a node or core!</span>")
return //handholdotron 2000
if(!can_buy(40)) if(!can_buy(40))
return return
@@ -174,6 +189,11 @@
to_chat(src, "There is a factory blob nearby, move more than 7 tiles away from it!") to_chat(src, "There is a factory blob nearby, move more than 7 tiles away from it!")
return return
if(nodes_required)
if(!(locate(/obj/structure/blob/node) in orange(3, T)) && !(locate(/obj/structure/blob/core) in orange(4, T)))
to_chat(src, "<span class='warning'>You need to place this blob closer to a node or core!</span>")
return //handholdotron 2000
if(!can_buy(60)) if(!can_buy(60))
return return
@@ -210,7 +230,7 @@
var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut (get_turf(B)) var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut (get_turf(B))
if(blobber) if(blobber)
qdel(B) qdel(B)
blobber.color = blob_reagent_datum.color blobber.color = blob_reagent_datum.complementary_color
blobber.overmind = src blobber.overmind = src
blob_mobs.Add(blobber) blob_mobs.Add(blobber)
return return
@@ -248,18 +268,25 @@
set desc = "Removes a blob." set desc = "Removes a blob."
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
if(!T) remove_blob(T)
return
/mob/camera/blob/proc/remove_blob(var/turf/T)
var/obj/structure/blob/B = locate(/obj/structure/blob) in T var/obj/structure/blob/B = locate(/obj/structure/blob) in T
if(!T)
return
if(!B) if(!B)
to_chat(src, "You must be on a blob!") to_chat(src, "<span class='warning'>There is no blob there!</span>")
return return
if(B.point_return < 0)
if(istype(B, /obj/structure/blob/core)) to_chat(src, "<span class='warning'>Unable to remove this blob.</span>")
to_chat(src, "Unable to remove this blob.")
return return
if(max_blob_points < B.point_return + blob_points)
to_chat(src, "<span class='warning'>You have too many resources to remove this blob!</span>")
return
if(B.point_return)
add_points(B.point_return)
to_chat(src, "<span class='notice'>Gained [B.point_return] resources from removing \the [B].</span>")
qdel(B) qdel(B)
return return
@@ -331,8 +358,14 @@
/mob/camera/blob/verb/split_consciousness() /mob/camera/blob/verb/split_consciousness()
set category = "Blob" set category = "Blob"
set name = "Split consciousness (100) (One use)" set name = "Split consciousness (100) (One use)"
set desc = "Expend resources to attempt to produce another sentient overmind" set desc = "Expend resources to attempt to produce another sentient overmind."
if(split_used)
to_chat(src, "<span class='warning'>You have already produced an offspring.</span>")
return
if(is_offspring)
to_chat(src, "<span class='warning'>You cannot split as an offspring of another Blob.</span>")
return
if(!blob_nodes || !blob_nodes.len) if(!blob_nodes || !blob_nodes.len)
to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>") to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>")
return return
@@ -340,11 +373,12 @@
if(!N) if(!N)
to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>") to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>")
return return
if(!can_buy(100)) if(!can_buy(100))
return return
verbs -= /mob/camera/blob/verb/split_consciousness //we've used our split_consciousness split_used = TRUE
new /obj/structure/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, "offspring") new /obj/structure/blob/core/ (get_turf(N), 200, null, blob_core.point_rate, "offspring")
qdel(N) qdel(N)
@@ -423,7 +457,7 @@
BL.adjustcolors(blob_reagent_datum.color) BL.adjustcolors(blob_reagent_datum.color)
for(var/mob/living/simple_animal/hostile/blob/BLO) for(var/mob/living/simple_animal/hostile/blob/BLO)
BLO.adjustcolors(blob_reagent_datum.color) BLO.adjustcolors(blob_reagent_datum.complementary_color)
to_chat(src, "Your reagent is now: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> - [blob_reagent_datum.description]") to_chat(src, "Your reagent is now: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> - [blob_reagent_datum.description]")

View File

@@ -7,6 +7,7 @@
density = 0 density = 0
opacity = 0 opacity = 0
anchored = 1 anchored = 1
var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed.
var/health = 30 var/health = 30
var/health_timestamp = 0 var/health_timestamp = 0
var/brute_resist = 4 var/brute_resist = 4

View File

@@ -104,7 +104,7 @@
M.adjustStaminaLoss(0.4*volume) M.adjustStaminaLoss(0.4*volume)
M.reagents.add_reagent("frostoil", 0.4*volume) M.reagents.add_reagent("frostoil", 0.4*volume)
/datum/reagent/blob/dark_matter /* /datum/reagent/blob/dark_matter
name = "Dark Matter" name = "Dark Matter"
description = "Deals High Brute damage and sucks everyone and everything closer, creating a vortex of death." description = "Deals High Brute damage and sucks everyone and everything closer, creating a vortex of death."
id = "dark_matter" id = "dark_matter"
@@ -118,7 +118,7 @@
volume = ..() volume = ..()
M.apply_damage(0.6*volume, BRUTE) M.apply_damage(0.6*volume, BRUTE)
*/
/datum/reagent/blob/b_sorium /datum/reagent/blob/b_sorium
name = "Sorium" name = "Sorium"
description = "Deals High Brute damage, and sends people flying away." description = "Deals High Brute damage, and sends people flying away."