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