diff --git a/code/game/gamemodes/abduction/abduction.dm b/code/game/gamemodes/abduction/abduction.dm
index 5a3d85f957a..790ee290f47 100644
--- a/code/game/gamemodes/abduction/abduction.dm
+++ b/code/game/gamemodes/abduction/abduction.dm
@@ -1,14 +1,16 @@
/datum/game_mode
+ var/abductor_teams = 0
var/list/datum/mind/abductors = list()
+ var/list/datum/mind/abductees = list()
/datum/game_mode/abduction
- name = "Abduction"
+ name = "abduction"
config_tag = "abduction"
antag_flag = BE_ABDUCTOR
recommended_enemies = 2
required_players = 15
var/max_teams = 4
- var/teams = 1
+ abductor_teams = 1
var/list/datum/mind/scientists = list()
var/list/datum/mind/agents = list()
var/list/datum/objective/team_objectives = list()
@@ -17,19 +19,22 @@
/datum/game_mode/abduction/announce()
world << "The current game mode is - Abduction!"
+ world << "There are alien abductors sent to [world.name] to perform nefarious experiments!"
+ world << "Abductors - kidnap the crew and replace their organs with experimental ones."
+ world << "Crew - don't get abducted and stop the abductors."
/datum/game_mode/abduction/pre_setup()
- teams = max(1, min(max_teams,round(num_players()/config.abductor_scaling_coeff)))
+ abductor_teams = max(1, min(max_teams,round(num_players()/config.abductor_scaling_coeff)))
var/possible_teams = max(1,round(antag_candidates.len / 2))
- teams = min(teams,possible_teams)
+ abductor_teams = min(abductor_teams,possible_teams)
- abductors.len = 2*teams
- scientists.len = teams
- agents.len = teams
- team_objectives.len = teams
- team_names.len = teams
+ abductors.len = 2*abductor_teams
+ scientists.len = abductor_teams
+ agents.len = abductor_teams
+ team_objectives.len = abductor_teams
+ team_names.len = abductor_teams
- for(var/i=1,i<=teams,i++)
+ for(var/i=1,i<=abductor_teams,i++)
if(!make_abductor_team(i))
return 0
@@ -64,12 +69,12 @@
agent = preset_agent
- scientist.assigned_role = "Abductor"
- scientist.special_role = "Abductor"
+ scientist.assigned_role = "abductor scientist"
+ scientist.special_role = "abductor scientist"
log_game("[scientist.key] (ckey) has been selected as an abductor team [team_number] scientist.")
- agent.assigned_role = "Abductor"
- agent.special_role = "Abductor"
+ agent.assigned_role = "abductor agent"
+ agent.special_role = "abductor agent"
log_game("[agent.key] (ckey) has been selected as an abductor team [team_number] agent.")
abductors |= agent
@@ -96,7 +101,7 @@
var/team_name
var/mob/living/carbon/human/H
var/datum/species/abductor/S
- for(var/team_number=1,team_number<=teams,team_number++)
+ for(var/team_number=1,team_number<=abductor_teams,team_number++)
team_name = team_names[team_number]
agent = agents[team_number]
H = agent.current
@@ -134,6 +139,7 @@
agent_landmarks.len = max_teams
scientist_landmarks.len = max_teams
for(var/obj/effect/landmark/abductor/A in landmarks_list)
+ world << "Found this [A]"
if(istype(A,/obj/effect/landmark/abductor/agent))
agent_landmarks[text2num(A.team)] = A
else if(istype(A,/obj/effect/landmark/abductor/scientist))
@@ -180,8 +186,8 @@
abductor.objectives += team_objectives[team_number]
var/team_name = team_names[team_number]
- abductor.current << "You are an Abductor Agent of [team_name]!"
- abductor.current << "With the help of your teammate kidnap and experiment on station members!"
+ abductor.current << "You are an agent of [team_name]!"
+ abductor.current << "With the help of your teammate, kidnap and experiment on station crew members!"
abductor.current << "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve."
var/obj_count = 1
@@ -194,8 +200,8 @@
abductor.objectives += team_objectives[team_number]
var/team_name = team_names[team_number]
- abductor.current << "You are an Abductor Scientist of [team_name]!"
- abductor.current << "With the help of your teammate kidnap and experiment on station members!"
+ abductor.current << "You are a scientist of [team_name]!"
+ abductor.current << "With the help of your teammate, kidnap and experiment on station crew members!"
abductor.current << "Use your tool and ship consoles to support the agent and retrieve human specimens."
var/obj_count = 1
@@ -260,7 +266,7 @@
/datum/game_mode/abduction/check_finished()
if(!finished)
- for(var/team_number=1,team_number<=teams,team_number++)
+ for(var/team_number=1,team_number<=abductor_teams,team_number++)
var/obj/machinery/abductor/console/con = get_team_console(team_number)
var/datum/objective/objective = team_objectives[team_number]
if (con.experiment.points >= objective.target_amount)
@@ -270,52 +276,32 @@
return ..()
/datum/game_mode/abduction/declare_completion()
- world << "
The Abductors were:"
- for(var/team_number=1,team_number<=teams,team_number++)
+ for(var/team_number=1,team_number<=abductor_teams,team_number++)
var/obj/machinery/abductor/console/console = get_team_console(team_number)
var/datum/objective/objective = team_objectives[team_number]
var/team_name = team_names[team_number]
- var/datum/mind/amind = agents[team_number]
- var/datum/mind/smind = scientists[team_number]
- var/mob/living/carbon/human/agent = amind.current
- var/mob/living/carbon/human/scientist = smind.current
- if (console.experiment.points >= objective.target_amount)
- world << "[team_name] team fullfilled its mission! "
- world << "Team Members : [agent.name]([agent.ckey]),[scientist.name]([scientist.ckey])"
+ if(console.experiment.points >= objective.target_amount)
+ world << "[team_name] team fullfilled its mission!"
else
- world << "[team_name] team failed its mission! "
- world << "Team Members: [agent.name]([agent.ckey])
[scientist.name]([scientist.ckey])"
-
- world << "
The Abductees were:"
- display_abductees(console)
-
+ world << "[team_name] team failed its mission."
..()
return 1
-/datum/game_mode/abduction/proc/display_abductees(var/obj/machinery/abductor/console/console)
- var/list/mob/living/abductees = console.experiment.history
- for(var/mob/living/abductee in abductees)
- if(!abductee.mind)
- continue
- world << printplayer(abductee.mind)
- world << printobjectives(abductee.mind)
-
/datum/game_mode/proc/auto_declare_completion_abduction()
- if(abductors.len && ticker.mode.config_tag != "abduction") // no repeating for the gamemode
- world << "
The Abductors were:"
- for(var/datum/mind/M in abductors)
- world << "Abductor [M.current ? M.current.name : "Abductor"]([M.key])"
- world << printobjectives(M)
- world << "
The Abductees were:"
- var/list/full_history = list()
- for(var/obj/machinery/abductor/console/C in machines)
- full_history |= C.experiment.history
- for(var/mob/living/abductee in full_history)
- if(!abductee.mind)
- continue
- world << printplayer(abductee.mind)
- world << printobjectives(abductee.mind)
- return
+ var/text = ""
+ if(abductors.len)
+ text += "
The abductors were:"
+ for(var/datum/mind/abductor_mind in abductors)
+ text += printplayer(abductor_mind)
+ text += printobjectives(abductor_mind)
+ text += "
"
+ if(abductees.len)
+ text += "
The abductees were:"
+ for(var/datum/mind/abductee_mind in abductees)
+ text += printplayer(abductee_mind)
+ text += printobjectives(abductee_mind)
+ text += "
"
+ world << text
//Landmarks
// TODO: Split into seperate landmarks for prettier ships
@@ -342,16 +328,18 @@
var/team
/datum/objective/experiment/New()
- explanation_text = "Experiment on [target_amount] humans"
+ explanation_text = "Experiment on [target_amount] humans."
/datum/objective/experiment/check_completion()
- if(!owner.current || !ishuman(owner.current))
- return 0
- var/mob/living/carbon/human/H = owner.current
- if(!H.dna || !H.dna.species || !(H.dna.species.id == "abductor"))
- return 0
- var/datum/species/abductor/S = H.dna.species
- var/ab_team = S.team
+ var/ab_team = team
+ if(owner)
+ if(!owner.current || !ishuman(owner.current))
+ return 0
+ var/mob/living/carbon/human/H = owner.current
+ if(!H.dna || !H.dna.species || !(H.dna.species.id == "abductor"))
+ return 0
+ var/datum/species/abductor/S = H.dna.species
+ ab_team = S.team
for(var/obj/machinery/abductor/experiment/E in machines)
if(E.team == ab_team)
if(E.points >= target_amount)
@@ -368,8 +356,8 @@
explanation_text = "Steal all"
/datum/objective/abductee/steal/New()
- var/target = pick(list("Pets","Lights","Monkeys","Fruits","Shoes","Soap Bars"))
- explanation_text+=" [target]"
+ var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap"))
+ explanation_text+=" [target]."
/datum/objective/abductee/capture
explanation_text = "Capture"
@@ -381,7 +369,7 @@
jobs -= J
if(jobs.len > 0)
var/datum/job/target = pick(jobs)
- explanation_text += " \a [target.title]."
+ explanation_text += " a [target.title]."
else
explanation_text += " someone."
@@ -389,4 +377,84 @@
explanation_text = "You must escape the station! Get the shuttle called!"
/datum/objective/abductee/noclone
- explanation_text = "Don't allow anyone to be cloned."
\ No newline at end of file
+ explanation_text = "Don't allow anyone to be cloned."
+
+/datum/objective/abductee/oxygen
+ explanation_text = "The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station."
+
+/datum/objective/abductee/blazeit
+ explanation_text = "Your body must be improved. Ingest as many drugs as you can."
+
+/datum/objective/abductee/yumyum
+ explanation_text = "You are hungry. Eat as much food as you can find."
+
+/datum/objective/abductee/insane
+ explanation_text = "You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL"
+
+/datum/objective/abductee/cannotmove
+ explanation_text = "Convince the crew that you are a paraplegic."
+
+/datum/objective/abductee/deadbodies
+ explanation_text = "Start a collection of corpses. Don't kill people to get these corpses."
+
+/datum/objective/abductee/floors
+ explanation_text = "Replace all the floor tiles with carpeting, wooden boards, or grass."
+
+/datum/objective/abductee/POWERUNLIMITED
+ explanation_text = "Flood the station's powernet with as much electricity as you can."
+
+/datum/objective/abductee/pristine
+ explanation_text = "Ensure the station is in absolutely pristine condition."
+
+/datum/objective/abductee/window
+ explanation_text = "Replace all normal windows with reinforced windows."
+
+/datum/objective/abductee/nations
+ explanation_text = "Ensure your department prospers over all else."
+
+/datum/objective/abductee/abductception
+ explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine."
+
+/datum/objective/abductee/ghosts
+ explanation_text = "Conduct a seance with the spirits of the afterlife."
+
+/datum/objective/abductee/summon
+ explanation_text = "Conduct a ritual to summon an elder god."
+
+/datum/objective/abductee/machine
+ explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power."
+
+/datum/objective/abductee/prevent
+ explanation_text = "You have been enlightened. This knowledge must not escape. Ensure nobody else can become enlightened."
+
+/datum/objective/abductee/calling
+ explanation_text = "Call forth a spirit from the other side."
+
+/datum/objective/abductee/calling/New()
+ var/mob/dead/D = pick(dead_mob_list)
+ if(D)
+ explanation_text = "You know that [D] has perished. Call them from the spirit realm."
+
+/datum/objective/abductee/social_experiment
+ explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth."
+
+/datum/objective/abductee/vr
+ explanation_text = "It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR."
+
+/datum/objective/abductee/pets
+ explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!"
+
+/datum/objective/abductee/defect
+ explanation_text = "Defect from your employer."
+
+/datum/objective/abductee/promote
+ explanation_text = "Climb the corporate ladder all the way to the top!"
+
+/datum/objective/abductee/science
+ explanation_text = "So much lies undiscovered. Look deeper into the machinations of the universe."
+
+/datum/objective/abductee/build
+ explanation_text = "Expand the station."
+
+/datum/objective/abductee/pragnant
+ explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby."
diff --git a/code/game/gamemodes/abduction/abduction_gear.dm b/code/game/gamemodes/abduction/abduction_gear.dm
index a68c0a91eb5..64bffc943d0 100644
--- a/code/game/gamemodes/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/abduction/abduction_gear.dm
@@ -5,8 +5,8 @@
//AGENT VEST
/obj/item/clothing/suit/armor/abductor/vest
- name = "Agent Vest"
- desc = "Vest outfitted with alien stealth technology."
+ name = "agent vest"
+ desc = "A vest outfitted with advanced stealth technology. It has two modes - combat and stealth."
icon = 'icons/obj/abductor.dmi'
icon_state = "vest_stealth"
item_state = "armor"
@@ -134,8 +134,8 @@
return S.scientist
/obj/item/device/abductor/gizmo
- name = "Science Tool"
- desc = "Alien science is 90% dissections 10% probings."
+ name = "science tool"
+ desc = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras."
icon = 'icons/obj/abductor.dmi'
icon_state = "gizmo_scan"
item_state = "silencer"
@@ -189,7 +189,7 @@
if(istype(target,/mob/living/carbon/human))
if(console!=null)
console.AddSnapshot(target)
- user << "You scan and add the being to the database"
+ user << "You scan [target] and add them to the database."
/obj/item/device/abductor/gizmo/proc/mark(var/atom/target, var/mob/living/user)
if(marked == target)
@@ -198,7 +198,7 @@
if(istype(target,/mob/living/carbon/human))
if(IsAbductor(target))
marked = target
- user << "You mark the target for future retrieval."
+ user << "You mark [target] for future retrieval."
else
prepare(target,user)
else
@@ -208,15 +208,15 @@
if(get_dist(target,user)>1)
user << "You need to be next to the specimen to prepare it for transport!"
return
- user << "You start preparing the specimen for transport..."
+ user << "You begin preparing [target] for transport..."
if(do_after(user, 100, target = target))
marked = target
- user << "You finish preparing the specimen for transport."
+ user << "You finish preparing [target] for transport."
/obj/item/device/abductor/silencer
- name = "Abductor Silencer"
- desc = "Device used to break communication equipment"
+ name = "abductor silencer"
+ desc = "A compact device used to shut down communications equipment."
icon = 'icons/obj/abductor.dmi'
icon_state = "silencer"
item_state = "gizmo"
@@ -244,7 +244,7 @@
for(M in view(2,targloc))
if(M == user)
continue
- user << "You silence [M.name] radio devices."
+ user << "You silence [M]'s radio devices."
radio_off_mob(M)
/obj/item/device/abductor/silencer/proc/radio_off_mob(var/mob/living/carbon/human/M)
@@ -259,8 +259,8 @@
/obj/item/weapon/implant/abductor
- name = "Emergency Beam"
- desc = "Gets you back on the ship."
+ name = "recall implant"
+ desc = "Returns you to the mothership."
icon = 'icons/obj/abductor.dmi'
icon_state = "implant"
activated = 1
@@ -273,7 +273,7 @@
cooldown = 0
SSobj.processing |= src
else
- imp_in << "The emergency beam is still recharging!"
+ imp_in << "You must wait [30 - cooldown] seconds to use [src] again!"
return
/obj/item/weapon/implant/abductor/process()
@@ -284,9 +284,9 @@
/obj/item/device/firing_pin/alien
- name = "alien-looking pin"
- desc = "Only non-humans can use this pin"
- fail_message = "Human DNA detected! Authorization revoked!"
+ name = "alien firing pin"
+ desc = "An odd device that resembles a firing pin."
+ fail_message = "UNAUTHORIZED -- UNAUTHORIZED"
/obj/item/device/firing_pin/alien/pin_auth(mob/living/user)
if(ishuman(user))
@@ -329,7 +329,8 @@ Congratulations! You are now trained for xenobiology research!"}
#define BATON_MODES 4
/obj/item/weapon/abductor_baton
- name = "Advanced Baton"
+ name = "advanced baton"
+ desc = "A quad-mode baton used for incapacitation and restraining of specimens."
var/mode = BATON_STUN
icon = 'icons/obj/abductor.dmi'
icon_state = "wonderprod"
@@ -345,15 +346,15 @@ Congratulations! You are now trained for xenobiology research!"}
var/txt
switch(mode)
if(BATON_STUN)
- txt = "stun"
+ txt = "stunning"
if(BATON_SLEEP)
- txt = "sleep inducment"
+ txt = "sleep inducement"
if(BATON_CUFF)
txt = "restraining"
if(BATON_PROBE)
txt = "probing"
- usr << "You switch the baton to [txt] mode"
+ usr << "You switch the baton to [txt] mode."
update_icon()
/obj/item/weapon/abductor_baton/update_icon()
@@ -439,8 +440,8 @@ Congratulations! You are now trained for xenobiology research!"}
var/mob/living/carbon/C = L
if(!C.handcuffed)
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
- C.visible_message("[user] is trying to put energy cuffs on [C]!", \
- "[user] is trying to put energy cuffs on [C]!")
+ C.visible_message("[user] begins restraining [C] with [src]!", \
+ "[user] begins shaping an energy field around your hands!")
if(do_mob(user, C, 30))
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/energy/used(C)
@@ -453,30 +454,30 @@ Congratulations! You are now trained for xenobiology research!"}
/obj/item/weapon/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user)
L.visible_message("[user] probes [L] with [src]!", \
- "[user] probed [L]!")
+ "[user] probes you!")
- var/species = "Unknown Species"
+ var/species = "Unknown species"
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.dna && H.dna.species)
species = "[H.dna.species.name]"
if(L.mind && L.mind.changeling)
- species = "Changeling Lifeform"
- user << "Probing Result:[species]"
+ species = "Changeling lifeform"
+ user << "Probing result:[species]"
/obj/item/weapon/restraints/handcuffs/energy
- name = "energy cuffs"
- desc = "Energy field restraining the hands."
+ name = "hard-light energy field"
+ desc = "A hard-light field restraining the hands."
icon_state = "cuff_white" // Needs sprite
breakouttime = 450
trashtype = /obj/item/weapon/restraints/handcuffs/energy/used
/obj/item/weapon/restraints/handcuffs/energy/used
- desc = "Energy Discharge"
+ desc = "energy discharge"
/obj/item/weapon/restraints/handcuffs/energy/used/dropped(mob/user)
- user.visible_message("[user] cuffs break in a discharge of energy!", \
- "[user] cuffs break in a discharge of energy!")
+ user.visible_message("[user]'s [src] break in a discharge of energy!", \
+ "[user]'s [src] break in a discharge of energy!")
var/datum/effect/effect/system/spark_spread/S = new
S.set_up(4,0,user.loc)
S.start()
@@ -488,9 +489,11 @@ Congratulations! You are now trained for xenobiology research!"}
if(BATON_STUN)
user <<"The baton is in stun mode."
if(BATON_SLEEP)
- user <<"The baton is in sleep induction mode."
+ user <<"The baton is in sleep inducement mode."
if(BATON_CUFF)
- user <<"The baton is in restrain mode."
+ user <<"The baton is in restraining mode."
+ if(BATON_PROBE)
+ user << "The baton is in probing mode."
/obj/item/weapon/scalpel/alien
@@ -518,8 +521,8 @@ Congratulations! You are now trained for xenobiology research!"}
icon = 'icons/obj/abductor.dmi'
/obj/item/clothing/head/helmet/abductor
- name = "Agent Headgear"
- desc = "Abducting with style. Spiky style. Prevents digital tracking."
+ name = "agent headgear"
+ desc = "Abduct with style - spiky style. Prevents digital tracking."
icon_state = "alienhelmet"
item_state = "alienhelmet"
blockTracking = 1
@@ -546,6 +549,6 @@ Congratulations! You are now trained for xenobiology research!"}
/obj/structure/closet/abductor
name = "alien locker"
- desc = "Contains secrets of the universe"
+ desc = "Contains secrets of the universe."
icon_state = "abductor"
icon_door = "abductor"
\ No newline at end of file
diff --git a/code/game/gamemodes/abduction/gland.dm b/code/game/gamemodes/abduction/gland.dm
index 959f98b5b2a..68595ad93f8 100644
--- a/code/game/gamemodes/abduction/gland.dm
+++ b/code/game/gamemodes/abduction/gland.dm
@@ -1,6 +1,6 @@
/obj/item/gland/
- name = "Fleshy mass"
- desc = "Eww"
+ name = "fleshy mass"
+ desc = "A nausea-inducing hunk of twisting flesh and metal."
icon = 'icons/obj/abductor.dmi'
icon_state = "gland"
var/cooldown_low = 300
@@ -51,7 +51,7 @@
icon_state = "health"
/obj/item/gland/heals/activate()
- host << "You feel weird."
+ host << "You feel curiously revitalized."
host.adjustBruteLoss(-20)
host.adjustOxyLoss(-20)
host.adjustFireLoss(-20)
@@ -63,7 +63,9 @@
icon_state = "slime"
/obj/item/gland/slime/activate()
- host << "You feel weird."
+ host << "You feel nauseous!"
+ if(host.is_muzzled())
+ host << "The muzzle prevents you from vomiting!"
host.visible_message("[host] vomits on the floor!", \
"You throw up on the floor!")
@@ -86,7 +88,7 @@
icon_state = "mindshock"
/obj/item/gland/mindshock/activate()
- host << "You feel weird."
+ host << "You get a headache."
var/turf/T = get_turf(host)
for(var/mob/living/carbon/human/H in orange(4,T))
@@ -102,7 +104,7 @@
icon_state = "species"
/obj/item/gland/pop/activate()
- host << "You feel weird."
+ host << "You feel unlike yourself."
var/species = pick(list(/datum/species/lizard,/datum/species/slime,/datum/species/plant/pod,/datum/species/fly))
hardset_dna(host, null, null, null, null, species)
host.regenerate_icons()
@@ -115,7 +117,6 @@
icon_state = "vent"
/obj/item/gland/ventcrawling/activate()
- host << "You feel weird."
host << "You feel very stretchy."
host.ventcrawler = 2
return
@@ -128,6 +129,7 @@
icon_state = "viral"
/obj/item/gland/viral/activate()
+ host << "You feel sick."
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/magnitis)
var/datum/disease/D = new virus_type()
D.carrier = 1
@@ -144,6 +146,7 @@
icon_state = "emp"
/obj/item/gland/emp/activate()
+ host << "You feel a spike of pain in your head."
empulse(get_turf(host), 2, 5, 1)
/obj/item/gland/spiderman
@@ -153,17 +156,19 @@
icon_state = "spider"
/obj/item/gland/spiderman/activate()
+ host << "You feel something crawling in your skin."
if(uses == initial(uses))
host.faction += "spiders"
new /obj/effect/spider/spiderling(host.loc)
/obj/item/gland/egg
cooldown_low = 300
- cooldown_high = 600
+ cooldown_high = 400
uses = -1
icon_state = "egg"
/obj/item/gland/egg/activate()
+ host << "You lay an egg!"
var/obj/item/weapon/reagent_containers/food/snacks/egg/egg = new(host.loc)
egg.reagents.add_reagent("sacid",20)
egg.desc += " It smells bad."
@@ -176,8 +181,8 @@
/obj/item/gland/bloody/activate()
host.adjustBruteLoss(15)
- host.visible_message("[host] skin erupts with blood!",\
- "Your skin erupts with blood! It hurts!")
+ host.visible_message("[host]'s skin erupts with blood!",\
+ "Blood pours from your skin!")
for(var/turf/T in oview(3,host)) //Make this respect walls and such
T.add_blood_floor(host)
@@ -195,6 +200,7 @@
uses = 1
/obj/item/gland/bodysnatch/activate()
+ host << "You feel something moving around inside you..."
//spawn cocoon with clone greytide snpc inside
var/obj/effect/cocoon/abductor/C = new (get_turf(host))
C.Copy(host)
@@ -203,8 +209,8 @@
return
/obj/effect/cocoon/abductor
- name = "Slimy cocoon"
- desc = "You can see something moving inside"
+ name = "slimy cocoon"
+ desc = "Something is moving inside."
icon = 'icons/effects/effects.dmi'
icon_state = "cocoon_large3"
color = rgb(10,120,10)
@@ -238,14 +244,14 @@
qdel(src)
/obj/item/gland/plasma
- cooldown_low = 1200
- cooldown_high = 2400
+ cooldown_low = 2400
+ cooldown_high = 3000
uses = 1
/obj/item/gland/plasma/activate()
host << "You feel bloated."
sleep(150)
- host << "Your stomach feels about to explode!"
+ host << "A massive stomachache overcomes you."
sleep(50)
host.visible_message("[host] explodes in a cloud of plasma!")
var/turf/simulated/T = get_turf(host)
diff --git a/code/game/gamemodes/abduction/machinery/camera.dm b/code/game/gamemodes/abduction/machinery/camera.dm
index 52773d60e1a..428ce8ce2ab 100644
--- a/code/game/gamemodes/abduction/machinery/camera.dm
+++ b/code/game/gamemodes/abduction/machinery/camera.dm
@@ -67,10 +67,13 @@
origin.tele_self_action.Remove(C)
origin.vest_mode_action.Remove(C)
origin.vest_disguise_action.Remove(C)
+ remote_eye.user = null
if(C.client)
C.client.perspective = MOB_PERSPECTIVE
C.client.eye = src
C.client.images -= remote_eye.user_image
+ for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks)
+ C.client.images -= chunk.obscured
C.remote_control = null
C.unset_machine()
src.Remove(C)
diff --git a/code/game/gamemodes/abduction/machinery/experiment.dm b/code/game/gamemodes/abduction/machinery/experiment.dm
index e9ac19599cd..71ca57b29c1 100644
--- a/code/game/gamemodes/abduction/machinery/experiment.dm
+++ b/code/game/gamemodes/abduction/machinery/experiment.dm
@@ -1,6 +1,6 @@
/obj/machinery/abductor/experiment
- name = "Experimental machinery"
- desc = "A human-sized coffin sporting wide array of automatic surgery tools"
+ name = "experimentation machine"
+ desc = "A large man-sized tube sporting a complex array of surgical apparatus."
icon = 'icons/obj/abductor.dmi'
icon_state = "experiment-open"
density = 0
@@ -99,7 +99,7 @@
if(1)
dat += "Unconscious"
else
- dat += "DEAD"
+ dat += "Deceased"
dat += "
"
dat += "[flash]"
dat += "
"
@@ -133,10 +133,10 @@
var/mob/living/carbon/human/H = occupant
var/point_reward = 0
if(H in history)
- return "Specimen already in the database"
+ return "Specimen already in database."
if(H.stat == DEAD)
say("Specimen deceased - please provide fresh sample.")
- return "Specimen Deceased"
+ return "Specimen deceased."
var/obj/item/gland/GlandTest = locate() in H
if(!GlandTest)
say("Experimental dissection not detected!")
@@ -144,19 +144,20 @@
if(H.mind != null && H.ckey != null)
history += H
abductee_minds += H.mind
- say("Processing Specimen...")
+ say("Processing specimen...")
sleep(5)
switch(text2num(type))
if(1)
H << "You feel violated."
if(2)
- H << "You feel being sliced and put back together."
+ H << "You feel yourself being sliced apart and put back together."
if(3)
- H << "You feel under intense scrutiny."
+ H << "You feel intensely watched."
sleep(5)
- H << "Your mind snaps!"
+ H << "Your mind snaps!"
var/objtype = pick(typesof(/datum/objective/abductee/) - /datum/objective/abductee/)
var/datum/objective/abductee/O = new objtype()
+ ticker.mode.abductees += H.mind
H.mind.objectives += O
var/obj_count = 1
H << "Your current objectives:"
@@ -172,15 +173,15 @@
SendBack(H)
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
points += point_reward
- return "Experiment Successfull! [point_reward] new data-points collected."
+ return "Experiment successful! [point_reward] new data-points collected."
else
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
- return "Experiment Failed! No replacement organ detected."
+ return "Experiment failed! No replacement organ detected."
else
- say("Brain Activity Nonexistant - Disposing Sample...")
+ say("Brain activity nonexistant - disposing sample...")
open_machine()
SendBack(H)
- return "Specimen Braindead - Disposed"
+ return "Specimen braindead - disposed."
return "ERROR"
@@ -191,8 +192,12 @@
A = console.pad.teleport_target
if(A.safe) // right now crew areas are safe - being locked behind closed doors is not fun
TeleportToArea(H,A)
+ H.uncuff()
+ return
//Area not chosen / It's not safe area - teleport to arrivals
H.forceMove(pick(latejoin))
+ H.uncuff()
+ return
/obj/machinery/abductor/experiment/update_icon()
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index d4f48946de1..61a605ee6c6 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -116,10 +116,13 @@
C.remote_view = 0
remote_eye.origin.current_user = null
remote_eye.origin.jump_action.Remove(C)
+ remote_eye.user = null
if(C.client)
C.client.perspective = MOB_PERSPECTIVE
C.client.eye = src
C.client.images -= remote_eye.user_image
+ for(var/datum/camerachunk/chunk in remote_eye.visibleCameraChunks)
+ C.client.images -= chunk.obscured
C.remote_control = null
C.unset_machine()
src.Remove(C)
diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm
index 5c3982ab885..821cec4c572 100644
--- a/code/game/objects/items/weapons/implants/implantfreedom.dm
+++ b/code/game/objects/items/weapons/implants/implantfreedom.dm
@@ -14,30 +14,7 @@
imp_in << "You feel a faint click."
if(iscarbon(imp_in))
var/mob/living/carbon/C_imp_in = imp_in
- if (C_imp_in.handcuffed)
- var/obj/item/weapon/W = C_imp_in.handcuffed
- C_imp_in.handcuffed = null
- if(C_imp_in.buckled && C_imp_in.buckled.buckle_requires_restraints)
- C_imp_in.buckled.unbuckle_mob()
- C_imp_in.update_inv_handcuffed(0)
- if (C_imp_in.client)
- C_imp_in.client.screen -= W
- if (W)
- W.loc = C_imp_in.loc
- W.dropped(C_imp_in)
- if (W)
- W.layer = initial(W.layer)
- if (C_imp_in.legcuffed)
- var/obj/item/weapon/W = C_imp_in.legcuffed
- C_imp_in.legcuffed = null
- C_imp_in.update_inv_legcuffed(0)
- if (C_imp_in.client)
- C_imp_in.client.screen -= W
- if (W)
- W.loc = C_imp_in.loc
- W.dropped(C_imp_in)
- if (W)
- W.layer = initial(W.layer)
+ C_imp_in.uncuff()
/obj/item/weapon/implant/freedom/get_data()
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 1c1d614050c..e294c26928b 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -562,13 +562,7 @@
if(candidates.len >= 2)
//Oh god why we can't have static functions
- var/teams_finished = 0
- if(ticker.mode.config_tag == "abduction")
- var/datum/game_mode/abduction/A = ticker.mode
- teams_finished = A.teams
- else
- teams_finished = round(ticker.mode.abductors.len / 2)
- var/number = teams_finished + 1
+ var/number = ticker.mode.abductor_teams + 1
var/datum/game_mode/abduction/temp
if(ticker.mode.config_tag == "abduction")
@@ -596,10 +590,10 @@
temp.abductors |= list(agent_mind,scientist_mind)
temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind)
temp.post_setup_team(number)
- if(ticker.mode.config_tag == "abduction")
- var/datum/game_mode/abduction/A = ticker.mode
- A.teams += 1
- else
+
+ ticker.mode.abductor_teams++
+
+ if(ticker.mode.config_tag != "abduction")
ticker.mode.abductors |= temp.abductors
return 1
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index d43041dac13..4fc86b644a4 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -494,6 +494,32 @@ var/const/GALOSHES_DONT_HELP = 8
else
src << "You fail to break [I]!"
+/mob/living/carbon/proc/uncuff()
+ if (handcuffed)
+ var/obj/item/weapon/W = handcuffed
+ handcuffed = null
+ if (buckled && buckled.buckle_requires_restraints)
+ buckled.unbuckle_mob()
+ update_inv_handcuffed(0)
+ if (client)
+ client.screen -= W
+ if (W)
+ W.loc = loc
+ W.dropped(src)
+ if (W)
+ W.layer = initial(W.layer)
+ if (legcuffed)
+ var/obj/item/weapon/W = legcuffed
+ legcuffed = null
+ update_inv_legcuffed(0)
+ if (client)
+ client.screen -= W
+ if (W)
+ W.loc = loc
+ W.dropped(src)
+ if (W)
+ W.layer = initial(W.layer)
+
/mob/living/carbon/proc/is_mouth_covered(head_only = 0, mask_only = 0)
if( (!mask_only && head && (head.flags_cover & HEADCOVERSMOUTH)) || (!head_only && wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH)) )
return 1