mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 07:33:34 +01:00
Doors now check for critter access.
Cleaned up the objectives a bit and made a new "kill" one for rev. Cleaned up implants and implanters a bit. Cleaned up the prisoner computer a bit. Sec Huds can be placed on security helmets (Still needs a sprite) The beachball now has in hand sprites (Kor) Cult: Heads other than the Captain and HoS are now able to start as or be converted to a cultist. Loyalty implants will block conversion but will not unconvert cultists. Rev: Station Heads or Head Revs who leave z1 will count as dead so long as they are off of the z level. Loyalty implants will block conversion and will unconvert revs upon injection. Once a mind has been unconverted it may not be reconverted New items: Loyalty implants, small implant that prevents reving/cult The Captain, Warden, Officers, and Detective all start with one already implanted Loyalty Implanter machine on the prison station that implants loyalty implants and may regen implants after a cooldown. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2049 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -14,6 +14,9 @@ datum/mind
|
||||
var/list/datum/objective/objectives = list()
|
||||
var/list/datum/objective/special_verbs = list()
|
||||
|
||||
var/has_been_rev = 0//Tracks if this mind has been a rev or not
|
||||
|
||||
|
||||
proc/transfer_to(mob/new_character)
|
||||
if(current)
|
||||
current.mind = null
|
||||
|
||||
+1
-1
@@ -1240,7 +1240,7 @@
|
||||
icon = 'beach.dmi'
|
||||
icon_state = "ball"
|
||||
name = "beach ball"
|
||||
item_state = "clown"
|
||||
item_state = "beachball"
|
||||
density = 0
|
||||
anchored = 0
|
||||
w_class = 1.0
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
icon_state = "sun"
|
||||
item_state = "sunglasses"
|
||||
protective_temperature = 1300
|
||||
var/already_worn = 0
|
||||
// var/already_worn = 0
|
||||
|
||||
/obj/item/clothing/glasses/thermal
|
||||
name = "Optical Thermal Scanner"
|
||||
@@ -72,25 +72,6 @@
|
||||
icon_state = "eyepatch"
|
||||
item_state = "eyepatch"
|
||||
|
||||
/obj/item/clothing/glasses/hud
|
||||
name = "HUD"
|
||||
desc = "A heads-up display that provides important info in (almost) real time."
|
||||
flags = null //doesn't protect eyes because it's a monocle, duh
|
||||
|
||||
/obj/item/clothing/glasses/hud/health
|
||||
name = "Health Scanner HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
|
||||
icon_state = "healthhud"
|
||||
origin_tech = "magnets=3;biotech=2"
|
||||
var/list/icon/current = list() //the current hud icons
|
||||
|
||||
/obj/item/clothing/glasses/hud/security
|
||||
name = "Security HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
|
||||
icon_state = "securityhud"
|
||||
origin_tech = "magnets=3;combat=2"
|
||||
var/list/icon/current = list() //the current hud icons
|
||||
|
||||
/proc/RoundHealth(health)
|
||||
switch(health)
|
||||
if(100 to INFINITY)
|
||||
|
||||
@@ -151,9 +151,32 @@
|
||||
flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES
|
||||
item_state = "helmet"
|
||||
armor = list(melee = 75, bullet = 10, laser = 50, taser = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
protective_temperature = 500
|
||||
heat_transfer_coefficient = 0.10
|
||||
var/obj/item/clothing/glasses/hud/security/shud = null
|
||||
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if((istype(W,/obj/item/clothing/glasses/hud/security)) && (!istype(src, /obj/item/clothing/head/helmet/space)) && (!shud))
|
||||
user.remove_from_mob(W)
|
||||
shud = W
|
||||
W.loc = src
|
||||
user << "You attach the [W.name] to the [src.name]."
|
||||
desc = "Standard Security gear. This helmet has a [shud.name] attached to it."
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
if(shud)
|
||||
shud.loc = get_turf(src)
|
||||
user << "You take the [shud.name] off of the [src.name]."
|
||||
shud = null
|
||||
desc = "Standard Security gear."
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/head/secsoft
|
||||
name = "Soft Cap"
|
||||
|
||||
@@ -349,17 +349,3 @@
|
||||
var/stop = 0.0
|
||||
var/screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text
|
||||
|
||||
/obj/machinery/computer/prisoner
|
||||
name = "Prisoner Management"
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "explosive"
|
||||
req_access = list(access_armory)
|
||||
circuit = "/obj/item/weapon/circuitboard/prisoner"
|
||||
|
||||
var/id = 0.0
|
||||
var/temp = null
|
||||
var/status = 0
|
||||
var/timeleft = 60
|
||||
var/stop = 0.0
|
||||
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed
|
||||
var/malf_access = 0
|
||||
@@ -963,84 +963,6 @@
|
||||
dispenser = 1
|
||||
|
||||
|
||||
/obj/item/weapon/implant
|
||||
name = "implant"
|
||||
var/implanted = null
|
||||
var/mob/imp_in = null
|
||||
var/color = "b"
|
||||
|
||||
/obj/item/weapon/implant/freedom
|
||||
name = "freedom"
|
||||
desc = "Use this to escape from those evil Red Shirts."
|
||||
var/uses = 1.0
|
||||
color = "r"
|
||||
var/activation_emote = "chuckle"
|
||||
|
||||
/obj/item/weapon/implant/tracking
|
||||
name = "tracking"
|
||||
desc = "Track with this."
|
||||
var/frequency = 1451
|
||||
var/id = 1.0
|
||||
|
||||
/obj/item/weapon/implant/explosive
|
||||
name = "explosive"
|
||||
desc = "And boom goes the weasel."
|
||||
|
||||
/obj/item/weapon/implant/chem
|
||||
name = "chem"
|
||||
|
||||
/obj/item/weapon/implantcase
|
||||
name = "Glass Case"
|
||||
desc = "A case containing an implant."
|
||||
icon_state = "implantcase-0"
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
item_state = "implantcase"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 1.0
|
||||
|
||||
/obj/item/weapon/implantcase/tracking
|
||||
name = "Glass Case- 'Tracking'"
|
||||
desc = "A case containing a tracking implant."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implantcase/explosive
|
||||
name = "Glass Case- 'Explosive'"
|
||||
desc = "A case containing an explosive implant."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-r"
|
||||
|
||||
/obj/item/weapon/implantcase/chem
|
||||
name = "Glass Case- 'Chem'"
|
||||
desc = "A case containing a chemical implant."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
/obj/item/weapon/implanter
|
||||
name = "implanter"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implanter0"
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
item_state = "syringe_0"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
|
||||
/obj/item/weapon/implantpad
|
||||
name = "implantpad"
|
||||
desc = "Used to modify implants."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantpad-0"
|
||||
var/obj/item/weapon/implantcase/case = null
|
||||
var/broadcasting = null
|
||||
var/listening = 1.0
|
||||
item_state = "electronic"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
|
||||
|
||||
/obj/item/weapon/locator
|
||||
name = "locator"
|
||||
desc = "Used to track those with locater implants."
|
||||
|
||||
@@ -10,16 +10,18 @@
|
||||
return istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.cult)
|
||||
|
||||
/proc/is_convertable_to_cult(datum/mind/mind)
|
||||
return istype(mind) && \
|
||||
istype(mind.current, /mob/living/carbon/human) && \
|
||||
!(mind.assigned_role in head_positions) && \
|
||||
!(mind.assigned_role in list("Security Officer", "Detective", "Chaplain", "Warden"))
|
||||
if(!istype(mind)) return 0
|
||||
if(istype(mind.current, /mob/living/carbon/human) && !(mind.assigned_role in list("Captain", "Head of Security", "Security Officer", "Detective", "Chaplain", "Warden"))) return 0
|
||||
for(var/obj/item/weapon/implant/loyalty/L in mind.current)
|
||||
if(L && L.implanted)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/datum/game_mode/cult
|
||||
name = "cult"
|
||||
config_tag = "cult"
|
||||
restricted_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
|
||||
restricted_jobs = list("Chaplain", "Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Security")
|
||||
required_players = 15
|
||||
required_enemies = 3
|
||||
|
||||
|
||||
+387
-343
@@ -1,394 +1,438 @@
|
||||
datum
|
||||
objective
|
||||
var
|
||||
datum/mind/owner//Who owns the objective.
|
||||
explanation_text//What that person is supposed to do.
|
||||
datum/mind/target//If they are focused on a particular person.
|
||||
target_amount//If they are focused on a particular number. Steal objectives have their own counter.
|
||||
datum/objective
|
||||
var
|
||||
datum/mind/owner//Who owns the objective.
|
||||
explanation_text//What that person is supposed to do.
|
||||
datum/mind/target//If they are focused on a particular person.
|
||||
target_amount//If they are focused on a particular number. Steal objectives have their own counter.
|
||||
|
||||
New(var/text)
|
||||
if(text)
|
||||
explanation_text = text
|
||||
New(var/text)
|
||||
if(text)
|
||||
explanation_text = text
|
||||
|
||||
proc
|
||||
check_completion()
|
||||
proc/check_completion()
|
||||
return 1
|
||||
|
||||
proc/find_target()
|
||||
var/list/possible_targets = list()
|
||||
for(var/datum/mind/possible_target in ticker.minds)
|
||||
if(possible_target != owner && ishuman(possible_target.current))
|
||||
possible_targets += possible_target
|
||||
if(possible_targets.len > 0)
|
||||
target = pick(possible_targets)
|
||||
|
||||
|
||||
proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned.
|
||||
for(var/datum/mind/possible_target in ticker.minds)
|
||||
if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) )
|
||||
target = possible_target
|
||||
break
|
||||
|
||||
|
||||
|
||||
datum/objective/assassinate
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
|
||||
check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == 2 || istype(target.current.loc.loc, /area/tdome) || issilicon(target.current) || isbrain(target.current)) //Assuming this works, people in the thunderdome and borgs now count as dead for traitor objectives. --NeoFite
|
||||
return 1
|
||||
|
||||
find_target()
|
||||
//world << "DEBUG: proc/find_target():"
|
||||
var/list/possible_targets = list()
|
||||
|
||||
for(var/datum/mind/possible_target in ticker.minds)
|
||||
//world << "-> [possible_target.current.real_name]"
|
||||
if(possible_target != owner && ishuman(possible_target.current))
|
||||
possible_targets += possible_target
|
||||
|
||||
if(possible_targets.len > 0)
|
||||
target = pick(possible_targets)
|
||||
|
||||
find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned.
|
||||
for(var/datum/mind/possible_target in ticker.minds)
|
||||
if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) )
|
||||
target = possible_target
|
||||
break
|
||||
|
||||
assassinate
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
return target
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
return target
|
||||
|
||||
check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == 2 || istype(target.current.loc.loc, /area/tdome) || issilicon(target.current) || isbrain(target.current)) //Assuming this works, people in the thunderdome and borgs now count as dead for traitor objectives. --NeoFite
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
debrain//I want braaaainssss
|
||||
find_target()
|
||||
..()
|
||||
|
||||
if(target && target.current)
|
||||
explanation_text = "Steal the brain of [target.current.real_name]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
return target
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
|
||||
if(target && target.current)
|
||||
explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
return target
|
||||
|
||||
check_completion()
|
||||
if(!target)//If it's a free objective.
|
||||
return 1
|
||||
if(!owner.current||owner.current.stat==2)//If you're otherwise dead.
|
||||
return 0
|
||||
var/list/all_items = owner.current.get_contents()
|
||||
for(var/obj/item/device/mmi/mmi in all_items)
|
||||
if(mmi.brainmob&&mmi.brainmob.mind==target) return 1
|
||||
for(var/obj/item/brain/brain in all_items)
|
||||
if(brain.brainmob&&brain.brainmob.mind==target) return 1
|
||||
else
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
protect//The opposite of killing a dude.
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Protect [target.current.real_name], the [target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
return target
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
datum/objective/mutiny
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
return target
|
||||
|
||||
check_completion()
|
||||
if(!target)//If it's a free objective.
|
||||
return 1
|
||||
if(target.current)
|
||||
if(target.current.stat == 2 || istype(target.current.loc.loc, /area/tdome) || issilicon(target.current) || isbrain(target.current))
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
|
||||
check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == 2)
|
||||
return 1
|
||||
else if(target.current.z != 1)//If they leave the station they count as dead for this
|
||||
return 2
|
||||
else
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
datum/objective/debrain//I want braaaainssss
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Steal the brain of [target.current.real_name]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
|
||||
check_completion()
|
||||
if(!target)//If it's a free objective.
|
||||
return 1
|
||||
if(!owner.current||owner.current.stat==2)//If you're otherwise dead.
|
||||
return 0
|
||||
var/list/all_items = owner.current.get_contents()
|
||||
for(var/obj/item/device/mmi/mmi in all_items)
|
||||
if(mmi.brainmob&&mmi.brainmob.mind==target) return 1
|
||||
for(var/obj/item/brain/brain in all_items)
|
||||
if(brain.brainmob&&brain.brainmob.mind==target) return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
datum/objective/protect//The opposite of killing a dude.
|
||||
find_target()
|
||||
..()
|
||||
if(target && target.current)
|
||||
explanation_text = "Protect [target.current.real_name], the [target.assigned_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
|
||||
find_target_by_role(role, role_type=0)
|
||||
..(role, role_type)
|
||||
if(target && target.current)
|
||||
explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]."
|
||||
else
|
||||
explanation_text = "Free Objective"
|
||||
return target
|
||||
|
||||
|
||||
check_completion()
|
||||
if(!target)//If it's a free objective.
|
||||
return 1
|
||||
if(target.current)
|
||||
if(target.current.stat == 2 || istype(target.current.loc.loc, /area/tdome) || issilicon(target.current) || isbrain(target.current))
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
datum/objective/hijack
|
||||
explanation_text = "Hijack the emergency shuttle by escaping alone."
|
||||
|
||||
|
||||
check_completion()
|
||||
if(istype(owner.current, /mob/living/silicon))
|
||||
return 0
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat ==2)
|
||||
return 0
|
||||
var/area/shuttle = locate(/area/shuttle/escape/centcom)
|
||||
var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai)
|
||||
for(var/mob/living/player in world)
|
||||
if(player.type in protected_mobs) continue
|
||||
if (player.mind && (player.mind != owner))
|
||||
if (player.stat != 2) //they're not dead
|
||||
if (get_turf(player) in shuttle)
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
hijack
|
||||
explanation_text = "Hijack the emergency shuttle by escaping alone."
|
||||
|
||||
check_completion()
|
||||
if(istype(owner.current, /mob/living/silicon))
|
||||
return 0
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
|
||||
if(!owner.current || owner.current.stat ==2)
|
||||
return 0
|
||||
|
||||
var/area/shuttle = locate(/area/shuttle/escape/centcom)
|
||||
var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai)
|
||||
for(var/mob/living/player in world)
|
||||
if(player.type in protected_mobs) continue
|
||||
if (player.mind && (player.mind != owner))
|
||||
if (player.stat != 2) //they're not dead
|
||||
if (get_turf(player) in shuttle)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
|
||||
block
|
||||
explanation_text = "Do not allow any humans to escape on the shuttle alive."
|
||||
|
||||
check_completion()
|
||||
if(!istype(owner.current, /mob/living/silicon))
|
||||
return 0
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
datum/objective/block
|
||||
explanation_text = "Do not allow any humans to escape on the shuttle alive."
|
||||
|
||||
if(!owner.current)
|
||||
return 0
|
||||
|
||||
var/area/shuttle = locate(/area/shuttle/escape/centcom)
|
||||
var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai, /mob/living/silicon/robot)
|
||||
for(var/mob/living/player in world)
|
||||
if(player.type in protected_mobs) continue
|
||||
if (player.mind)
|
||||
if (player.stat != 2)
|
||||
if (get_turf(player) in shuttle)
|
||||
return 0
|
||||
check_completion()
|
||||
if(!istype(owner.current, /mob/living/silicon))
|
||||
return 0
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
if(!owner.current)
|
||||
return 0
|
||||
var/area/shuttle = locate(/area/shuttle/escape/centcom)
|
||||
var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai, /mob/living/silicon/robot)
|
||||
for(var/mob/living/player in world)
|
||||
if(player.type in protected_mobs) continue
|
||||
if (player.mind)
|
||||
if (player.stat != 2)
|
||||
if (get_turf(player) in shuttle)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
return 1
|
||||
|
||||
escape
|
||||
explanation_text = "Escape on the shuttle alive."
|
||||
|
||||
check_completion()
|
||||
if(issilicon(owner.current))
|
||||
return 0
|
||||
if(isbrain(owner.current))
|
||||
return 0
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
datum/objective/escape
|
||||
explanation_text = "Escape on the shuttle alive."
|
||||
|
||||
if(!owner.current || owner.current.stat ==2)
|
||||
return 0
|
||||
|
||||
var/turf/location = get_turf(owner.current.loc)
|
||||
if(!location)
|
||||
return 0
|
||||
check_completion()
|
||||
if(issilicon(owner.current))
|
||||
return 0
|
||||
if(isbrain(owner.current))
|
||||
return 0
|
||||
if(emergency_shuttle.location<2)
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat ==2)
|
||||
return 0
|
||||
var/turf/location = get_turf(owner.current.loc)
|
||||
if(!location)
|
||||
return 0
|
||||
var/area/check_area = location.loc
|
||||
if(istype(check_area, /area/shuttle/escape/centcom))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
var/area/check_area = location.loc
|
||||
|
||||
if(istype(check_area, /area/shuttle/escape/centcom))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
survive
|
||||
explanation_text = "Stay alive until the end."
|
||||
datum/objective/survive
|
||||
explanation_text = "Stay alive until the end."
|
||||
|
||||
check_completion()
|
||||
if(issilicon(owner.current) && owner.current != owner.original)
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat == 2 || isbrain(owner.current)) //Brains no longer win survive objectives. --NEO
|
||||
return 0
|
||||
return 1
|
||||
|
||||
nuclear
|
||||
explanation_text = "Destroy the station with a nuclear device."
|
||||
check_completion()
|
||||
if(issilicon(owner.current) && owner.current != owner.original)
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat == 2 || isbrain(owner.current)) //Brains no longer win survive objectives. --NEO
|
||||
return 0
|
||||
return 1
|
||||
|
||||
steal
|
||||
var/obj/item/steal_target
|
||||
var/target_name
|
||||
|
||||
var/global/possible_items[] = list(
|
||||
"the captain's antique laser gun" = /obj/item/weapon/gun/energy/laser/captain,
|
||||
"a hand teleporter" = /obj/item/weapon/hand_tele,
|
||||
"an RCD" = /obj/item/weapon/rcd,
|
||||
"a jetpack" = /obj/item/weapon/tank/jetpack,
|
||||
"a captains jumpsuit" = /obj/item/clothing/under/rank/captain,
|
||||
"functional ai" = /obj/item/device/aicard,
|
||||
"a pair of magboots" = /obj/item/clothing/shoes/magboots,
|
||||
"the station blueprints" = /obj/item/blueprints,
|
||||
"thermal optics" = /obj/item/clothing/glasses/thermal,
|
||||
"a mining rig suit" = /obj/item/clothing/suit/space/rig,
|
||||
"a nasa voidsuit" = /obj/item/clothing/suit/space/nasavoid,
|
||||
"28 moles of plasma (full tank)" = /obj/item/weapon/tank,
|
||||
)
|
||||
|
||||
var/global/possible_items_special[] = list(
|
||||
"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,
|
||||
"nuclear gun" = /obj/item/weapon/gun/energy/nuclear,
|
||||
"diamond drill" = /obj/item/weapon/pickaxe/diamonddrill,
|
||||
"bag of holding" = /obj/item/weapon/storage/backpack/holding,
|
||||
"hyper-capacity cell" = /obj/item/weapon/cell/hyper,
|
||||
"10 diamonds" = /obj/item/stack/sheet/diamond,
|
||||
"50 gold bars" = /obj/item/stack/sheet/gold,
|
||||
"25 refined uranium bars" = /obj/item/stack/sheet/uranium,
|
||||
)
|
||||
datum/objective/nuclear
|
||||
explanation_text = "Destroy the station with a nuclear device."
|
||||
|
||||
proc/set_target(item_name)
|
||||
target_name = item_name
|
||||
steal_target = possible_items[target_name]
|
||||
if (!steal_target )
|
||||
steal_target = possible_items_special[target_name]
|
||||
explanation_text = "Steal [target_name]."
|
||||
return steal_target
|
||||
|
||||
find_target()
|
||||
return set_target(pick(possible_items))
|
||||
|
||||
proc/select_target()
|
||||
var/list/possible_items_all = possible_items+possible_items_special+"custom"
|
||||
var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all
|
||||
datum/objective/steal
|
||||
var/obj/item/steal_target
|
||||
var/target_name
|
||||
|
||||
if (!new_target) return
|
||||
var/global/possible_items[] = list(
|
||||
"the captain's antique laser gun" = /obj/item/weapon/gun/energy/laser/captain,
|
||||
"a hand teleporter" = /obj/item/weapon/hand_tele,
|
||||
"an RCD" = /obj/item/weapon/rcd,
|
||||
"a jetpack" = /obj/item/weapon/tank/jetpack,
|
||||
"a captains jumpsuit" = /obj/item/clothing/under/rank/captain,
|
||||
"functional ai" = /obj/item/device/aicard,
|
||||
"a pair of magboots" = /obj/item/clothing/shoes/magboots,
|
||||
"the station blueprints" = /obj/item/blueprints,
|
||||
"thermal optics" = /obj/item/clothing/glasses/thermal,
|
||||
"a mining rig suit" = /obj/item/clothing/suit/space/rig,
|
||||
"a nasa voidsuit" = /obj/item/clothing/suit/space/nasavoid,
|
||||
"28 moles of plasma (full tank)" = /obj/item/weapon/tank,
|
||||
)
|
||||
|
||||
if (new_target == "custom")
|
||||
var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
|
||||
if (!custom_target) return
|
||||
var/tmp_obj = new custom_target
|
||||
var/custom_name = tmp_obj:name
|
||||
del(tmp_obj)
|
||||
custom_name = input("Enter target name:", "Objective target", custom_name) as text|null
|
||||
if (!custom_name) return
|
||||
target_name = custom_name
|
||||
steal_target = custom_target
|
||||
explanation_text = "Steal [target_name]."
|
||||
var/global/possible_items_special[] = list(
|
||||
"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,
|
||||
"nuclear gun" = /obj/item/weapon/gun/energy/nuclear,
|
||||
"diamond drill" = /obj/item/weapon/pickaxe/diamonddrill,
|
||||
"bag of holding" = /obj/item/weapon/storage/backpack/holding,
|
||||
"hyper-capacity cell" = /obj/item/weapon/cell/hyper,
|
||||
"10 diamonds" = /obj/item/stack/sheet/diamond,
|
||||
"50 gold bars" = /obj/item/stack/sheet/gold,
|
||||
"25 refined uranium bars" = /obj/item/stack/sheet/uranium,
|
||||
)
|
||||
|
||||
else
|
||||
set_target(new_target)
|
||||
|
||||
return steal_target
|
||||
proc/set_target(item_name)
|
||||
target_name = item_name
|
||||
steal_target = possible_items[target_name]
|
||||
if (!steal_target )
|
||||
steal_target = possible_items_special[target_name]
|
||||
explanation_text = "Steal [target_name]."
|
||||
return steal_target
|
||||
|
||||
check_completion()
|
||||
if(!steal_target || !owner.current) return 0
|
||||
if(!isliving(owner.current)) return 0
|
||||
var/list/all_items = owner.current.get_contents()
|
||||
switch (target_name)
|
||||
if("28 moles of plasma (full tank)","10 diamonds","50 gold bars","25 refined uranium bars")
|
||||
var/target_amount = text2num(target_name)//Non-numbers are ignored.
|
||||
var/found_amount = 0.0//Always starts as zero.
|
||||
for(var/obj/item/I in all_items)
|
||||
if(!istype(I, steal_target)) continue//If it's not actually that item.
|
||||
found_amount += (target_name=="28 moles of plasma (full tank)" ? (I:air_contents:toxins) : (I:amount))
|
||||
return found_amount>=target_amount
|
||||
if("50 coins (in bag)")
|
||||
var/obj/item/weapon/moneybag/B = locate() in all_items
|
||||
if(B)
|
||||
var/target = text2num(target_name)
|
||||
var/found_amount = 0.0
|
||||
for(var/obj/item/weapon/coin/C in B)
|
||||
found_amount++
|
||||
return found_amount>=target
|
||||
if("functional ai")
|
||||
|
||||
find_target()
|
||||
return set_target(pick(possible_items))
|
||||
|
||||
|
||||
proc/select_target()
|
||||
var/list/possible_items_all = possible_items+possible_items_special+"custom"
|
||||
var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all
|
||||
if (!new_target) return
|
||||
if (new_target == "custom")
|
||||
var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
|
||||
if (!custom_target) return
|
||||
var/tmp_obj = new custom_target
|
||||
var/custom_name = tmp_obj:name
|
||||
del(tmp_obj)
|
||||
custom_name = input("Enter target name:", "Objective target", custom_name) as text|null
|
||||
if (!custom_name) return
|
||||
target_name = custom_name
|
||||
steal_target = custom_target
|
||||
explanation_text = "Steal [target_name]."
|
||||
else
|
||||
set_target(new_target)
|
||||
return steal_target
|
||||
|
||||
|
||||
check_completion()
|
||||
if(!steal_target || !owner.current) return 0
|
||||
if(!isliving(owner.current)) return 0
|
||||
var/list/all_items = owner.current.get_contents()
|
||||
switch (target_name)
|
||||
if("28 moles of plasma (full tank)","10 diamonds","50 gold bars","25 refined uranium bars")
|
||||
var/target_amount = text2num(target_name)//Non-numbers are ignored.
|
||||
var/found_amount = 0.0//Always starts as zero.
|
||||
for(var/obj/item/I in all_items)
|
||||
if(!istype(I, steal_target)) continue//If it's not actually that item.
|
||||
found_amount += (target_name=="28 moles of plasma (full tank)" ? (I:air_contents:toxins) : (I:amount))
|
||||
return found_amount>=target_amount
|
||||
if("50 coins (in bag)")
|
||||
var/obj/item/weapon/moneybag/B = locate() in all_items
|
||||
if(B)
|
||||
var/target = text2num(target_name)
|
||||
var/found_amount = 0.0
|
||||
for(var/obj/item/weapon/coin/C in B)
|
||||
found_amount++
|
||||
return found_amount>=target
|
||||
if("functional ai")
|
||||
// world << "dude's after an AI, time to check for one."
|
||||
for(var/obj/item/device/aicard/C in all_items)
|
||||
for(var/obj/item/device/aicard/C in all_items)
|
||||
// world << "Found an intelicard, checking it for an AI"
|
||||
for(var/mob/living/silicon/ai/M in C)
|
||||
for(var/mob/living/silicon/ai/M in C)
|
||||
// world << "Found an AI, checking if it's alive"
|
||||
if(istype(M, /mob/living/silicon/ai) && M.stat != 2)
|
||||
if(istype(M, /mob/living/silicon/ai) && M.stat != 2)
|
||||
// world << "yay, you win!"
|
||||
return 1
|
||||
else
|
||||
for(var/obj/I in all_items)
|
||||
if(istype(I, steal_target))
|
||||
return 1
|
||||
return 0
|
||||
return 1
|
||||
else
|
||||
for(var/obj/I in all_items)
|
||||
if(istype(I, steal_target))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
download
|
||||
proc/gen_amount_goal()
|
||||
target_amount = rand(10,20)
|
||||
explanation_text = "Download [target_amount] research levels."
|
||||
return target_amount
|
||||
|
||||
check_completion()
|
||||
if(!ishuman(owner.current))
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat == 2)
|
||||
return 0
|
||||
if(!(istype(owner.current:wear_suit, /obj/item/clothing/suit/space/space_ninja)&&owner.current:wear_suit:s_initialized))
|
||||
return 0
|
||||
var/current_amount
|
||||
var/obj/item/clothing/suit/space/space_ninja/S = owner.current:wear_suit
|
||||
if(!S.stored_research.len)
|
||||
return 0
|
||||
|
||||
datum/objective/download
|
||||
proc/gen_amount_goal()
|
||||
target_amount = rand(10,20)
|
||||
explanation_text = "Download [target_amount] research levels."
|
||||
return target_amount
|
||||
|
||||
|
||||
check_completion()
|
||||
if(!ishuman(owner.current))
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat == 2)
|
||||
return 0
|
||||
if(!(istype(owner.current:wear_suit, /obj/item/clothing/suit/space/space_ninja)&&owner.current:wear_suit:s_initialized))
|
||||
return 0
|
||||
var/current_amount
|
||||
var/obj/item/clothing/suit/space/space_ninja/S = owner.current:wear_suit
|
||||
if(!S.stored_research.len)
|
||||
return 0
|
||||
else
|
||||
for(var/datum/tech/current_data in S.stored_research)
|
||||
if(current_data.level>1) current_amount+=(current_data.level-1)
|
||||
if(current_amount<target_amount) return 0
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
datum/objective/capture
|
||||
proc/gen_amount_goal()
|
||||
target_amount = rand(5,10)
|
||||
explanation_text = "Accumulate [target_amount] capture points."
|
||||
return target_amount
|
||||
|
||||
|
||||
check_completion()//Basically runs through all the mobs in the area to determine how much they are worth.
|
||||
var/captured_amount = 0
|
||||
var/area/centcom/holding/A = locate()
|
||||
for(var/mob/living/carbon/human/M in A)//Humans.
|
||||
if(M.stat==2)//Dead folks are worth less.
|
||||
captured_amount+=0.5
|
||||
continue
|
||||
captured_amount+=1
|
||||
for(var/mob/living/carbon/monkey/M in A)//Monkeys are almost worthless, you failure.
|
||||
captured_amount+=0.1
|
||||
for(var/mob/living/carbon/alien/larva/M in A)//Larva are important for research.
|
||||
if(M.stat==2)
|
||||
captured_amount+=0.5
|
||||
continue
|
||||
captured_amount+=1
|
||||
for(var/mob/living/carbon/alien/humanoid/M in A)//Aliens are worth twice as much as humans.
|
||||
if(istype(M, /mob/living/carbon/alien/humanoid/queen))//Queens are worth three times as much as humans.
|
||||
if(M.stat==2)
|
||||
captured_amount+=1.5
|
||||
else
|
||||
for(var/datum/tech/current_data in S.stored_research)
|
||||
if(current_data.level>1) current_amount+=(current_data.level-1)
|
||||
if(current_amount<target_amount) return 0
|
||||
return 1
|
||||
captured_amount+=3
|
||||
continue
|
||||
if(M.stat==2)
|
||||
captured_amount+=1
|
||||
continue
|
||||
captured_amount+=2
|
||||
if(captured_amount<target_amount)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
capture
|
||||
proc/gen_amount_goal()
|
||||
target_amount = rand(5,10)
|
||||
explanation_text = "Accumulate [target_amount] capture points."
|
||||
return target_amount
|
||||
|
||||
check_completion()//Basically runs through all the mobs in the area to determine how much they are worth.
|
||||
var/captured_amount = 0
|
||||
var/area/centcom/holding/A = locate()
|
||||
for(var/mob/living/carbon/human/M in A)//Humans.
|
||||
if(M.stat==2)//Dead folks are worth less.
|
||||
captured_amount+=0.5
|
||||
continue
|
||||
captured_amount+=1
|
||||
for(var/mob/living/carbon/monkey/M in A)//Monkeys are almost worthless, you failure.
|
||||
captured_amount+=0.1
|
||||
for(var/mob/living/carbon/alien/larva/M in A)//Larva are important for research.
|
||||
if(M.stat==2)
|
||||
captured_amount+=0.5
|
||||
continue
|
||||
captured_amount+=1
|
||||
for(var/mob/living/carbon/alien/humanoid/M in A)//Aliens are worth twice as much as humans.
|
||||
if(istype(M, /mob/living/carbon/alien/humanoid/queen))//Queens are worth three times as much as humans.
|
||||
if(M.stat==2)
|
||||
captured_amount+=1.5
|
||||
else
|
||||
captured_amount+=3
|
||||
continue
|
||||
if(M.stat==2)
|
||||
captured_amount+=1
|
||||
continue
|
||||
captured_amount+=2
|
||||
if(captured_amount<target_amount)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
absorb
|
||||
proc/gen_amount_goal() //this doesn't work -- should work now, changed it a bit -- Urist
|
||||
target_amount = rand (4,6)
|
||||
if (ticker)
|
||||
var/n_p = 1 //autowin
|
||||
if (ticker.current_state == GAME_STATE_SETTING_UP)
|
||||
for(var/mob/new_player/P in world)
|
||||
if(P.client && P.ready && P.mind!=owner)
|
||||
n_p ++
|
||||
else if (ticker.current_state == GAME_STATE_PLAYING)
|
||||
for(var/mob/living/carbon/human/P in world)
|
||||
if(P.client && !(P.mind in ticker.mode.changelings) && P.mind!=owner)
|
||||
n_p ++
|
||||
target_amount = min(target_amount, n_p)
|
||||
datum/objective/absorb
|
||||
proc/gen_amount_goal() //this doesn't work -- should work now, changed it a bit -- Urist
|
||||
target_amount = rand (4,6)
|
||||
if (ticker)
|
||||
var/n_p = 1 //autowin
|
||||
if (ticker.current_state == GAME_STATE_SETTING_UP)
|
||||
for(var/mob/new_player/P in world)
|
||||
if(P.client && P.ready && P.mind!=owner)
|
||||
n_p ++
|
||||
else if (ticker.current_state == GAME_STATE_PLAYING)
|
||||
for(var/mob/living/carbon/human/P in world)
|
||||
if(P.client && !(P.mind in ticker.mode.changelings) && P.mind!=owner)
|
||||
n_p ++
|
||||
target_amount = min(target_amount, n_p)
|
||||
|
||||
explanation_text = "Absorb [target_amount] compatible genomes."
|
||||
return target_amount
|
||||
explanation_text = "Absorb [target_amount] compatible genomes."
|
||||
return target_amount
|
||||
|
||||
check_completion()
|
||||
if(owner && owner.current && owner.current.absorbed_dna && ((owner.current.absorbed_dna.len - 1) >= target_amount))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
check_completion()
|
||||
if(owner && owner.current && owner.current.absorbed_dna && ((owner.current.absorbed_dna.len - 1) >= target_amount))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
/* Isn't suited for global objectives
|
||||
/*---------CULTIST----------*/
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
required_enemies = 3
|
||||
|
||||
var/finished = 0
|
||||
var/checkwin_counter = 0
|
||||
var/const/max_headrevs = 3
|
||||
var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
@@ -109,10 +110,20 @@
|
||||
send_intercept()
|
||||
..()
|
||||
|
||||
|
||||
/datum/game_mode/revolution/process()
|
||||
checkwin_counter++
|
||||
if(checkwin_counter >= 20)
|
||||
if(!finished)
|
||||
ticker.mode.check_win()
|
||||
checkwin_counter = 0
|
||||
return 0
|
||||
|
||||
|
||||
/datum/game_mode/proc/forge_revolutionary_objectives(var/datum/mind/rev_mind)
|
||||
var/list/heads = get_living_heads()
|
||||
for(var/datum/mind/head_mind in heads)
|
||||
var/datum/objective/assassinate/rev_obj = new
|
||||
var/datum/objective/mutiny/rev_obj = new
|
||||
rev_obj.owner = rev_mind
|
||||
rev_obj.target = head_mind
|
||||
rev_obj.explanation_text = "Assassinate [head_mind.current.real_name], the [head_mind.assigned_role]."
|
||||
@@ -314,7 +325,7 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
/datum/game_mode/revolution/declare_completion()
|
||||
if(finished == 1)
|
||||
world << "\red <FONT size = 3><B> The heads of staff were killed! The revolutionaries win!</B></FONT>"
|
||||
world << "\red <FONT size = 3><B> The heads of staff were killed or abandoned the station! The revolutionaries win!</B></FONT>"
|
||||
else if(finished == 2)
|
||||
world << "\red <FONT size = 3><B> The heads of staff managed to stop the revolution!</B></FONT>"
|
||||
..()
|
||||
@@ -334,7 +345,10 @@
|
||||
var/list/names = new
|
||||
for(var/datum/mind/i in revolutionaries)
|
||||
if(i.current)
|
||||
names += i.current.real_name + ((i.current.stat==2)?" (Dead)":"")
|
||||
var/hstatus = "Dead"
|
||||
if((i.current.z != 1) && (i.current.stat!=2))
|
||||
hstatus = "Abandoned the station"
|
||||
names += i.current.real_name + " [hstatus]"
|
||||
else
|
||||
names += "[i.key] (character destroyed)"
|
||||
if (revolutionaries.len!=0)
|
||||
@@ -354,7 +368,10 @@
|
||||
var/list/names = new
|
||||
for(var/datum/mind/i in heads)
|
||||
if(i.current)
|
||||
names += i.current.real_name + ((i.current.stat==2)?" (Dead)":"") + ((i in targets)?"(target)":"")
|
||||
var/hstatus = "Dead"
|
||||
if((i.current.z != 1) && (i.current.stat!=2))
|
||||
hstatus = "Abandoned the station"
|
||||
names += i.current.real_name + " [hstatus] " + ((i in targets)?"(target)":"")
|
||||
else
|
||||
names += "[i.key] (character destroyed)" + ((i in targets)?"(target)":"")
|
||||
if (heads.len!=0)
|
||||
@@ -363,6 +380,7 @@
|
||||
else
|
||||
world << "There were no any <FONT size = 2><B>heads of staff</B></FONT> on the station."
|
||||
|
||||
|
||||
/proc/is_convertable_to_rev(datum/mind/mind)
|
||||
return istype(mind) && \
|
||||
istype(mind.current, /mob/living/carbon/human) && \
|
||||
|
||||
@@ -133,6 +133,19 @@
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/obj/proc/check_access_list(var/list/L)
|
||||
if(!src.req_access) return 1
|
||||
if(!istype(src.req_access, /list)) return 1
|
||||
if(!src.req_access.len) return 1
|
||||
if(!L) return 0
|
||||
if(!istype(L, /list)) return 0
|
||||
for(var/req in src.req_access)
|
||||
if(!(req in L)) //doesn't have this access
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/proc/get_access(job)
|
||||
switch(job)
|
||||
if("Geneticist")
|
||||
|
||||
@@ -270,6 +270,9 @@
|
||||
src.equip_if_possible(new /obj/item/device/detective_scanner(src), slot_in_backpack)
|
||||
src.equip_if_possible(new /obj/item/weapon/zippo(src), slot_l_store)
|
||||
src.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(src), slot_h_store)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
|
||||
if ("Medical Doctor")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_med (src), slot_ears) // -- TLE
|
||||
@@ -293,7 +296,9 @@
|
||||
src.equip_if_possible(new /obj/item/clothing/head/caphat(src), slot_head)
|
||||
src.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses)
|
||||
src.equip_if_possible(new /obj/item/weapon/storage/id_kit(src), slot_in_backpack)
|
||||
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
|
||||
if ("Security Officer")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE
|
||||
@@ -306,6 +311,9 @@
|
||||
src.equip_if_possible(new /obj/item/clothing/shoes/jackboots(src), slot_shoes)
|
||||
src.equip_if_possible(new /obj/item/weapon/handcuffs(src), slot_in_backpack)
|
||||
src.equip_if_possible(new /obj/item/weapon/handcuffs(src), slot_s_store)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
|
||||
if ("Warden")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE
|
||||
@@ -322,6 +330,9 @@
|
||||
src.equip_if_possible(new /obj/item/weapon/gun/energy/taser(src), slot_s_store)
|
||||
src.equip_if_possible(new /obj/item/weapon/handcuffs(src), slot_in_backpack)
|
||||
src.equip_if_possible(new /obj/item/device/flash(src), slot_l_store)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
|
||||
if ("Scientist")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_sci (src), slot_ears)
|
||||
@@ -347,6 +358,9 @@
|
||||
src.equip_if_possible(new /obj/item/weapon/handcuffs(src), slot_in_backpack)
|
||||
src.equip_if_possible(new /obj/item/weapon/gun/energy(src), slot_s_store)
|
||||
src.equip_if_possible(new /obj/item/device/flash(src), slot_l_store)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)
|
||||
L.imp_in = src
|
||||
L.implanted = 1
|
||||
|
||||
if ("Head of Personnel")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/heads/hop (src), slot_ears) // -- TLE
|
||||
|
||||
@@ -481,10 +481,9 @@
|
||||
|
||||
switch(ticker.mode.name)
|
||||
if ("revolution")
|
||||
if (src.occupant.mind in ticker.mode:revolutionaries)
|
||||
ticker.mode:add_revolutionary(src.occupant.mind)
|
||||
if(src.occupant.mind in ticker.mode:revolutionaries)
|
||||
ticker.mode:update_all_rev_icons() //So the icon actually appears
|
||||
if (src.occupant.mind in ticker.mode:head_revolutionaries)
|
||||
if(src.occupant.mind in ticker.mode:head_revolutionaries)
|
||||
ticker.mode:update_all_rev_icons()
|
||||
if ("nuclear emergency")
|
||||
if (src.occupant.mind in ticker.mode:syndicates)
|
||||
|
||||
@@ -1,132 +1,103 @@
|
||||
/obj/machinery/computer/prisoner/attack_ai(var/mob/user as mob)
|
||||
user << "\red Access Denied"
|
||||
if(user.icon_state == "ai-malf" && malf_access == 0)
|
||||
user << "\red BZZZZZZ..."
|
||||
spawn(20)
|
||||
user << "\red ...ZZZZZZ *BEEP*"
|
||||
sleep(10)
|
||||
user << "\red You now have access to Prisoner Management console"
|
||||
malf_access = 1
|
||||
if(malf_access == 1)
|
||||
/obj/machinery/computer/prisoner
|
||||
name = "Prisoner Management"
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "explosive"
|
||||
req_access = list(access_armory)
|
||||
circuit = "/obj/item/weapon/circuitboard/prisoner"
|
||||
var
|
||||
id = 0.0
|
||||
temp = null
|
||||
status = 0
|
||||
timeleft = 60
|
||||
stop = 0.0
|
||||
screen = 0 // 0 - No Access Denied, 1 - Access allowed
|
||||
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
else
|
||||
|
||||
|
||||
attack_paw(var/mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/prisoner/attack_paw(var/mob/user as mob)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/prisoner/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
user.machine = src
|
||||
var/dat
|
||||
dat += "<B>Prisoner Implant Manager System</B><BR>"
|
||||
if(screen == 0)
|
||||
dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>"
|
||||
else if(screen == 1)
|
||||
dat += "<HR>Chemical Implants<BR>"
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/weapon/implant/chem/C in world)
|
||||
Tr = get_turf(C)
|
||||
if((Tr) && (Tr.z != src.z)) continue//Out of range
|
||||
if(!C.implanted) continue
|
||||
dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: "
|
||||
dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
|
||||
dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>"
|
||||
dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>"
|
||||
dat += "<HR>Tracking Implants<BR>"
|
||||
for(var/obj/item/weapon/implant/tracking/T in world)
|
||||
Tr = get_turf(T)
|
||||
if((Tr) && (Tr.z != src.z)) continue//Out of range
|
||||
if(!T.implanted) continue
|
||||
var/loc_display = "Unknown"
|
||||
var/mob/living/carbon/M = T.imp_in
|
||||
if(M.z == 1 && !istype(M.loc, /turf/space))
|
||||
var/turf/mob_loc = get_turf_loc(M)
|
||||
loc_display = mob_loc.loc
|
||||
dat += "ID: [T.id] | Location: [loc_display]<BR>"
|
||||
dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>"
|
||||
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
onclose(user, "computer")
|
||||
return
|
||||
user.machine = src
|
||||
var/dat
|
||||
dat += "<B>Prisoner Implant Manager System</B><BR>"
|
||||
if(screen == 0)
|
||||
dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>"
|
||||
else if(screen == 1)
|
||||
dat += "<HR>Chemical Implants<BR>"
|
||||
for(var/obj/item/weapon/implant/chem/C in world)
|
||||
if(!C.implanted) continue
|
||||
dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: "
|
||||
dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
|
||||
dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>"
|
||||
dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>"
|
||||
dat += "<HR>Tracking Implants<BR>"
|
||||
for(var/obj/item/weapon/implant/tracking/T in world)
|
||||
if(!T.implanted) continue
|
||||
var/loc_display = "Unknown"
|
||||
var/mob/living/carbon/M = T.imp_in
|
||||
if(M.z == 1 && !istype(M.loc, /turf/space))
|
||||
var/turf/mob_loc = get_turf_loc(M)
|
||||
loc_display = mob_loc.loc
|
||||
dat += "ID: [T.id] | Location: [loc_display]<BR>"
|
||||
dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>"
|
||||
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
onclose(user, "computer")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/prisoner/process()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
process()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
use_power(500)
|
||||
src.updateDialog()
|
||||
return
|
||||
use_power(500)
|
||||
src.updateDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/computer/prisoner/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.machine = src
|
||||
if (href_list["killimplant"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["killimplant"])
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
if(R)
|
||||
var/choice = null
|
||||
if(istype(usr, /mob/living/silicon))
|
||||
choice = input("Using this command is in violation of default laws.") in list("Continue", "Abort")
|
||||
if(choice != "Abort")
|
||||
choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
|
||||
if(choice == "Confirm")
|
||||
R << "You hear quiet beep from the base of your skull."
|
||||
if(prob(95))
|
||||
R.gib()
|
||||
message_admins("\blue [key_name_admin(usr)] killswitched [R.name]")
|
||||
log_game("[key_name(usr)] killswitched [R.name]")
|
||||
else
|
||||
R << "\blue you hear a click as the implant fails to detonate and disintegrates."
|
||||
|
||||
else if (href_list["disable"])
|
||||
var/choice = input("Are you certain you wish to deactivate the implant?") in list("Confirm", "Abort")
|
||||
if(choice == "Confirm")
|
||||
var/obj/item/weapon/implant/I = locate(href_list["disable"])
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
R << "You hear quiet beep from the base of your skull."
|
||||
if(prob(1))
|
||||
message_admins("\blue [key_name_admin(usr)] attempted to disarm [R.name]' implant but it glitched. Oops.")
|
||||
R.gib()
|
||||
Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.machine = src
|
||||
|
||||
if(href_list["inject1"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject1"])
|
||||
I.trigger(1)
|
||||
|
||||
else if(href_list["inject5"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject5"])
|
||||
I.trigger(5)
|
||||
|
||||
else if(href_list["inject10"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject10"])
|
||||
I.trigger(10)
|
||||
|
||||
else if(href_list["lock"])
|
||||
if(src.allowed(usr))
|
||||
screen = !screen
|
||||
else
|
||||
R << "\blue you hear a click as the implant disintegrates."
|
||||
del(I)
|
||||
usr << "Unauthorized Access."
|
||||
|
||||
else if (href_list["inject1"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject1"])
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
I.reagents.trans_to(R, 1)
|
||||
if(!I.reagents.total_volume)
|
||||
R << "You hear a faint click from your chest."
|
||||
del(I)
|
||||
else if(href_list["warn"])
|
||||
var/warning = input(usr,"Message:","Enter your message here!","")
|
||||
var/obj/item/weapon/implant/I = locate(href_list["warn"])
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
R << "\green You hear a voice in your head saying: '[warning]'"
|
||||
|
||||
else if (href_list["inject5"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject5"])
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
I.reagents.trans_to(R, 5)
|
||||
if(!I.reagents.total_volume)
|
||||
R << "You hear a faint click from your chest."
|
||||
del(I)
|
||||
|
||||
else if (href_list["inject10"])
|
||||
var/obj/item/weapon/implant/I = locate(href_list["inject10"])
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
I.reagents.trans_to(R, 10)
|
||||
if(!I.reagents.total_volume)
|
||||
R << "You hear a faint click from your chest."
|
||||
del(I)
|
||||
|
||||
else if (href_list["lock"])
|
||||
if(src.allowed(usr))
|
||||
screen = !screen
|
||||
else
|
||||
usr << "Unauthorized Access."
|
||||
|
||||
else if (href_list["warn"])
|
||||
var/warning = input(usr,"Message:","Enter your message here!","")
|
||||
var/obj/item/weapon/implant/I = locate(href_list["warn"])
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
R << "\green You hear a voice in your head saying: '[warning]'"
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -10,11 +10,12 @@
|
||||
if(src.check_access(bot.botcard))
|
||||
if(density)
|
||||
open()
|
||||
// else if(istype(AM, /obj/livestock))currently all access will fix later
|
||||
// var/obj/livestock/ani =AM
|
||||
// if(src.check_access(ani.anicard))
|
||||
// if(density)
|
||||
// open()
|
||||
else if(istype(AM, /obj/critter))
|
||||
var/obj/critter/critter = AM
|
||||
if(critter.opensdoors) return
|
||||
if(src.check_access_list(critter.access_list))
|
||||
if(density)
|
||||
open()
|
||||
else if(istype(AM, /obj/alien/facehugger))
|
||||
if(src.check_access(null))
|
||||
if(density)
|
||||
|
||||
@@ -40,18 +40,28 @@
|
||||
|
||||
if(iscarbon(M))
|
||||
var/safety = M:eyecheck()
|
||||
if(!safety)
|
||||
if(safety <= 0)
|
||||
if(M.weakened <= 10)
|
||||
M.weakened = 10
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
if(ishuman(M))//&& (rerevcheckvargoeshere)) //Rev check
|
||||
if(user.mind in ticker.mode.head_revolutionaries)
|
||||
ticker.mode.add_revolutionary(M.mind)
|
||||
if(ishuman(M))
|
||||
var/revsafe = 0
|
||||
for(var/obj/item/weapon/implant/loyalty/L in M)
|
||||
if(L && L.implanted)
|
||||
revsafe = 1
|
||||
break
|
||||
if(M.mind.has_been_rev)
|
||||
revsafe = 1
|
||||
if(!revsafe)
|
||||
if(user.mind in ticker.mode.head_revolutionaries)
|
||||
ticker.mode.add_revolutionary(M.mind)
|
||||
M.mind.has_been_rev = 1
|
||||
else
|
||||
flashfail = 1
|
||||
|
||||
else if(isrobot(user))
|
||||
M.weakened = max(user.weakened, rand(5,10))
|
||||
spawn(0)
|
||||
var/atom/movable/overlay/animation = new(user.loc)
|
||||
animation.layer = user.layer + 1
|
||||
@@ -61,7 +71,6 @@
|
||||
flick("blspell", animation)
|
||||
sleep(5)
|
||||
del(animation)
|
||||
M.weakened = max(user.weakened, 10)
|
||||
|
||||
|
||||
if(!flashfail)
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/obj/item/clothing/glasses/hud
|
||||
name = "HUD"
|
||||
desc = "A heads-up display that provides important info in (almost) real time."
|
||||
flags = null //doesn't protect eyes because it's a monocle, duh
|
||||
origin_tech = "magnets=3;biotech=2"
|
||||
var
|
||||
list/icon/current = list() //the current hud icons
|
||||
proc
|
||||
process_hud(var/mob/M) return
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/hud/health
|
||||
name = "Health Scanner HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
|
||||
icon_state = "healthhud"
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/hud/security
|
||||
name = "Security HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status."
|
||||
icon_state = "securityhud"
|
||||
|
||||
process_hud(var/mob/M)
|
||||
if(!M) return
|
||||
if(!M.client) return
|
||||
var/client/C = M.client
|
||||
var/icon/tempHud = 'hud.dmi'
|
||||
for(var/mob/living/carbon/human/perp in view(M))
|
||||
if(perp.wear_id)
|
||||
C.images += image(tempHud,perp,"hud[ckey(perp:wear_id:GetJobName())]")
|
||||
var/perpname = "wot"
|
||||
if(istype(perp.wear_id,/obj/item/weapon/card/id))
|
||||
perpname = perp.wear_id:registered
|
||||
else if(istype(perp.wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = perp.wear_id
|
||||
perpname = tempPda.owner
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
||||
C.images += image(tempHud,perp,"hudwanted")
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
||||
C.images += image(tempHud,perp,"hudprisoner")
|
||||
break
|
||||
else
|
||||
C.images += image(tempHud,perp,"hudunknown")
|
||||
for(var/obj/item/weapon/implant/I in perp)
|
||||
if(I.implanted)
|
||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||
C.images += image(tempHud,perp,"hud_imp_tracking")
|
||||
if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||
C.images += image(tempHud,perp,"hud_imp_loyal")
|
||||
|
||||
@@ -163,19 +163,22 @@ FLASHBANG
|
||||
eye_safety = M.eyecheck()
|
||||
if(ishuman(M))
|
||||
if(istype(M:ears, /obj/item/clothing/ears/earmuffs))
|
||||
ear_safety = 1
|
||||
ear_safety += 2
|
||||
if(M.mutations & HULK)
|
||||
ear_safety = 1
|
||||
ear_safety += 1
|
||||
if(istype(M:head, /obj/item/clothing/head/helmet))
|
||||
ear_safety += 1
|
||||
|
||||
//Flashing everyone
|
||||
if(!eye_safety)
|
||||
if(eye_safety < 1)
|
||||
flick("e_flash", M.flash)
|
||||
M.eye_stat += rand(1, 3)
|
||||
M.stunned = max(M.stunned,2)
|
||||
M.weakened = max(M.weakened,10)
|
||||
|
||||
//Now applying sound
|
||||
if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M))
|
||||
if(ear_safety)
|
||||
if(ear_safety > 0)
|
||||
M.stunned = max(M.stunned,2)
|
||||
M.weakened = max(M.weakened,1)
|
||||
else
|
||||
|
||||
@@ -1,330 +0,0 @@
|
||||
/*
|
||||
CONTAINS:
|
||||
IMPLANT CASE
|
||||
TRACKER IMPLANT
|
||||
IMPLANT PAD
|
||||
FREEDOM IMPLANT
|
||||
IMPLANTER
|
||||
|
||||
*/
|
||||
|
||||
/obj/item/weapon/implantcase/proc/update()
|
||||
if (src.imp)
|
||||
src.icon_state = text("implantcase-[]", src.imp.color)
|
||||
else
|
||||
src.icon_state = "implantcase-0"
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/attackby(obj/item/weapon/I as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(I, /obj/item/weapon/pen))
|
||||
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
|
||||
if (user.equipped() != I)
|
||||
return
|
||||
if ((!in_range(src, usr) && src.loc != user))
|
||||
return
|
||||
t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
if (t)
|
||||
src.name = text("Glass Case- '[]'", t)
|
||||
else
|
||||
src.name = "Glass Case"
|
||||
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/syringe))
|
||||
if(src.imp.reagents.total_volume >= 10)
|
||||
user << "\red [src] is full."
|
||||
else
|
||||
spawn(5)
|
||||
I.reagents.trans_to(src.imp, 5)
|
||||
user << "\blue You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units."
|
||||
else if (istype(I, /obj/item/weapon/implanter))
|
||||
if (I:imp)
|
||||
if ((src.imp || I:imp.implanted))
|
||||
return
|
||||
I:imp.loc = src
|
||||
src.imp = I:imp
|
||||
I:imp = null
|
||||
src.update()
|
||||
I:update()
|
||||
else
|
||||
if (src.imp)
|
||||
if (I:imp)
|
||||
return
|
||||
src.imp.loc = I
|
||||
I:imp = src.imp
|
||||
src.imp = null
|
||||
update()
|
||||
I:update()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/tracking/New()
|
||||
|
||||
src.imp = new /obj/item/weapon/implant/tracking( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantcase/explosive/New()
|
||||
|
||||
src.imp = new /obj/item/weapon/implant/explosive( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/chem/New()
|
||||
..()
|
||||
var/datum/reagents/R = new/datum/reagents(10)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
/obj/item/weapon/implantcase/chem/New()
|
||||
|
||||
src.imp = new /obj/item/weapon/implant/chem( src )
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantpad/proc/update()
|
||||
|
||||
if (src.case)
|
||||
src.icon_state = "implantpad-1"
|
||||
else
|
||||
src.icon_state = "implantpad-0"
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantpad/attack_hand(mob/user as mob)
|
||||
|
||||
if ((src.case && (user.l_hand == src || user.r_hand == src)))
|
||||
if (user.hand)
|
||||
user.l_hand = src.case
|
||||
else
|
||||
user.r_hand = src.case
|
||||
src.case.loc = user
|
||||
src.case.layer = 20
|
||||
src.case.add_fingerprint(user)
|
||||
src.case = null
|
||||
user.update_clothing()
|
||||
src.add_fingerprint(user)
|
||||
update()
|
||||
else
|
||||
if (user.contents.Find(src))
|
||||
spawn( 0 )
|
||||
src.attack_self(user)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantpad/attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(C, /obj/item/weapon/implantcase))
|
||||
if (!( src.case ))
|
||||
user.drop_item()
|
||||
C.loc = src
|
||||
src.case = C
|
||||
else
|
||||
return
|
||||
src.update()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantpad/attack_self(mob/user as mob)
|
||||
|
||||
user.machine = src
|
||||
var/dat = "<B>Implant Mini-Computer:</B><HR>"
|
||||
if (src.case)
|
||||
if (src.case.imp)
|
||||
if (istype(src.case.imp, /obj/item/weapon/implant/tracking))
|
||||
var/obj/item/weapon/implant/tracking/T = src.case.imp
|
||||
dat += {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Tracking Beacon<BR>
|
||||
<b>Zone:</b> Spinal Column> 2-5 vertebrae<BR>
|
||||
<b>Power Source:</b> Nervous System Ion Withdrawl Gradient<BR>
|
||||
<b>Life:</b> 10 minutes after death of host<BR>
|
||||
<b>Important Notes:</b> None<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b> <BR>
|
||||
<b>Function:</b> Continuously transmits low power signal on frequency- Useful for tracking.<BR>
|
||||
Range: 35-40 meters<BR>
|
||||
<b>Special Features:</b><BR>
|
||||
<i>Neuro-Safe</i>- Specialized shell absorbs excess voltages self-destructing the chip if
|
||||
a malfunction occurs thereby securing safety of subject. The implant will melt and
|
||||
disintegrate into bio-safe elements.<BR>
|
||||
<b>Integrity:</b> Gradient creates slight risk of being overcharged and frying the
|
||||
circuitry. As a result neurotoxins can cause massive damage.<HR>
|
||||
Implant Specifics:
|
||||
Frequency (144.1-148.9):
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];freq=-2'>-</A> [format_frequency(T.frequency)]
|
||||
<A href='byond://?src=\ref[src];freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
|
||||
|
||||
ID (1-100):
|
||||
<A href='byond://?src=\ref[src];id=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];id=-1'>-</A> [T.id]
|
||||
<A href='byond://?src=\ref[src];id=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];id=10'>+</A><BR>"}
|
||||
else if (istype(src.case.imp, /obj/item/weapon/implant/freedom))
|
||||
dat += {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Freedom Beacon<BR>
|
||||
<b>Zone:</b> Right Hand> Near wrist<BR>
|
||||
<b>Power Source:</b> Lithium Ion Battery<BR>
|
||||
<b>Life:</b> optimum 5 uses<BR>
|
||||
<b>Important Notes: <font color='red'>Illegal</font></b><BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b> <BR>
|
||||
<b>Function:</b> Transmits a specialized cluster of signals to override handcuff locking
|
||||
mechanisms<BR>
|
||||
<b>Special Features:</b><BR>
|
||||
<i>Neuro-Scan</i>- Analyzes certain shadow signals in the nervous system
|
||||
<BR>
|
||||
<b>Integrity:</b> The battery is extremely weak and commonly after injection its
|
||||
life can drive down to only 1 use.<HR>
|
||||
No Implant Specifics"}
|
||||
else if (istype(src.case.imp, /obj/item/weapon/implant/explosive))
|
||||
dat += {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Robust Corp RX-78 Prisoner Management Implant<BR>
|
||||
<b>Zone:</b> Spinal Column>Atlantis Vertebrae<BR>
|
||||
<b>Power Source:</b> Nervous System Ion Withdrawl Gradient<BR>
|
||||
<b>Life:</b> Deactivates upon death but remains within the body.<BR>
|
||||
<b>Important Notes:</b><BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal.<BR>
|
||||
<b>Special Features:</b><BR>
|
||||
<i>Direct-Interface</i>- You can use the prisoner management system to transmit short messages directly into the brain of the implanted subject.<BR>
|
||||
<i>Safe-break</i>- Can be safely deactivated remotely.<BR>
|
||||
<b>Integrity:</b> Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
|
||||
else if (istype(src.case.imp, /obj/item/weapon/implant/chem))
|
||||
dat += {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Robust Corp MJ-420 Prisoner Management Implant<BR>
|
||||
<b>Zone:</b> Abdominal Cavity>Abdominal Aorta<BR>
|
||||
<b>Power Source:</b> Techno-organtic Metabolization System<BR>
|
||||
<b>Life:</b> Deactivates upon death but remains within the body.<BR>
|
||||
<b>Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject<BR>
|
||||
will suffer from an increased appetite.</B><BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal<BR>
|
||||
the implant releases the chemicals directly into the blood stream.<BR>
|
||||
<b>Special Features:</b><BR>
|
||||
<i>Micro-Capsule</i>- Can be loaded with any sort of chemical agent via the common syringe and can hold 25 units.<BR>
|
||||
Can only be loaded while still in it's original case.<BR>
|
||||
<b>Integrity:</b> Implant will last so long as the subject is alive. However, if the subject suffers from malnutrition,<BR>
|
||||
the implant may become unstable and either pre-maturely inject the subject or simply break."}
|
||||
else
|
||||
dat += "Implant ID not in database"
|
||||
else
|
||||
dat += "The implant casing is empty."
|
||||
else
|
||||
dat += "Please insert an implant casing!"
|
||||
user << browse(dat, "window=implantpad")
|
||||
onclose(user, "implantpad")
|
||||
return
|
||||
|
||||
/obj/item/weapon/implantpad/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat)
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
usr.machine = src
|
||||
if (href_list["freq"])
|
||||
if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking)))
|
||||
var/obj/item/weapon/implant/tracking/T = src.case.imp
|
||||
T.frequency += text2num(href_list["freq"])
|
||||
T.frequency = sanitize_frequency(T.frequency)
|
||||
if (href_list["id"])
|
||||
if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking)))
|
||||
var/obj/item/weapon/implant/tracking/T = src.case.imp
|
||||
T.id += text2num(href_list["id"])
|
||||
T.id = min(100, T.id)
|
||||
T.id = max(1, T.id)
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
//Foreach goto(290)
|
||||
src.add_fingerprint(usr)
|
||||
else
|
||||
usr << browse(null, "window=implantpad")
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/proc/trigger(emote, source as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/proc/implanted(source as mob)
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/freedom/New()
|
||||
src.activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
|
||||
src.uses = rand(1, 5)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/freedom/trigger(emote, mob/source as mob)
|
||||
if (src.uses < 1)
|
||||
return 0
|
||||
|
||||
if (emote == src.activation_emote)
|
||||
src.uses--
|
||||
source << "You feel a faint click."
|
||||
|
||||
if (source.handcuffed)
|
||||
var/obj/item/weapon/W = source.handcuffed
|
||||
source.handcuffed = null
|
||||
if (source.client)
|
||||
source.client.screen -= W
|
||||
if (W)
|
||||
W.loc = source.loc
|
||||
dropped(source)
|
||||
if (W)
|
||||
W.layer = initial(W.layer)
|
||||
|
||||
/obj/item/weapon/implant/freedom/implanted(mob/source as mob)
|
||||
source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate.", 0, 0)
|
||||
source << "The implanted freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate."
|
||||
|
||||
/obj/item/weapon/implanter/proc/update()
|
||||
|
||||
if (src.imp)
|
||||
src.icon_state = "implanter1"
|
||||
else
|
||||
src.icon_state = "implanter0"
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob)
|
||||
if (!istype(M, /mob/living/carbon))
|
||||
return
|
||||
|
||||
if (user && src.imp)
|
||||
for (var/mob/O in viewers(M, null))
|
||||
O.show_message("\red [M] has been implanted by [user].", 1)
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src.name] ([src.imp.name]) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] ([src.imp.name]) to implant [M.name] ([M.ckey])</font>")
|
||||
src.imp.loc = M
|
||||
src.imp.imp_in = M
|
||||
src.imp.implanted = 1
|
||||
src.imp.implanted(M)
|
||||
src.imp = null
|
||||
user.show_message("\red You implanted the implant into [M].")
|
||||
src.icon_state = "implanter0"
|
||||
|
||||
|
||||
/obj/item/weapon/implant/uplink
|
||||
var/activation_emote = "chuckle"
|
||||
var/obj/item/weapon/syndicate_uplink/uplink = null
|
||||
|
||||
New()
|
||||
activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
|
||||
uplink = new /obj/item/weapon/syndicate_uplink/implanted(src)
|
||||
..()
|
||||
|
||||
implanted(mob/source as mob)
|
||||
source.mind.store_memory("Uplink implant can be activated by using the [activation_emote] emote, <B>say *[activation_emote]</B> to attempt to activate.", 0, 0)
|
||||
source << "The implanted uplink implant can be activated by using the [activation_emote] emote, <B>say *[activation_emote]</B> to attempt to activate."
|
||||
|
||||
trigger(emote, mob/source as mob)
|
||||
if(emote == activation_emote)
|
||||
uplink.attack_self(source)
|
||||
@@ -0,0 +1,202 @@
|
||||
/obj/item/weapon/implant
|
||||
name = "implant"
|
||||
var
|
||||
implanted = null
|
||||
mob/imp_in = null
|
||||
color = "b"
|
||||
allow_reagents = 0
|
||||
proc
|
||||
trigger(emote, source as mob)
|
||||
implanted(source as mob)
|
||||
get_data()
|
||||
|
||||
|
||||
trigger()
|
||||
return
|
||||
|
||||
|
||||
implanted(source as mob)
|
||||
return
|
||||
|
||||
|
||||
get_data()
|
||||
return "No information available"
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implant/uplink
|
||||
name = "uplink"
|
||||
desc = "Summon things."
|
||||
var
|
||||
activation_emote = "chuckle"
|
||||
obj/item/weapon/syndicate_uplink/uplink = null
|
||||
|
||||
|
||||
New()
|
||||
activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
|
||||
uplink = new /obj/item/weapon/syndicate_uplink/implanted(src)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
implanted(mob/source as mob)
|
||||
source.mind.store_memory("Uplink implant can be activated by using the [activation_emote] emote, <B>say *[activation_emote]</B> to attempt to activate.", 0, 0)
|
||||
source << "The implanted uplink implant can be activated by using the [activation_emote] emote, <B>say *[activation_emote]</B> to attempt to activate."
|
||||
return
|
||||
|
||||
|
||||
trigger(emote, mob/source as mob)
|
||||
if(emote == activation_emote)
|
||||
uplink.attack_self(source)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implant/tracking
|
||||
name = "tracking"
|
||||
desc = "Track with this."
|
||||
var
|
||||
id = 1.0
|
||||
|
||||
|
||||
get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Tracking Beacon<BR>
|
||||
<b>Life:</b> 10 minutes after death of host<BR>
|
||||
<b>Important Notes:</b> None<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b> <BR>
|
||||
<b>Function:</b> Continuously transmits low power signal. Useful for tracking.<BR>
|
||||
<b>Special Features:</b><BR>
|
||||
<i>Neuro-Safe</i>- Specialized shell absorbs excess voltages self-destructing the chip if
|
||||
a malfunction occurs thereby securing safety of subject. The implant will melt and
|
||||
disintegrate into bio-safe elements.<BR>
|
||||
<b>Integrity:</b> Gradient creates slight risk of being overcharged and frying the
|
||||
circuitry. As a result neurotoxins can cause massive damage.<HR>
|
||||
Implant Specifics:<BR>
|
||||
ID (1-100):
|
||||
<A href='byond://?src=\ref[src];tracking_id=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];tracking_id=-1'>-</A> [id]
|
||||
<A href='byond://?src=\ref[src];tracking_id=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];tracking_id=10'>+</A><BR>"}
|
||||
return dat
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat)
|
||||
return
|
||||
var/obj/item/weapon/implantpad/IP = (locate(/obj/item/weapon/implantpad) in usr)
|
||||
if(IP)
|
||||
if(IP.case)
|
||||
if(IP.case.imp == src)
|
||||
usr.machine = src
|
||||
if (href_list["id"])
|
||||
src.id += text2num(href_list["id"])
|
||||
src.id = min(100, src.id)
|
||||
src.id = max(1, src.id)
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
usr << browse(null, "window=implantpad")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implant/explosive
|
||||
name = "explosive"
|
||||
desc = "And boom goes the weasel."
|
||||
|
||||
|
||||
get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Robust Corp RX-78 Employee Management Implant<BR>
|
||||
<b>Life:</b> Activates upon death.<BR>
|
||||
<b>Important Notes:</b> Explodes<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.<BR>
|
||||
<b>Special Features:</b> Explodes<BR>
|
||||
<b>Integrity:</b> Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
|
||||
return dat
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implant/chem
|
||||
name = "chem"
|
||||
desc = "Injects things."
|
||||
allow_reagents = 1
|
||||
|
||||
get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Robust Corp MJ-420 Prisoner Management Implant<BR>
|
||||
<b>Life:</b> Deactivates upon death but remains within the body.<BR>
|
||||
<b>Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject<BR>
|
||||
will suffer from an increased appetite.</B><BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal<BR>
|
||||
the implant releases the chemicals directly into the blood stream.<BR>
|
||||
<b>Special Features:</b>
|
||||
<i>Micro-Capsule</i>- Can be loaded with any sort of chemical agent via the common syringe and can hold 25 units.<BR>
|
||||
Can only be loaded while still in it's original case.<BR>
|
||||
<b>Integrity:</b> Implant will last so long as the subject is alive. However, if the subject suffers from malnutrition,<BR>
|
||||
the implant may become unstable and either pre-maturely inject the subject or simply break."}
|
||||
return dat
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
var/datum/reagents/R = new/datum/reagents(10)
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
|
||||
|
||||
trigger(var/number = 0)
|
||||
if((!number) || (!src.imp_in)) return 0
|
||||
var/mob/living/carbon/R = src.imp_in
|
||||
src.reagents.trans_to(R, number)
|
||||
R << "You hear a faint *beep*."
|
||||
if(!src.reagents.total_volume)
|
||||
R << "You hear a faint click from your chest."
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implant/loyalty
|
||||
name = "loyalty"
|
||||
desc = "Makes you loyal or such."
|
||||
|
||||
get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> NanoTrasen Employee Management Implant<BR>
|
||||
<b>Life:</b> Ten years.<BR>
|
||||
<b>Important Notes:</b> Personnel injected with this device tend to be much more loyal to the company.<BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b><BR>
|
||||
<b>Function:</b> Contains a small pod of nanobots that manipulate the host's mental functions.<BR>
|
||||
<b>Special Features:</b> Will prevent and cure most forms of brainwashing.<BR>
|
||||
<b>Integrity:</b> Implant will last so long as the nanobots are inside the bloodstream."}
|
||||
return dat
|
||||
|
||||
|
||||
implanted(M as mob)
|
||||
if(!istype(M, /mob/living/carbon/human)) return
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.mind in ticker.mode:head_revolutionaries)
|
||||
for (var/mob/O in viewers(H, null))
|
||||
O.show_message("\red [H] seems to resist the implant.", 1)
|
||||
return
|
||||
else if(H.mind in ticker.mode:revolutionaries)
|
||||
ticker.mode:remove_revolutionary(H.mind)
|
||||
H << "\blue You feel a surge of loyalty towards NanoTrasen."
|
||||
return
|
||||
@@ -0,0 +1,116 @@
|
||||
/obj/item/weapon/implantcase
|
||||
name = "Glass Case"
|
||||
desc = "A case containing an implant."
|
||||
icon_state = "implantcase-0"
|
||||
item_state = "implantcase"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 1.0
|
||||
var
|
||||
obj/item/weapon/implant/imp = null
|
||||
proc
|
||||
update()
|
||||
|
||||
|
||||
update()
|
||||
if (src.imp)
|
||||
src.icon_state = text("implantcase-[]", src.imp.color)
|
||||
else
|
||||
src.icon_state = "implantcase-0"
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/weapon/I as obj, mob/user as mob)
|
||||
..()
|
||||
if (istype(I, /obj/item/weapon/pen))
|
||||
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
|
||||
if (user.equipped() != I)
|
||||
return
|
||||
if((!in_range(src, usr) && src.loc != user))
|
||||
return
|
||||
t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
|
||||
if(t)
|
||||
src.name = text("Glass Case- '[]'", t)
|
||||
else
|
||||
src.name = "Glass Case"
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/syringe))
|
||||
if(!src.imp.allow_reagents) return
|
||||
if(src.imp.reagents.total_volume >= 10)
|
||||
user << "\red [src] is full."
|
||||
else
|
||||
spawn(5)
|
||||
I.reagents.trans_to(src.imp, 5)
|
||||
user << "\blue You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units."
|
||||
else if (istype(I, /obj/item/weapon/implanter))
|
||||
if (I:imp)
|
||||
if ((src.imp || I:imp.implanted))
|
||||
return
|
||||
I:imp.loc = src
|
||||
src.imp = I:imp
|
||||
I:imp = null
|
||||
src.update()
|
||||
I:update()
|
||||
else
|
||||
if (src.imp)
|
||||
if (I:imp)
|
||||
return
|
||||
src.imp.loc = I
|
||||
I:imp = src.imp
|
||||
src.imp = null
|
||||
update()
|
||||
I:update()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/tracking
|
||||
name = "Glass Case- 'Tracking'"
|
||||
desc = "A case containing a tracking implant."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-b"
|
||||
|
||||
|
||||
New()
|
||||
src.imp = new /obj/item/weapon/implant/tracking( src )
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/explosive
|
||||
name = "Glass Case- 'Explosive'"
|
||||
desc = "A case containing an explosive implant."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-r"
|
||||
|
||||
|
||||
New()
|
||||
src.imp = new /obj/item/weapon/implant/explosive( src )
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/chem
|
||||
name = "Glass Case- 'Chem'"
|
||||
desc = "A case containing a chemical implant."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-b"
|
||||
/obj/item/weapon/implantcase/chem/New()
|
||||
|
||||
src.imp = new /obj/item/weapon/implant/chem( src )
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/loyalty
|
||||
name = "Glass Case- 'Loyalty'"
|
||||
desc = "A case containing a loyalty implant."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-r"
|
||||
|
||||
|
||||
New()
|
||||
src.imp = new /obj/item/weapon/implant/loyalty( src )
|
||||
..()
|
||||
return
|
||||
@@ -0,0 +1,165 @@
|
||||
/obj/machinery/implantchair
|
||||
name = "Loyalty Implanter"
|
||||
desc = "Used to implant occupants with loyalty implants."
|
||||
icon = 'implantchair.dmi'
|
||||
icon_state = "implantchair"
|
||||
density = 1
|
||||
opacity = 0
|
||||
anchored = 1
|
||||
|
||||
var
|
||||
ready = 1
|
||||
malfunction = 0
|
||||
list/obj/item/weapon/implant/loyalty/implant_list = list()
|
||||
max_implants = 5
|
||||
injection_cooldown = 600
|
||||
replenish_cooldown = 6000
|
||||
replenishing = 0
|
||||
mob/living/carbon/occupant = null
|
||||
injecting = 0
|
||||
|
||||
proc
|
||||
go_out()
|
||||
put_mob(mob/living/carbon/M as mob)
|
||||
implant(var/mob/M)
|
||||
add_implants()
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
add_implants()
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
user.machine = src
|
||||
var/health_text = ""
|
||||
if(src.occupant)
|
||||
if(src.occupant.health <= -100)
|
||||
health_text = "<FONT color=red>Dead</FONT>"
|
||||
else if(src.occupant.health < 0)
|
||||
health_text = "<FONT color=red>[round(src.occupant.health,0.1)]</FONT>"
|
||||
else
|
||||
health_text = "[round(src.occupant.health,0.1)]"
|
||||
|
||||
var/dat = {"<B>Implanter Status</B><BR>
|
||||
<B>Current occupant:</B> [src.occupant ? "<BR>Name: [src.occupant]<BR>Health: [health_text]<BR>" : "<FONT color=red>None</FONT>"]<BR>
|
||||
<B>Implants:</B> [src.implant_list.len ? "[implant_list.len]" : "<A href='?src=\ref[src];replenish=1'>Replenish</A>"]<BR>
|
||||
[src.ready ? "<A href='?src=\ref[src];implant=1'>Implant</A>" : "Recharging"]<BR>
|
||||
"}
|
||||
user.machine = src
|
||||
user << browse(dat, "window=implant")
|
||||
onclose(user, "implant")
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
if((get_dist(src, usr) <= 1) || istype(usr, /mob/living/silicon/ai))
|
||||
if(href_list["implant"])
|
||||
injecting = 1
|
||||
go_out()
|
||||
ready = 0
|
||||
spawn(injection_cooldown)
|
||||
ready = 1
|
||||
|
||||
if(href_list["replenish"])
|
||||
ready = 0
|
||||
spawn(replenish_cooldown)
|
||||
add_implants()
|
||||
ready = 1
|
||||
|
||||
src.updateUsrDialog()
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
attackby(var/obj/item/weapon/G as obj, var/mob/user as mob)
|
||||
if(istype(G, /obj/item/weapon/grab))
|
||||
if(!ismob(G:affecting))
|
||||
return
|
||||
for(var/mob/living/carbon/metroid/M in range(1,G:affecting))
|
||||
if(M.Victim == G:affecting)
|
||||
usr << "[G:affecting:name] will not fit into the [src.name] because they have a Metroid latched onto their head."
|
||||
return
|
||||
var/mob/M = G:affecting
|
||||
if(put_mob(M))
|
||||
del(G)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
go_out()
|
||||
if(!( src.occupant ))
|
||||
return
|
||||
if (src.occupant.client)
|
||||
src.occupant.client.eye = src.occupant.client.mob
|
||||
src.occupant.client.perspective = MOB_PERSPECTIVE
|
||||
src.occupant.loc = src.loc
|
||||
if(injecting)
|
||||
implant(src.occupant)
|
||||
injecting = 0
|
||||
src.occupant = null
|
||||
icon_state = "implantchair"
|
||||
return
|
||||
|
||||
|
||||
put_mob(mob/living/carbon/M as mob)
|
||||
if(!iscarbon(M))
|
||||
usr << "\red <B>The [src.name] cannot hold this!</B>"
|
||||
return
|
||||
if(src.occupant)
|
||||
usr << "\red <B>The [src.name] is already occupied!</B>"
|
||||
return
|
||||
if(M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
M.pulling = null
|
||||
M.loc = src
|
||||
src.occupant = M
|
||||
src.add_fingerprint(usr)
|
||||
icon_state = "implantchair_on"
|
||||
return 1
|
||||
|
||||
|
||||
implant(var/mob/M)
|
||||
if (!istype(M, /mob/living/carbon))
|
||||
return
|
||||
if(!implant_list.len) return
|
||||
for(var/obj/item/weapon/implant/loyalty/imp in implant_list)
|
||||
if(!imp) continue
|
||||
if(istype(imp, /obj/item/weapon/implant/loyalty))
|
||||
for (var/mob/O in viewers(M, null))
|
||||
O.show_message("\red [M] has been implanted by the [src.name].", 1)
|
||||
imp.loc = M
|
||||
imp.imp_in = M
|
||||
imp.implanted = 1
|
||||
imp.implanted(M)
|
||||
implant_list -= imp
|
||||
break
|
||||
return
|
||||
|
||||
|
||||
add_implants()
|
||||
for(var/i=0, i<src.max_implants, i++)
|
||||
var/obj/item/weapon/implant/loyalty/I = new /obj/item/weapon/implant/loyalty(src)
|
||||
implant_list += I
|
||||
return
|
||||
|
||||
verb
|
||||
get_out()
|
||||
set name = "Eject occupant"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0)
|
||||
return
|
||||
src.go_out()
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
move_inside()
|
||||
set name = "Move Inside"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
if(usr.stat != 0 || stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
put_mob(usr)
|
||||
return
|
||||
@@ -0,0 +1,47 @@
|
||||
/obj/item/weapon/implanter
|
||||
name = "implanter"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implanter0"
|
||||
item_state = "syringe_0"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
var
|
||||
obj/item/weapon/implant/imp = null
|
||||
proc
|
||||
update()
|
||||
|
||||
|
||||
update()
|
||||
if (src.imp)
|
||||
src.icon_state = "implanter1"
|
||||
else
|
||||
src.icon_state = "implanter0"
|
||||
return
|
||||
|
||||
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
if (!istype(M, /mob/living/carbon))
|
||||
return
|
||||
if (user && src.imp)
|
||||
for (var/mob/O in viewers(M, null))
|
||||
O.show_message("\red [M] has been implanted by [user].", 1)
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'> Implanted with [src.name] ([src.imp.name]) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] ([src.imp.name]) to implant [M.name] ([M.ckey])</font>")
|
||||
src.imp.loc = M
|
||||
src.imp.imp_in = M
|
||||
src.imp.implanted = 1
|
||||
src.imp.implanted(M)
|
||||
src.imp = null
|
||||
user.show_message("\red You implanted the implant into [M].")
|
||||
src.icon_state = "implanter0"
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/loyalty
|
||||
name = "implanter-loyalty"
|
||||
|
||||
New()
|
||||
src.imp = new /obj/item/weapon/implant/loyalty( src )
|
||||
..()
|
||||
update()
|
||||
return
|
||||
@@ -0,0 +1,58 @@
|
||||
/obj/item/weapon/implant/freedom
|
||||
name = "freedom"
|
||||
desc = "Use this to escape from those evil Red Shirts."
|
||||
color = "r"
|
||||
var
|
||||
activation_emote = "chuckle"
|
||||
uses = 1.0
|
||||
|
||||
|
||||
New()
|
||||
src.activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
|
||||
src.uses = rand(1, 5)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
trigger(emote, mob/source as mob)
|
||||
if (src.uses < 1) return 0
|
||||
if (emote == src.activation_emote)
|
||||
src.uses--
|
||||
source << "You feel a faint click."
|
||||
if (source.handcuffed)
|
||||
var/obj/item/weapon/W = source.handcuffed
|
||||
source.handcuffed = null
|
||||
if (source.client)
|
||||
source.client.screen -= W
|
||||
if (W)
|
||||
W.loc = source.loc
|
||||
dropped(source)
|
||||
if (W)
|
||||
W.layer = initial(W.layer)
|
||||
return
|
||||
|
||||
|
||||
implanted(mob/source as mob)
|
||||
source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate.", 0, 0)
|
||||
source << "The implanted freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate."
|
||||
return
|
||||
|
||||
|
||||
get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Freedom Beacon<BR>
|
||||
<b>Life:</b> optimum 5 uses<BR>
|
||||
<b>Important Notes:</b> <font color='red'>Illegal</font><BR>
|
||||
<HR>
|
||||
<b>Implant Details:</b> <BR>
|
||||
<b>Function:</b> Transmits a specialized cluster of signals to override handcuff locking
|
||||
mechanisms<BR>
|
||||
<b>Special Features:</b><BR>
|
||||
<i>Neuro-Scan</i>- Analyzes certain shadow signals in the nervous system<BR>
|
||||
<b>Integrity:</b> The battery is extremely weak and commonly after injection its
|
||||
life can drive down to only 1 use.<HR>
|
||||
No Implant Specifics"}
|
||||
return dat
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
/obj/item/weapon/implantpad
|
||||
name = "implantpad"
|
||||
desc = "Used to modify implants."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantpad-0"
|
||||
item_state = "electronic"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
var
|
||||
obj/item/weapon/implantcase/case = null
|
||||
broadcasting = null
|
||||
listening = 1.0
|
||||
proc
|
||||
update()
|
||||
|
||||
|
||||
update()
|
||||
if (src.case)
|
||||
src.icon_state = "implantpad-1"
|
||||
else
|
||||
src.icon_state = "implantpad-0"
|
||||
return
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if ((src.case && (user.l_hand == src || user.r_hand == src)))
|
||||
if (user.hand)
|
||||
user.l_hand = src.case
|
||||
else
|
||||
user.r_hand = src.case
|
||||
src.case.loc = user
|
||||
src.case.layer = 20
|
||||
src.case.add_fingerprint(user)
|
||||
src.case = null
|
||||
user.update_clothing()
|
||||
src.add_fingerprint(user)
|
||||
update()
|
||||
else
|
||||
if (user.contents.Find(src))
|
||||
spawn( 0 )
|
||||
src.attack_self(user)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/weapon/implantcase/C as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(C, /obj/item/weapon/implantcase))
|
||||
if(!( src.case ))
|
||||
user.drop_item()
|
||||
C.loc = src
|
||||
src.case = C
|
||||
else
|
||||
return
|
||||
src.update()
|
||||
return
|
||||
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
user.machine = src
|
||||
var/dat = "<B>Implant Mini-Computer:</B><HR>"
|
||||
if (src.case)
|
||||
if(src.case.imp)
|
||||
if(istype(src.case.imp, /obj/item/weapon/implant))
|
||||
dat += src.case.imp.get_data()
|
||||
else
|
||||
dat += "The implant casing is empty."
|
||||
else
|
||||
dat += "Please insert an implant casing!"
|
||||
user << browse(dat, "window=implantpad")
|
||||
onclose(user, "implantpad")
|
||||
return
|
||||
|
||||
/*
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat)
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
usr.machine = src
|
||||
if (href_list["id"])
|
||||
if ((istype(src.case, /obj/item/weapon/implantcase) && istype(src.case.imp, /obj/item/weapon/implant/tracking)))
|
||||
var/obj/item/weapon/implant/tracking/T = src.case.imp
|
||||
T.id += text2num(href_list["id"])
|
||||
T.id = min(100, T.id)
|
||||
T.id = max(1, T.id)
|
||||
if (istype(src.loc, /mob))
|
||||
attack_self(src.loc)
|
||||
else
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if (M.client)
|
||||
src.attack_self(M)
|
||||
//Foreach goto(290)
|
||||
src.add_fingerprint(usr)
|
||||
else
|
||||
usr << browse(null, "window=implantpad")
|
||||
return
|
||||
return*/
|
||||
@@ -60,27 +60,26 @@ Frequency:
|
||||
|
||||
src.temp += "<B>Extranneous Signals:</B><BR>"
|
||||
for (var/obj/item/weapon/implant/tracking/W in world)
|
||||
if (W.frequency == src.frequency)
|
||||
if (!W.implanted || !ismob(W.loc))
|
||||
continue
|
||||
else
|
||||
var/mob/M = W.loc
|
||||
if (M.stat == 2)
|
||||
if (M.timeofdeath + 6000 < world.time)
|
||||
continue
|
||||
if (!W.implanted || !ismob(W.loc))
|
||||
continue
|
||||
else
|
||||
var/mob/M = W.loc
|
||||
if (M.stat == 2)
|
||||
if (M.timeofdeath + 6000 < world.time)
|
||||
continue
|
||||
|
||||
var/turf/tr = get_turf(W)
|
||||
if (tr.z == sr.z && tr)
|
||||
var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y))
|
||||
if (direct < 20)
|
||||
if (direct < 5)
|
||||
direct = "very strong"
|
||||
var/turf/tr = get_turf(W)
|
||||
if (tr.z == sr.z && tr)
|
||||
var/direct = max(abs(tr.x - sr.x), abs(tr.y - sr.y))
|
||||
if (direct < 20)
|
||||
if (direct < 5)
|
||||
direct = "very strong"
|
||||
else
|
||||
if (direct < 10)
|
||||
direct = "strong"
|
||||
else
|
||||
if (direct < 10)
|
||||
direct = "strong"
|
||||
else
|
||||
direct = "weak"
|
||||
src.temp += "[W.id]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
|
||||
direct = "weak"
|
||||
src.temp += "[W.id]-[dir2text(get_dir(sr, tr))]-[direct]<BR>"
|
||||
|
||||
src.temp += "<B>You are at \[[sr.x],[sr.y],[sr.z]\]</B> in orbital coordinates.<BR><BR><A href='byond://?src=\ref[src];refresh=1'>Refresh</A><BR>"
|
||||
else
|
||||
|
||||
@@ -62,4 +62,16 @@
|
||||
user << "\red Its locked!"
|
||||
else
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/lockbox/loyalty
|
||||
name = "Lockbox (Loyalty Implants)"
|
||||
req_access = list(access_security)
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/implantcase/loyalty(src)
|
||||
new /obj/item/weapon/implantcase/loyalty(src)
|
||||
new /obj/item/weapon/implantcase/loyalty(src)
|
||||
new /obj/item/weapon/implanter/loyalty(src)
|
||||
@@ -10,7 +10,7 @@
|
||||
alive = 1
|
||||
health = 10
|
||||
max_health = 10
|
||||
|
||||
list/access_list = list()//accesses go here
|
||||
//AI things
|
||||
task = "thinking"
|
||||
//Attacks at will
|
||||
@@ -19,8 +19,8 @@
|
||||
defensive = 0
|
||||
//Will randomly move about
|
||||
wanderer = 1
|
||||
//Will open doors it bumps
|
||||
opensdoors = 1
|
||||
//Will open doors it bumps ignoring access
|
||||
opensdoors = 0
|
||||
|
||||
//Internal tracking ignore
|
||||
frustration = 0
|
||||
|
||||
@@ -87,13 +87,12 @@
|
||||
|
||||
Bump(M as mob|obj)//TODO: Add access levels here
|
||||
spawn(0)
|
||||
if ((istype(M, /obj/machinery/door)))
|
||||
var/obj/machinery/door/D = M
|
||||
if (src.opensdoors)
|
||||
D.open()
|
||||
if((istype(M, /obj/machinery/door)))
|
||||
if(src.opensdoors)
|
||||
M:open()
|
||||
src.frustration = 0
|
||||
else src.frustration ++
|
||||
else if ((istype(M, /mob/living/)) && (!src.anchored))
|
||||
else src.frustration ++
|
||||
if((istype(M, /mob/living/)) && (!src.anchored))
|
||||
src.loc = M:loc
|
||||
src.frustration = 0
|
||||
return
|
||||
@@ -127,9 +126,9 @@
|
||||
for(var/obj/critter/C in view(src.seekrange,src))
|
||||
if(istype(C, /obj/critter) && !src.atkcritter) continue
|
||||
if(istype(C, /obj/mecha) && !src.atkmech) continue
|
||||
if(C.health < 0) continue
|
||||
if(C.health <= 0) continue
|
||||
if(istype(C, /obj/critter) && src.atkcritter)
|
||||
if(istype(C, src.type) && !src.atksame) continue
|
||||
if((istype(C, src.type) && !src.atksame) || (C == src)) continue
|
||||
src.attack = 1
|
||||
if(istype(C, /obj/mecha) && src.atkmech) src.attack = 1
|
||||
if(src.attack)
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
aggressive = 0
|
||||
defensive = 1
|
||||
wanderer = 1
|
||||
opensdoors = 0
|
||||
atkcarbon = 1
|
||||
atksilicon = 0
|
||||
attacktext = "bites"
|
||||
@@ -49,7 +48,6 @@
|
||||
aggressive = 1
|
||||
defensive = 0
|
||||
wanderer = 1
|
||||
opensdoors = 1
|
||||
atkcarbon = 1
|
||||
atksilicon = 1
|
||||
firevuln = 2
|
||||
@@ -73,7 +71,6 @@
|
||||
aggressive = 0
|
||||
defensive = 0
|
||||
wanderer = 1
|
||||
opensdoors = 0
|
||||
atkcarbon = 0
|
||||
atksilicon = 0
|
||||
firevuln = 2
|
||||
@@ -101,7 +98,6 @@
|
||||
aggressive = 1
|
||||
defensive = 1
|
||||
wanderer = 1
|
||||
opensdoors = 1
|
||||
atkcarbon = 1
|
||||
atksilicon = 1
|
||||
atkcritter = 1
|
||||
@@ -127,6 +123,7 @@
|
||||
max_health = 50
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 20
|
||||
// opensdoors = 1 would give all access dono if want
|
||||
|
||||
/obj/critter/walkingmushroom
|
||||
name = "Walking Mushroom"
|
||||
@@ -137,7 +134,6 @@
|
||||
aggressive = 0
|
||||
defensive = 0
|
||||
wanderer = 1
|
||||
opensdoors = 0
|
||||
atkcarbon = 0
|
||||
atksilicon = 0
|
||||
firevuln = 2
|
||||
|
||||
@@ -74,9 +74,9 @@
|
||||
for(var/obj/critter/C in view(src.seekrange,src))
|
||||
if(istype(C, /obj/critter) && !src.atkcritter) continue
|
||||
if(istype(C, /obj/mecha) && !src.atkmech) continue
|
||||
if(C.health < 0) continue
|
||||
if(C.health <= 0) continue
|
||||
if(istype(C, /obj/critter) && src.atkcritter)
|
||||
if(istype(C, /obj/critter/hivebot) && !src.atksame) continue
|
||||
if((istype(C, /obj/critter/hivebot) && !src.atksame) || (C == src)) continue
|
||||
src.attack = 1
|
||||
if(istype(C, /obj/mecha) && src.atkmech) src.attack = 1
|
||||
if(src.attack)
|
||||
@@ -203,6 +203,7 @@
|
||||
if(auto_spawn)
|
||||
spawn(spawn_delay)
|
||||
turn_on = 1
|
||||
auto_spawn = 0
|
||||
|
||||
|
||||
warpbots()
|
||||
@@ -224,11 +225,12 @@
|
||||
|
||||
|
||||
process()
|
||||
if(health < (max_health/2))
|
||||
turn_on = 1
|
||||
if(turn_on)
|
||||
if((health < (max_health/2)) && (!turn_on))
|
||||
if(prob(2))//Might be a bit low, will mess with it likely
|
||||
turn_on = 1
|
||||
if(turn_on == 1)
|
||||
warpbots()
|
||||
turn_on = 0
|
||||
turn_on = 2
|
||||
..()
|
||||
|
||||
/obj/critter/hivebot/tele/massive
|
||||
|
||||
@@ -3029,16 +3029,15 @@ It can still be worn/put on as normal.
|
||||
///eyecheck()
|
||||
///Returns a number between -1 to 2
|
||||
/mob/living/carbon/human/eyecheck()
|
||||
var/number = 0
|
||||
if(istype(src.head, /obj/item/clothing/head/helmet/welding))
|
||||
if(!src.head:up)
|
||||
return (2)
|
||||
number += 2
|
||||
if(istype(src.head, /obj/item/clothing/head/helmet/space))
|
||||
return (2)
|
||||
number += 2
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses/sunglasses))
|
||||
return (1)
|
||||
number += 1
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses/thermal))
|
||||
return (-1)
|
||||
if(src.sdisabilities & 1)//Blindness Check
|
||||
return (2)
|
||||
return (0)
|
||||
number -= 1
|
||||
return number
|
||||
|
||||
|
||||
@@ -842,35 +842,6 @@
|
||||
sight |= SEE_OBJS
|
||||
if (!druggy)
|
||||
see_invisible = 0
|
||||
else if (istype(glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(client)
|
||||
var/icon/tempHud = 'hud.dmi'
|
||||
for(var/mob/living/carbon/human/perp in view(src))
|
||||
if(perp.wear_id)
|
||||
client.images += image(tempHud,perp,"hud[ckey(perp:wear_id:GetJobName())]")
|
||||
var/perpname = "wot"
|
||||
if(istype(perp.wear_id,/obj/item/weapon/card/id))
|
||||
perpname = perp.wear_id:registered
|
||||
else if(istype(perp.wear_id,/obj/item/device/pda))
|
||||
var/obj/item/device/pda/tempPda = perp.wear_id
|
||||
perpname = tempPda.owner
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
||||
client.images += image(tempHud,perp,"hudwanted")
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
||||
client.images += image(tempHud,perp,"hudprisoner")
|
||||
break
|
||||
else
|
||||
client.images += image(tempHud,perp,"hudunknown")
|
||||
for(var/obj/item/weapon/implant/tracking/tracker in perp)
|
||||
if(tracker.implanted)
|
||||
client.images += image(tempHud,perp,"hudtracking")
|
||||
break
|
||||
if (!druggy)
|
||||
see_invisible = 0
|
||||
else if (istype(glasses, /obj/item/clothing/glasses/hud/health))
|
||||
if(client)
|
||||
|
||||
@@ -922,6 +893,18 @@
|
||||
if(!head:up && tinted_weldhelh)
|
||||
see_in_dark = 1
|
||||
|
||||
if(istype(glasses, /obj/item/clothing/glasses/hud/security))
|
||||
if(client)
|
||||
glasses:process_hud(src)
|
||||
if(!druggy)
|
||||
see_invisible = 0
|
||||
else if((istype(head, /obj/item/clothing/head/helmet)) && (!istype(head, /obj/item/clothing/head/helmet/space)))
|
||||
if(client)
|
||||
if(head:shud)
|
||||
head:shud:process_hud(src)
|
||||
if(!druggy)
|
||||
see_invisible = 0
|
||||
|
||||
if (sleep) sleep.icon_state = text("sleep[]", sleeping)
|
||||
if (rest) rest.icon_state = text("rest[]", resting)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user