diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 667ad44e027..0e8d655c546 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -61,7 +61,6 @@
var/linglink
var/datum/vampire/vampire //vampire holder
var/datum/nations/nation //nation holder
- var/datum/abductor/abductor //abductor holder
var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
@@ -1132,14 +1131,17 @@
log_admin("[key_name(usr)] turned [current] into abductor.")
ticker.mode.update_abductor_icons_added(src)
if("equip")
+ if(!ishuman(current))
+ to_chat(usr, "This only works on humans!")
+ return
+
+ var/mob/living/carbon/human/H = current
var/gear = alert("Agent or Scientist Gear","Gear","Agent","Scientist")
if(gear)
- var/datum/game_mode/abduction/temp = new
- temp.equip_common(current)
if(gear=="Agent")
- temp.equip_agent(current)
+ H.equipOutfit(/datum/outfit/abductor/agent)
else
- temp.equip_scientist(current)
+ H.equipOutfit(/datum/outfit/abductor/scientist)
else if(href_list["silicon"])
switch(href_list["silicon"])
@@ -1425,35 +1427,31 @@
var/mob/living/carbon/human/H = current
H.set_species(/datum/species/abductor)
+ var/datum/species/abductor/S = H.dna.species
- switch(role)
- if("Agent")
- H.mind.abductor.agent = 1
- if("Scientist")
- H.mind.abductor.scientist = 1
- H.mind.abductor.team = team
+ if(role == "Scientist")
+ S.scientist = TRUE
+
+ S.team = team
var/list/obj/effect/landmark/abductor/agent_landmarks = new
var/list/obj/effect/landmark/abductor/scientist_landmarks = new
agent_landmarks.len = 4
scientist_landmarks.len = 4
for(var/obj/effect/landmark/abductor/A in landmarks_list)
- if(istype(A,/obj/effect/landmark/abductor/agent))
+ if(istype(A, /obj/effect/landmark/abductor/agent))
agent_landmarks[text2num(A.team)] = A
- else if(istype(A,/obj/effect/landmark/abductor/scientist))
+ else if(istype(A, /obj/effect/landmark/abductor/scientist))
scientist_landmarks[text2num(A.team)] = A
var/obj/effect/landmark/L
- if(teleport=="Yes")
+ if(teleport == "Yes")
switch(role)
if("Agent")
- H.mind.abductor.agent = 1
L = agent_landmarks[team]
- H.loc = L.loc
if("Scientist")
- H.mind.abductor.scientist = 1
L = agent_landmarks[team]
- H.loc = L.loc
+ H.forceMove(L.loc)
// check whether this mind's mob has been brigged for the given duration
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index a223f2e5125..b8e5365cb5d 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -201,6 +201,7 @@
increment = 5
max = 40
prefix = "darkened"
+ claw_damage_increase = 2
/obj/item/whetstone/cult/update_icon()
icon_state = "cult_sharpener[used ? "_used" : ""]"
diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm
new file mode 100644
index 00000000000..af2920c4626
--- /dev/null
+++ b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm
@@ -0,0 +1,147 @@
+/datum/objective/abductee
+ completed = 1
+
+/datum/objective/abductee/steal
+ explanation_text = "Steal all"
+
+/datum/objective/abductee/steal/New()
+ var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs"))
+ explanation_text+=" [target]."
+
+/datum/objective/abductee/paint
+ explanation_text = "The station is hideous. You must color it all"
+
+/datum/objective/abductee/paint/New()
+ var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood"))
+ explanation_text+= " [color]!"
+
+/datum/objective/abductee/speech
+ explanation_text = "Your brain is broken... you can only communicate in"
+
+/datum/objective/abductee/speech/New()
+ var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon"))
+ explanation_text+= " [style]."
+
+/datum/objective/abductee/capture
+ explanation_text = "Capture"
+
+/datum/objective/abductee/capture/New()
+ var/list/jobs = job_master.occupations.Copy()
+ for(var/datum/job/J in jobs)
+ if(J.current_positions < 1)
+ jobs -= J
+ if(jobs.len > 0)
+ var/datum/job/target = pick(jobs)
+ explanation_text += " a [target.title]."
+ else
+ explanation_text += " someone."
+
+/datum/objective/abductee/shuttle
+ explanation_text = "You must escape the station! Get the shuttle called!"
+
+/datum/objective/abductee/noclone
+ 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 wood, carpeting, grass or bling."
+
+/datum/objective/abductee/POWERUNLIMITED
+ explanation_text = "Flood the station's powernet with as much electricity as you can."
+
+/datum/objective/abductee/pristine
+ explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition."
+
+/datum/objective/abductee/nowalls
+ explanation_text = "The crew must get to know one another better. Break down the walls inside the station!"
+
+/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/summon
+ explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one."
+
+/datum/objective/abductee/machine
+ explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last."
+
+/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. Hold a seance to 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 = "Fuck the system! Defect from the station and start an independent colony in space, Mining Outpost or the derelict. Recruit crewmates if you can."
+
+/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."
+
+/datum/objective/abductee/engine
+ explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds."
+
+/datum/objective/abductee/music
+ explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!"
+
+/datum/objective/abductee/clown
+ explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!"
+
+/datum/objective/abductee/party
+ explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!"
+
+/datum/objective/abductee/pets
+ explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!"
+
+/datum/objective/abductee/conspiracy
+ explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!"
+
+/datum/objective/abductee/stalker
+ explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it."
+
+/datum/objective/abductee/narrator
+ explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story."
+
+/datum/objective/abductee/lurve
+ explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!"
+
+/datum/objective/abductee/sixthsense
+ explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo."
\ No newline at end of file
diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm
index 09e91869fd9..5d5c3342010 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction.dm
@@ -89,62 +89,14 @@
return 1
/datum/game_mode/abduction/post_setup()
- //Spawn Team
- var/list/obj/effect/landmark/abductor/agent_landmarks = new
- var/list/obj/effect/landmark/abductor/scientist_landmarks = new
- agent_landmarks.len = max_teams
- scientist_landmarks.len = max_teams
- for(var/obj/effect/landmark/abductor/A in landmarks_list)
- if(istype(A,/obj/effect/landmark/abductor/agent))
- agent_landmarks[text2num(A.team)] = A
- else if(istype(A,/obj/effect/landmark/abductor/scientist))
- scientist_landmarks[text2num(A.team)] = A
-
- var/datum/mind/agent
- var/obj/effect/landmark/L
- var/datum/mind/scientist
- var/team_name
- var/mob/living/carbon/human/H
for(var/team_number=1,team_number<=abductor_teams,team_number++)
- team_name = team_names[team_number]
- agent = agents[team_number]
- H = agent.current
- L = agent_landmarks[team_number]
- H.forceMove(get_turf(L))
- H.body_accessory = null
- H.set_species(/datum/species/abductor)
- H.mind.abductor.agent = 1
- H.mind.abductor.team = team_number
- H.real_name = team_name + " Agent"
- H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys.
- H.overeatduration = 0
- equip_common(H,team_number)
- equip_agent(H,team_number)
- greet_agent(agent,team_number)
- update_abductor_icons_added(agent)
-
- scientist = scientists[team_number]
- H = scientist.current
- L = scientist_landmarks[team_number]
- H.forceMove(get_turf(L))
- H.body_accessory = null
- H.set_species(/datum/species/abductor)
- H.mind.abductor.scientist = 1
- H.mind.abductor.team = team_number
- H.real_name = team_name + " Scientist"
- H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys.
- H.overeatduration = 0
- equip_common(H,team_number)
- equip_scientist(H,team_number)
- greet_scientist(scientist,team_number)
- update_abductor_icons_added(scientist)
-
+ post_setup_team(team_number)
return ..()
//Used for create antag buttons
/datum/game_mode/abduction/proc/post_setup_team(team_number)
- var/list/obj/effect/landmark/abductor/agent_landmarks = new
- var/list/obj/effect/landmark/abductor/scientist_landmarks = new
+ var/list/obj/effect/landmark/abductor/agent_landmarks = list()
+ var/list/obj/effect/landmark/abductor/scientist_landmarks = list()
agent_landmarks.len = max_teams
scientist_landmarks.len = max_teams
for(var/obj/effect/landmark/abductor/A in landmarks_list)
@@ -153,11 +105,13 @@
else if(istype(A,/obj/effect/landmark/abductor/scientist))
scientist_landmarks[text2num(A.team)] = A
+ var/team_name = team_names[team_number]
+
var/datum/mind/agent
var/obj/effect/landmark/L
var/datum/mind/scientist
- var/team_name
var/mob/living/carbon/human/H
+ var/datum/species/abductor/S
team_name = team_names[team_number]
agent = agents[team_number]
@@ -166,11 +120,12 @@
H.forceMove(get_turf(L))
H.body_accessory = null
H.set_species(/datum/species/abductor)
- H.mind.abductor.agent = 1
- H.mind.abductor.team = team_number
+ S = H.dna.species
+ S.team = team_number
H.real_name = team_name + " Agent"
- equip_common(H,team_number)
- equip_agent(H,team_number)
+ H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys.
+ H.overeatduration = 0
+ H.equipOutfit(/datum/outfit/abductor/agent)
greet_agent(agent,team_number)
update_abductor_icons_added(agent)
@@ -180,20 +135,16 @@
H.forceMove(get_turf(L))
H.body_accessory = null
H.set_species(/datum/species/abductor)
- H.mind.abductor.scientist = 1
- H.mind.abductor.team = team_number
+ S = H.dna.species
+ S.scientist = TRUE
+ S.team = team_number
H.real_name = team_name + " Scientist"
- equip_common(H,team_number)
- equip_scientist(H,team_number)
+ H.reagents.add_reagent("mutadone", 1) //No fat/blind/colourblind/epileptic/whatever ayys.
+ H.overeatduration = 0
+ H.equipOutfit(/datum/outfit/abductor/scientist)
greet_scientist(scientist,team_number)
update_abductor_icons_added(scientist)
-
-/datum/abductor //stores abductor's team and whether they're a scientist or agent; since species datums are global, we have to use this, instead.
- var/scientist = 0
- var/agent = 0
- var/team = 1
-
/datum/game_mode/abduction/proc/greet_agent(datum/mind/abductor,team_number)
abductor.objectives += team_objectives[team_number]
var/team_name = team_names[team_number]
@@ -202,11 +153,7 @@
to_chat(abductor.current, "With the help of your teammate, kidnap and experiment on station crew members!")
to_chat(abductor.current, "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve.")
- var/obj_count = 1
- for(var/datum/objective/objective in abductor.objectives)
- to_chat(abductor.current, "Objective #[obj_count]: [objective.explanation_text]")
- obj_count++
- return
+ abductor.announce_objectives()
/datum/game_mode/abduction/proc/greet_scientist(datum/mind/abductor,team_number)
abductor.objectives += team_objectives[team_number]
@@ -216,64 +163,12 @@
to_chat(abductor.current, "With the help of your teammate, kidnap and experiment on station crew members!")
to_chat(abductor.current, "Use your tool and ship consoles to support the agent and retrieve human specimens.")
- var/obj_count = 1
- for(var/datum/objective/objective in abductor.objectives)
- to_chat(abductor.current, "Objective #[obj_count]: [objective.explanation_text]")
- obj_count++
- return
-
-/datum/game_mode/abduction/proc/equip_common(mob/living/carbon/human/agent,team_number)
- var/radio_freq = SYND_FREQ
-
- var/obj/item/radio/R = new /obj/item/radio/headset/syndicate/alt(agent)
- R.set_frequency(radio_freq)
- R.name = "alien headset"
- agent.equip_to_slot_or_del(R, slot_l_ear)
- agent.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(agent), slot_shoes)
- agent.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(agent), slot_w_uniform) //they're greys gettit
- agent.equip_to_slot_or_del(new /obj/item/storage/backpack(agent), slot_back)
-
-/datum/game_mode/abduction/proc/get_team_console(team)
- var/obj/machinery/abductor/console/console
- for(var/obj/machinery/abductor/console/c in abductor_equipment)
- if(c.team == team)
- console = c
- break
- return console
-
-/datum/game_mode/abduction/proc/equip_agent(mob/living/carbon/human/agent,team_number)
- if(!team_number)
- team_number = agent.mind.abductor.team
-
- var/obj/machinery/abductor/console/console = get_team_console(team_number)
- var/obj/item/clothing/suit/armor/abductor/vest/V = new /obj/item/clothing/suit/armor/abductor/vest(agent)
- if(console!=null)
- console.vest = V
- V.flags |= NODROP
- agent.equip_to_slot_or_del(V, slot_wear_suit)
- agent.equip_to_slot_or_del(new /obj/item/abductor_baton(agent), slot_in_backpack)
- agent.equip_to_slot_or_del(new /obj/item/gun/energy/alien(agent), slot_in_backpack)
- agent.equip_to_slot_or_del(new /obj/item/abductor/silencer(agent), slot_in_backpack)
- agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head)
- agent.equip_to_slot_or_del(new /obj/item/storage/belt/military/abductor/full(agent), slot_belt)
- agent.update_icons()
-
-
-/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number)
- if(!team_number)
- team_number = scientist.mind.abductor.team
-
- var/obj/machinery/abductor/console/console = get_team_console(team_number)
- var/obj/item/abductor/gizmo/G = new /obj/item/abductor/gizmo(scientist)
- if(console!=null)
- console.gizmo = G
- G.console = console
- scientist.equip_to_slot_or_del(G, slot_in_backpack)
-
- var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(scientist)
- beamplant.implant(scientist)
- scientist.update_icons()
+ abductor.announce_objectives()
+/datum/game_mode/abduction/proc/get_team_console(team_number)
+ for(var/obj/machinery/abductor/console/C in machines)
+ if(C.team == team_number)
+ return C
/datum/game_mode/abduction/check_finished()
if(!finished)
@@ -336,18 +231,19 @@
var/ab_team = team
if(owner)
if(!owner.current || !ishuman(owner.current))
- return 0
+ return FALSE
var/mob/living/carbon/human/H = owner.current
if(!isabductor(H))
- return 0
- ab_team = H.mind.abductor.team
- for(var/obj/machinery/abductor/experiment/E in abductor_equipment)
+ return FALSE
+ 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)
- return 1
+ return TRUE
else
- return 0
- return 0
+ return FALSE
+ return FALSE
/datum/game_mode/proc/remove_abductor(datum/mind/abductor_mind)
if(abductor_mind in abductors)
@@ -358,7 +254,7 @@
to_chat(abductor_mind.current, "You have been turned into a robot! You are no longer an abductor.")
else
to_chat(abductor_mind.current, "You have been brainwashed! You are no longer an abductor.")
- ticker.mode.update_abductor_icons_added(abductor_mind)
+ ticker.mode.update_abductor_icons_removed(abductor_mind)
/datum/game_mode/proc/update_abductor_icons_added(datum/mind/alien_mind)
var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR]
@@ -368,152 +264,4 @@
/datum/game_mode/proc/update_abductor_icons_removed(datum/mind/alien_mind)
var/datum/atom_hud/antag/hud = huds[ANTAG_HUD_ABDUCTOR]
hud.leave_hud(alien_mind.current)
- set_antag_hud(alien_mind.current, null)
-
-/datum/objective/abductee
- completed = 1
-
-/datum/objective/abductee/steal
- explanation_text = "Steal all"
-
-/datum/objective/abductee/steal/New()
- var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs"))
- explanation_text+=" [target]."
-
-/datum/objective/abductee/paint
- explanation_text = "The station is hideous. You must color it all"
-
-/datum/objective/abductee/paint/New()
- var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood"))
- explanation_text+= " [color]!"
-
-/datum/objective/abductee/speech
- explanation_text = "Your brain is broken... you can only communicate in"
-
-/datum/objective/abductee/speech/New()
- var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon"))
- explanation_text+= " [style]."
-
-/datum/objective/abductee/capture
- explanation_text = "Capture"
-
-/datum/objective/abductee/capture/New()
- var/list/jobs = job_master.occupations.Copy()
- for(var/datum/job/J in jobs)
- if(J.current_positions < 1)
- jobs -= J
- if(jobs.len > 0)
- var/datum/job/target = pick(jobs)
- explanation_text += " a [target.title]."
- else
- explanation_text += " someone."
-
-/datum/objective/abductee/shuttle
- explanation_text = "You must escape the station! Get the shuttle called!"
-
-/datum/objective/abductee/noclone
- 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 wood, carpeting, grass or bling."
-
-/datum/objective/abductee/POWERUNLIMITED
- explanation_text = "Flood the station's powernet with as much electricity as you can."
-
-/datum/objective/abductee/pristine
- explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition."
-
-/datum/objective/abductee/nowalls
- explanation_text = "The crew must get to know one another better. Break down the walls inside the station!"
-
-/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/summon
- explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one."
-
-/datum/objective/abductee/machine
- explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last."
-
-/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. Hold a seance to 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 = "Fuck the system! Defect from the station and start an independent colony in space, Mining Outpost or the derelict. Recruit crewmates if you can."
-
-/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."
-
-/datum/objective/abductee/engine
- explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds."
-
-/datum/objective/abductee/music
- explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!"
-
-/datum/objective/abductee/clown
- explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!"
-
-/datum/objective/abductee/party
- explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!"
-
-/datum/objective/abductee/pets
- explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!"
-
-/datum/objective/abductee/conspiracy
- explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!"
-
-/datum/objective/abductee/stalker
- explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it."
-
-/datum/objective/abductee/narrator
- explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story."
-
-/datum/objective/abductee/lurve
- explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!"
-
-/datum/objective/abductee/sixthsense
- explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo."
\ No newline at end of file
+ set_antag_hud(alien_mind.current, null)
\ No newline at end of file
diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
index 73a910e54ef..4f7d260db92 100644
--- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
+++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm
@@ -117,8 +117,8 @@
/obj/item/abductor/proc/ScientistCheck(user)
var/mob/living/carbon/human/H = user
- if(H.mind && H.mind.abductor)
- return H.mind.abductor.scientist
+ var/datum/species/abductor/S = H.dna.species
+ return S.scientist
/obj/item/abductor/gizmo
name = "science tool"
@@ -477,6 +477,25 @@ Congratulations! You are now trained for invasive xenobiology research!"}
to_chat(user, "The baton is in probing mode.")
+/obj/item/radio/headset/abductor
+ name = "alien headset"
+ desc = "An advanced alien headset designed to monitor communications of human space stations. Why does it have a microphone? No one knows."
+ flags = EARBANGPROTECT
+ origin_tech = "magnets=2;abductor=3"
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "abductor_headset"
+ item_state = "abductor_headset"
+ ks2type = /obj/item/encryptionkey/heads/captain
+
+/obj/item/radio/headset/abductor/New()
+ ..()
+ make_syndie()
+
+/obj/item/radio/headset/abductor/attackby(obj/item/I, mob/user, params)
+ if(isscrewdriver(I))
+ return // Stops humans from disassembling abductor headsets.
+ return ..()
+
/obj/item/scalpel/alien
name = "alien scalpel"
desc = "It's a gleaming sharp knife made out of silvery-green metal."
diff --git a/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm
new file mode 100644
index 00000000000..bb39e90cd01
--- /dev/null
+++ b/code/game/gamemodes/miniantags/abduction/abduction_outfits.dm
@@ -0,0 +1,62 @@
+/datum/outfit/abductor
+ name = "Abductor Basic"
+ uniform = /obj/item/clothing/under/color/grey //they're greys gettit
+ shoes = /obj/item/clothing/shoes/combat
+ back = /obj/item/storage/backpack
+ l_ear = /obj/item/radio/headset/abductor
+
+/datum/outfit/abductor/proc/get_team_console(team_number)
+ for(var/obj/machinery/abductor/console/C in machines)
+ if(C.team == team_number)
+ return C
+
+/datum/outfit/abductor/proc/link_to_console(mob/living/carbon/human/H, team_number)
+ if(!team_number && isabductor(H))
+ var/datum/species/abductor/S = H.dna.species
+ team_number = S.team
+
+ if(!team_number)
+ team_number = 1
+
+ var/obj/machinery/abductor/console/console = get_team_console(team_number)
+ if(console)
+ var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H
+ if(V)
+ console.vest = V
+ V.flags |= NODROP
+
+ var/obj/item/abductor/gizmo/G = locate() in H.get_item_by_slot(slot_back)
+ if(G)
+ console.gizmo = G
+ G.console = console
+
+/datum/outfit/abductor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(!visualsOnly)
+ link_to_console(H)
+
+
+/datum/outfit/abductor/agent
+ name = "Abductor Agent"
+ head = /obj/item/clothing/head/helmet/abductor
+ suit = /obj/item/clothing/suit/armor/abductor/vest
+ belt = /obj/item/storage/belt/military/abductor/full
+
+ backpack_contents = list(
+ /obj/item/abductor_baton = 1,
+ /obj/item/gun/energy/alien = 1,
+ /obj/item/abductor/silencer = 1
+ )
+
+/datum/outfit/abductor/scientist
+ name = "Abductor Scientist"
+
+ backpack_contents = list(
+ /obj/item/abductor/gizmo = 1
+ )
+
+/datum/outfit/abductor/scientist/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
+ ..()
+ if(!visualsOnly)
+ var/obj/item/implant/abductor/beamplant = new /obj/item/implant/abductor(H)
+ beamplant.implant(H)
\ No newline at end of file
diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
index 219ae4b6e54..cd4f80f2527 100644
--- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
+++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm
@@ -2,7 +2,6 @@
name = "Human Observation Console"
var/team = 0
networks = list("SS13","Abductor")
- off_action = new /datum/action/innate/camera_off/abductor //specific datum
var/datum/action/innate/teleport_in/tele_in_action = new
var/datum/action/innate/teleport_out/tele_out_action = new
var/datum/action/innate/teleport_self/tele_self_action = new
@@ -25,65 +24,43 @@
eyeobj.icon_state = "camera_target"
/obj/machinery/computer/camera_advanced/abductor/GrantActions(mob/living/carbon/user)
- off_action.target = user
- off_action.Grant(user)
+ ..()
- jump_action.target = user
- jump_action.Grant(user)
- //TODO : add null checks
- tele_in_action.target = console.pad
- tele_in_action.Grant(user)
+ if(tele_in_action)
+ tele_in_action.target = console.pad
+ tele_in_action.Grant(user)
+ actions += tele_in_action
- tele_out_action.target = console
- tele_out_action.Grant(user)
+ if(tele_out_action)
+ tele_out_action.target = console
+ tele_out_action.Grant(user)
+ actions += tele_out_action
- tele_self_action.target = console.pad
- tele_self_action.Grant(user)
+ if(tele_self_action)
+ tele_self_action.target = console.pad
+ tele_self_action.Grant(user)
+ actions += tele_self_action
- vest_mode_action.target = console
- vest_mode_action.Grant(user)
+ if(vest_mode_action)
+ vest_mode_action.target = console
+ vest_mode_action.Grant(user)
+ actions += vest_mode_action
- vest_disguise_action.target = console
- vest_disguise_action.Grant(user)
+ if(vest_disguise_action)
+ vest_disguise_action.target = console
+ vest_disguise_action.Grant(user)
+ actions += vest_disguise_action
- set_droppoint_action.target = console
- set_droppoint_action.Grant(user)
-
-/obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(mob/living/carbon/human/H)
- if(H.mind && H.mind.abductor)
- return H.mind.abductor.scientist
+ if(set_droppoint_action)
+ set_droppoint_action.target = console
+ set_droppoint_action.Grant(user)
+ actions += set_droppoint_action
/obj/machinery/computer/camera_advanced/abductor/attack_hand(mob/user)
if(!isabductor(user))
return
return ..()
-/datum/action/innate/camera_off/abductor/Activate()
- if(!target || !iscarbon(target))
- return
- var/mob/living/carbon/C = target
- var/mob/camera/aiEye/remote/remote_eye = C.remote_control
- var/obj/machinery/computer/camera_advanced/abductor/origin = remote_eye.origin
- C.remote_view = 0
- origin.current_user = null
- origin.jump_action.Remove(C)
- origin.tele_in_action.Remove(C)
- origin.tele_out_action.Remove(C)
- origin.tele_self_action.Remove(C)
- origin.vest_mode_action.Remove(C)
- origin.vest_disguise_action.Remove(C)
- origin.set_droppoint_action.Remove(C)
- remote_eye.eye_user = null
- C.reset_perspective(null)
- if(C.client)
- 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)
-
-
/datum/action/innate/teleport_in
name = "Send To"
button_icon_state = "beam_down"
diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm
index 00f6a98f2bc..99eaeae3fe6 100644
--- a/code/game/machinery/computer/camera_advanced.dm
+++ b/code/game/machinery/computer/camera_advanced.dm
@@ -31,6 +31,7 @@
for(var/V in actions)
var/datum/action/A = V
A.Remove(user)
+ actions.Cut()
if(user.client)
user.reset_perspective(null)
eyeobj.RemoveImages()
@@ -52,6 +53,7 @@
if(current_user)
current_user.unset_machine()
QDEL_NULL(eyeobj)
+ QDEL_LIST(actions)
return ..()
/obj/machinery/computer/camera_advanced/on_unset_machine(mob/M)
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 4bbdaa2f723..4fea8e93a39 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -24,7 +24,7 @@
return
if(ishuman(user))
var/mob/living/carbon/human/abductor/H = user
- if(H && H.mind.abductor)
+ if(isabductor(H))
to_chat(user, "Megaphones can't project psionic communication!")
return
if(ishuman(user))
diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm
index 40ed4d3bfa3..3ec571c94a6 100644
--- a/code/game/objects/items/weapons/implants/implant_abductor.dm
+++ b/code/game/objects/items/weapons/implants/implant_abductor.dm
@@ -29,7 +29,8 @@
if(ishuman(source))
var/mob/living/carbon/human/H = source
if(isabductor(H))
- console = get_team_console(H.mind.abductor.team)
+ var/datum/species/abductor/S = H.dna.species
+ console = get_team_console(S.team)
home = console.pad
if(!home)
diff --git a/code/game/objects/items/weapons/whetstone.dm b/code/game/objects/items/weapons/whetstone.dm
index 5d17e66d976..fcb2fab2d4e 100644
--- a/code/game/objects/items/weapons/whetstone.dm
+++ b/code/game/objects/items/weapons/whetstone.dm
@@ -10,6 +10,7 @@
var/max = 30
var/prefix = "sharpened"
var/requires_sharpness = 1
+ var/claw_damage_increase = 1
/obj/item/whetstone/attackby(obj/item/I, mob/user, params)
@@ -46,16 +47,24 @@
playsound(get_turf(src), usesound, 50, 1)
name = "worn out [name]"
desc = "[desc] At least, it used to."
- used = 1
+ used = TRUE
update_icon()
-/obj/item/whetstone/attack_self(mob/user as mob) //This is just fluff for now. Species datums are global and not newly created instances, so we can't adjust unarmed damage on a per mob basis.
+/obj/item/whetstone/attack_self(mob/user)
+ if(used)
+ to_chat(user, "The whetstone is too worn to use again!")
+ return
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/datum/unarmed_attack/attack = H.dna.species.unarmed
if(istype(attack, /datum/unarmed_attack/claws))
- H.visible_message("[H] sharpens [H.p_their()] claws on the [src]!", "You sharpen your claws on the [src].")
+ attack.damage += claw_damage_increase
+ H.visible_message("[H] sharpens [H.p_their()] claws on [src]!", "You sharpen your claws on [src].")
playsound(get_turf(H), usesound, 50, 1)
+ name = "worn out [name]"
+ desc = "[desc] At least, it used to."
+ used = TRUE
+ update_icon()
/obj/item/whetstone/super
name = "super whetstone block"
@@ -64,3 +73,4 @@
max = 200
prefix = "super-sharpened"
requires_sharpness = 0
+ claw_damage_increase = 200
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 93bdfe30c27..6ed8baf5de0 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -507,8 +507,10 @@
..(speaker,message,speaker.real_name)
/datum/language/abductor/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
- if(other.mind && other.mind.abductor)
- if(other.mind.abductor.team == speaker.mind.abductor.team)
+ if(isabductor(other) && isabductor(speaker))
+ var/datum/species/abductor/A = speaker.dna.species
+ var/datum/species/abductor/A2 = other.dna.species
+ if(A.team == A2.team)
return TRUE
return FALSE
@@ -553,7 +555,7 @@
if(!message)
return
-
+
log_say("(ROBOT) [message]", speaker)
var/message_start = "[name], [speaker.name]"
var/message_body = "[speaker.say_quote(message)],\"[message]\""
diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm
index ec2bb7514ed..16fcd34d315 100644
--- a/code/modules/mob/living/carbon/human/species/abductor.dm
+++ b/code/modules/mob/living/carbon/human/species/abductor.dm
@@ -27,14 +27,14 @@
female_scream_sound = 'sound/goonstation/voice/male_scream.ogg'
female_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
female_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' //Abductors always scream like guys
+ var/team = 1
+ var/scientist = FALSE // vars to not pollute spieces list with castes
/datum/species/abductor/can_understand(mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member
- return 1
+ return TRUE
/datum/species/abductor/handle_post_spawn(mob/living/carbon/human/H)
H.gender = NEUTER
- if(H.mind)
- H.mind.abductor = new /datum/abductor
H.languages.Cut() //Under no condition should you be able to speak any language
H.add_language("Abductor Mindlink") //other than over the abductor's own mindlink
- return ..()
+ return ..()
\ No newline at end of file
diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi
index 13d5981c458..597029a456c 100644
Binary files a/icons/mob/ears.dmi and b/icons/mob/ears.dmi differ
diff --git a/icons/obj/abductor.dmi b/icons/obj/abductor.dmi
index 7bcd0607116..2adfdba5670 100644
Binary files a/icons/obj/abductor.dmi and b/icons/obj/abductor.dmi differ
diff --git a/paradise.dme b/paradise.dme
index daa3e1c9b65..cd51288c9a1 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -472,8 +472,10 @@
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
+#include "code\game\gamemodes\miniantags\abduction\abductee_objectives.dm"
#include "code\game\gamemodes\miniantags\abduction\abduction.dm"
#include "code\game\gamemodes\miniantags\abduction\abduction_gear.dm"
+#include "code\game\gamemodes\miniantags\abduction\abduction_outfits.dm"
#include "code\game\gamemodes\miniantags\abduction\abduction_surgery.dm"
#include "code\game\gamemodes\miniantags\abduction\gland.dm"
#include "code\game\gamemodes\miniantags\abduction\machinery\camera.dm"