Merge pull request #11169 from Arkatos1/Blob_QoL_Update

Blob QoL Update and Rebalance
This commit is contained in:
Fox McCloud
2019-04-01 18:11:37 -04:00
committed by GitHub
18 changed files with 107 additions and 38 deletions
+28
View File
@@ -57,6 +57,16 @@
var/mob/camera/blob/B = usr
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
icon_state = "ui_resource"
name = "Produce Resource Blob (40)"
@@ -113,6 +123,16 @@
var/mob/camera/blob/B = usr
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)
..()
var/obj/screen/using
@@ -143,6 +163,10 @@
static_inventory += using
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
static_inventory += using
@@ -165,4 +189,8 @@
using = new /obj/screen/blob/RelocateCore()
using.screen_loc = ui_storage2
static_inventory += using
using = new /obj/screen/blob/Split()
using.screen_loc = ui_acti
static_inventory += using
+1 -1
View File
@@ -32,4 +32,4 @@
/mob/camera/blob/AltClickOn(atom/A) //Remove a blob
var/turf/T = get_turf(A)
if(T)
revert(T)
remove_blob(T)
+5
View File
@@ -1442,6 +1442,11 @@
ticker.mode.greet_changeling(src)
ticker.mode.update_change_icons_added(src)
/datum/mind/proc/make_Overmind()
if(!(src in ticker.mode.blob_overminds))
ticker.mode.blob_overminds += src
special_role = SPECIAL_ROLE_BLOB_OVERMIND
/datum/mind/proc/make_Wizard()
if(!(src in ticker.mode.wizards))
ticker.mode.wizards += src
+2
View File
@@ -3,6 +3,8 @@ var/list/blobs = list()
var/list/blob_cores = list()
var/list/blob_nodes = list()
/datum/game_mode
var/list/blob_overminds = list()
/datum/game_mode/blob
name = "blob"
+4 -4
View File
@@ -135,9 +135,9 @@
..()
if(overmind && overmind.blob_reagent_datum)
adjustcolors(overmind.blob_reagent_datum.color)
adjustcolors(overmind.blob_reagent_datum.complementary_color)
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)
@@ -147,8 +147,8 @@
overlays.Cut()
overlays = human_overlays
var/image/I = image('icons/mob/blob.dmi', icon_state = "blob_head")
I.color = color
color = initial(color)//looks better.
I.color = overmind.blob_reagent_datum.complementary_color
color = initial(overmind.blob_reagent_datum.complementary_color)//looks better.
overlays += I
/////////////////
+5 -3
View File
@@ -4,6 +4,7 @@
icon_state = "blank_blob"
health = 200
fire_resist = 2
point_return = -1
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/resource_delay = 0
@@ -117,10 +118,11 @@
src.overmind = B
color = overmind.blob_reagent_datum.color
if(B.mind && !B.mind.special_role)
B.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
B.mind.make_Overmind()
spawn(0)
if(is_offspring)
B.verbs -= /mob/camera/blob/verb/split_consciousness
B.is_offspring = TRUE
/obj/structure/blob/core/proc/lateblobtimer()
addtimer(CALLBACK(src, .proc/lateblobcheck), 50)
@@ -129,7 +131,7 @@
if(overmind)
overmind.add_points(60)
if(overmind.mind)
overmind.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
overmind.mind.make_Overmind()
else
log_debug("/obj/structure/blob/core/proc/lateblobcheck: Blob core lacks a overmind.mind.")
else
+2 -1
View File
@@ -4,6 +4,7 @@
icon_state = "blob_factory"
health = 100
fire_resist = 2
point_return = 18
var/list/spores = list()
var/max_spores = 3
var/spore_delay = 0
@@ -27,7 +28,7 @@
return 0
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)
BS.color = color
BS.color = overmind.blob_reagent_datum.complementary_color
BS.overmind = overmind
overmind.blob_mobs.Add(BS)
return 0
+1
View File
@@ -4,6 +4,7 @@
icon_state = "blank_blob"
health = 100
fire_resist = 2
point_return = 18
var/mob/camera/blob/overmind
/obj/structure/blob/node/New(loc, var/h = 100)
@@ -4,6 +4,7 @@
icon_state = "blob_resource"
health = 30
fire_resist = 2
point_return = 12
var/mob/camera/blob/overmind = null
var/resource_delay = 0
+2
View File
@@ -5,6 +5,7 @@
desc = "Some blob creature thingy"
health = 75
fire_resist = 2
point_return = 4
var/maxHealth = 75
/obj/structure/blob/shield/update_icon()
@@ -27,6 +28,7 @@
brute_resist = 0
health = 50
maxHealth = 50
point_return = 9
flags_2 = CHECK_RICOCHET_1
var/reflect_chance = 80 //80% chance to reflect
@@ -4,6 +4,7 @@
icon_state = "blob_resource"
health = 30
fire_resist = 2
point_return = 12
var/mob/camera/blob/overmind = null
/obj/structure/blob/storage/update_icon()
+3
View File
@@ -15,6 +15,9 @@
var/blob_points = 0
var/max_blob_points = 100
var/last_attack = 0
var/nodes_required = TRUE //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/list/blob_mobs = list()
var/ghostimage = null
+47 -13
View File
@@ -31,6 +31,16 @@
if(chosen_node)
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()
set category = "Blob"
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!")
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))
return
@@ -174,6 +189,11 @@
to_chat(src, "There is a factory blob nearby, move more than 7 tiles away from it!")
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))
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))
if(blobber)
qdel(B)
blobber.color = blob_reagent_datum.color
blobber.color = blob_reagent_datum.complementary_color
blobber.overmind = src
blob_mobs.Add(blobber)
return
@@ -245,21 +265,28 @@
/mob/camera/blob/verb/revert()
set category = "Blob"
set name = "Remove Blob"
set desc = "Removes a blob."
set desc = "Removes a blob. You will receive 30% cost refund for special Blob structures."
var/turf/T = get_turf(src)
if(!T)
return
remove_blob(T)
/mob/camera/blob/proc/remove_blob(var/turf/T)
var/obj/structure/blob/B = locate(/obj/structure/blob) in T
if(!T)
return
if(!B)
to_chat(src, "You must be on a blob!")
to_chat(src, "<span class='warning'>There is no blob there!</span>")
return
if(istype(B, /obj/structure/blob/core))
to_chat(src, "Unable to remove this blob.")
if(B.point_return < 0)
to_chat(src, "<span class='warning'>Unable to remove this blob.</span>")
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)
return
@@ -331,8 +358,14 @@
/mob/camera/blob/verb/split_consciousness()
set category = "Blob"
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)
to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>")
return
@@ -340,11 +373,12 @@
if(!N)
to_chat(src, "<span class='warning'>A node is required to birth your offspring...</span>")
return
if(!can_buy(100))
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")
qdel(N)
@@ -423,7 +457,7 @@
BL.adjustcolors(blob_reagent_datum.color)
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]")
+1
View File
@@ -7,6 +7,7 @@
density = 0
opacity = 0
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_timestamp = 0
var/brute_resist = 4
+3
View File
@@ -477,6 +477,9 @@
else
dat += "<tr><td><i>Blob not found!</i></td></tr>"
dat += "</table>"
if(ticker.mode.blob_overminds.len)
dat += check_role_table("Blob Overminds", ticker.mode.blob_overminds)
if(ticker.mode.changelings.len)
dat += check_role_table("Changelings", ticker.mode.changelings)
+1 -1
View File
@@ -9,7 +9,7 @@
var/turf/T = pick(blobstart)
if(!T)
return kill()
var/list/candidates = pollCandidates("Do you want to play as a blob?", ROLE_BLOB, 1)
var/list/candidates = pollCandidates("Do you want to play as a blob infested mouse?", ROLE_BLOB, 1)
if(!candidates.len)
return kill()
var/list/vents = list()
@@ -104,21 +104,6 @@
M.adjustStaminaLoss(0.4*volume)
M.reagents.add_reagent("frostoil", 0.4*volume)
/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)
if(method == TOUCH)
reagent_vortex(M, 0, volume)
volume = ..()
M.apply_damage(0.6*volume, BRUTE)
/datum/reagent/blob/b_sorium
name = "Sorium"
description = "Deals High Brute damage, and sends people flying away."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 KiB

After

Width:  |  Height:  |  Size: 475 KiB