Merge pull request #9185 from AnturK/aliens_stole_my_branch_name

Abduction Update 2.5
This commit is contained in:
Jordie
2015-05-02 23:59:48 +10:00
11 changed files with 212 additions and 30 deletions
+90
View File
@@ -455,6 +455,25 @@
sections["shadowling"] = text
/** Abductors **/
text = "Abductor"
if(ticker.mode.config_tag == "abductor")
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
if(src in ticker.mode.abductors)
text += "<b>Abductor</b>|<a href='?src=\ref[src];abductor=clear'>human</a>"
text += "|<a href='?src=\ref[src];common=undress'>undress</a>|<a href='?src=\ref[src];abductor=equip'>equip</a>"
else
text += "<a href='?src=\ref[src];abductor=abductor'>Abductor</a>|<b>human</b>"
if(current && current.client && current.client.prefs.be_special & BE_ABDUCTOR)
text += "|Enabled in Prefs"
else
text += "|Disabled in Prefs"
sections["abductor"] = text
/** MONKEY ***/
if (istype(current, /mob/living/carbon))
text = "monkey"
@@ -1074,6 +1093,26 @@
message_admins("[key_name_admin(usr)] has thrall'ed [current].")
log_admin("[key_name(usr)] has thrall'ed [current].")
else if(href_list["abductor"])
switch(href_list["abductor"])
if("clear")
usr << "Not implemented yet. Sorry!"
if("abductor")
if(!ishuman(current))
usr << "<span class='warning'>This only works on humans!</span>"
return
make_Abductor()
log_admin("[key_name(usr)] turned [current] into abductor.")
if("equip")
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)
else
temp.equip_scientist(current)
else if (href_list["monkey"])
var/mob/living/L = current
if (L.notransform)
@@ -1349,6 +1388,57 @@
ticker.mode.greet_gang(src)
ticker.mode.equip_gang(current)
/datum/mind/proc/make_Abductor()
var/role = alert("Abductor Role ?","Role","Agent","Scientist")
var/team = input("Abductor Team ?","Team ?") in list(1,2,3,4)
var/teleport = alert("Teleport to ship ?","Teleport","Yes","No")
if(!role || !team || !teleport)
return
if(!ishuman(current))
return
ticker.mode.abductors |= src
var/datum/objective/experiment/O = new
O.owner = src
objectives += O
var/mob/living/carbon/human/H = current
hardset_dna(H,null,null,null,null,/datum/species/abductor,null)
var/datum/species/abductor/S = H.dna.species
switch(role)
if("Agent")
S.agent = 1
if("Scientist")
S.scientist = 1
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))
agent_landmarks[text2num(A.team)] = A
else if(istype(A,/obj/effect/landmark/abductor/scientist))
scientist_landmarks[text2num(A.team)] = A
var/obj/effect/landmark/L
if(teleport=="Yes")
switch(role)
if("Agent")
S.agent = 1
L = agent_landmarks[team]
H.loc = L.loc
if("Scientist")
S.scientist = 1
L = agent_landmarks[team]
H.loc = L.loc
/datum/mind/proc/AddSpell(var/obj/effect/proc_holder/spell/spell)
+36 -10
View File
@@ -223,6 +223,10 @@
return console
/datum/game_mode/abduction/proc/equip_agent(var/mob/living/carbon/human/agent,var/team_number)
if(!team_number)
var/datum/species/abductor/S = agent.dna.species
team_number = S.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)
@@ -236,6 +240,10 @@
/datum/game_mode/abduction/proc/equip_scientist(var/mob/living/carbon/human/scientist,var/team_number)
if(!team_number)
var/datum/species/abductor/S = scientist.dna.species
team_number = S.team
var/obj/machinery/abductor/console/console = get_team_console(team_number)
var/obj/item/device/abductor/gizmo/G = new /obj/item/device/abductor/gizmo(scientist)
if(console!=null)
@@ -259,6 +267,7 @@
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++)
var/obj/machinery/abductor/console/console = get_team_console(team_number)
var/datum/objective/objective = team_objectives[team_number]
@@ -274,7 +283,7 @@
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 << "<b>Abductees:</b>"
world << "<br><font size=2><b>The Abductees were:</b></font>"
display_abductees(console)
..()
@@ -285,20 +294,24 @@
for(var/mob/living/abductee in abductees)
if(!abductee.mind)
continue
world << "[abductee.name]([abductee.ckey]))"
var/count = 1
for(var/datum/objective/objective in abductee.mind.objectives)
if(objective.check_completion())
world << "<br><b>Objective #[count]</b>: [objective.explanation_text] <font color='green'><b>Success!</b></font>"
else
world << "<br><b>Objective #[count]</b>: [objective.explanation_text] <span class='danger'>Fail.</span>"
count++
world << printplayer(abductee.mind)
world << printobjectives(abductee.mind)
/datum/game_mode/proc/auto_declare_completion_abduction()
if(abductors.len)
world << "Abductors:"
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
//Landmarks
@@ -329,6 +342,19 @@ datum/objective/experiment/New()
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
for(var/obj/machinery/abductor/experiment/E in machines)
if(E.team == ab_team)
if(E.points >= target_amount)
return 1
else
return 0
return 0
datum/objective/abductee
@@ -11,6 +11,7 @@
icon_state = "vest_stealth"
item_state = "armor"
blood_overlay_type = "armor"
origin_tech = "materials=5;biotech=4;powerstorage=5"
armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15)
action_button_name = "Activate"
action_button_is_hands_free = 1
@@ -147,6 +148,7 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "gizmo_scan"
item_state = "silencer"
origin_tech = "materials=5;magnets=5;bluespace=6"
var/mode = GIZMO_SCAN
var/mob/living/marked = null
var/obj/machinery/abductor/console/console
@@ -208,6 +210,8 @@
user << "<span class='notice'>You mark the target for future retrieval.</span>"
else
prepare(target,user)
else
prepare(target,user)
/obj/item/device/abductor/gizmo/proc/prepare(var/atom/target, var/mob/living/user)
if(get_dist(target,user)>1)
@@ -225,6 +229,7 @@
icon = 'icons/obj/abductor.dmi'
icon_state = "silencer"
item_state = "gizmo"
origin_tech = "materials=5;magnets=5"
/obj/item/device/abductor/silencer/attack(mob/living/M, mob/user)
if(!AbductorCheck(user))
@@ -246,6 +251,8 @@
var/mob/living/carbon/human/M
for(M in view(2,targloc))
if(M == user)
continue
user << "<span class='notice'>You silence [M.name] radio devices.</span>"
radio_off_mob(M)
@@ -327,7 +334,8 @@ Congratulations! You are now trained for xenobiology research!"}
#define BATON_STUN 0
#define BATON_SLEEP 1
#define BATON_CUFF 2
#define BATON_MODES 3
#define BATON_PROBE 3
#define BATON_MODES 4
/obj/item/weapon/abductor_baton
name = "Advanced Baton"
@@ -336,6 +344,7 @@ Congratulations! You are now trained for xenobiology research!"}
icon_state = "wonderprod"
item_state = "wonderprod"
slot_flags = SLOT_BELT
origin_tech = "materials=6;combat=5;biotech=7"
force = 7
w_class = 3
action_button_name = "Toggle Mode"
@@ -350,6 +359,8 @@ Congratulations! You are now trained for xenobiology research!"}
txt = "sleep inducment"
if(BATON_CUFF)
txt = "restraining"
if(BATON_PROBE)
txt = "probing"
usr << "<span class='notice'>You switch the baton to [txt] mode</span>"
update_icon()
@@ -362,6 +373,8 @@ Congratulations! You are now trained for xenobiology research!"}
icon_state = "wonderprod"
if(BATON_CUFF)
icon_state = "wonderprod"
if(BATON_PROBE)
icon_state = "wonderprod"
/obj/item/weapon/abductor_baton/proc/IsAbductor(var/mob/living/user)
if(!ishuman(user))
@@ -384,11 +397,6 @@ Congratulations! You are now trained for xenobiology research!"}
if(!isliving(target))
return
if(user.a_intent == "help")
target.visible_message("<span class='danger'>[user] probes [target] with [src]!</span>", \
"<span class='userdanger'>[user] probed [target]!</span>")
return
var/mob/living/L = target
user.do_attack_animation(L)
@@ -399,6 +407,8 @@ Congratulations! You are now trained for xenobiology research!"}
SleepAttack(L,user)
if(BATON_CUFF)
CuffAttack(L,user)
if(BATON_PROBE)
ProbeAttack(L,user)
/obj/item/weapon/abductor_baton/attack_self(mob/living/user)
toggle(user)
@@ -450,6 +460,19 @@ Congratulations! You are now trained for xenobiology research!"}
user << "<span class='warning'>You fail to handcuff [C].</span>"
return
/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>")
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]"
/obj/item/weapon/restraints/handcuffs/energy
name = "energy cuffs"
desc = "Energy field restraining the hands."
@@ -505,10 +528,11 @@ Congratulations! You are now trained for xenobiology research!"}
/obj/item/clothing/head/helmet/abductor
name = "Agent Headgear"
desc = "Abducting with style. Spiky style."
desc = "Abducting with style. Spiky style. Prevents digital tracking."
icon_state = "alienhelmet"
item_state = "alienhelmet"
blockTracking = 1
origin_tech = "materials=6;magnets=5"
// Operating Table / Beds / Lockers
@@ -51,6 +51,11 @@
if(experiment != null)
var/points = experiment.points
dat += "Collected Samples : [points] <br>"
dat += "<b>Transfer data in exchange for supplies:</b><br>"
dat += "<a href='?src=\ref[src];dispense=baton'>Advanced Baton</A><br>"
dat += "<a href='?src=\ref[src];dispense=helmet'>Agent Helmet</A><br>"
dat += "<a href='?src=\ref[src];dispense=silencer'>Radio Silencer</A><br>"
dat += "<a href='?src=\ref[src];dispense=tool'>Science Tool</A><br>"
else
dat += "<span class='bad'>NO EXPERIMENT MACHINE DETECTED</span> <br>"
@@ -101,6 +106,16 @@
FlipVest()
else if(href_list["select_disguise"])
SelectDisguise()
else if(href_list["dispense"])
switch(href_list["dispense"])
if("baton")
Dispense(/obj/item/weapon/abductor_baton,cost=2)
if("helmet")
Dispense(/obj/item/clothing/head/helmet/abductor)
if("silencer")
Dispense(/obj/item/device/abductor/silencer)
if("tool")
Dispense(/obj/item/device/abductor/gizmo)
src.updateUsrDialog()
/obj/machinery/abductor/console/proc/TeleporterSet()
@@ -181,4 +196,17 @@
user << "<span class='notice'>You link the vest to the console.</span>"
vest = V
else
..()
..()
/obj/machinery/abductor/console/proc/Dispense(var/item,var/cost=1)
if(experiment && experiment.points >= cost)
experiment.points-=cost
say("Incoming supply!")
if(pad)
flick("alien-pad", pad)
new item(pad.loc)
else
new item(src.loc)
else
say("Insufficent data!")
return
@@ -49,7 +49,7 @@
spawn(0)
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
/obj/machinery/abductor/pad/proc/Retrieve(var/mob/living/carbon/human/target)
/obj/machinery/abductor/pad/proc/Retrieve(var/mob/living/target)
flick("alien-pad", src)
spawn(0)
anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir)
+11
View File
@@ -487,6 +487,17 @@ proc/display_roundstart_logout_report()
return text
/datum/game_mode/proc/printobjectives(var/datum/mind/ply)
var/text = ""
var/count = 1
for(var/datum/objective/objective in ply.objectives)
if(objective.check_completion())
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <font color='green'><b>Success!</b></font>"
else
text += "<br><b>Objective #[count]</b>: [objective.explanation_text] <span class='danger'>Fail.</span>"
count++
return text
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
/datum/game_mode/proc/age_check(client/C)
if(get_remaining_days(C) == 0)
+9 -10
View File
@@ -73,11 +73,10 @@
//Cameras can't track people wearing an agent card or a ninja hood.
if(H.wear_id && istype(H.wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
continue
//Generic variable who's existance is to blame on shitty old ninja code
if(istype(H.head, /obj/item/clothing/head))
var/obj/item/clothing/head/hat = H.head
if(hat.blockTracking)
continue
if(istype(H.head, /obj/item/clothing/head))
var/obj/item/clothing/head/hat = H.head
if(hat.blockTracking)
continue
// Now, are they viewable by a camera? (This is last because it's the most intensive check)
if(!near_camera(M))
@@ -130,10 +129,10 @@
U << "Follow camera mode terminated."
U.cameraFollow = null
return
if(istype(H.head, /obj/item/clothing/head))
var/obj/item/clothing/head/hat = H.head
if(hat.blockTracking)
U << "Follow camera mode terminated."
if(istype(H.head, /obj/item/clothing/head))
var/obj/item/clothing/head/hat = H.head
if(hat.blockTracking)
U << "Follow camera mode terminated."
U.cameraFollow = null
return
if(H.digitalcamo)
@@ -194,4 +193,4 @@
else
if (sorttext(a.c_tag, b.c_tag) < 0)
L.Swap(j, j + 1)
return L
return L
+4
View File
@@ -25,3 +25,7 @@
/turf/unsimulated/floor/abductor
name = "alien floor"
icon_state = "alienpod1"
/turf/unsimulated/floor/abductor/New()
..()
icon_state = "alienpod[rand(1,9)]"
+1 -1
View File
@@ -25,7 +25,7 @@
if(success)
if(target_zone == surgery.location)
if(get_location_accessible(target, target_zone))
if(get_location_accessible(target, target_zone) || surgery.ignore_clothes)
initiate(user, target, target_zone, tool, surgery)
return 1
else
Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 KiB

After

Width:  |  Height:  |  Size: 377 KiB