mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-03 22:22:31 +00:00
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:
@@ -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
|
||||||
@@ -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)
|
||||||
@@ -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
|
||||||
|
|
||||||
/////////////////
|
/////////////////
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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]")
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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."
|
||||||
|
|||||||
Reference in New Issue
Block a user