diff --git a/code/__DEFINES.dm b/code/__DEFINES.dm index 399f4ade816..3c076d306ca 100644 --- a/code/__DEFINES.dm +++ b/code/__DEFINES.dm @@ -425,7 +425,7 @@ var/list/be_special_flags = list( "Wizard" = BE_WIZARD, "Malf AI" = BE_MALF, "Revolutionary" = BE_REV, - "Xenomorph" = BE_ALIEN, + "Alien Lifeform" = BE_ALIEN, "pAI" = BE_PAI, "Cultist" = BE_CULTIST, "Monkey" = BE_MONKEY, @@ -467,4 +467,4 @@ var/list/be_special_flags = list( #define TR_KEEPIMPLANTS 16 #define TR_KEEPSE 32 // changelings shouldn't edit the DNA's SE when turning into a monkey #define TR_DEFAULTMSG 64 -#define TR_KEEPSRC 128 +#define TR_KEEPSRC 128 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 846c35b171b..a3cbab08d33 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -417,6 +417,8 @@ Turf and target are seperate in case you want to teleport some distance from a t var/list/sortmob = sortAtom(mob_list) for(var/mob/living/silicon/ai/M in sortmob) moblist.Add(M) + for(var/mob/camera/M in sortmob) + moblist.Add(M) for(var/mob/living/silicon/pai/M in sortmob) moblist.Add(M) for(var/mob/living/silicon/robot/M in sortmob) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7dbf2e2f9df..6aeb278db91 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1110,9 +1110,12 @@ datum/mind fail |= !ticker.mode.equip_revolutionary(current) +/mob/proc/sync_mind() + mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) + mind.active = 1 //indicates that the mind is currently synced with a client //Initialisation procs -/mob/living/proc/mind_initialize() +/mob/proc/mind_initialize() if(mind) mind.key = key @@ -1180,6 +1183,11 @@ datum/mind mind.assigned_role = "pAI" mind.special_role = "" +//BLOB +/mob/camera/overmind/mind_initialize() + ..() + mind.special_role = "Blob" + //Animals /mob/living/simple_animal/mind_initialize() ..() diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index 8e172bca70d..5271378738a 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -22,7 +22,6 @@ var/list/blob_nodes = list() var/cores_to_spawn = 1 var/players_per_core = 30 - var/blob_count = 0 var/blobwincount = 500 var/list/infected_crew = list() @@ -69,6 +68,34 @@ var/list/blob_nodes = list() blob.current << "If you go outside of the station level, or in space, then you will die; make sure your location has lots of ground to cover." return +/datum/game_mode/blob/proc/show_message(var/message) + for(var/datum/mind/blob in infected_crew) + blob.current << message + +/datum/game_mode/blob/proc/burst_blobs() + for(var/datum/mind/blob in infected_crew) + + var/client/blob_client = null + var/turf/location = null + + if(iscarbon(blob.current)) + var/mob/living/carbon/C = blob.current + if(directory[ckey(blob.key)]) + blob_client = directory[ckey(blob.key)] + location = get_turf(C) + if(location.z != 1 || istype(location, /turf/space)) + location = null + C.gib() + + + if(blob_client && location) + var/obj/effect/blob/core/core = new(location, 200, blob_client, 2) + if(core.overmind && core.overmind.mind) + core.overmind.mind.name = blob.name + infected_crew -= blob + infected_crew += core.overmind.mind + + /datum/game_mode/blob/post_setup() for(var/datum/mind/blob in infected_crew) @@ -91,42 +118,30 @@ var/list/blob_nodes = list() spawn(0) - sleep(rand(waittime_l, waittime_h)) + var/wait_time = rand(waittime_l, waittime_h) + + sleep(wait_time) send_intercept(0) + sleep(100) - sleep(rand(waittime_l, waittime_h)) + show_message("You feel tired and bloated.") - for(var/datum/mind/blob in infected_crew) - blob.current << "You feel like you are about to burst." + sleep(wait_time) - sleep(rand(waittime_l, waittime_h)) + show_message("You feel like you are about to burst.") - for(var/datum/mind/blob in infected_crew) + sleep(wait_time / 2) - var/client/blob_client = null - var/turf/location = null - - if(iscarbon(blob.current)) - var/mob/living/carbon/C = blob.current - if(directory[ckey(blob.key)]) - blob_client = directory[ckey(blob.key)] - location = get_turf(C) - if(location.z != 1 || istype(location, /turf/space)) - location = null - C.gib() - - - if(blob_client && location) - new /obj/effect/blob/core(location, 200, blob_client, 2) + burst_blobs() // Stage 0 sleep(40) stage(0) // Stage 1 - sleep(4000) + sleep(2000) stage(1) ..() diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 29c82fe66d4..8f403e32f4f 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -84,15 +84,6 @@ B.key = C.key B.blob_core = src src.overmind = B - - B << "You are the overmind!" - B << "You are the overmind and can control the blob by placing new blob pieces such as..." - B << "Normal Blob will expand your reach and allow you to upgrade into special blobs that perform certain functions." - B << "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." - B << "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." - B << "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." - B << "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." - return 1 return 0 diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index d379146f265..873c696200a 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -59,6 +59,11 @@ blob_act() return + CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(istype(mover, /obj/effect/blob)) + return 1 + return ..() + New(loc, var/obj/effect/blob/factory/linked_node) if(istype(linked_node)) factory = linked_node diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 6057b0d701f..b4d9add7983 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -23,6 +23,7 @@ Life() for(var/i = 1; i < 8; i += i) Pulse(5, i) + health = min(initial(health), health + 1) update_icon() if(health <= 0) diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 6f7312e629b..828c3b86e4e 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -21,6 +21,19 @@ real_name = new_name ..() +/mob/camera/blob/Login() + ..() + sync_mind() + + src << "You are the overmind!" + src << "You are the overmind and can control the blob by placing new blob pieces such as..." + src << "Normal Blob will expand your reach and allow you to upgrade into special blobs that perform certain functions." + 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." + 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." + 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." + 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." + + mob/camera/blob/Life() hud_used.blobpwrdisplay.maptext = "
| Blob | ||
| Progress: [blobs.len]/[mode.blobwincount] | ||
| [M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""] | " + dat += "PM | " + else + dat += "|
| Blob not found! |