Merge pull request #10129 from AnturK/ayy

Abductors fixes and improvements
This commit is contained in:
Swag McYolosteinen
2015-07-04 16:57:10 +02:00
9 changed files with 255 additions and 170 deletions
+138 -70
View File
@@ -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 << "<B>The current game mode is - Abduction!</B>"
world << "There are alien <b>abductors</b> sent to [world.name] to perform nefarious experiments!"
world << "<b>Abductors</b> - kidnap the crew and replace their organs with experimental ones."
world << "<b>Crew</b> - 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 << "<span class='notice'>You are an Abductor Agent of [team_name]!</span>"
abductor.current << "<span class='notice'>With the help of your teammate kidnap and experiment on station members!</span>"
abductor.current << "<span class='notice'>You are an agent of [team_name]!</span>"
abductor.current << "<span class='notice'>With the help of your teammate, kidnap and experiment on station crew members!</span>"
abductor.current << "<span class='notice'>Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve.</span>"
var/obj_count = 1
@@ -194,8 +200,8 @@
abductor.objectives += team_objectives[team_number]
var/team_name = team_names[team_number]
abductor.current << "<span class='notice'>You are an Abductor Scientist of [team_name]!</span>"
abductor.current << "<span class='notice'>With the help of your teammate kidnap and experiment on station members!</span>"
abductor.current << "<span class='notice'>You are a scientist of [team_name]!</span>"
abductor.current << "<span class='notice'>With the help of your teammate, kidnap and experiment on station crew members!</span>"
abductor.current << "<span class='notice'>Use your tool and ship consoles to support the agent and retrieve human specimens.</span>"
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 << "<br><font size=3><b>The Abductors were:</b></font>"
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 << "<font size = 3 color='green'><b>[team_name] team fullfilled its mission! </b></font>"
world << "<b>Team Members : [agent.name]([agent.ckey]),[scientist.name]([scientist.ckey])</b>"
if(console.experiment.points >= objective.target_amount)
world << "<span class='greentext'><b>[team_name] team fullfilled its mission!</b></span>"
else
world << "<font size = 3 color='red'><b>[team_name] team failed its mission! </b></font>"
world << "<b>Team Members</b>: [agent.name]([agent.ckey])<br>[scientist.name]([scientist.ckey])"
world << "<br><font size=2><b>The Abductees were:</b></font>"
display_abductees(console)
world << "<span class='greentext'><b>[team_name] team failed its mission.</b></span>"
..()
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 << "<br><font size=3><b>The Abductors were:</b></font>"
for(var/datum/mind/M in abductors)
world << "<font size = 2><b>Abductor [M.current ? M.current.name : "Abductor"]([M.key])</b></font>"
world << printobjectives(M)
world << "<br><font size=3><b>The Abductees were:</b></font>"
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 += "<br><span class='big'><b>The abductors were:</b></span>"
for(var/datum/mind/abductor_mind in abductors)
text += printplayer(abductor_mind)
text += printobjectives(abductor_mind)
text += "<br>"
if(abductees.len)
text += "<br><span class='big'><b>The abductees were:</b></span>"
for(var/datum/mind/abductee_mind in abductees)
text += printplayer(abductee_mind)
text += printobjectives(abductee_mind)
text += "<br>"
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."
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."
+40 -37
View File
@@ -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 << "<span class='notice'>You scan and add the being to the database</span>"
user << "<span class='notice'>You scan [target] and add them to the database.</span>"
/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 << "<span class='notice'>You mark the target for future retrieval.</span>"
user << "<span class='notice'>You mark [target] for future retrieval.</span>"
else
prepare(target,user)
else
@@ -208,15 +208,15 @@
if(get_dist(target,user)>1)
user << "<span class='warning'>You need to be next to the specimen to prepare it for transport!</span>"
return
user << "<span class='notice'>You start preparing the specimen for transport...</span>"
user << "<span class='notice'>You begin preparing [target] for transport...</span>"
if(do_after(user, 100, target = target))
marked = target
user << "<span class='notice'>You finish preparing the specimen for transport.</span>"
user << "<span class='notice'>You finish preparing [target] for transport.</span>"
/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 << "<span class='notice'>You silence [M.name] radio devices.</span>"
user << "<span class='notice'>You silence [M]'s radio devices.</span>"
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 << "<span class='warning'>The emergency beam is still recharging!</span>"
imp_in << "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>"
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 = "<span class='alienwarning'>Human DNA detected! Authorization revoked!</span>"
name = "alien firing pin"
desc = "An odd device that resembles a firing pin."
fail_message = "<span class='alienwarning'>UNAUTHORIZED -- UNAUTHORIZED</span>"
/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 << "<span class='notice'>You switch the baton to [txt] mode</span>"
usr << "<span class='notice'>You switch the baton to [txt] mode.</span>"
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("<span class='danger'>[user] is trying to put energy cuffs on [C]!</span>", \
"<span class='userdanger'>[user] is trying to put energy cuffs on [C]!</span>")
C.visible_message("<span class='danger'>[user] begins restraining [C] with [src]!</span>", \
"<span class='userdanger'>[user] begins shaping an energy field around your hands!</span>")
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("<span class='danger'>[user] probes [L] with [src]!</span>", \
"<span class='userdanger'>[user] probed [L]!</span>")
"<span class='userdanger'>[user] probes you!</span>")
var/species = "<span class='warning'>Unknown Species</span>"
var/species = "<span class='warning'>Unknown species</span>"
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.dna && H.dna.species)
species = "<span clas=='notice'>[H.dna.species.name]</span>"
if(L.mind && L.mind.changeling)
species = "<span class='warning'>Changeling Lifeform</span>"
user << "<span class='notice'>Probing Result:</span>[species]"
species = "<span class='warning'>Changeling lifeform</span>"
user << "<span class='notice'>Probing result:</span>[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("<span class='danger'>[user] cuffs break in a discharge of energy!</span>", \
"<span class='userdanger'>[user] cuffs break in a discharge of energy!</span>")
user.visible_message("<span class='danger'>[user]'s [src] break in a discharge of energy!</span>", \
"<span class='userdanger'>[user]'s [src] break in a discharge of energy!</span>")
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 <<"<span class='warning'>The baton is in stun mode.</span>"
if(BATON_SLEEP)
user <<"<span class='warning'>The baton is in sleep induction mode.</span>"
user <<"<span class='warning'>The baton is in sleep inducement mode.</span>"
if(BATON_CUFF)
user <<"<span class='warning'>The baton is in restrain mode.</span>"
user <<"<span class='warning'>The baton is in restraining mode.</span>"
if(BATON_PROBE)
user << "<span class='warning'>The baton is in probing mode.</span>"
/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"
+21 -15
View File
@@ -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 << "<span class='notice'>You feel weird.</span>"
host << "<span class='notice'>You feel curiously revitalized.</span>"
host.adjustBruteLoss(-20)
host.adjustOxyLoss(-20)
host.adjustFireLoss(-20)
@@ -63,7 +63,9 @@
icon_state = "slime"
/obj/item/gland/slime/activate()
host << "<span class='notice'>You feel weird.</span>"
host << "<span class='warning'>You feel nauseous!</span>"
if(host.is_muzzled())
host << "<span class='warning'>The muzzle prevents you from vomiting!</span>"
host.visible_message("<span class='danger'>[host] vomits on the floor!</span>", \
"<span class='userdanger'>You throw up on the floor!</span>")
@@ -86,7 +88,7 @@
icon_state = "mindshock"
/obj/item/gland/mindshock/activate()
host << "<span class='notice'>You feel weird.</span>"
host << "<span class='notice'>You get a headache.</span>"
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 << "<span class='notice'>You feel weird.</span>"
host << "<span class='notice'>You feel unlike yourself.</span>"
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 << "<span class='notice'>You feel weird.</span>"
host << "<span class='notice'>You feel very stretchy.</span>"
host.ventcrawler = 2
return
@@ -128,6 +129,7 @@
icon_state = "viral"
/obj/item/gland/viral/activate()
host << "<span class='warning'>You feel sick.</span>"
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 << "<span class='warning'>You feel a spike of pain in your head.</span>"
empulse(get_turf(host), 2, 5, 1)
/obj/item/gland/spiderman
@@ -153,17 +156,19 @@
icon_state = "spider"
/obj/item/gland/spiderman/activate()
host << "<span class='warning'>You feel something crawling in your skin.</span>"
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 << "<span class='boldannounce'>You lay an egg!</span>"
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("<span class='danger'>[host] skin erupts with blood!</span>",\
"<span class='userdanger'>Your skin erupts with blood! It hurts!</span>")
host.visible_message("<span class='danger'>[host]'s skin erupts with blood!</span>",\
"<span class='userdanger'>Blood pours from your skin!</span>")
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 << "<span class='warning'>You feel something moving around inside you...</span>"
//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 << "<span class='warning'>You feel bloated.</span>"
sleep(150)
host << "<span class='userdanger'>Your stomach feels about to explode!</span>"
host << "<span class='userdanger'>A massive stomachache overcomes you.</span>"
sleep(50)
host.visible_message("<span class='danger'>[host] explodes in a cloud of plasma!</span>")
var/turf/simulated/T = get_turf(host)
@@ -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)
@@ -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 += "<span class='average'>Unconscious</span>"
else
dat += "<span class='bad'>DEAD</span>"
dat += "<span class='bad'>Deceased</span>"
dat += "<br>"
dat += "[flash]"
dat += "<br>"
@@ -133,10 +133,10 @@
var/mob/living/carbon/human/H = occupant
var/point_reward = 0
if(H in history)
return "<span class='bad'>Specimen already in the database</span>"
return "<span class='bad'>Specimen already in database.</span>"
if(H.stat == DEAD)
say("Specimen deceased - please provide fresh sample.")
return "<span class='bad'>Specimen Deceased</span>"
return "<span class='bad'>Specimen deceased.</span>"
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 << "<span class='warning'>You feel violated.</span>"
if(2)
H << "<span class='warning'>You feel being sliced and put back together.</span>"
H << "<span class='warning'>You feel yourself being sliced apart and put back together.</span>"
if(3)
H << "<span class='warning'>You feel under intense scrutiny.</span>"
H << "<span class='warning'>You feel intensely watched.</span>"
sleep(5)
H << "<span class='warning'>Your mind snaps!</span>"
H << "<span class='warning'><b>Your mind snaps!</b></span>"
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 << "<span class='notice'>Your current objectives:</span>"
@@ -172,15 +173,15 @@
SendBack(H)
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
points += point_reward
return "<span class='good'>Experiment Successfull! [point_reward] new data-points collected.</span>"
return "<span class='good'>Experiment successful! [point_reward] new data-points collected.</span>"
else
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
return "<span class='bad'>Experiment Failed! No replacement organ detected.</span>"
return "<span class='bad'>Experiment failed! No replacement organ detected.</span>"
else
say("Brain Activity Nonexistant - Disposing Sample...")
say("Brain activity nonexistant - disposing sample...")
open_machine()
SendBack(H)
return "<span class='bad'>Specimen Braindead - Disposed</span>"
return "<span class='bad'>Specimen braindead - disposed.</span>"
return "<span class='bad'>ERROR</span>"
@@ -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()
@@ -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)
@@ -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()
+5 -11
View File
@@ -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
+26
View File
@@ -494,6 +494,32 @@ var/const/GALOSHES_DONT_HELP = 8
else
src << "<span class='warning'>You fail to break [I]!</span>"
/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