Bleeding edgy refresh (#303)

* not code stuff

* other things

* global vars, defines, helpers

* onclick hud stuff, orphans, world.dm

* controllers and datums

* game folder

* everything not client/mobs in modules

* client folder

* stage 1 mob stuff

* simple animal things

* silicons

* carbon things

* ayylmaos and monkeys

* hyoomahn

* icons n shit

* sprite fixes

* compile fixes

* some fixes I cherrypicked.

* qdel fixes

* forgot brain refractors
This commit is contained in:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+10 -10
View File
@@ -70,9 +70,10 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b
/datum/game_mode/blob/proc/show_message(message)
for(var/datum/mind/blob in blob_overminds)
blob.current << message
to_chat(blob.current, message)
/datum/game_mode/blob/post_setup()
set waitfor = FALSE
for(var/datum/mind/blob in blob_overminds)
var/mob/camera/blob/B = blob.current.become_overmind(TRUE, round(blob_base_starting_points/blob_overminds.len))
@@ -88,16 +89,15 @@ var/list/blobs_legit = list() //used for win-score calculations, contains only b
if(B)
B.max_occurrences = 0 // disable the event
spawn(0)
var/message_delay = rand(messagedelay_low, messagedelay_high) //between 4 and 6 minutes with 2400 low and 3600 high.
. = ..()
sleep(message_delay)
var/message_delay = rand(messagedelay_low, messagedelay_high) //between 4 and 6 minutes with 2400 low and 3600 high.
send_intercept(1)
message_sent = TRUE
sleep(message_delay)
sleep(24000) //40 minutes, plus burst_delay*3(minimum of 6 minutes, maximum of 8)
if(!replacementmode)
send_intercept(2) //if the blob has been alive this long, it's time to bomb it
send_intercept(1)
message_sent = TRUE
return ..()
sleep(24000) //40 minutes, plus burst_delay*3(minimum of 6 minutes, maximum of 8)
if(!replacementmode)
send_intercept(2) //if the blob has been alive this long, it's time to bomb it
+7 -7
View File
@@ -21,24 +21,24 @@
..()
if(blobwincount <= blobs_legit.len)
feedback_set_details("round_end_result","win - blob took over")
world << "<FONT size = 3><B>The blob has taken over the station!</B></FONT>"
world << "<B>The entire station was eaten by the Blob!</B>"
to_chat(world, "<FONT size = 3><B>The blob has taken over the station!</B></FONT>")
to_chat(world, "<B>The entire station was eaten by the Blob!</B>")
log_game("Blob mode completed with a blob victory.")
ticker.news_report = BLOB_WIN
else if(station_was_nuked)
feedback_set_details("round_end_result","halfwin - nuke")
world << "<FONT size = 3><B>Partial Win: The station has been destroyed!</B></FONT>"
world << "<B>Directive 7-12 has been successfully carried out, preventing the Blob from spreading.</B>"
to_chat(world, "<FONT size = 3><B>Partial Win: The station has been destroyed!</B></FONT>")
to_chat(world, "<B>Directive 7-12 has been successfully carried out, preventing the Blob from spreading.</B>")
log_game("Blob mode completed with a tie (station destroyed).")
ticker.news_report = BLOB_NUKE
else if(!blob_cores.len)
feedback_set_details("round_end_result","loss - blob eliminated")
world << "<FONT size = 3><B>The staff has won!</B></FONT>"
world << "<B>The alien organism has been eradicated from the station!</B>"
to_chat(world, "<FONT size = 3><B>The staff has won!</B></FONT>")
to_chat(world, "<B>The alien organism has been eradicated from the station!</B>")
log_game("Blob mode completed with a crew victory.")
ticker.news_report = BLOB_DESTROYED
@@ -68,5 +68,5 @@
var/text = "<FONT size = 2><B>The blob[(blob_mode.blob_overminds.len > 1 ? "s were" : " was")]:</B></FONT>"
for(var/datum/mind/blob in blob_mode.blob_overminds)
text += printplayer(blob)
world << text
to_chat(world, text)
return 1
+3 -5
View File
@@ -13,7 +13,7 @@
intercepttext += " 2. If found, use any neccesary means to contain and destroy the organism.<BR>"
intercepttext += " 3. Avoid damage to the capital infrastructure of the station.<BR>"
intercepttext += "<BR>Note in the event of a quarantine breach or uncontrolled spread of the biohazard, <b>Biohazard Response Procedure 5-12</b> may be issued.<BR>"
print_command_report(intercepttext,"Level 5-6 Biohazard Response Procedures")
print_command_report(text=intercepttext,title="Level 5-6 Biohazard Response Procedures",announce=FALSE)
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
if(2)
var/nukecode = random_nukecode()
@@ -29,8 +29,7 @@
intercepttext += "1. Secure the Nuclear Authentication Disk.<BR>"
intercepttext += "2. Detonate the Nuke located in the vault.<BR>"
intercepttext += "Nuclear Authentication Code: [nukecode] <BR>"
print_command_report(intercepttext,"Classified [command_name()] Update")
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/AI/commandreport.ogg')
print_command_report(text=intercepttext,announce=TRUE)
for(var/mob/living/silicon/ai/aiPlayer in player_list)
if (aiPlayer.client)
@@ -38,7 +37,6 @@
aiPlayer.set_zeroth_law(law)
else
..()
return
@@ -99,7 +97,7 @@
if(valid_territories.len)
num_territories = valid_territories.len //Add them all up to make the total number of area types
else
world << "ERROR: NO VALID TERRITORIES"
to_chat(world, "ERROR: NO VALID TERRITORIES")
/datum/station_state/proc/score(datum/station_state/result)
if(!result)
+4 -4
View File
@@ -68,10 +68,10 @@
var/rendered = "<font color=\"#EE4000\"><b>\[Blob Telepathy\] [real_name]</b> [spanned_message]</font>"
for(var/M in mob_list)
if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob))
M << rendered
to_chat(M, rendered)
if(isobserver(M))
var/link = FOLLOW_LINK(M, src)
M << "[link] [rendered]"
to_chat(M, "[link] [rendered]")
////////////////
// BLOB SPORE //
@@ -102,7 +102,7 @@
var/is_zombie = 0
gold_core_spawnable = 1
/mob/living/simple_animal/hostile/blob/blobspore/New(loc, var/obj/structure/blob/factory/linked_node)
/mob/living/simple_animal/hostile/blob/blobspore/Initialize(mapload, var/obj/structure/blob/factory/linked_node)
if(istype(linked_node))
factory = linked_node
factory.spores += src
@@ -222,7 +222,7 @@
see_in_dark = 8
var/independent = FALSE
/mob/living/simple_animal/hostile/blob/blobbernaut/New()
/mob/living/simple_animal/hostile/blob/blobbernaut/Initialize()
..()
if(!independent) //no pulling people deep into the blob
verbs -= /mob/living/verb/pulled
+1 -1
View File
@@ -25,7 +25,7 @@
spore.factory = null
if(naut)
naut.factory = null
naut << "<span class='userdanger'>Your factory was destroyed! You feel yourself dying!</span>"
to_chat(naut, "<span class='userdanger'>Your factory was destroyed! You feel yourself dying!</span>")
naut.throw_alert("nofactory", /obj/screen/alert/nofactory)
spores = null
return ..()
+8 -8
View File
@@ -29,7 +29,7 @@
var/manualplace_min_time = 600 //in deciseconds //a minute, to get bearings
var/autoplace_max_time = 3600 //six minutes, as long as should be needed
/mob/camera/blob/New(loc, pre_placed = 0, mode_made = 0, starting_points = 60)
/mob/camera/blob/Initialize(mapload, pre_placed = 0, mode_made = 0, starting_points = 60)
blob_points = starting_points
if(pre_placed) //we already have a core!
manualplace_min_time = 0
@@ -61,8 +61,8 @@
if(!blob_core)
if(!placed)
if(manualplace_min_time && world.time >= manualplace_min_time)
src << "<b><span class='big'><font color=\"#EE4000\">You may now place your blob core.</font></span></b>"
src << "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [round((autoplace_max_time - world.time)/600, 0.5)] minutes.</font></span>"
to_chat(src, "<b><span class='big'><font color=\"#EE4000\">You may now place your blob core.</font></span></b>")
to_chat(src, "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [round((autoplace_max_time - world.time)/600, 0.5)] minutes.</font></span>")
manualplace_min_time = 0
if(autoplace_max_time && world.time >= autoplace_max_time)
place_blob_core(base_point_rate, 1)
@@ -92,7 +92,7 @@
/mob/camera/blob/Login()
..()
sync_mind()
src << "<span class='notice'>You are the overmind!</span>"
to_chat(src, "<span class='notice'>You are the overmind!</span>")
blob_help()
update_health_hud()
add_points(0)
@@ -100,7 +100,7 @@
/mob/camera/blob/examine(mob/user)
..()
if(blob_reagent_datum)
user << "Its chemical is <font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</font>."
to_chat(user, "Its chemical is <font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</font>.")
/mob/camera/blob/update_health_hud()
if(blob_core)
@@ -119,7 +119,7 @@
if (src.client)
if(client.prefs.muted & MUTE_IC)
src << "You cannot send IC messages (muted)."
to_chat(src, "You cannot send IC messages (muted).")
return
if (src.client.handle_spam_prevention(message,MUTE_IC))
return
@@ -142,10 +142,10 @@
for(var/mob/M in mob_list)
if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob))
M << rendered
to_chat(M, rendered)
if(isobserver(M))
var/link = FOLLOW_LINK(M, src)
M << "[link] [rendered]"
to_chat(M, "[link] [rendered]")
/mob/camera/blob/emote(act,m_type=1,message = null)
return
+54 -54
View File
@@ -1,6 +1,6 @@
/mob/camera/blob/proc/can_buy(cost = 15)
if(blob_points < cost)
src << "<span class='warning'>You cannot afford this, you need at least [cost] resources!</span>"
to_chat(src, "<span class='warning'>You cannot afford this, you need at least [cost] resources!</span>")
return 0
add_points(-cost)
return 1
@@ -15,30 +15,30 @@
if("blob" in M.faction)
continue
if(M.client)
src << "<span class='warning'>There is someone too close to place your blob core!</span>"
to_chat(src, "<span class='warning'>There is someone too close to place your blob core!</span>")
return 0
for(var/mob/living/M in view(13, src))
if("blob" in M.faction)
continue
if(M.client)
src << "<span class='warning'>Someone could see your blob core from here!</span>"
to_chat(src, "<span class='warning'>Someone could see your blob core from here!</span>")
return 0
var/turf/T = get_turf(src)
if(T.density)
src << "<span class='warning'>This spot is too dense to place a blob core on!</span>"
to_chat(src, "<span class='warning'>This spot is too dense to place a blob core on!</span>")
return 0
for(var/obj/O in T)
if(istype(O, /obj/structure/blob))
if(istype(O, /obj/structure/blob/normal))
qdel(O)
else
src << "<span class='warning'>There is already a blob here!</span>"
to_chat(src, "<span class='warning'>There is already a blob here!</span>")
return 0
else if(O.density)
src << "<span class='warning'>This spot is too dense to place a blob core on!</span>"
to_chat(src, "<span class='warning'>This spot is too dense to place a blob core on!</span>")
return 0
if(world.time <= manualplace_min_time && world.time <= autoplace_max_time)
src << "<span class='warning'>It is too early to place your blob core!</span>"
to_chat(src, "<span class='warning'>It is too early to place your blob core!</span>")
return 0
else if(placement_override == 1)
var/turf/T = pick(blobstart)
@@ -80,19 +80,19 @@
T = get_turf(src)
var/obj/structure/blob/B = (locate(/obj/structure/blob) in T)
if(!B)
src << "<span class='warning'>There is no blob here!</span>"
to_chat(src, "<span class='warning'>There is no blob here!</span>")
return
if(!istype(B, /obj/structure/blob/normal))
src << "<span class='warning'>Unable to use this blob, find a normal one.</span>"
to_chat(src, "<span class='warning'>Unable to use this blob, find a normal one.</span>")
return
if(needsNode && nodes_required)
if(!(locate(/obj/structure/blob/node) in orange(3, T)) && !(locate(/obj/structure/blob/core) in orange(4, T)))
src << "<span class='warning'>You need to place this blob closer to a node or core!</span>"
to_chat(src, "<span class='warning'>You need to place this blob closer to a node or core!</span>")
return //handholdotron 2000
if(nearEquals)
for(var/obj/structure/blob/L in orange(nearEquals, T))
if(L.type == blobType)
src << "<span class='warning'>There is a similar blob nearby, move more than [nearEquals] tiles away from it!</span>"
to_chat(src, "<span class='warning'>There is a similar blob nearby, move more than [nearEquals] tiles away from it!</span>")
return
if(!can_buy(price))
return
@@ -105,9 +105,9 @@
set desc = "Toggle requiring nodes to place resource and factory blobs."
nodes_required = !nodes_required
if(nodes_required)
src << "<span class='warning'>You now require a nearby node or core to place factory and resource blobs.</span>"
to_chat(src, "<span class='warning'>You now require a nearby node or core to place factory and resource blobs.</span>")
else
src << "<span class='warning'>You no longer require a nearby node or core to place factory and resource blobs.</span>"
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"
@@ -143,13 +143,13 @@
var/turf/T = get_turf(src)
var/obj/structure/blob/factory/B = locate(/obj/structure/blob/factory) in T
if(!B)
src << "<span class='warning'>You must be on a factory blob!</span>"
to_chat(src, "<span class='warning'>You must be on a factory blob!</span>")
return
if(B.naut) //if it already made a blobbernaut, it can't do it again
src << "<span class='warning'>This factory blob is already sustaining a blobbernaut.</span>"
to_chat(src, "<span class='warning'>This factory blob is already sustaining a blobbernaut.</span>")
return
if(B.obj_integrity < B.max_integrity * 0.5)
src << "<span class='warning'>This factory blob is too damaged to sustain a blobbernaut.</span>"
to_chat(src, "<span class='warning'>This factory blob is too damaged to sustain a blobbernaut.</span>")
return
if(!can_buy(40))
return
@@ -173,11 +173,11 @@
blobber.key = C.key
blobber << 'sound/effects/blobattack.ogg'
blobber << 'sound/effects/attackblob.ogg'
blobber << "<b>You are a blobbernaut!</b>"
blobber << "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed."
blobber << "You can communicate with other blobbernauts and overminds via <b>:b</b>"
blobber << "Your overmind's blob reagent is: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!"
blobber << "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]"
to_chat(blobber, "<b>You are a blobbernaut!</b>")
to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.")
to_chat(blobber, "You can communicate with other blobbernauts and overminds via <b>:b</b>")
to_chat(blobber, "Your overmind's blob reagent is: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!")
to_chat(blobber, "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]")
if(blobber)
blobber.notransform = 0
@@ -188,14 +188,14 @@
var/turf/T = get_turf(src)
var/obj/structure/blob/node/B = locate(/obj/structure/blob/node) in T
if(!B)
src << "<span class='warning'>You must be on a blob node!</span>"
to_chat(src, "<span class='warning'>You must be on a blob node!</span>")
return
if(!blob_core)
src << "<span class='userdanger'>You have no core and are about to die! May you rest in peace.</span>"
to_chat(src, "<span class='userdanger'>You have no core and are about to die! May you rest in peace.</span>")
return
var/area/A = get_area(T)
if(isspaceturf(T) || A && !A.blob_allowed)
src << "<span class='warning'>You cannot relocate your core here!</span>"
to_chat(src, "<span class='warning'>You cannot relocate your core here!</span>")
return
if(!can_buy(80))
return
@@ -216,17 +216,17 @@
/mob/camera/blob/proc/remove_blob(turf/T)
var/obj/structure/blob/B = locate() in T
if(!B)
src << "<span class='warning'>There is no blob there!</span>"
to_chat(src, "<span class='warning'>There is no blob there!</span>")
return
if(B.point_return < 0)
src << "<span class='warning'>Unable to remove this blob.</span>"
to_chat(src, "<span class='warning'>Unable to remove this blob.</span>")
return
if(max_blob_points < B.point_return + blob_points)
src << "<span class='warning'>You have too many resources to remove this blob!</span>"
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)
src << "<span class='notice'>Gained [B.point_return] resources from removing \the [B].</span>"
to_chat(src, "<span class='notice'>Gained [B.point_return] resources from removing \the [B].</span>")
qdel(B)
/mob/camera/blob/verb/expand_blob_power()
@@ -243,7 +243,7 @@
for(var/obj/structure/blob/AB in range(T, 1))
possibleblobs += AB
if(!possibleblobs.len)
src << "<span class='warning'>There is no blob adjacent to the target tile!</span>"
to_chat(src, "<span class='warning'>There is no blob adjacent to the target tile!</span>")
return
if(can_buy(4))
var/attacksuccess = FALSE
@@ -260,7 +260,7 @@
if(attacksuccess) //if we successfully attacked a turf with a blob on it, don't refund shit
B.blob_attack_animation(T, src)
else
src << "<span class='warning'>There is a blob there!</span>"
to_chat(src, "<span class='warning'>There is a blob there!</span>")
add_points(4) //otherwise, refund all of the cost
else
var/list/cardinalblobs = list()
@@ -295,7 +295,7 @@
rally_spores(T)
/mob/camera/blob/proc/rally_spores(turf/T)
src << "You rally your spores."
to_chat(src, "You rally your spores.")
var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z))
if(!surrounding_turfs.len)
return
@@ -312,7 +312,7 @@
if(!speak_text)
return
else
src << "You broadcast with your minions, <B>[speak_text]</B>"
to_chat(src, "You broadcast with your minions, <B>[speak_text]</B>")
for(var/BLO in blob_mobs)
var/mob/living/simple_animal/hostile/blob/BM = BLO
if(BM.stat == CONSCIOUS)
@@ -337,33 +337,33 @@
for(var/BLO in blob_mobs)
var/mob/living/simple_animal/hostile/blob/BM = BLO
BM.update_icons() //If it's getting a new chemical, tell it what it does!
BM << "Your overmind's blob reagent is now: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!"
BM << "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]"
src << "Your reagent is now: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!"
src << "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.description]"
to_chat(BM, "Your overmind's blob reagent is now: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!")
to_chat(BM, "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]")
to_chat(src, "Your reagent is now: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!")
to_chat(src, "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.description]")
if(blob_reagent_datum.effectdesc)
src << "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.effectdesc]"
to_chat(src, "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.effectdesc]")
/mob/camera/blob/verb/blob_help()
set category = "Blob"
set name = "*Blob Help*"
set desc = "Help on how to blob."
src << "<b>As the overmind, you can control the blob!</b>"
src << "Your blob reagent is: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!"
src << "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.description]"
to_chat(src, "<b>As the overmind, you can control the blob!</b>")
to_chat(src, "Your blob reagent is: <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font>!")
to_chat(src, "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.description]")
if(blob_reagent_datum.effectdesc)
src << "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.effectdesc]"
src << "<b>You can expand, which will attack people, damage objects, or place a Normal Blob if the tile is clear.</b>"
src << "<i>Normal Blobs</i> will expand your reach and can be upgraded into special blobs that perform certain functions."
src << "<b>You can upgrade normal blobs into the following types of blob:</b>"
src << "<i>Shield Blobs</i> 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."
src << "<i>Resource Blobs</i> 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."
src << "<i>Factory Blobs</i> 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."
src << "<i>Blobbernauts</i> can be produced from factories for a cost, and are hard to kill, powerful, and moderately smart. The factory used to create one will become fragile and briefly unable to produce spores."
src << "<i>Node Blobs</i> are blobs which grow, like the core. Like the core it can activate resource and factory blobs."
src << "<b>In addition to the buttons on your HUD, there are a few click shortcuts to speed up expansion and defense.</b>"
src << "<b>Shortcuts:</b> Click = Expand Blob <b>|</b> Middle Mouse Click = Rally Spores <b>|</b> Ctrl Click = Create Shield Blob <b>|</b> Alt Click = Remove Blob"
src << "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them."
to_chat(src, "The <b><font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</b></font> reagent [blob_reagent_datum.effectdesc]")
to_chat(src, "<b>You can expand, which will attack people, damage objects, or place a Normal Blob if the tile is clear.</b>")
to_chat(src, "<i>Normal Blobs</i> will expand your reach and can be upgraded into special blobs that perform certain functions.")
to_chat(src, "<b>You can upgrade normal blobs into the following types of blob:</b>")
to_chat(src, "<i>Shield Blobs</i> 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.")
to_chat(src, "<i>Resource Blobs</i> 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, "<i>Factory Blobs</i> 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, "<i>Blobbernauts</i> can be produced from factories for a cost, and are hard to kill, powerful, and moderately smart. The factory used to create one will become fragile and briefly unable to produce spores.")
to_chat(src, "<i>Node Blobs</i> are blobs which grow, like the core. Like the core it can activate resource and factory blobs.")
to_chat(src, "<b>In addition to the buttons on your HUD, there are a few click shortcuts to speed up expansion and defense.</b>")
to_chat(src, "<b>Shortcuts:</b> Click = Expand Blob <b>|</b> Middle Mouse Click = Rally Spores <b>|</b> Ctrl Click = Create Shield Blob <b>|</b> Alt Click = Remove Blob")
to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.")
if(!placed && autoplace_max_time <= world.time)
src << "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [round((autoplace_max_time - world.time)/600, 0.5)] minutes.</font></span>"
src << "<span class='big'><font color=\"#EE4000\">You [manualplace_min_time ? "will be able to":"can"] manually place your blob core by pressing the Place Blob Core button in the bottom right corner of the screen.</font></span>"
to_chat(src, "<span class='big'><font color=\"#EE4000\">You will automatically place your blob core in [round((autoplace_max_time - world.time)/600, 0.5)] minutes.</font></span>")
to_chat(src, "<span class='big'><font color=\"#EE4000\">You [manualplace_min_time ? "will be able to":"can"] manually place your blob core by pressing the Place Blob Core button in the bottom right corner of the screen.</font></span>")
+12 -12
View File
@@ -2,7 +2,7 @@
/obj/structure/blob
name = "blob"
icon = 'icons/mob/blob.dmi'
luminosity = 1
light_range = 2
desc = "A thick wall of writhing tendrils."
density = 0 //this being 0 causes two bugs, being able to attack blob tiles behind other blobs and being unable to move on blob tiles in no gravity, but turning it to 1 causes the blob mobs to be unable to path through blobs, which is probably worse.
opacity = 0
@@ -229,7 +229,7 @@
/obj/structure/blob/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/analyzer))
user.changeNext_move(CLICK_CD_MELEE)
user << "<b>The analyzer beeps once, then reports:</b><br>"
to_chat(user, "<b>The analyzer beeps once, then reports:</b><br>")
user << 'sound/machines/ping.ogg'
chemeffectreport(user)
typereport(user)
@@ -238,16 +238,16 @@
/obj/structure/blob/proc/chemeffectreport(mob/user)
if(overmind)
user << "<b>Material: <font color=\"[overmind.blob_reagent_datum.color]\">[overmind.blob_reagent_datum.name]</font><span class='notice'>.</span></b>"
user << "<b>Material Effects:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdescdamage]</span>"
user << "<b>Material Properties:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdesceffect]</span><br>"
to_chat(user, "<b>Material: <font color=\"[overmind.blob_reagent_datum.color]\">[overmind.blob_reagent_datum.name]</font><span class='notice'>.</span></b>")
to_chat(user, "<b>Material Effects:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdescdamage]</span>")
to_chat(user, "<b>Material Properties:</b> <span class='notice'>[overmind.blob_reagent_datum.analyzerdesceffect]</span><br>")
else
user << "<b>No Material Detected!</b><br>"
to_chat(user, "<b>No Material Detected!</b><br>")
/obj/structure/blob/proc/typereport(mob/user)
user << "<b>Blob Type:</b> <span class='notice'>[uppertext(initial(name))]</span>"
user << "<b>Health:</b> <span class='notice'>[obj_integrity]/[max_integrity]</span>"
user << "<b>Effects:</b> <span class='notice'>[scannerreport()]</span>"
to_chat(user, "<b>Blob Type:</b> <span class='notice'>[uppertext(initial(name))]</span>")
to_chat(user, "<b>Health:</b> <span class='notice'>[obj_integrity]/[max_integrity]</span>")
to_chat(user, "<b>Effects:</b> <span class='notice'>[scannerreport()]</span>")
/obj/structure/blob/attack_animal(mob/living/simple_animal/M)
if("blob" in M.faction) //sorry, but you can't kill the blob as a blobbernaut
@@ -308,11 +308,11 @@
..()
var/datum/atom_hud/hud_to_check = huds[DATA_HUD_MEDICAL_ADVANCED]
if(user.research_scanner || (user in hud_to_check.hudusers))
user << "<b>Your HUD displays an extensive report...</b><br>"
to_chat(user, "<b>Your HUD displays an extensive report...</b><br>")
chemeffectreport(user)
typereport(user)
else
user << "It seems to be made of [get_chem_name()]."
to_chat(user, "It seems to be made of [get_chem_name()].")
/obj/structure/blob/proc/scannerreport()
return "A generic blob. Looks like someone forgot to override this proc, adminhelp this."
@@ -325,7 +325,7 @@
/obj/structure/blob/normal
name = "normal blob"
icon_state = "blob"
luminosity = 0
light_range = 0
obj_integrity = 21
max_integrity = 25
health_regen = 1