Fixes borers and antag spawning. (#7917)

Fixed bughunt for real.
    Bughunt now tries to spawn four mercenaries and two borers.
    Added some more intro text to Renegade.
This commit is contained in:
Matt Atlas
2020-01-05 11:39:42 +02:00
committed by Erki
parent 00df6c634a
commit e25dbf0f27
13 changed files with 133 additions and 85 deletions
+34 -21
View File
@@ -10,12 +10,16 @@ var/datum/antagonist/xenos/borer/borers
antag_indicator = "brainworm"
antaghud_indicator = "hudborer"
flags = ANTAG_OVERRIDE_MOB | ANTAG_OVERRIDE_JOB
landmark_id = "borerstart"
faction_role_text = "Borer Thrall"
faction_descriptor = "Unity"
faction_welcome = "You are now a thrall to a cortical borer. Please listen to what they have to say; they're in your head."
initial_spawn_req = 3
initial_spawn_target = 5
initial_spawn_req = 2
initial_spawn_target = 3
/datum/antagonist/xenos/borer/New()
..(TRUE)
@@ -28,24 +32,33 @@ var/datum/antagonist/xenos/borer/borers
player.objectives += new /datum/objective/borer_reproduce()
player.objectives += new /datum/objective/escape()
/datum/antagonist/xenos/borer/place_mob(var/mob/living/mob)
var/mob/living/simple_animal/borer/borer = mob
if(istype(borer))
var/mob/living/carbon/human/host
/datum/antagonist/xenos/borer/place_mob(var/mob/living/M)
if(istype(M, /mob/living/simple_animal/borer))
var/mob/living/simple_animal/borer/borer = M
var/list/hosts = list()
for(var/mob/living/carbon/human/H in mob_list)
if(H.stat != DEAD && !H.has_brain_worms())
var/obj/item/organ/external/head = H.get_organ(BP_HEAD)
if(head && !(head.status & ORGAN_ROBOT))
host = H
break
if(istype(host))
var/obj/item/organ/external/head = host.get_organ(BP_HEAD)
borer.host = host
if(!H.mind)
continue
if(H.mind?.special_role)
continue
if(H.stat == DEAD)
continue
if(H.has_brain_worms())
continue
hosts += H
if(length(hosts))
var/mob/living/carbon/human/chosen_host = pick(hosts)
borer.host = chosen_host
borer.host.status_flags |= PASSEMOTES
borer.forceMove(chosen_host)
if(borer.host.mind)
borers.add_antagonist_mind(borer.host.mind, 1, borers.faction_role_text, borers.faction_welcome)
var/obj/item/organ/external/head = borer.host.get_organ(BP_HEAD)
head.implants += borer
borer.forceMove(head)
if(!borer.host_brain)
borer.host_brain = new(borer)
borer.host_brain.name = host.name
borer.host_brain.real_name = host.real_name
return
..() // Place them at a vent if they can't get a host.
else
..()
+1 -1
View File
@@ -33,7 +33,7 @@
if(faction_verb && player.current)
player.current.verbs |= faction_verb
player.current?.client.verbs += /client/proc/aooc
player.current?.verbs += /client/proc/aooc
to_chat(player.current, "<span class='notice'>Once you decide on a goal to pursue, you can optionally display it to everyone at the end of the shift with the <b>Set Ambition</b> verb, located in the IC tab. You can change this at any time, and it otherwise has no bearing on your round.</span>")
player.current.verbs += /mob/living/proc/write_ambition
+1 -1
View File
@@ -3,7 +3,7 @@ var/datum/antagonist/renegade/renegades
/datum/antagonist/renegade
role_text = "Renegade"
role_text_plural = "Renegades"
welcome_text = "You're extremely paranoid today. Something's here to kill you, but you don't know what... Remember that you're not a full antagonist. You can prepare to murder someone and kill, but you shouldn't actively seek conflict."
welcome_text = "You're extremely paranoid today. For your entire life, you've theorized about a shadow corporation out for your blood and yours only. Something's here to kill you, but you don't know what... Remember that you're not a full antagonist. You can prepare to murder someone and kill, but you shouldn't actively seek conflict."
id = MODE_RENEGADE
flags = ANTAG_SUSPICIOUS | ANTAG_IMPLANT_IMMUNE | ANTAG_VOTABLE
hard_cap = 5
+2 -2
View File
@@ -4,9 +4,9 @@
extended_round_description = "Mercenaries and borers spawn in this game mode."
config_tag = "bughunt"
required_players = 20
required_enemies = 5
required_enemies = 6
end_on_antag_death = FALSE
antag_tags = list(MODE_BORER, MODE_MERCENARY)
require_all_templates = TRUE
votable = FALSE
votable = TRUE
ert_disabled = TRUE
@@ -39,7 +39,7 @@
var/obj/item/organ/external/head = get_organ(BP_HEAD)
var/mob/living/simple_animal/borer/B
if (head)
if(head)
for(var/I in head.implants)
if(istype(I,/mob/living/simple_animal/borer))
B = I
@@ -47,7 +47,7 @@
if(!B.ckey && ckey && B.controlling)
B.ckey = ckey
B.controlling = 0
if(B.host_brain.ckey)
if(B.host_brain?.ckey)
ckey = B.host_brain.ckey
B.host_brain.ckey = null
B.host_brain.name = "host brain"
@@ -1714,7 +1714,7 @@
/mob/living/carbon/human/proc/get_traumas()
. = list()
var/obj/item/organ/internal/brain/B = internal_organs_by_name[BP_BRAIN]
if(istype(B, /obj/item/organ/borer))
if(istype(B, /obj/item/organ/internal/borer))
return
if(B && should_have_organ(BP_BRAIN) && !isipc(src))
. = B.traumas
@@ -31,7 +31,6 @@
var/truename // Name used for brainworm-speak.
var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
var/controlling // Used in human death check.
var/docile = 0 // Sugar can stop borers from acting.
var/has_reproduced
var/roundstart
@@ -59,32 +58,10 @@
..()
if(host)
if(!stat && !host.stat)
if(host.reagents.has_reagent("sugar"))
if(!docile)
if(controlling)
to_chat(host, span("notice", "You feel the soporific flow of sugar in your host's blood, lulling you into docility."))
else
to_chat(src, span("notice", "You feel the soporific flow of sugar in your host's blood, lulling you into docility."))
docile = TRUE
else
if(docile)
if(controlling)
to_chat(host, span("notice", "You shake off your lethargy as the sugar leaves your host's blood."))
else
to_chat(src, span("notice", "You shake off your lethargy as the sugar leaves your host's blood."))
docile = FALSE
if(chemicals < 250)
chemicals++
if(controlling)
if(docile)
to_chat(host, span("notice", "You are feeling far too docile to continue controlling your host..."))
host.release_control()
return
if(prob(host.getBrainLoss()/20))
host.say("*[pick(list("blink","blink_r","choke","drool","twitch","twitch_s","gasp"))]")
if(controlling && prob(host.getBrainLoss()/20))
host.say("*[pick(list("blink","blink_r","choke","drool","twitch","twitch_s","gasp"))]")
/mob/living/simple_animal/borer/Stat()
..()
@@ -109,7 +86,10 @@
controlling = FALSE
host.remove_language("Cortical Link")
host.remove_language(LANGUAGE_BORER)
host.remove_language(LANGUAGE_BORER_HIVEMIND)
to_chat(host, "<span class='notice'>You feel your nerves again as your control over your own body is restored.</span>")
host.verbs -= /mob/living/carbon/proc/release_control
host.verbs -= /mob/living/carbon/proc/punish_host
host.verbs -= /mob/living/carbon/proc/spawn_larvae
@@ -9,9 +9,6 @@
if(stat)
to_chat(src, span("notice", "You cannot leave your host in your current state."))
return
if(docile)
to_chat(src, span("notice", "You are feeling far too docile to do that."))
return
to_chat(src, span("notice", "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal."))
@@ -140,9 +137,6 @@
if(host.stat != DEAD)
to_chat(src, span("warning", "Your host is still alive."))
return
if(docile)
to_chat(src, span("warning", "You are feeling far too docile to do that."))
return
to_chat(src, span("danger", "It only takes a few moments to render the dead brain down into a nutrient-rich slurry..."))
replace_brain()
@@ -157,7 +151,8 @@
to_chat(src, span("warning", "You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H]."))
H.add_language("Cortical Link")
H.add_language(LANGUAGE_BORER)
H.add_language(LANGUAGE_BORER_HIVEMIND)
if(host.stat == DEAD)
H.verbs |= /mob/living/carbon/human/proc/jumpstart
@@ -173,11 +168,11 @@
src.mind.special_role = "Borer Husk"
src.mind.transfer_to(host)
var/obj/item/organ/borer/B = new(H)
H.internal_organs_by_name[BP_BRAIN] = B
H.internal_organs |= B
var/obj/item/organ/internal/borer/B = new(H)
var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD)
H.internal_organs_by_name[BP_BRAIN] = B
affecting.internal_organs |= B
affecting.implants -= src
var/s2h_id = src.computer_id
@@ -206,16 +201,13 @@
if(stat)
to_chat(src, span("notice", "You cannot secrete chemicals in your current state."))
return
if(docile)
to_chat(src, span("notice", "You are feeling far too docile to do that."))
return
if(chemicals < 20)
to_chat(src, span("warning", "You don't have enough chemicals!"))
return
var/chem = input("Select a chemical to secrete.", "Chemicals") as null|anything in list("Inaprovaline", "Bicaridine", "Hyperzine", "Synaptizine", "Peridaxon", "Tramadol", "Oxycodone", "Fluvoxamine")
if(!chem || docile || chemicals < 20 || !host || controlling || !src || stat) //Sanity check.
if(!chem || chemicals < 20 || !host || controlling || !src || stat) //Sanity check.
return
to_chat(src, span("notice", "You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream."))
@@ -247,7 +239,7 @@
to_chat(src, span("notice", "You cannot use that ability again so soon."))
return
var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices
var/mob/living/carbon/M = input(src, "Who do you wish to dominate?") in null|choices
if(!M || !src)
return
@@ -275,9 +267,6 @@
if(src.stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
return
if(docile)
to_chat(src, span("notice", "You are feeling far too docile to do that."))
return
to_chat(src, span("warning", "You begin delicately adjusting your connection to the host brain..."))
to_chat(host, span("warning", "You feel a tingling sensation at the back of your head."))
@@ -290,7 +279,8 @@
to_chat(src, span("danger", "You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system."))
to_chat(host, span("danger", "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours."))
host.add_language("Cortical Link")
host.add_language(LANGUAGE_BORER)
host.add_language(LANGUAGE_BORER_HIVEMIND)
// host -> brain
var/h2b_id = host.computer_id
@@ -425,9 +415,6 @@
if(stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
return
if(docile)
to_chat(src, span("notice", "You are feeling far too docile to do that."))
return
if(chemicals < 100)
to_chat(src, span("warning", "You don't have enough chemicals!"))
return
@@ -455,9 +442,6 @@
if(stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
return
if(docile)
to_chat(src, span("notice", "You are feeling far too docile to do that."))
return
if(chemicals < 75)
to_chat(src, span("warning", "You don't have enough chemicals!"))
return
+1 -1
View File
@@ -166,7 +166,7 @@
/obj/item/organ/internal/brain/proc/brain_damage_callback(var/damage) //Confuse them as a somewhat uncommon aftershock. Side note: Only here so a spawn isn't used. Also, for the sake of a unique timer.
to_chat(owner, "<span class = 'notice' font size='10'><B>I can't remember which way is forward...</B></span>")
owner.confused += damage
owner?.confused += damage
/obj/item/organ/internal/brain/proc/handle_severe_brain_damage()
set waitfor = FALSE
+2 -2
View File
@@ -1,5 +1,5 @@
// This borer is the worm that replaced the host's brain, not the brainworm latched onto a brain
/obj/item/organ/borer
/obj/item/organ/internal/borer
name = "cortical borer"
icon = 'icons/obj/objects.dmi'
icon_state = "borer"
@@ -8,7 +8,7 @@
parent_organ = BP_HEAD
vital = TRUE
/obj/item/organ/borer/removed(var/mob/living/user)
/obj/item/organ/internal/borer/removed(var/mob/living/user)
..()
var/mob/living/simple_animal/borer/B = owner.has_brain_worms()
@@ -0,0 +1,44 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
# balance
# admin
# backend
# security
# refactor
#################################
# Your name.
author: MattAtlas, Geeves
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- bugfix: "Fixed bughunt for real."
- tweak: "Bughunt now tries to spawn four mercenaries and two borers."
- tweak: "Added some more intro text to Renegade."
+6
View File
@@ -6050,6 +6050,9 @@
pixel_y = 25;
req_access = null
},
/obj/effect/landmark{
name = "borerstart"
},
/turf/simulated/floor/tiled/white,
/area/rnd/xenobiology)
"amf" = (
@@ -31842,6 +31845,9 @@
icon_state = "corner_white";
dir = 10
},
/obj/effect/landmark{
name = "borerstart"
},
/turf/simulated/floor/tiled/white,
/area/medical/quarantine)
"ksI" = (
+23 -2
View File
@@ -40901,6 +40901,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/effect/landmark{
name = "borerstart"
},
/turf/simulated/floor/tiled/white,
/area/medical/main_storage)
"bsl" = (
@@ -45331,6 +45334,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/landmark{
name = "borerstart"
},
/turf/simulated/floor/tiled,
/area/bridge)
"bzy" = (
@@ -59589,6 +59595,9 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/landmark{
name = "borerstart"
},
/turf/simulated/floor/tiled/dark,
/area/maintenance/disposal)
"cdf" = (
@@ -64099,6 +64108,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard)
"fYe" = (
/obj/effect/landmark{
name = "borerstart"
},
/turf/simulated/floor/plating,
/area/storage/tech)
"fZq" = (
/obj/structure/closet,
/obj/random/junk,
@@ -66564,6 +66579,12 @@
},
/turf/simulated/floor/plating,
/area/maintenance/substation/supply)
"mIp" = (
/obj/effect/landmark{
name = "borerstart"
},
/turf/simulated/floor/carpet,
/area/crew_quarters/heads/cryo)
"mIZ" = (
/obj/machinery/atmospherics/pipe/manifold/hidden,
/turf/simulated/floor/plating,
@@ -89569,7 +89590,7 @@ aCf
bav
bbq
bcR
bex
fYe
bex
bex
bip
@@ -117839,7 +117860,7 @@ baj
bbm
bcI
ben
bcI
mIp
bgY
aRi
bih