From ef96559701a5b84e52cf772daf121bbf1c6d22d8 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Mon, 26 Jun 2017 10:53:10 -0400 Subject: [PATCH] Removes cortical borers --- code/__DEFINES/is_helpers.dm | 2 - code/__DEFINES/role_preferences.dm | 4 +- code/datums/mutations.dm | 3 - code/game/data_huds.dm | 3 - .../gamemodes/changeling/powers/panacea.dm | 9 - code/game/gamemodes/game_mode.dm | 36 - code/game/gamemodes/miniantags/borer/borer.dm | 1068 ----------------- .../miniantags/borer/borer_chemicals.dm | 59 - .../gamemodes/miniantags/borer/borer_event.dm | 49 - .../gamemodes/miniantags/borer/borer_html.dm | 125 -- .../gamemodes/miniantags/borer/borer_topic.dm | 37 - code/game/gamemodes/miniantags/readme.txt | 1 - code/game/objects/items/devices/scanners.dm | 5 - code/modules/admin/topic.dm | 6 - .../atmospherics/machinery/atmosmachinery.dm | 5 +- code/modules/client/verbs/suicide.dm | 3 - code/modules/flufftext/Hallucination.dm | 37 +- .../browserassets/css/browserOutput.css | 1 - code/modules/mob/living/brain/brain_item.dm | 4 - code/modules/mob/living/carbon/human/human.dm | 4 - code/modules/surgery/organ_manipulation.dm | 12 - icons/mob/animal.dmi | Bin 164984 -> 164136 bytes interface/stylesheet.dm | 1 - tgstation.dme | 5 - 24 files changed, 3 insertions(+), 1476 deletions(-) delete mode 100644 code/game/gamemodes/miniantags/borer/borer.dm delete mode 100644 code/game/gamemodes/miniantags/borer/borer_chemicals.dm delete mode 100644 code/game/gamemodes/miniantags/borer/borer_event.dm delete mode 100644 code/game/gamemodes/miniantags/borer/borer_html.dm delete mode 100644 code/game/gamemodes/miniantags/borer/borer_topic.dm diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 1b239f5fc6b..1372e99a8e9 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -76,8 +76,6 @@ #define isrevenant(A) (istype(A, /mob/living/simple_animal/revenant)) -#define isborer(A) (istype(A, /mob/living/simple_animal/borer)) - #define isbot(A) (istype(A, /mob/living/simple_animal/bot)) #define iscrab(A) (istype(A, /mob/living/simple_animal/crab)) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index dc9fbe6fe3b..86fa509e30d 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -23,7 +23,6 @@ #define ROLE_REVENANT "revenant" #define ROLE_DEVIL "devil" #define ROLE_SERVANT_OF_RATVAR "servant of Ratvar" -#define ROLE_BORER "borer" //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough @@ -45,8 +44,7 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_REVENANT, ROLE_ABDUCTOR = /datum/game_mode/abduction, ROLE_DEVIL = /datum/game_mode/devil, - ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult, - ROLE_BORER, + ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult )) //Job defines for what happens when you fail to qualify for any job during job selection diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index df124260fef..5b44fd966fe 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -377,9 +377,6 @@ GLOBAL_LIST_EMPTY(mutations_list) time_coeff = 2 /datum/mutation/human/race/on_acquiring(mob/living/carbon/human/owner) - if(owner.has_brain_worms()) - to_chat(owner, "You feel something strongly clinging to your humanity!") - return if(..()) return . = owner.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 2e5854509aa..2821356db52 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -162,14 +162,11 @@ var/image/holder = hud_list[STATUS_HUD] var/icon/I = icon(icon, icon_state, dir) var/virus_state = check_virus() - var/mob/living/simple_animal/borer/B = has_brain_worms() holder.pixel_y = I.Height() - world.icon_size if(status_flags & XENO_HOST) holder.icon_state = "hudxeno" else if(stat == DEAD || (status_flags & FAKEDEATH)) holder.icon_state = "huddead" - else if(has_brain_worms() && B != null && B.controlling) - holder.icon_state = "hudbrainworm" else if(virus_state == 2) holder.icon_state = "hudill" else if(virus_state == 1) diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 7023e30010d..a0c9562aa4e 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -10,15 +10,6 @@ /obj/effect/proc_holder/changeling/panacea/sting_action(mob/user) to_chat(user, "We cleanse impurities from our form.") - var/mob/living/simple_animal/borer/B = user.has_brain_worms() - if(B) - if(B.controlling) - B.detatch() - B.leave_victim() - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.vomit(0, toxic = TRUE) - to_chat(user, "A parasite exits our form.") var/list/bad_organs = list( user.getorgan(/obj/item/organ/body_egg), user.getorgan(/obj/item/organ/zombie_infection)) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index c37ce1bcb9c..b1b5da2cd2c 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -269,42 +269,6 @@ if(cult.len && !istype(SSticker.mode,/datum/game_mode/cult)) datum_cult_completion() - if(GLOB.borers.len) - var/borerwin = FALSE - var/borertext = "
The borers were:" - for(var/mob/living/simple_animal/borer/B in GLOB.borers) - if((B.key || B.controlling) && B.stat != DEAD) - borertext += "
[B.controlling ? B.victim.key : B.key] was [B.truename] (" - var/turf/location = get_turf(B) - if(location.z == ZLEVEL_CENTCOM && B.victim) - borertext += "escaped with host" - else - borertext += "failed" - borertext += ")" - to_chat(world, borertext) - - var/total_borers = 0 - for(var/mob/living/simple_animal/borer/B in GLOB.borers) - if((B.key || B.victim) && B.stat != DEAD) - total_borers++ - if(total_borers) - var/total_borer_hosts = 0 - for(var/mob/living/carbon/C in GLOB.mob_list) - var/mob/living/simple_animal/borer/D = C.has_brain_worms() - var/turf/location = get_turf(C) - if(location.z == ZLEVEL_CENTCOM && D && D.stat != DEAD) - total_borer_hosts++ - if(GLOB.total_borer_hosts_needed <= total_borer_hosts) - borerwin = TRUE - to_chat(world, "There were [total_borers] borers alive at round end!") - to_chat(world, "A total of [total_borer_hosts] borers with hosts escaped on the shuttle alive. The borers needed [GLOB.total_borer_hosts_needed] hosts to escape.") - if(borerwin) - to_chat(world, "The borers were successful!") - else - to_chat(world, "The borers have failed!") - - CHECK_TICK - return 0 diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm deleted file mode 100644 index 15ed3ea7ff1..00000000000 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ /dev/null @@ -1,1068 +0,0 @@ -/mob/living/captive_brain - name = "host brain" - real_name = "host brain" - -/mob/living/captive_brain/say(var/message) - - if(client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (muted).") - return - if(client.handle_spam_prevention(message,MUTE_IC)) - return - - if(isborer(loc)) - - message = sanitize(message) - if(!message) - return - log_say("[key_name(src)] : [message]") - if(stat == 2) - return say_dead(message) - - var/mob/living/simple_animal/borer/B = loc - to_chat(src, "You whisper silently, \"[message]\"") - to_chat(B.victim, "The captive mind of [src] whispers, \"[message]\"") - - for (var/mob/M in GLOB.player_list) - if(isnewplayer(M)) - continue - else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) - to_chat(M, "Thought-speech, [src] -> [B.truename]: [message]") - -/mob/living/captive_brain/emote(var/message) - return - -/mob/living/captive_brain/resist() - - var/mob/living/simple_animal/borer/B = loc - - to_chat(src, "You begin doggedly resisting the parasite's control (this will take approximately 40 seconds).") - to_chat(B.victim, "You feel the captive mind of [src] begin to resist your control.") - - var/delay = rand(150,250) + B.victim.brainloss - addtimer(CALLBACK(src, .proc/return_control, src.loc), delay) - -/mob/living/captive_brain/proc/return_control(mob/living/simple_animal/borer/B) - if(!B || !B.controlling) - return - - B.victim.adjustBrainLoss(rand(5,10)) - to_chat(src, "With an immense exertion of will, you regain control of your body!") - to_chat(B.victim, "You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.") - B.detatch() - -GLOBAL_LIST_EMPTY(borers) -GLOBAL_VAR_INIT(total_borer_hosts_needed, 10) - -/mob/living/simple_animal/borer - name = "cortical borer" - real_name = "cortical borer" - desc = "A small, quivering, slug-like creature." - icon_state = "brainslug" - icon_living = "brainslug" - icon_dead = "brainslug_dead" - health = 20 - maxHealth = 20 - melee_damage_lower = 5 - melee_damage_upper = 5 - stop_automated_movement = TRUE - attacktext = "chomps" - attack_sound = 'sound/weapons/bite.ogg' - pass_flags = PASSTABLE | PASSMOB - mob_size = MOB_SIZE_SMALL - faction = list("creature") - ventcrawler = VENTCRAWLER_ALWAYS - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - - var/generation = 1 - var/static/list/borer_names = list( - "Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary", - "Septenary", "Octonary", "Novenary", "Decenary", "Undenary", "Duodenary", - ) - - var/mob/living/carbon/victim = null - var/mob/living/captive_brain/host_brain = null - var/truename - var/docile = FALSE - var/bonding = FALSE - var/controlling = FALSE - var/chemicals = 10 - var/used_dominate - var/borer_chems = list() - var/leaving = FALSE - var/hiding = FALSE - var/waketimerid = null - - var/datum/action/innate/borer/talk_to_host/talk_to_host_action = new - var/datum/action/innate/borer/infest_host/infest_host_action = new - var/datum/action/innate/borer/toggle_hide/toggle_hide_action = new - var/datum/action/innate/borer/talk_to_borer/talk_to_borer_action = new - var/datum/action/innate/borer/talk_to_brain/talk_to_brain_action = new - var/datum/action/innate/borer/take_control/take_control_action = new - var/datum/action/innate/borer/give_back_control/give_back_control_action = new - var/datum/action/innate/borer/leave_body/leave_body_action = new - var/datum/action/innate/borer/make_chems/make_chems_action = new - var/datum/action/innate/borer/make_larvae/make_larvae_action = new - var/datum/action/innate/borer/freeze_victim/freeze_victim_action = new - var/datum/action/innate/borer/punish_victim/punish_victim_action = new - var/datum/action/innate/borer/jumpstart_host/jumpstart_host_action = new - -/mob/living/simple_animal/borer/Initialize(mapload, gen=1) - ..() - generation = gen - notify_ghosts("A cortical borer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK) - real_name = "Cortical Borer [rand(1000,9999)]" - truename = "[borer_names[min(generation, borer_names.len)]] [rand(1000,9999)]" - borer_chems += /datum/borer_chem/epinephrine - borer_chems += /datum/borer_chem/leporazine - borer_chems += /datum/borer_chem/mannitol - borer_chems += /datum/borer_chem/bicaridine - borer_chems += /datum/borer_chem/kelotane - borer_chems += /datum/borer_chem/charcoal - borer_chems += /datum/borer_chem/methamphetamine - borer_chems += /datum/borer_chem/salbutamol - borer_chems += /datum/borer_chem/spacedrugs - //borer_chems += /datum/borer_chem/creagent - borer_chems += /datum/borer_chem/ethanol - borer_chems += /datum/borer_chem/rezadone - - GLOB.borers += src - - GrantBorerActions() - -/mob/living/simple_animal/borer/Destroy() - GLOB.borers -= src - - host_brain = null - victim = null - - QDEL_NULL(talk_to_host_action) - QDEL_NULL(infest_host_action) - QDEL_NULL(toggle_hide_action) - QDEL_NULL(talk_to_borer_action) - QDEL_NULL(talk_to_brain_action) - QDEL_NULL(take_control_action) - QDEL_NULL(give_back_control_action) - QDEL_NULL(leave_body_action) - QDEL_NULL(make_chems_action) - QDEL_NULL(make_larvae_action) - QDEL_NULL(freeze_victim_action) - QDEL_NULL(punish_victim_action) - QDEL_NULL(jumpstart_host_action) - - return ..() - -/mob/living/simple_animal/borer/Topic(href, href_list)//not entirely sure if this is even required - if(href_list["ghostjoin"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - attack_ghost(ghost) - -/mob/living/simple_animal/borer/attack_ghost(mob/user) - if(jobban_isbanned(user, ROLE_BORER) || jobban_isbanned(user, "Syndicate")) - return - if(key) - return - if(stat != CONSCIOUS) - return - var/be_borer = alert("Become a cortical borer? (Warning, You can no longer be cloned!)",,"Yes","No") - if(be_borer == "No" || !src || QDELETED(src)) - return - if(key) - return - transfer_personality(user.client) - -/mob/living/simple_animal/borer/Stat() - ..() - - if(statpanel("Status")) - stat(null, "Chemicals: [chemicals]") - - src << output(chemicals, "ViewBorer\ref[src]Chems.browser:update_chemicals") - -/mob/living/simple_animal/borer/verb/Communicate() - set category = "Borer" - set name = "Converse with Host" - set desc = "Send a silent message to your host." - - if(!victim) - to_chat(src, "You do not have a host to communicate with!") - return - - if(stat) - to_chat(src, "You cannot do that in your current state.") - return - - var/input = stripped_input(src, "Please enter a message to tell your host.", "Borer", null) - if(!input) - return - - if(src && !QDELETED(src) && !QDELETED(victim)) - var/say_string = (docile) ? "slurs" :"states" - if(victim) - to_chat(victim, "[truename] [say_string]: [input]") - log_say("Borer Communication: [key_name(src)] -> [key_name(victim)] : [input]") - for(var/M in GLOB.dead_mob_list) - if(isobserver(M)) - var/rendered = "Borer Communication from [truename] : [input]" - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [rendered]") - to_chat(src, "[truename] [say_string]: [input]") - victim.verbs += /mob/living/proc/borer_comm - talk_to_borer_action.Grant(victim) - -/mob/living/proc/borer_comm() - set name = "Converse with Borer" - set category = "Borer" - set desc = "Communicate mentally with your borer." - - - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(!B) - return - - var/input = stripped_input(src, "Please enter a message to tell the borer.", "Message", null) - if(!input) - return - - to_chat(B, "[src] says: [input]") - log_say("Borer Communication: [key_name(src)] -> [key_name(B)] : [input]") - - for(var/M in GLOB.dead_mob_list) - if(isobserver(M)) - var/rendered = "Borer Communication from [src] : [input]" - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [rendered]") - to_chat(src, "[src] says: [input]") - -/mob/living/proc/trapped_mind_comm() - set name = "Converse with Trapped Mind" - set category = "Borer" - set desc = "Communicate mentally with the trapped mind of your host." - - - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(!B || !B.host_brain) - return - var/mob/living/captive_brain/CB = B.host_brain - var/input = stripped_input(src, "Please enter a message to tell the trapped mind.", "Message", null) - if(!input) - return - - to_chat(CB, "[B.truename] says: [input]") - log_say("Borer Communication: [key_name(B)] -> [key_name(CB)] : [input]") - - for(var/M in GLOB.dead_mob_list) - if(isobserver(M)) - var/rendered = "Borer Communication from [B] : [input]" - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [rendered]") - to_chat(src, "[B.truename] says: [input]") - -/mob/living/simple_animal/borer/Life() - - ..() - - if(victim) - if(stat != DEAD) - if(victim.stat == DEAD) - chemicals++ - else if(chemicals < 250) - chemicals+=2 - chemicals = min(250, chemicals) - - - if(stat != DEAD && victim.stat != DEAD) - - if(victim.reagents.has_reagent("sugar")) - if(!docile || waketimerid) - if(controlling) - to_chat(victim, "You feel the soporific flow of sugar in your host's blood, lulling you into docility.") - else - to_chat(src, "You feel the soporific flow of sugar in your host's blood, lulling you into docility.") - if(waketimerid) - deltimer(waketimerid) - waketimerid = null - docile = TRUE - else - if(docile && !waketimerid) - if(controlling) - to_chat(victim, "You start shaking off your lethargy as the sugar leaves your host's blood. This will take about 10 seconds...") - else - to_chat(src, "You start shaking off your lethargy as the sugar leaves your host's blood. This will take about 10 seconds...") - - waketimerid = addtimer(CALLBACK(src, "wakeup"), 10, TIMER_STOPPABLE) - if(controlling) - - if(docile) - to_chat(victim, "You are feeling far too docile to continue controlling your host...") - victim.release_control() - return - - if(prob(5)) - victim.adjustBrainLoss(rand(1,2)) - - if(prob(victim.brainloss/10)) - victim.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp"))]") - -/mob/living/simple_animal/borer/proc/wakeup() - if(controlling) - to_chat(victim, "You finish shaking off your lethargy.") - else - to_chat(src, "You finish shaking off your lethargy.") - docile = FALSE - if(waketimerid) - waketimerid = null - -/mob/living/simple_animal/borer/say(message) - if(dd_hasprefix(message, ";")) - message = copytext(message,2) - for(var/borer in GLOB.borers) - to_chat(borer, "Cortical Link: [truename] sings, \"[message]\"") - for(var/mob/D in GLOB.dead_mob_list) - to_chat(D, "Cortical Link: [truename] sings, \"[message]\"") - return - if(!victim) - to_chat(src, "You cannot speak without a host!") - return - if(message == "") - return - -/mob/living/simple_animal/borer/UnarmedAttack(atom/A) - if(isliving(A)) - healthscan(usr, A) - chemscan(usr, A) - -/mob/living/simple_animal/borer/ex_act() - if(victim) - return - - ..() - -/mob/living/simple_animal/borer/verb/infect_victim() - set name = "Infest" - set category = "Borer" - set desc = "Infest a suitable humanoid host." - - if(victim) - to_chat(src, "You are already within a host.") - - if(stat == DEAD) - return - - var/list/choices = list() - for(var/mob/living/carbon/H in view(1,src)) - if(H!=src && Adjacent(H)) - choices += H - - if(!choices.len) - return - var/mob/living/carbon/H = choices.len > 1 ? input(src,"Who do you wish to infest?") in null|choices : choices[1] - if(!H || !src) - return - - if(!Adjacent(H)) - return FALSE - - if(stat != CONSCIOUS) - to_chat(src, "You cannot do that in your current state.") - return FALSE - - if(H.has_brain_worms()) - to_chat(src, "[victim] is already infested!") - return - - to_chat(src, "You slither up [H] and begin probing at their ear canal...") - if(!do_mob(src, H, 30)) - to_chat(src, "As [H] moves away, you are dislodged and fall to the ground.") - return - - if(!H || !src) - return - - Infect(H) - -/mob/living/simple_animal/borer/proc/Infect(mob/living/carbon/C) - - if(!C) - return - - if(C.has_brain_worms()) - to_chat(src, "[C] is already infested!") - return - - if(!C.key || !C.mind) - to_chat(src, "[C]'s mind seems unresponsive. Try someone else!") - return - - if(C && C.dna && istype(C.dna.species, /datum/species/skeleton)) - to_chat(src, "[C] does not possess the vital systems needed to support us.") - return - - victim = C - forceMove(victim) - - RemoveBorerActions() - GrantInfestActions() - - log_game("[src]/([src.ckey]) has infested [victim]/([victim.ckey]") - -/mob/living/simple_animal/borer/verb/secrete_chemicals() - set category = "Borer" - set name = "Secrete Chemicals" - set desc = "Push some chemicals into your host's bloodstream." - - if(!victim) - to_chat(src, "You are not inside a host body.") - return - - if(stat != CONSCIOUS) - to_chat(src, "You cannot secrete chemicals in your current state.") - - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - - var content = "" - content += "

Chemicals: [chemicals]

" - - content += "" - - for(var/datum in typesof(/datum/borer_chem)) - var/datum/borer_chem/C = new datum() - if(C.chemname) - content += "" - - content += "
[C.chemname] ([C.chemuse])

[C.chem_desc]

" - - var/html = get_html_template(content) - - usr << browse(null, "window=ViewBorer\ref[src]Chems;size=600x800") - usr << browse(html, "window=ViewBorer\ref[src]Chems;size=600x800") - - return - -/mob/living/simple_animal/borer/verb/hide() - set category = "Borer" - set name = "Hide" - set desc = "Become invisible to the common eye." - - if(victim) - to_chat(src, "You cannot do this while you're inside a host.") - - if(stat != CONSCIOUS) - return - - if(!hiding) - layer = LATTICE_LAYER - visible_message("[src] scurries to the ground!", \ - "You are now hiding.") - hiding = TRUE - else - layer = MOB_LAYER - visible_message("[src] slowly peaks up from the ground...", \ - "You stop hiding.") - hiding = FALSE - -/mob/living/simple_animal/borer/verb/dominate_victim() - set category = "Borer" - set name = "Paralyze Victim" - set desc = "Freeze the limbs of a potential host with supernatural fear." - - if(world.time - used_dominate < 150) - to_chat(src, "You cannot use that ability again so soon.") - return - - if(victim) - to_chat(src, "You cannot do that from within a host body.") - return - - if(stat != CONSCIOUS) - to_chat(src, "You cannot do that in your current state.") - return - - var/list/choices = list() - for(var/mob/living/carbon/C in view(1,src)) - if(C.stat == CONSCIOUS) - choices += C - - if(!choices.len) - return - var/mob/living/carbon/M = choices.len > 1 ? input(src,"Who do you wish to dominate?") in null|choices : choices[1] - - - if(!M || !src || stat != CONSCIOUS || victim || (world.time - used_dominate < 150)) - return - if(!Adjacent(M)) - return - - if(M.has_brain_worms()) - to_chat(src, "You cannot stun someone who is already infested!") - return - - layer = MOB_LAYER - - to_chat(src, "You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread.") - to_chat(M, "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.") - M.Stun(60) - - used_dominate = world.time - -/mob/living/simple_animal/borer/verb/release_victim() - set category = "Borer" - set name = "Release Host" - set desc = "Slither out of your host." - - if(!victim) - to_chat(src, "You are not inside a host body.") - return - - if(stat != CONSCIOUS) - to_chat(src, "You cannot leave your host in your current state.") - - if(leaving) - leaving = FALSE - to_chat(src, "You decide against leaving your host.") - return - - to_chat(src, "You begin disconnecting from [victim]'s synapses and prodding at their internal ear canal.") - - if(victim.stat != DEAD) - to_chat(victim, "An odd, uncomfortable pressure begins to build inside your skull, behind your ear...") - - leaving = TRUE - - addtimer(CALLBACK(src, .proc/release_host), 100) - -/mob/living/simple_animal/borer/proc/release_host() - if(!victim || !src || QDELETED(victim) || QDELETED(src)) - return - if(!leaving) - return - if(controlling) - return - - if(stat != CONSCIOUS) - to_chat(src, "You cannot release your host in your current state.") - return - - to_chat(src, "You wiggle out of [victim]'s ear and plop to the ground.") - if(victim.mind) - to_chat(victim, "Something slimy wiggles out of your ear and plops to the ground!") - to_chat(victim, "As though waking from a dream, you shake off the insidious mind control of the brain worm. Your thoughts are your own again.") - - leaving = FALSE - - leave_victim() - -/mob/living/simple_animal/borer/proc/leave_victim() - if(!victim) - return - - if(controlling) - detatch() - - GrantBorerActions() - RemoveInfestActions() - - forceMove(get_turf(victim)) - - reset_perspective(null) - machine = null - - victim.reset_perspective(null) - victim.machine = null - - var/mob/living/V = victim - V.verbs -= /mob/living/proc/borer_comm - talk_to_borer_action.Remove(victim) - victim = null - return - -/mob/living/simple_animal/borer/verb/jumpstart() - set category = "Borer" - set name = "Jumpstart Host" - set desc = "Bring your host back to life." - - if(!victim) - to_chat(src, "You need a host to be able to use this.") - return - - if(docile) - to_chat(src, "You are feeling too docile to use this!") - return - - if(victim.stat != DEAD) - to_chat(src, "Your host is already alive!") - return - - if(chemicals < 250) - to_chat(src, "You need 250 chemicals to use this!") - return - - if(victim.stat == DEAD) - victim.tod = null - victim.setToxLoss(0) - victim.setOxyLoss(0) - victim.setCloneLoss(0) - victim.SetUnconscious(0) - victim.SetStun(0) - victim.SetKnockdown(0) - victim.radiation = 0 - victim.heal_overall_damage(victim.getBruteLoss(), victim.getFireLoss()) - victim.reagents.clear_reagents() - if(ishuman(victim)) - var/mob/living/carbon/human/H = victim - H.restore_blood() - H.remove_all_embedded_objects() - victim.revive() - log_game("[src]/([src.ckey]) has revived [victim]/([victim.ckey]") - chemicals -= 250 - to_chat(src, "You send a jolt of energy to your host, reviving them!") - victim.grab_ghost(force = TRUE) //brings the host back, no eggscape - to_chat(victim, "You bolt upright, gasping for breath!") - -/mob/living/simple_animal/borer/verb/bond_brain() - set category = "Borer" - set name = "Assume Control" - set desc = "Fully connect to the brain of your host." - - if(!victim) - to_chat(src, "You are not inside a host body.") - return - - if(stat != CONSCIOUS) - to_chat(src, "You cannot do that in your current state.") - return - - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - - if(victim.stat == DEAD) - to_chat(src, "This host lacks enough brain function to control.") - return - - if(bonding) - bonding = FALSE - to_chat(src, "You stop attempting to take control of your host.") - return - - to_chat(src, "You begin delicately adjusting your connection to the host brain...") - - if(QDELETED(src) || QDELETED(victim)) - return - - bonding = TRUE - - var/delay = 200+(victim.brainloss*5) - addtimer(CALLBACK(src, .proc/assume_control), delay) - -/mob/living/simple_animal/borer/proc/assume_control() - if(!victim || !src || controlling || victim.stat == DEAD) - return - if(!bonding) - return - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - if(is_servant_of_ratvar(victim) || iscultist(victim) || victim.isloyal()) - to_chat(src, "[victim]'s mind seems to be blocked by some unknown force!") - return - - else - - log_game("[src]/([src.ckey]) assumed control of [victim]/([victim.ckey] with borer powers.") - to_chat(src, "You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.") - to_chat(victim, "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.") - - // host -> brain - var/h2b_id = victim.computer_id - var/h2b_ip= victim.lastKnownIP - victim.computer_id = null - victim.lastKnownIP = null - - qdel(host_brain) - host_brain = new(src) - - host_brain.ckey = victim.ckey - - host_brain.name = victim.name - - if(victim.mind) - host_brain.mind = victim.mind - - if(!host_brain.computer_id) - host_brain.computer_id = h2b_id - - if(!host_brain.lastKnownIP) - host_brain.lastKnownIP = h2b_ip - - to_chat(host_brain, "You are trapped in your own mind. You feel that there must be a way to resist!") - - // self -> host - var/s2h_id = src.computer_id - var/s2h_ip= src.lastKnownIP - src.computer_id = null - src.lastKnownIP = null - - victim.ckey = src.ckey - victim.mind = src.mind - - if(!victim.computer_id) - victim.computer_id = s2h_id - - if(!victim.lastKnownIP) - victim.lastKnownIP = s2h_ip - - bonding = FALSE - controlling = TRUE - - victim.verbs += /mob/living/carbon/proc/release_control - victim.verbs += /mob/living/carbon/proc/spawn_larvae - victim.verbs -= /mob/living/proc/borer_comm - victim.verbs += /mob/living/proc/trapped_mind_comm - GrantControlActions() - talk_to_borer_action.Remove(victim) - - victim.med_hud_set_status() - -/mob/living/simple_animal/borer/verb/punish() - set category = "Borer" - set name = "Punish" - set desc = "Punish your victim." - - if(!victim) - to_chat(src, "You are not inside a host body.") - return - - if(stat != CONSCIOUS) - to_chat(src, "You cannot do that in your current state.") - return - - if(docile) - to_chat(src, "You are feeling far too docile to do that.") - return - - if(chemicals < 75) - to_chat(src, "You need 75 chems to punish your host.") - return - - var/punishment = input("Select a punishment:.", "Punish") as null|anything in list("Blindness","Deafness","Stun") - - if(!punishment) - return - - if(chemicals < 75) - to_chat(src, "You need 75 chems to punish your host.") - return - - switch(punishment) //Hardcoding this stuff. - if("Blindness") - victim.blind_eyes(2) - if("Deafness") - victim.minimumDeafTicks(20) - if("Stun") - victim.Knockdown(200) - - log_game("[src]/([src.ckey]) punished [victim]/([victim.ckey] with [punishment]") - - chemicals -= 75 - - -/mob/living/carbon/proc/release_control() - - set category = "Borer" - set name = "Release Control" - set desc = "Release control of your host's body." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(B && B.host_brain) - to_chat(src, "You withdraw your probosci, releasing control of [B.host_brain]") - - B.detatch() - -//Check for brain worms in head. -/mob/proc/has_brain_worms() - - for(var/I in contents) - if(isborer(I)) - return I - - return FALSE - -/mob/living/carbon/proc/spawn_larvae() - set category = "Borer" - set name = "Reproduce" - set desc = "Spawn several young." - - var/mob/living/simple_animal/borer/B = has_brain_worms() - - if(isbrain(src)) - to_chat(src, "You need a mouth to be able to do this.") - return - if(!B) - return - - if(B.chemicals >= 200) - visible_message("[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") - B.chemicals -= 200 - - new /obj/effect/decal/cleanable/vomit(get_turf(src)) - playsound(loc, 'sound/effects/splat.ogg', 50, 1) - new /mob/living/simple_animal/borer(get_turf(src), B.generation + 1) - log_game("[src]/([src.ckey]) has spawned a new borer via reproducing.") - else - to_chat(src, "You need 200 chemicals stored to reproduce.") - return - - -/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) - if(!candidate || !candidate.mob) - return - - if(!QDELETED(candidate) || !QDELETED(candidate.mob)) - var/datum/mind/M = create_borer_mind(candidate.ckey) - M.transfer_to(src) - - candidate.mob = src - ckey = candidate.ckey - - if(mind) - mind.store_memory("You must escape with at least [GLOB.total_borer_hosts_needed] borers with hosts on the shuttle.") - - to_chat(src, "You are a cortical borer!") - to_chat(src, "You are a brain slug that worms its way into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, your host and your eventual spawn safe and warm.") - to_chat(src, "Sugar nullifies your abilities, avoid it at all costs!") - to_chat(src, "You can speak to your fellow borers by prefixing your messages with ';'. Check out your Borer tab to see your abilities.") - to_chat(src, "You must escape with at least [GLOB.total_borer_hosts_needed] borers with hosts on the shuttle. To reproduce you must have 100 chemicals and be controlling a host.") - -/mob/living/simple_animal/borer/proc/detatch() - if(!victim || !controlling) - return - - controlling = FALSE - - victim.verbs -= /mob/living/carbon/proc/release_control - victim.verbs -= /mob/living/carbon/proc/spawn_larvae - victim.verbs += /mob/living/proc/borer_comm - victim.verbs -= /mob/living/proc/trapped_mind_comm - RemoveControlActions() - talk_to_borer_action.Grant(victim) - - victim.med_hud_set_status() - - if(host_brain) - - // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed. - // computer_id and IP are not updated magically on their own in offline mobs -walter0o - - // host -> self - var/h2s_id = victim.computer_id - var/h2s_ip= victim.lastKnownIP - victim.computer_id = null - victim.lastKnownIP = null - - ckey = victim.ckey - mind = victim.mind - - - if(!computer_id) - computer_id = h2s_id - - if(!host_brain.lastKnownIP) - lastKnownIP = h2s_ip - - // brain -> host - var/b2h_id = host_brain.computer_id - var/b2h_ip= host_brain.lastKnownIP - host_brain.computer_id = null - host_brain.lastKnownIP = null - - victim.ckey = host_brain.ckey - - victim.mind = host_brain.mind - - if(!victim.computer_id) - victim.computer_id = b2h_id - - if(!victim.lastKnownIP) - victim.lastKnownIP = b2h_ip - - log_game("[src]/([src.ckey]) released control of [victim]/([victim.ckey]") - - qdel(host_brain) - -/proc/create_borer_mind(key) - var/datum/mind/M = new /datum/mind(key) - M.assigned_role = "Cortical Borer" - M.special_role = "Cortical Borer" - return M - -/mob/living/simple_animal/borer/proc/GrantBorerActions() - infest_host_action.Grant(src) - toggle_hide_action.Grant(src) - freeze_victim_action.Grant(src) - -/mob/living/simple_animal/borer/proc/RemoveBorerActions() - infest_host_action.Remove(src) - toggle_hide_action.Remove(src) - freeze_victim_action.Remove(src) - -/mob/living/simple_animal/borer/proc/GrantInfestActions() - talk_to_host_action.Grant(src) - leave_body_action.Grant(src) - take_control_action.Grant(src) - punish_victim_action.Grant(src) - make_chems_action.Grant(src) - jumpstart_host_action.Grant(src) - -/mob/living/simple_animal/borer/proc/RemoveInfestActions() - talk_to_host_action.Remove(src) - take_control_action.Remove(src) - leave_body_action.Remove(src) - punish_victim_action.Remove(src) - make_chems_action.Remove(src) - jumpstart_host_action.Remove(src) - -/mob/living/simple_animal/borer/proc/GrantControlActions() - talk_to_brain_action.Grant(victim) - give_back_control_action.Grant(victim) - make_larvae_action.Grant(victim) - -/mob/living/simple_animal/borer/proc/RemoveControlActions() - talk_to_brain_action.Remove(victim) - make_larvae_action.Remove(victim) - give_back_control_action.Remove(victim) - -/datum/action/innate/borer - background_icon_state = "bg_alien" - -/datum/action/innate/borer/talk_to_host - name = "Converse with Host" - desc = "Send a silent message to your host." - button_icon_state = "alien_whisper" - -/datum/action/innate/borer/talk_to_host/Activate() - var/mob/living/simple_animal/borer/B = owner - B.Communicate() - -/datum/action/innate/borer/infest_host - name = "Infest" - desc = "Infest a suitable humanoid host." - button_icon_state = "infest" - -/datum/action/innate/borer/infest_host/Activate() - var/mob/living/simple_animal/borer/B = owner - B.infect_victim() - -/datum/action/innate/borer/toggle_hide - name = "Toggle Hide" - desc = "Become invisible to the common eye. Toggled on or off." - button_icon_state = "borer_hiding_false" - -/datum/action/innate/borer/toggle_hide/Activate() - var/mob/living/simple_animal/borer/B = owner - B.hide() - button_icon_state = "borer_hiding_[B.hiding ? "true" : "false"]" - UpdateButtonIcon() - -/datum/action/innate/borer/talk_to_borer - name = "Converse with Borer" - desc = "Communicate mentally with your borer." - button_icon_state = "alien_whisper" - -/datum/action/innate/borer/talk_to_borer/Activate() - var/mob/living/simple_animal/borer/B = owner.has_brain_worms() - B.victim = owner - B.victim.borer_comm() - - -/datum/action/innate/borer/talk_to_brain - name = "Converse with Trapped Mind" - desc = "Communicate mentally with the trapped mind of your host." - button_icon_state = "alien_whisper" - -/datum/action/innate/borer/talk_to_brain/Activate() - var/mob/living/simple_animal/borer/B = owner.has_brain_worms() - B.victim = owner - B.victim.trapped_mind_comm() - -/datum/action/innate/borer/take_control - name = "Assume Control" - desc = "Fully connect to the brain of your host." - button_icon_state = "borer_brain" - -/datum/action/innate/borer/take_control/Activate() - var/mob/living/simple_animal/borer/B = owner - B.bond_brain() - -/datum/action/innate/borer/give_back_control - name = "Release Control" - desc = "Release control of your host's body." - button_icon_state = "borer_leave" - -/datum/action/innate/borer/give_back_control/Activate() - var/mob/living/simple_animal/borer/B = owner.has_brain_worms() - B.victim = owner - B.victim.release_control() - -/datum/action/innate/borer/leave_body - name = "Release Host" - desc = "Slither out of your host." - button_icon_state = "borer_leave" - -/datum/action/innate/borer/leave_body/Activate() - var/mob/living/simple_animal/borer/B = owner - B.release_victim() - -/datum/action/innate/borer/make_chems - name = "Secrete Chemicals" - desc = "Push some chemicals into your host's bloodstream." - icon_icon = 'icons/obj/chemical.dmi' - button_icon_state = "minidispenser" - -/datum/action/innate/borer/make_chems/Activate() - var/mob/living/simple_animal/borer/B = owner - B.secrete_chemicals() - -/datum/action/innate/borer/make_larvae - name = "Reproduce" - desc = "Spawn several young." - button_icon_state = "borer_reproduce" - -/datum/action/innate/borer/make_larvae/Activate() - var/mob/living/simple_animal/borer/B = owner.has_brain_worms() - B.victim = owner - B.victim.spawn_larvae() - -/datum/action/innate/borer/freeze_victim - name = "Paralyze Victim" - desc = "Freeze the limbs of a potential host with supernatural fear." - button_icon_state = "freeze" - -/datum/action/innate/borer/freeze_victim/Activate() - var/mob/living/simple_animal/borer/B = owner - B.dominate_victim() - -/datum/action/innate/borer/punish_victim - name = "Punish" - desc = "Punish your victim." - button_icon_state = "blind" - -/datum/action/innate/borer/punish_victim/Activate() - var/mob/living/simple_animal/borer/B = owner - B.punish() - -/datum/action/innate/borer/jumpstart_host - name = "Jumpstart Host" - desc = "Bring your host back to life." - icon_icon = 'icons/obj/weapons.dmi' - button_icon_state = "defibpaddles0" - -/datum/action/innate/borer/jumpstart_host/Activate() - var/mob/living/simple_animal/borer/B = owner - B.jumpstart() diff --git a/code/game/gamemodes/miniantags/borer/borer_chemicals.dm b/code/game/gamemodes/miniantags/borer/borer_chemicals.dm deleted file mode 100644 index c45de465246..00000000000 --- a/code/game/gamemodes/miniantags/borer/borer_chemicals.dm +++ /dev/null @@ -1,59 +0,0 @@ -/datum/borer_chem - var/chemname - var/chem_desc = "This is a chemical" - var/chemuse = 30 - var/quantity = 10 - -/datum/borer_chem/epinephrine - chemname = "epinephrine" - chem_desc = "Stabilizes critical condition and slowly restores oxygen damage. If overdosed, it will deal toxin and oxyloss damage." - -/datum/borer_chem/leporazine - chemname = "leporazine" - chem_desc = "This keeps a patient's body temperature stable. High doses can allow short periods of unprotected EVA." - chemuse = 75 - -/datum/borer_chem/mannitol - chemname = "mannitol" - chem_desc = "Heals brain damage." - -/datum/borer_chem/bicaridine - chemname = "bicaridine" - chem_desc = "Heals brute damage." - -/datum/borer_chem/kelotane - chemname = "kelotane" - chem_desc = "Heals burn damage." - -/datum/borer_chem/charcoal - chemname = "charcoal" - chem_desc = "Slowly heals toxin damage, will also slowly remove any other chemicals." - -/datum/borer_chem/methamphetamine - chemname = "methamphetamine" - chem_desc = "Reduces stun times, increases stamina and run speed while dealing brain damage. If overdosed it will deal toxin and brain damage." - chemuse = 50 - quantity = 9 - -/datum/borer_chem/salbutamol - chemname = "salbutamol" - chem_desc = "Heals suffocation damage." - -/datum/borer_chem/spacedrugs - chemname = "space_drugs" - chem_desc = "Get your host high as a kite." - chemuse = 75 - -/*/datum/borer_chem/creagent - chemname = "colorful_reagent" - chem_desc = "Change the colour of your host." - chemuse = 50*/ - -/datum/borer_chem/ethanol - chemname = "ethanol" - chem_desc = "The most potent alcoholic 'beverage', with the fastest toxicity." - chemuse = 50 - -/datum/borer_chem/rezadone - chemname = "rezadone" - chem_desc = "Heals cellular damage." \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/borer/borer_event.dm b/code/game/gamemodes/miniantags/borer/borer_event.dm deleted file mode 100644 index be4d84136f0..00000000000 --- a/code/game/gamemodes/miniantags/borer/borer_event.dm +++ /dev/null @@ -1,49 +0,0 @@ -/datum/round_event_control/borer - name = "Borer" - typepath = /datum/round_event/borer - weight = 15 - max_occurrences = 0 - min_players = 15 - earliest_start = 12000 - -/datum/round_event/borer - announceWhen = 2400 //Borers get 4 minutes till the crew tries to murder them. - var/successSpawn = 0 - - var/spawncount = 2 - -/datum/round_event/borer/setup() - spawncount = rand(2, 4) - -/datum/round_event/borer/announce() - if(successSpawn) - priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg') //Borers seem like normal xenomorphs. - - -/datum/round_event/borer/start() - - var/list/vents = list() - for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) - if(QDELETED(temp_vent)) - continue - if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 - if(temp_vent_parent.other_atmosmch.len > 20) - vents += temp_vent - - if(!vents.len) - message_admins("An event attempted to spawn a borer but no suitable vents were found. Shutting down.") - return kill() - - var/total_humans = 0 - for(var/mob/living/carbon/human/H in GLOB.mob_list) - if(H.stat != DEAD) - total_humans++ - - GLOB.total_borer_hosts_needed = round(1 + total_humans/6) - - while(spawncount >= 1 && vents.len) - var/obj/vent = pick_n_take(vents) - new /mob/living/simple_animal/borer(vent.loc) - successSpawn = TRUE - spawncount-- diff --git a/code/game/gamemodes/miniantags/borer/borer_html.dm b/code/game/gamemodes/miniantags/borer/borer_html.dm deleted file mode 100644 index e2544a1d0b8..00000000000 --- a/code/game/gamemodes/miniantags/borer/borer_html.dm +++ /dev/null @@ -1,125 +0,0 @@ - -/mob/living/simple_animal/borer/proc/get_html_template(content) - var/html = {" - - - Borer Chemicals - - - - - - - -
-

Borer Chemicals

-
- - [content] - -
"} - return html \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/borer/borer_topic.dm b/code/game/gamemodes/miniantags/borer/borer_topic.dm deleted file mode 100644 index b373a1c0256..00000000000 --- a/code/game/gamemodes/miniantags/borer/borer_topic.dm +++ /dev/null @@ -1,37 +0,0 @@ - -/mob/living/simple_animal/borer/Topic(href, href_list, hsrc) - if(href_list["borer_use_chem"]) - locate(href_list["src"]) - if(!istype(src, /mob/living/simple_animal/borer)) - return - - var/topic_chem = href_list["borer_use_chem"] - var/datum/borer_chem/C - - for(var/datum in typesof(/datum/borer_chem)) - var/datum/borer_chem/test = new datum() - if(test.chemname == topic_chem) - C = test - break - - if(!istype(C, /datum/borer_chem)) - return - - if(!C || !victim || controlling || !src || stat) - return - - if(!istype(C, /datum/borer_chem)) - return - - if(chemicals < C.chemuse) - to_chat(src, "You need [C.chemuse] chemicals stored to use this chemical!") - return - - to_chat(src, "You squirt a measure of [C.chemname] from your reservoirs into [victim]'s bloodstream.") - victim.reagents.add_reagent(C.chemname, C.quantity) - chemicals -= C.chemuse - log_game("[src]/([src.ckey]) has injected [C.chemname] into their host [victim]/([victim.ckey])") - - src << output(chemicals, "ViewBorer\ref[src]Chems.browser:update_chemicals") - - ..() \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/readme.txt b/code/game/gamemodes/miniantags/readme.txt index b619ff4f425..8ade34bf2e0 100644 --- a/code/game/gamemodes/miniantags/readme.txt +++ b/code/game/gamemodes/miniantags/readme.txt @@ -1,7 +1,6 @@ This folder contains all "mini-antagonists" - antagonists that can still spice up the round but aren't enough to be a roundtype in their own right. Currently, that list consists of: -Abductors - -Cortical borers -Swarmers -Prophets of sin -The Jungle Fever virus (infected monkey bites human, human becomes another infected monkey) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 5d7cf915cac..73d92a696cb 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -120,11 +120,6 @@ MASS SPECTROMETER if(H.undergoing_cardiac_arrest() && H.stat != DEAD) to_chat(user, "Subject suffering from heart attack: Apply defibrillator immediately!") - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(C.has_brain_worms()) - to_chat(user, "Foreign organism detected in subject's cranium. Recommended treatment: Dosage of sucrose solution and removal of object via surgery.") - to_chat(user, "Analyzing results for [M]:\n\tOverall status: [mob_status]") // Damage descriptions diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a7fa8a77ef5..61e15ffc39b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -835,12 +835,6 @@ else dat += "Alien" - //Borer - if(jobban_isbanned(M, "borer") || isbanned_dept) - dat += "Borer" - else - dat += "Borer" - dat += "" usr << browse(dat, "window=jobban2;size=800x450") return diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 18fdef19573..fa7b9965e2d 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -281,10 +281,7 @@ Pipelines + Other Objects -> Pipe network return list() /obj/machinery/atmospherics/update_remote_sight(mob/user) - if(isborer(user)) - user.sight |= (SEE_PIXELS) - else - user.sight |= (SEE_TURFS|BLIND) + user.sight |= (SEE_TURFS|BLIND) //Used for certain children of obj/machinery/atmospherics to not show pipe vision when mob is inside it. /obj/machinery/atmospherics/proc/can_see_pipes() diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index eda3abbf39c..5490a82b3f6 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -171,7 +171,4 @@ if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))") return - if(has_brain_worms()) - to_chat(src, "You can't bring yourself to commit suicide!") - return return TRUE diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index d862e9d4764..4b92497a260 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -32,7 +32,7 @@ Gunshots/explosions/opening doors/less rare audio (done) //Something's wrong here var/list/medium = list("fake_alert"=15,"items"=10,"items_other"=10,"dangerflash"=10,"bolts"=5,"flood"=5,"husks"=10,"battle"=15,"self_delusion"=10) //AAAAH - var/list/major = list("fake"=20,"death"=10,"xeno"=10,"singulo"=10,"borer"=10,"delusion"=20,"koolaid"=10) + var/list/major = list("fake"=20,"death"=10,"xeno"=10,"singulo"=10,"delusion"=20,"koolaid"=10) handling_hal = 1 while(hallucination > 20) @@ -222,39 +222,6 @@ Gunshots/explosions/opening doors/less rare audio (done) /obj/effect/hallucination/simple/clown/scary image_state = "scary_clown" -/obj/effect/hallucination/simple/borer - image_icon = 'icons/mob/animal.dmi' - image_state = "brainslug" - -/obj/effect/hallucination/borer - //A borer unconsciouss you and crawls in your ear - var/obj/machinery/atmospherics/components/unary/vent_pump/pump = null - var/obj/effect/hallucination/simple/borer/borer = null - -/obj/effect/hallucination/borer/Initialize(mapload, var/mob/living/carbon/T) - ..() - target = T - for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in orange(7,target)) - if(!U.welded) - pump = U - break - if(pump) - borer = new(pump.loc,target) - for(var/i=0, i<11, i++) - walk_to(borer, get_step(borer, get_cardinal_dir(borer, T))) - if(borer.Adjacent(T)) - to_chat(T, "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.") - T.Stun(80) - sleep(50) - qdel(borer) - sleep(rand(60, 90)) - to_chat(T, "Primary [rand(1000,9999)] states: [pick("Hello","Hi","You're my slave now!","Don't try to get rid of me...")]") - break - sleep(4) - if(!QDELETED(borer)) - qdel(borer) - qdel(src) - /obj/effect/hallucination/simple/bubblegum name = "Bubblegum" image_icon = 'icons/mob/lavaland/96x96megafauna.dmi' @@ -764,8 +731,6 @@ Gunshots/explosions/opening doors/less rare audio (done) switch(hal_type) if("xeno") new /obj/effect/hallucination/xeno_attack(src.loc,src) - if("borer") - new /obj/effect/hallucination/borer(src.loc,src) if("singulo") new /obj/effect/hallucination/singularity_scare(src.loc,src) if("koolaid") diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index d554008c1fa..ed77ea54a72 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -339,7 +339,6 @@ h1.alert, h2.alert {color: #000000;} .alien {color: #543354;} .noticealien {color: #00c000;} .alertalien {color: #00c000; font-weight: bold;} -.borer {color: #543354; font-style: italic;} .changeling {color: #800080; font-style: italic;} .interface {color: #330033;} diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index 2ee3007bb1e..4b2fd44a497 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -46,10 +46,6 @@ /obj/item/organ/brain/Remove(mob/living/carbon/C, special = 0) ..() - if(!special) - if(C.has_brain_worms()) - var/mob/living/simple_animal/borer/B = C.has_brain_worms() - B.leave_victim() //Should remove borer if the brain is removed - RR if(!gc_destroyed || (owner && !owner.gc_destroyed)) transfer_identity(C) C.update_hair() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1733a2706dd..ae866128e4d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -84,10 +84,6 @@ stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Distribution Pressure", internal.distribute_pressure) - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(B && B.controlling) - stat("Chemicals", B.chemicals) - if(mind) if(mind.changeling) stat("Chemical Storage", "[mind.changeling.chem_charges]/[mind.changeling.chem_storage]") diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 9d88e491b2f..d014674144e 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -77,11 +77,6 @@ else if(implement_type in implements_extract) current_type = "extract" var/list/organs = target.getorganszone(target_zone) - var/mob/living/simple_animal/borer/B = target.has_brain_worms() - if(target.has_brain_worms()) - user.visible_message("[user] begins to extract [B] from [target]'s [parse_zone(target_zone)].", - "You begin to extract [B] from [target]'s [parse_zone(target_zone)]...") - return TRUE if(!organs.len) to_chat(user, "There are no removeable organs in [target]'s [parse_zone(target_zone)]!") return -1 @@ -131,13 +126,6 @@ "You insert [tool] into [target]'s [parse_zone(target_zone)].") else if(current_type == "extract") - var/mob/living/simple_animal/borer/B = target.has_brain_worms() - if(B && B.victim == target) - user.visible_message("[user] successfully extracts [B] from [target]'s [parse_zone(target_zone)]!", - "You successfully extract [B] from [target]'s [parse_zone(target_zone)].") - add_logs(user, target, "surgically removed [B] from", addition="INTENT: [uppertext(user.a_intent)]") - B.leave_victim() - return FALSE if(I && I.owner == target) user.visible_message("[user] successfully extracts [I] from [target]'s [parse_zone(target_zone)]!", "You successfully extract [I] from [target]'s [parse_zone(target_zone)].") diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 285f936a9ed3c4e4a147421c601e407a6e6234ec..3ed8c153d8cd046e583ac8837b83b4005a2309c7 100644 GIT binary patch delta 14211 zcma*Nby!s27dJY9ba%>-f=Y)pLxa*PB}juP-OZsp6+x5+1(9xvp+iBsJEgm47`O+& zzxzD*{_{RB&oDFR>^*x{?X}kDv*$7ruP_)dkqynLf?X7YYb8o82(C%5lier8oGtVhj zFspGtQn6{_SeldJbgS6#kbEHFV-u`efay+T3j3a`{jI!Edw=Dh`6hGv;$X&iPc5M3 z3|Ug6YmEUhdVXlr_ZzSyka&H$_x(w6TAE!n{Hr9imQ@`R=$&?=gT49Thw8Wm{C0En zn+=A{Oe^HZb%)9w1wCNIgh*o6p}l)J*s~Ksul88J`e?&w^Q#qYloR?XfnCL){u>%O z=+c2nKB2#fPhVe*y1G9rPVkVq)LyMcku>R*T8jQe!g+H-gaAO3Q2p~vw8S6oxI_uiwiI*+BTx&`4qt0`~{X?bHF zOF)bPS)ovLR|r>Tu(>Ipr9jQ9;!kf(P~>cw!>k9>zd0;=7SlowhnFZJe~E)0htFhu zZ0~b=@ieoc4DejS8`;QTIqM+wIxCb~bD66YNN{KK7I(JPC%Y$0vWm9zwj9Ib0x{Fx zOP5no4BhjE5?k>-Gua939VWETmoKKLLp$0C3|;Zt%y<)yk*n-)iw*g-AILRmoL!2K zZRr(Sa6fH55R$2Z10h!KwChn-GQ@7in7iU{zq)My3{VzNe=YQ<+wJiZQY>@q+WQ*T zBrMI18G#+%`;-}n#au0%YAC7*s%~#ZKgq*|^<)i#G(v+WhJu@@UDYS`YJ-FqM}yVlelpJPohAMB)W$M(8Ea{w;M%L)daD=9-=$}gsD(Qo zH7uVG01VO#(b&4{*?9#f^L2bul;9VSt@blSpB_e4y+e!+9pb$IK$evJDX>5@U0CsU z5~fW9X@b_FgJHtxugS9P_SPFw;`xz#M^6yK33^Ig4jhp&3VyY4dvdabK-%eN_WeFC z?TYSHxW2G?sVdQsG(e4Y7z6Yx{t*tq}Znkk#D z7=+)-AIfl(S(Q!{aPs#9BpA32W=|n(wb@CC@J%&jDuKjU0JWLG~c4R zxaeT;y~p`u^X>Uz;*=)Bitu&vym!0)+W`@scQx!f~Pw%JsAh$h3GVRaSEWw z!`7Rs2-5HadkW$TX9WeU^T0SNRnH2u9ev|X``5bC3ia-Rn=f`L6RSmS!@<#8)?OpX zT2qypuo22x{)X&<^v56geD2T4fal*HEcev;;~6^gC~v0=O(h63xogltO!xaK`m?0S zU;Br=Lrh})a505V1pYkvYyNw{%0k*Vhq_CaaK%ZqO#i%5IBp8|!lBtQL8X^?4fZAdWJD{b)KD>sVJS|sEy>c1< zLG{Hh6dmF*b?E^~D8T9jH zz9UOKe7-_!$|%rI!i!NXtm{o#~^x`nuCUtb|{) z?}q2vv2h&l^k<3@o|W9McYjU$ja^gL&kx;)*Z5@uZ2UTCJ1}2Ev%3!{>DkbwZr7dM z)wwVis$5AAyZl>r8=G56X;UZ>1-_`z)3mnztwqvW492?;`W$4HQ532)1Mt&70k`mL zU_Z?{Er9)UZ~H6Prwd++&6e2jJED5y$A!}~V051U5tu5j zo8_ucpqE@+ShEk6)W+`fz3scK+}!dtt%S?`s^K?56nB|Bpp<1LKp(~Pc+pNz%-X+` zZK_>-)7I|Y`V+gOEW&07KiVV2;CLC(1CZMKkfr|ASpVA;=|R91{^IwU|9oQ!Zc4aB z?0Ee7iO36BVva``xw&}mZNvih5|JVwR8iXq{=5QR{p3A|3`YIY#fL9_ml{~(SCI*t zt(p!zFE(&U9*QjwBxH|kKGS#}v3%ddXQ3V3#fi!3`P(rk9mCjxzOQ&zkb^*J>(`Hu zhvw&FKxaVePe`Fq;`;Q+gaqZ$pZiWLR{51@gFg%01sWsuQ`Px!8Z<*dzgk9Ikr~a<(-A zZG5!yhs>lQ4{1KsUzf_M&XfcG-j!qB_eq*E1e}2c*z*{DQMNX)@oGaR|2gKY zNM|H2?qt7OcUUR@hYhmL2257pZ`M z25k5gtxlF#8D^(mKDBzKT#V7=V5!{3`3maNVj-ux8RPylR!Nk3_l=f+9yl$2NN zgTF$)g670=Z;5-=b6!98rcd6>6wrwm*HkLRLHYN5uDJQow9akc{c_%->ztR@B(`ND zt1Ygt>S*%Cn~o9S02-%XZWAPaa>{W+y&6^*zr=BsCFAEOna;zJ&f1}p)`c{+1Cx5% z$8dJ>2F))?(QOGnXo0D1Tb%b$8#^go0OJ|M0Ujk3id`_8Bc3B40-^ZlMMQ(eW%&*(mzpLf#BY0)-HV%p zyz#s_26?;3c>Vq2otB_y#Jf)Vj|lQz_gFQt5ja2|WV+Z=ktn}ZxOBTyWLz`l7uG6K zI~$1P>h&Y*-z4!90#4n_b(-HDrJ{n66uw*v! zU89)eA1c$5ZzR0&2f~{q(RDjXw_YsAM`G4zB${Rr2RX4Ic!`%w>0^$rcOqVPkS}qs z<3{0n-JHo6oiJxn^C07eSG&zKXQ2gNR6y_Y>9a0$)5sI%=kFBoFTo7B#6a8Dywi7d zQecd3p^*>te~!ECWRpa;Kd$%m_ty6basnN7cNwXvCilB|+O$6^3wB1f|JsCTqZfx! z|6>Sy&sYV%h(4*T-p7U`KbKR*Jiox8-_~f`<5DB@H<@~5U%uAyXrfENwt`bhK@JE# zVKy=3ntjB2Qsrt%PH`mCbEE&Q9G3EMrlktpX{1QVO`VtJ2mXQbG(?*?b(@kv=TNik z*5x(^8Bvb$#(18GmGP_S2yzy%^aS>;2aj$AZmRO0x43Ll{QdehRQO?LG0gvw=2sW~ zaD%E5zQ|jc$hm*u$!FtT97s z!vhrXm>hj`2P#pVT(DvYLj2G7klcAw|BP1R$6m@C!=6KVT(b$sDL#2;Vf=#uSc)_q zK3GhxgpQ;&e7|uczrhPVb8HuX-zP%qYOb~{6LHSiTbnMv3wiSUD>wO_v0Jb!olW5Q z#rxP#7^d%ay(ivDQr7~u158~fKe+9BO(u+THM-UIA<>1Gta@1U)B4Zg9ihyzv_mmf z)TWCS*5jnwD=SOpGUm_8C^(DwAH^GdXqgIR@fCb*^$3gCq)j;l>bp0pq#V0+J|Z_E z;`*TT%|_7bl=qV8&Abb7X@DQCGj5cVct-t?N^}Wg1`&6P;(|rMM{gROv0qdiIJ%`^ zB*$_$@7Cd`GIy$xF8>Q}PCkf60R~ShJ{aNevdAYRF`SR)mR*0QJBg=jt$3k&I67Bn z2lZCRrqAl0@)OzN z+6R*v!3Ahu?{-}u&U*18`9dou~<_Pj%xJNV| z4TrNY>=}D#hS5-{`g`tP2CY(fp9E&mjAKLB-IPkn#UbwZibL}iIFFn!|Gv)Z8eA+s z0Up^h^`1Ddy|IQs!tWDtE+r8zheBEpBQZ2vE*pGG=b$PR!1g6ANRPyV$OCMsOs5ls zv%#i`=82>O+c4dj#h=jqoljbB>*B9LB-_1HC0JF=f<0{y+1@anZ$d}s8|P2=Vv9yXNB^ZhA{ z>+4-=qB!v1OsP7K-45JkK=MP9Y#EAlMqydhMA=ej^2GD(fb;F)bfA{41q*A zuR-G=fnS~-kKM@3&o?s;L@+EDI_^PQmD@h2ia~39Z*#Y?d3+czncwZ|ciM9tq zd4TqD=nm?{U8B%P$w*@Af|tY+gD-LQkC04W4ljLn3Gwuhjt=mxX?%(CEH>$!M&yA2x`UQXhxM%Ra~xLJ}Hr%=TRlL@*g%ft9Es{1p-kFqPYNgOd=j*L9~U_jKXuaPnRfmunu z1pp&ASGuRlnKxCPr|RLW&l?O;xH3H-;Mv>c!!ZJiFMKPrMLK>OkP~B#F~4R+J-fL# z6*V^mMS*ctyu*-C&{tB{eg%Paf73xP>$#u<{S6{6X=}fp46MDjewE3 z@P-c;g58-`u~Nt{bqRB~cTbC2p2s(L1HfG;a#u_L-aiT}1HiC+aDo(Bz&%Idhkp{5 z={n(;dudWtkM1pLIn8k<45YN$Q6|aiXQ~ zt0jz9&>xt_9_a7M$+I5zHB$9=9WLgv2K?$4f*8>(#c!;{PEUbktH{T-WpFkp*TZ%Y z$kijpFSOnU^>A&>&<=haZbL^;!+lL+C&Wy40AxjW_iB?=Ew&uZ++sMvuqzmQk;<`u zyaX@1UwFsv+X`x*qRuY(R;Q7T56;e*B8Lvw12+|A<@RPt`}2dMb2-(xkTV5R+?_6% z3T979cYEl{&;GjP52}Ta{(9lGf_CBJhYndVSt{xX5*GZREg80)GmQJI{VDxJ&WFzp zvw<1{v2@0&oS5U^Tmyz=m85L+DKki~t258Tu36ZR0VVkD(8F;Wkq=<@DF@%qo&BVT z9FEn&UQXtUzRB@X1Hbe6Mn0yHYu)ZW&gkH=tzUyejTC2McpZjn!5kw+5L1h%ZGvD^ zY@z-NkI3`2jQspB4l5;JuTZFnro< zgq6T6M@hPDmKlnY)6~M9gb>aSFHQ_uwU^h5GPwe1IWQp&6@}X^cJ^ascdN}uAV(84 zx~267<|&?Ty2Q#6M{p#K!DDT7)Y<>Lod!PSjs|8D8VEGyBCjn$85x`&1gK1t_RtG& zgi4a1C3Zx8bDgiB8ZFsB*j`Nvst!VvKRqRx+~1~GFv)6kZ`m>uIi~ufw;_*v1_$Y! zN72DwVqCMfXoNkwq(sItnoJm20v5OzzyH%67lJb(n1|9 z*8!qr2r$q9t2qQ9y-p60TAgBqrkJnC1eSGu3QB2c`;UNUUoB0yO%xEujn2(J3elKr zC?$A7M#d-9FOe;gZ%}ao6~D`BZ8RNAJsn;@&$9GIB|}9tgs@Qw&o=S@4y>+98E-ZO zN>IIF5)r%)B@Bo)E5JvkmYRAR*7fiQYn@@{Qa02a#cl(aO~-W~MCW@pSRM|hhj_nz zXd^xuCnK&C(Ls2nsvlsD)qucqUYk>dv~rAmTRF)xMuWVIxORG#MX7jIM!XatxH3E;Yv!0)IEniBym7a)|a&SpMnLe)8WJ~ zS<9OQrOBD<4}jLM2s6btEAWhPOZVD)3x06=@yD6{7piqYzqsZSWXTT3yi2L~w z{c&nJJWbGy8+9){{C@aWjBU)*GY>}5(uJ1Yz~0$Ea>??dvWuuJJqqu}TEEbWSW0c$ zL2}Hy6PkPc(nI1nN=jT0+)m}KZ@*KmYhv$&h;M+;gn~C#s79Ak?K&80qA}V@`kv>y z5k|zQRUur41|?8-y~hSXq?e7^VsAV@FX(ly1;`mHmBofS$F3VCo`6fsl62~SlCYg) zv$U~fD@KvOHX)W$ZdLm{;I7OyAH#$b3_kd%?D2Fv({LW@Lo|;_`)*z#Fr*wRx0OFc zX(`=}Geznvr!k$w{w)Wt_#yD=sAkB2pJj>!j)=vW?zFgjC=j^F{96+ojigx%{O>Lp zK>WRE%>Nr;F%K0cjyw|@W3C2I(x#XF^1iG8Z=Qlps3bwzna~tkqp!cc*&0KT%{$vZ z=9H&d3|jvr!7;a!bCF55Hx28`ob{lrW;*BsjLNgpYzZFCwthZ%+xD&7C}Hp1=Tj*+ zxjhGG%2}TO!GE$TY=+KZcN!mDMF|a$fd@>}#!G$lE|+!S*@DyvVr7A~gjWIrIpm%o zBlWkUpQ_W3>8Zsy@12+UPcu@+oHMj(GmQNzFT3Bq{Hcz&XbC@| zg+AlvCpq@DLMbT5{)x~>Ik%TQOL}^)N0&UFVs`39**{dSH*X(q+SHm)lzZmFHUC*#}H13l+?l9JAURl94S z@%U%b(=I+-NBGP@Ol^a|E)%U9DhOt+Az;Ocr|X=FYk{cT6j+EWF`Zt#%}(Fc=hosn z+g#H;M2esOpP}UHAAWNZTvthNajCbA!@4B#YFozdCjn6kFgAll^ezGK+D10oVqN4yPlgeRgfww( zmoc>zdsu=axWD|!iu3TBJ~p?P9Q5ICPYuMK^mDYuI-%#5@N&)&*4C29G{NCgj459S zzw87qGyyYpwKlXO9cber&kxzm`7jfha9F5@=+et4(ZeXWD_uC$gd?8Q{0m#eG&|uAhPx|6iW>B$7{ZaucriA2}>u zJ3D5prr=L|B#ED~@7em?KIrRAt~dY*(_@OkK-)>1+@>=G-qgaQe<1`aX0T&HL#7<^Nr&Y;1a|BNhj1RCew9Fv`I^uT**(=d z8}z9(RO)+yfe76m-M0ZhI6#=U-q`xvGibb73)}1(DF@0zYL!)pXiuaj+C-B`5W-Q` z8VmCOLD{}&0?QiRqClal~cz0E>NspZ~EL;J7s;qWt|PX@!hcS%dm)^DPk zQtmbN;^&lu&$V(Lv8E*f`@SvoFJKqVi)r7=#>o)Eqa}!8H1abY^=5&zd`Bfz!ZdEP zjmRheAG45`F7~mY?LqOl#;K+rHD7$Eo-B?CZn1sWmp!j{S=d#61Nlu2Y|}vQ*e-|` zJceG}+YaY3I^JeolW%y52E3B$<#)vm2UF+t_OfyOQayc*OM#AcP#s4wh{4RJ1R24jOv?{GF#L zId+5d3N=^n0g-VLa5{cQ^_~oY2I+`@S^Q}tK8HELIOcI5g};eS7QP9;^5Tvdl0^+g zhrNH(|2j@0uJE>{$*A1>HM;RgbC0P~+lZhj_c&GWeIU+B{2I6`bwtCjuvK`n43ZDf ze;|VhU-cC3!nlga`KC|LGE0nKf6>8)m;Tturu)uoVj}7f#%a#>vcMO<%dWb!9`}?= z-#&=SfaxcIcz6Q)^u=K{Q6PADRTJhnt-{f%hqs__h1QD;mJb}tvN^yBg9h?@=J64z zAtX?7s|?8D`9T+G8Hn+YW4)ZfDeflv?Huk~I*qP!R!T@>@=(Gx+kR|%(|fBTIB%yb zKk~-i-H$XlAP&Q`Otn?D2xCPa_6b2v6j@(eOg*L$`bs_=^f|~nkQVd{-K^V+%%OGp z%m{Y%+Vx-ziQI(MzPGhlFXt1?NVM6)M%eu+0z$xpehN{D#kZDUJ;{0fB+8sK2*!tA z+*G#14hw@yq71dq7H-?Y4KDdk)(nn(eGjspGc*dR(dIHFFB+q0((_&$eQr!N;e64kEW291q%8t0Y_zYvu+vz2NDSn z_Q@U#gztuLdvZ{-tm^BS#$%IApe99~F2r>)Of#9!TH?pEyDRn`q)M_`n0)j#LlkWv ztk}FGufY7e)MbpvC`+QiwUX56Sf=P1HU49KcGBgwuCPcl`>MzkXP_?7Rqat$7*V!< zogcu6iz~mFN8mFMA#|@KWuNRv4}hX4Mbj>$RS*jvPGyDe=o2!QWwx9w2K0^DM!dMa zz39V(zn=d2Q^^3^o{h~8JCwhN1e85-nblpKsdYnY6&eqsA3Qh&y)Uz6Om)xKuOtSpmH1Y4$ymOH^2Vq zc0d`jj(-Zb+E~?6moR?UGLeXAk=T(ps^jVFz$NW@k0D1QyYv{7C^D9u%-+AmxS9}U zlgymQ*|DQs)tDn;ZWUPzr?U6%f25l4)-9n(t7v?-I5baE@rKmipL^!`lTM1tmIC>_ zcFb-KqxX%~-bb(fXTo?V%7CW`nn{}OR>f^drlI>N&@B)y6&vu>WPf8=C_TEXG=Poc zWL{og#?Yv!=f+IAXi_-XU9Ni-On!BgJ;^ zv%}|AHVdQlq#>f<-T61%XEX4;ZJSO)mt~U3V+MN|KIEGu{?Qy-;b4IBxHhC>J(9wT zqC&VzgoS-}e%j;EPJ-xSKPpnzC|SF6BK1{sZHs&LqZO>5PB;qQScAtzzpelG@tcyo zInH!7AU=|>VLA(+!v3BNO-?%}RUTv1db?lT(L-9)u{&yeW9Czj*n7B>TzL4UioW^S z-VL>EXzPz=6*AkpBqWdh+&UZ#bHxa6x?Xo(fqb#o^`hdH1GdB2Z9~&?x z(r^<(hY2>*EE89g1;^z~?opkG$c@VK5~Sij$8Fv;Y#c}k*adN*etp#>B>~Geq<-*K^a%=Tw%XmLpWz?VfSRvzT+%nBe^#>Zmi;T- zDeyEs;jdJ4@2u#o&<4g5fYrPkila_TN*JZUrr@En?k2hyz}i;INSG4rq0QOEvlhl8y$cqKa5h;3`_DD>wFQZLIZ!7TSeNkN{46gTPqbFupx zjj&yp*eWWokt`#GGc#p0=-zHo&||`bb=&(tyy3zuZ?*pT`V0e21=Rj~JmAiXfqSGj z{NW1a=eA9?w#xI?$R6x^k&Q6g+kR3-(p_Dg@%|61 zw5u-VkDj!3zz>J6fj)V=4yrr3QT(WTc|l6$*TAt45uAlwDSPtD7-=Br%L?vfd7g+F z#Qo?aTrZle23Ff7>8%ikJA?B-G@Q+=b-O)Yt~=VF7J(dYM({2Hy20a5|%RHTFkc z_T9>tuP7gwC?~h+38}<~?-q&|DOt92_pE2uyi@f&nwpC-g7%V35cNKauhU!BAoa3p z)0;w-!gk8aAXh)l@4hyc$uPhqMt3|h{79IEyt^m_ISYaWcULMNq<&AWO5{ab_yoR$F70nHgs`(c&WN9iBBxgcK(3g4=(1-zI(HWd; zo5#Efw4^xBi(fHY|I~f8Fm|Sc90c&L)I;snMZOaEvL>7t4(gX_0vezh7v^R|^5T{! z!<@uBPbl4a7&74=)D7E6CgLbA2BK!0WYR&4D03^;LIsv0ekoL71IlIaRpj15)uR{6 zZRmmUOl41UtWM zL;H+&=j_*8&@=#O@=xL2#i@xjvtlHqjuU&^mxp4MFi#`}QYb1i74S!t z?KTar$V|%=5s`$WR9xNIQg!Cq2-|uW_}wKI#NA+F@`DW;-s8l86^BS$_ZFx=tqRQJ z^w+lSQp3fg%!njl zP&VLv#+MwakQVDAT^*mXc`JCW-4bzf^!*Pzz`fu<5H^74Re?#Dq$w_JdtV;T|vpb0S?6Qj) zCG-9DSFcSyfZ+`YV)LP_h`W{flW?cdhUw=1Kj6F9;C>#! zyaLTTNj^jcJ}-Z{I%|x7)>s}4^!1JK8)Ny>bT+{G0*I=Q+|8~TY)*_)5{Bv2?!E-Z ze+HTa$GnpN8^(&6AHKZd%>*!OolVNPgQz@WCAfcO==dc`iDc`8^p>(_)}7)HSny2BTt=TA?#KVLRD0gv- zWv*v9+_me#ftb>!XR5xo;QV$Sm(sRvTox!XeAVw~Z2|y+?=2CbTw})$iXo*7zfuQH z)}eupJH>n^i`2)i{4Y!b27)rlDX@th4n0fCw@qC4v`#yUZe>n|W6!v%^iqyhm2+;w zJj$&efToPp@99H3a-m|AZ|M3Mwq^+zdzb_50ODT~NIci!U=yR=$BCMIIy+f|VMZVi zUrAvoZZryO_xnS1AC)*X%-fGW@w)WbLsD%hl`w7R03#aj(#0OCmDCMu$KihDRQLNg zce&EmU>T0JNu(AyBt5u<6Uk&x>0}-?dq@$!8O83G)w)S#+LjE%puSyt zA{oZ)b42Wy1)?q$!*%#Ae6@Qg2AFU+=z*GTK_%;#*LPs2L)4+qZ+T5_&76j@VThbD zUvt2g^zEWG>^`YaK~!?#Pn;UfFE4z z1lZLh&`rYAHzB(*DmAUhN6IRQJS9ZmBoH}Q25Z!uATGFZZMoT%Ue>yFzjwU}f;zOF zou!>C$4>y^-*v#X!-SXe_b!6^^T}~Ux!H~Iw=HsTYj;{IxXVniFR_zec{Tam49E+A zzG2AgMM?W{V;u6$5sz2@&`|jw3P(#FieLsd`w5IhE?5KvMzx()iQX;R=v-Ja{8%By z_vL;!gNKna@_bYmXUcZ?wfR}3&lr68H!BoW8gSTGWDpnZK(6tzFxC8^co552!pypX zLcYS1BrL$NZxchiIbCl8O!}6$`z{67{Pt80*PpaQz1b*q23Qm7NWYM_=6&xDh+Vg|_>!F!&0Iz&gz*`hL z8Be#L7w$Id^a#YNNm-p4u^{eq_pgX?B;Qf*_?{WxQ4_|fp`vvuum-DM)jAL`N|hLA zC1ZI3?%8<}HkvIzFLzODOUrMo4RhZ`#~KMPhxYwtB1uWaj+x-Z)khRxJ|3J9L)cz6 zPLda0J*fyVk1ANEQe$gRz3BpA5Lb9F3_{{rF?^VmME0ocoK_dqb@?uM zb2jn)#&4%*Pz~WNOwZ4N$`7fE_=+HsX2NL~2^z!@c;;Xv@%}@OIBPIScn}b_xn`2E zZY<-3;g*(V1kpOxZR1(IEI;;lh<&#q4~YfRuw{n~+6XnwV)6d^CDG@ZQ?ON?hL{O# zzd&IRC`=|`+A!X=*;AJNX+t%nk+txV0Id&;t*q38tfqD`k-Jki@savR_D@} zMXq`&9b}NF^>g9hWel){?4KY`{#B%T2BrC+_`jkit1J_29<0oiTLM7$sPsoT{70Zr zQj)Veoa+k(<4M-BMFx{zRNbR^L95~$qo4)Be+rs^$Yy0i6MV`-GCYysfzS0{orKc3 zOYhcfA4KVOL{@7`TXS)+YjqZStprrZr!{FxKS*D$yK6*##SP*__Q1;cSRpcp+%6TR zytgMrb(jDZ4xBROznWf#MCRF#4cV?G*3n)g^W2M0)49A2nJ)fAc2k|6_Y@qo9~Zag zo=!@7^zAet*MQI*nnQljuo3c^t7wNtld}aG5g~W0am2&-4-!r#Sjv2_Z>DV3k*K5t zdE?ZBTbVDi7kABr+B>)ViLvZ}A^~JXbFSouwb2Exj#94ULRO1?v&~Q%=n=` zt!ngCHD-+Sx*z>FZhZnsKq}fjxAc1J3nXEH#ePMpNpe!#h_BC(_=n8+(@aLlVdH;& u9DPG0DE(6)eYX2LC@>Xt-to delta 15066 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 z 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 aIUT?(zTXnL0}uiL@ap*+nGz{|pZ^7LxrcrL diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 6f38560b92d..10dd0dd74d7 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -133,7 +133,6 @@ h1.alert, h2.alert {color: #000000;} .alien {color: #543354;} .noticealien {color: #00c000;} .alertalien {color: #00c000; font-weight: bold;} -.borer {color: #543354; font-style: italic;} .changeling {color: #800080; font-style: italic;} .interface {color: #330033;} diff --git a/tgstation.dme b/tgstation.dme index df37f4e76a3..701669f69b1 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -486,11 +486,6 @@ #include "code\game\gamemodes\miniantags\abduction\machinery\dispenser.dm" #include "code\game\gamemodes\miniantags\abduction\machinery\experiment.dm" #include "code\game\gamemodes\miniantags\abduction\machinery\pad.dm" -#include "code\game\gamemodes\miniantags\borer\borer.dm" -#include "code\game\gamemodes\miniantags\borer\borer_chemicals.dm" -#include "code\game\gamemodes\miniantags\borer\borer_event.dm" -#include "code\game\gamemodes\miniantags\borer\borer_html.dm" -#include "code\game\gamemodes\miniantags\borer\borer_topic.dm" #include "code\game\gamemodes\miniantags\bot_swarm\swarmer.dm" #include "code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm" #include "code\game\gamemodes\miniantags\monkey\monkey.dm"