From 930643b01a77712f5da5994059a8e0ed9fed9376 Mon Sep 17 00:00:00 2001 From: keronshb Date: Fri, 6 Mar 2020 19:06:50 -0500 Subject: [PATCH] Blob Reroll Also ports blob reroll --- code/_onclick/hud/blob_overmind.dm | 4 +-- .../blob/blob/blobstrains/_blobstrain.dm | 13 ++++++++ .../modules/antagonists/blob/blob/overmind.dm | 18 ++++++++++- code/modules/antagonists/blob/blob/powers.dm | 32 ++++++++----------- tgstation.dme | 2 ++ 5 files changed, 48 insertions(+), 21 deletions(-) diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 82e22a8c4d..b9118da5f1 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -93,8 +93,8 @@ /obj/screen/blob/ReadaptStrain icon_state = "ui_chemswap" - name = "Readapt Chemical (40)" - desc = "Randomly rerolls your chemical for 40 resources." + name = "Readapt Strain (40)" + desc = "Allows you to choose a new strain from 4 random choices for 40 resources." /obj/screen/blob/ReadaptStrain/MouseEntered(location,control,params) if(hud && hud.mymob && isovermind(hud.mymob)) diff --git a/code/modules/antagonists/blob/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blob/blobstrains/_blobstrain.dm index e592be0c5e..8b6f4bd687 100644 --- a/code/modules/antagonists/blob/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blob/blobstrains/_blobstrain.dm @@ -22,6 +22,19 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ stack_trace("blobstrain created without overmind") overmind = new_overmind +/datum/blobstrain/proc/on_gain() + overmind.color = complementary_color + for(var/BL in GLOB.blobs) + var/obj/structure/blob/B = BL + B.update_icon() + for(var/BLO in overmind.blob_mobs) + var/mob/living/simple_animal/hostile/blob/BM = BLO + BM.update_icons() //If it's getting a new strain, tell it what it does! + to_chat(BM, "Your overmind's blob strain is now: [name]!") + to_chat(BM, "The [name] strain [shortdesc ? "[shortdesc]" : "[description]"]") + +/datum/blobstrain/proc/on_lose() + /datum/blobstrain/proc/on_sporedeath(mob/living/spore) /datum/blobstrain/proc/send_message(mob/living/M) diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm index 4997166325..aed64e4039 100644 --- a/code/modules/antagonists/blob/blob/overmind.dm +++ b/code/modules/antagonists/blob/blob/overmind.dm @@ -38,6 +38,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) var/max_count = 0 //The biggest it got before death var/blobwincount = 400 var/victory_in_progress = FALSE + var/rerolling = FALSE /mob/camera/blob/Initialize(mapload, starting_points = 60) validate_location() @@ -50,7 +51,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) real_name = new_name last_attack = world.time var/datum/blobstrain/BS = pick(GLOB.valid_blobstrains) - blobstrain = new BS(src) + set_strain(BS) color = blobstrain.complementary_color if(blob_core) blob_core.update_icon() @@ -70,6 +71,21 @@ GLOBAL_LIST_EMPTY(blob_nodes) CRASH("No blobspawnpoints and blob spawned in nullspace.") forceMove(T) +/mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain) + if (ispath(new_strain)) + var/hadstrain = FALSE + if (istype(blobstrain)) + blobstrain.on_lose() + qdel(blobstrain) + hadstrain = TRUE + blobstrain = new new_strain(src) + blobstrain.on_gain() + if (hadstrain) + to_chat(src, "Your strain is now: [blobstrain.name]!") + to_chat(src, "The [blobstrain.name] strain [blobstrain.description]") + if(blobstrain.effectdesc) + to_chat(src, "The [blobstrain.name] strain [blobstrain.effectdesc]") + /mob/camera/blob/proc/is_valid_turf(turf/T) var/area/A = get_area(T) if((A && !A.blob_allowed) || !T || !is_station_level(T.z) || isspaceturf(T)) diff --git a/code/modules/antagonists/blob/blob/powers.dm b/code/modules/antagonists/blob/blob/powers.dm index 1d355be9a4..641019ef33 100644 --- a/code/modules/antagonists/blob/blob/powers.dm +++ b/code/modules/antagonists/blob/blob/powers.dm @@ -336,28 +336,24 @@ set category = "Blob" set name = "Reactive Strain Adaptation (40)" set desc = "Replaces your strain with a random, different one." - if(free_strain_rerolls || can_buy(40)) - set_strain() + if(!rerolling && (free_strain_rerolls || can_buy(40))) + rerolling = TRUE + reroll_strain() + rerolling = FALSE if(free_strain_rerolls) free_strain_rerolls-- last_reroll_time = world.time -/mob/camera/blob/proc/set_strain() - var/datum/blobstrain/bs = pick((GLOB.valid_blobstrains - blobstrain.type)) - blobstrain = new bs(src) - color = blobstrain.complementary_color - for(var/BL in GLOB.blobs) - var/obj/structure/blob/B = BL - B.update_icon() - for(var/BLO in blob_mobs) - var/mob/living/simple_animal/hostile/blob/BM = BLO - BM.update_icons() //If it's getting a new strain, tell it what it does! - to_chat(BM, "Your overmind's blob strain is now: [blobstrain.name]!") - to_chat(BM, "The [blobstrain.name] strain [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]") - to_chat(src, "Your strain is now: [blobstrain.name]!") - to_chat(src, "The [blobstrain.name] strain [blobstrain.description]") - if(blobstrain.effectdesc) - to_chat(src, "The [blobstrain.name] strain [blobstrain.effectdesc]") +/mob/camera/blob/proc/reroll_strain() + var/list/choices = list() + while (length(choices) < 4) + var/datum/blobstrain/bs = pick((GLOB.valid_blobstrains)) + choices[initial(bs.name)] = bs + + var/choice = input(usr, "Please choose a new strain","Strain") as anything in choices + if (choice && choices[choice] && !QDELETED(src)) + var/datum/blobstrain/bs = choices[choice] + set_strain(bs) /mob/camera/blob/verb/blob_help() set category = "Blob" diff --git a/tgstation.dme b/tgstation.dme index 5d2e5a02ad..3261d8c7c0 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1291,6 +1291,7 @@ #include "code\modules\antagonists\abductor\machinery\experiment.dm" #include "code\modules\antagonists\abductor\machinery\pad.dm" #include "code\modules\antagonists\blob\blob.dm" +#include "code\modules\antagonists\blob\blob\overmind.dm" #include "code\modules\antagonists\blob\blob\blob_report.dm" #include "code\modules\antagonists\blob\blob\overmind.dm" #include "code\modules\antagonists\blob\blob\powers.dm" @@ -1315,6 +1316,7 @@ #include "code\modules\antagonists\blob\blob\blobstrains\regenerative_materia.dm" #include "code\modules\antagonists\blob\blob\blobstrains\replicating_foam.dm" #include "code\modules\antagonists\blob\blob\blobstrains\shifting_fragments.dm" +#include "code\modules\antagonists\blob\blob\blobstrains\_blobstrain.dm" #include "code\modules\antagonists\blob\blob\blobstrains\synchronous_mesh.dm" #include "code\modules\antagonists\blob\blob\blobstrains\zombifying_pods.dm" #include "code\modules\antagonists\blood_contract\blood_contract.dm"