diff --git a/code/defines/area/Space Station 13 areas.dm b/code/defines/area/Space Station 13 areas.dm index 6afda312023..dc0589844cd 100644 --- a/code/defines/area/Space Station 13 areas.dm +++ b/code/defines/area/Space Station 13 areas.dm @@ -110,11 +110,11 @@ proc/process_ghost_teleport_locs() requires_power = 0 /area/arrival/start - name = "Arrival Area" + name = "\improper Arrival Area" icon_state = "start" /area/admin - name = "Admin room" + name = "\improper Admin room" icon_state = "start" @@ -129,7 +129,7 @@ proc/process_ghost_teleport_locs() sd_lighting = 0 /area/shuttle/arrival - name = "Arrival Shuttle" + name = "\improper Arrival Shuttle" /area/shuttle/arrival/pre_game icon_state = "shuttle2" @@ -138,23 +138,23 @@ proc/process_ghost_teleport_locs() icon_state = "shuttle" /area/shuttle/escape - name = "Emergency Shuttle" + name = "\improper Emergency Shuttle" music = "music/escape.ogg" /area/shuttle/escape/station - name = "Emergency Shuttle Station" + name = "\improper Emergency Shuttle Station" icon_state = "shuttle2" /area/shuttle/escape/centcom - name = "Emergency Shuttle Centcom" + name = "\improper Emergency Shuttle Centcom" icon_state = "shuttle" /area/shuttle/escape/transit // the area to pass through for 3 minute transit - name = "Emergency Shuttle Transit" + name = "\improper Emergency Shuttle Transit" icon_state = "shuttle" /area/shuttle/escape_pod1 - name = "Escape Pod One" + name = "\improper Escape Pod One" music = "music/escape.ogg" /area/shuttle/escape_pod1/station @@ -167,7 +167,7 @@ proc/process_ghost_teleport_locs() icon_state = "shuttle" /area/shuttle/escape_pod2 - name = "Escape Pod Two" + name = "\improper Escape Pod Two" music = "music/escape.ogg" /area/shuttle/escape_pod2/station @@ -180,7 +180,7 @@ proc/process_ghost_teleport_locs() icon_state = "shuttle" /area/shuttle/escape_pod3 - name = "Escape Pod Three" + name = "\improper Escape Pod Three" music = "music/escape.ogg" /area/shuttle/escape_pod3/station @@ -193,7 +193,7 @@ proc/process_ghost_teleport_locs() icon_state = "shuttle" /area/shuttle/escape_pod5 //Pod 4 was lost to meteors - name = "Escape Pod Five" + name = "\improper Escape Pod Five" music = "music/escape.ogg" /area/shuttle/escape_pod5/station @@ -206,7 +206,7 @@ proc/process_ghost_teleport_locs() icon_state = "shuttle" /area/shuttle/mining - name = "Mining Shuttle" + name = "\improper Mining Shuttle" music = "music/escape.ogg" /area/shuttle/mining/station @@ -217,31 +217,31 @@ proc/process_ghost_teleport_locs() /area/shuttle/transport1/centcom icon_state = "shuttle" - name = "Transport Shuttle Centcom" + name = "\improper Transport Shuttle Centcom" /area/shuttle/transport1/station icon_state = "shuttle" - name = "Transport Shuttle" + name = "\improper Transport Shuttle" /area/shuttle/transport2/centcom icon_state = "shuttle" /area/shuttle/alien/base icon_state = "shuttle" - name = "Alien Shuttle Base" + name = "\improper Alien Shuttle Base" requires_power = 1 luminosity = 0 sd_lighting = 1 /area/shuttle/alien/mine icon_state = "shuttle" - name = "Alien Shuttle Mine" + name = "\improper Alien Shuttle Mine" requires_power = 1 luminosity = 0 sd_lighting = 1 /area/shuttle/prison/ - name = "Prison Shuttle" + name = "\improper Prison Shuttle" /area/shuttle/prison/station icon_state = "shuttle" @@ -250,54 +250,54 @@ proc/process_ghost_teleport_locs() icon_state = "shuttle2" /area/shuttle/specops/centcom - name = "Special Ops Shuttle" + name = "\improper Special Ops Shuttle" icon_state = "shuttlered" /area/shuttle/specops/station - name = "Special Ops Shuttle" + name = "\improper Special Ops Shuttle" icon_state = "shuttlered2" /area/shuttle/syndicate_elite/mothership - name = "Syndicate Elite Shuttle" + name = "\improper Syndicate Elite Shuttle" icon_state = "shuttlered" /area/shuttle/syndicate_elite/station - name = "Syndicate Elite Shuttle" + name = "\improper Syndicate Elite Shuttle" icon_state = "shuttlered2" /area/shuttle/administration/centcom - name = "Administration Shuttle Centcom" + name = "\improper Administration Shuttle Centcom" icon_state = "shuttlered" /area/shuttle/administration/station - name = "Administration Shuttle" + name = "\improper Administration Shuttle" icon_state = "shuttlered2" /area/shuttle/thunderdome name = "honk" /area/shuttle/thunderdome/grnshuttle - name = "Thunderdome GRN Shuttle" + name = "\improper Thunderdome GRN Shuttle" icon_state = "green" /area/shuttle/thunderdome/grnshuttle/dome - name = "GRN Shuttle" + name = "\improper GRN Shuttle" icon_state = "shuttlegrn" /area/shuttle/thunderdome/grnshuttle/station - name = "GRN Station" + name = "\improper GRN Station" icon_state = "shuttlegrn2" /area/shuttle/thunderdome/redshuttle - name = "Thunderdome RED Shuttle" + name = "\improper Thunderdome RED Shuttle" icon_state = "red" /area/shuttle/thunderdome/redshuttle/dome - name = "RED Shuttle" + name = "\improper RED Shuttle" icon_state = "shuttlered" /area/shuttle/thunderdome/redshuttle/station - name = "RED Station" + name = "\improper RED Station" icon_state = "shuttlered2" // === Trying to remove these areas: @@ -316,76 +316,76 @@ proc/process_ghost_teleport_locs() // === end remove /area/alien - name = "Alien base" + name = "\improper Alien base" icon_state = "yellow" requires_power = 0 // CENTCOM /area/centcom - name = "Centcom" + name = "\improper Centcom" icon_state = "centcom" requires_power = 0 /area/centcom/control - name = "Centcom Control" + name = "\improper Centcom Control" /area/centcom/evac - name = "Centcom Emergency Shuttle" + name = "\improper Centcom Emergency Shuttle" /area/centcom/suppy - name = "Centcom Supply Shuttle" + name = "\improper Centcom Supply Shuttle" /area/centcom/ferry - name = "Centcom Transport Shuttle" + name = "\improper Centcom Transport Shuttle" /area/centcom/shuttle - name = "Centcom Administration Shuttle" + name = "\improper Centcom Administration Shuttle" /area/centcom/test - name = "Centcom Testing Facility" + name = "\improper Centcom Testing Facility" /area/centcom/living - name = "Centcom Living Quarters" + name = "\improper Centcom Living Quarters" /area/centcom/specops - name = "Centcom Special Ops" + name = "\improper Centcom Special Ops" /area/centcom/creed name = "Creed's Office" /area/centcom/holding - name = "Holding Facility" + name = "\improper Holding Facility" //SYNDICATES /area/syndicate_mothership - name = "Syndicate Mothership" + name = "\improper Syndicate Mothership" icon_state = "syndie-ship" requires_power = 0 /area/syndicate_mothership/control - name = "Syndicate Control Room" + name = "\improper Syndicate Control Room" icon_state = "syndie-control" /area/syndicate_mothership/elite_squad - name = "Syndicate Elite Squad" + name = "\improper Syndicate Elite Squad" icon_state = "syndie-elite" //EXTRA /area/asteroid // -- TLE - name = "Asteroid" + name = "\improper Asteroid" icon_state = "asteroid" requires_power = 0 /area/asteroid/cave // -- TLE - name = "Asteroid - Underground" + name = "\improper Asteroid - Underground" icon_state = "cave" requires_power = 0 /area/asteroid/artifactroom - name = "Asteroid - Artifact" + name = "\improper Asteroid - Artifact" icon_state = "cave" @@ -403,84 +403,84 @@ proc/process_ghost_teleport_locs() /area/planet/clown - name = "Clown Planet" + name = "\improper Clown Planet" icon_state = "honk" requires_power = 0 /area/tdome - name = "Thunderdome" + name = "\improper Thunderdome" icon_state = "thunder" requires_power = 0 /area/tdome/tdome1 - name = "Thunderdome (Team 1)" + name = "\improper Thunderdome (Team 1)" icon_state = "green" /area/tdome/tdome2 - name = "Thunderdome (Team 2)" + name = "\improper Thunderdome (Team 2)" icon_state = "yellow" /area/tdome/tdomeadmin - name = "Thunderdome (Admin.)" + name = "\improper Thunderdome (Admin.)" icon_state = "purple" /area/tdome/tdomeobserve - name = "Thunderdome (Observer.)" + name = "\improper Thunderdome (Observer.)" icon_state = "purple" //ENEMY /area/syndicate_station - name = "Syndicate Station" + name = "\improper Syndicate Station" icon_state = "yellow" requires_power = 0 /area/syndicate_station/start - name = "Syndicate Station Start" + name = "\improper Syndicate Station Start" icon_state = "yellow" /area/syndicate_station/one - name = "Syndicate Station Location 1" + name = "\improper Syndicate Station Location 1" icon_state = "green" /area/syndicate_station/two - name = "Syndicate Station Location 2" + name = "\improper Syndicate Station Location 2" icon_state = "green" /area/syndicate_station/three - name = "Syndicate Station Location 3" + name = "\improper Syndicate Station Location 3" icon_state = "green" /area/syndicate_station/four - name = "Syndicate Station Location 4" + name = "\improper Syndicate Station Location 4" icon_state = "green" /area/syndicate_station/five - name = "Syndicate Station Location 5" + name = "\improper Syndicate Station Location 5" icon_state = "green" /area/syndicate_station/six - name = "Syndicate Station Location 6" + name = "\improper Syndicate Station Location 6" icon_state = "green" /area/wizard_station - name = "Wizard's Den" + name = "\improper Wizard's Den" icon_state = "yellow" requires_power = 0 /area/borg_deathsquad - name = "Borg Deathsquad" + name = "\improper Borg Deathsquad" icon_state = "yellow" requires_power = 0 /area/borg_deathsquad/start - name = "Borg Deathsquad - Ready" + name = "\improper Borg Deathsquad - Ready" /area/borg_deathsquad/station - name = "Borg Deathsquad - Arrived" + name = "\improper Borg Deathsquad - Arrived" @@ -491,69 +491,69 @@ proc/process_ghost_teleport_locs() //PRISON /area/prison - name = "Prison Station" + name = "\improper Prison Station" icon_state = "brig" /area/prison/arrival_airlock - name = "Prison Station Airlock" + name = "\improper Prison Station Airlock" icon_state = "green" requires_power = 0 /area/prison/control - name = "Prison Security Checkpoint" + name = "\improper Prison Security Checkpoint" icon_state = "security" /area/prison/crew_quarters - name = "Prison Security Quarters" + name = "\improper Prison Security Quarters" icon_state = "security" /area/prison/rec_room - name = "Prison Rec Room" + name = "\improper Prison Rec Room" icon_state = "green" /area/prison/closet - name = "Prison Supply Closet" + name = "\improper Prison Supply Closet" icon_state = "dk_yellow" /area/prison/hallway/fore - name = "Prison Fore Hallway" + name = "\improper Prison Fore Hallway" icon_state = "yellow" /area/prison/hallway/aft - name = "Prison Aft Hallway" + name = "\improper Prison Aft Hallway" icon_state = "yellow" /area/prison/hallway/port - name = "Prison Port Hallway" + name = "\improper Prison Port Hallway" icon_state = "yellow" /area/prison/hallway/starboard - name = "Prison Starboard Hallway" + name = "\improper Prison Starboard Hallway" icon_state = "yellow" /area/prison/morgue - name = "Prison Morgue" + name = "\improper Prison Morgue" icon_state = "morgue" /area/prison/medical_research - name = "Prison Genetic Research" + name = "\improper Prison Genetic Research" icon_state = "medresearch" /area/prison/medical - name = "Prison Medbay" + name = "\improper Prison Medbay" icon_state = "medbay" /area/prison/solar - name = "Prison Solar Array" + name = "\improper Prison Solar Array" icon_state = "storage" requires_power = 0 /area/prison/podbay - name = "Prison Podbay" + name = "\improper Prison Podbay" icon_state = "dk_yellow" /area/prison/solar_control - name = "Prison Solar Array Control" + name = "\improper Prison Solar Array Control" icon_state = "dk_yellow" /area/prison/solitary @@ -633,7 +633,7 @@ proc/process_ghost_teleport_locs() icon_state = "green" /area/maintenance/incinerator - name = "Incinerator" + name = "\improper Incinerator" icon_state = "disposal" /area/maintenance/disposal @@ -643,141 +643,141 @@ proc/process_ghost_teleport_locs() //Hallway /area/hallway/primary/fore - name = "Fore Primary Hallway" + name = "\improper Fore Primary Hallway" icon_state = "hallF" /area/hallway/primary/starboard - name = "Starboard Primary Hallway" + name = "\improper Starboard Primary Hallway" icon_state = "hallS" /area/hallway/primary/aft - name = "Aft Primary Hallway" + name = "\improper Aft Primary Hallway" icon_state = "hallA" /area/hallway/primary/port - name = "Port Primary Hallway" + name = "\improper Port Primary Hallway" icon_state = "hallP" /area/hallway/primary/central - name = "Central Primary Hallway" + name = "\improper Central Primary Hallway" icon_state = "hallC" /area/hallway/secondary/exit - name = "Escape Shuttle Hallway" + name = "\improper Escape Shuttle Hallway" icon_state = "escape" /area/hallway/secondary/construction - name = "Construction Area" + name = "\improper Construction Area" icon_state = "construction" /area/hallway/secondary/entry - name = "Arrival Shuttle Hallway" + name = "\improper Arrival Shuttle Hallway" icon_state = "entry" //Command /area/bridge - name = "Bridge" + name = "\improper Bridge" icon_state = "bridge" music = "signal" /area/bridge/meeting_room - name = "Heads of Staff Meeting Room" + name = "\improper Heads of Staff Meeting Room" icon_state = "bridge" music = null /area/crew_quarters/captain - name = "Captain's Quarters" + name = "\improper Captain's Quarters" icon_state = "captain" /area/crew_quarters/courtroom - name = "Courtroom" + name = "\improper Courtroom" icon_state = "courtroom" /area/crew_quarters/heads - name = "Head of Personnel's Office" + name = "\improper Head of Personnel's Office" icon_state = "head_quarters" /area/crew_quarters/hor - name = "Research Director's Office" + name = "\improper Research Director's Office" icon_state = "head_quarters" /area/crew_quarters/chief - name = "Chief Engineer's Office" + name = "\improper Chief Engineer's Office" icon_state = "head_quarters" /area/mint - name = "Mint" + name = "\improper Mint" icon_state = "green" //Crew /area/crew_quarters - name = "Dormitories" + name = "\improper Dormitories" icon_state = "Sleep" /area/crew_quarters/toilet - name = "Dormitory Toilets" + name = "\improper Dormitory Toilets" icon_state = "toilet" /area/crew_quarters/sleep_male - name = "Male Dorm" + name = "\improper Male Dorm" icon_state = "Sleep" /area/crew_quarters/sleep_male/toilet_male - name = "Male Toilets" + name = "\improper Male Toilets" icon_state = "toilet" /area/crew_quarters/sleep_female - name = "Female Dorm" + name = "\improper Female Dorm" icon_state = "Sleep" /area/crew_quarters/sleep_female/toilet_female - name = "Female Toilets" + name = "\improper Female Toilets" icon_state = "toilet" /area/crew_quarters/locker - name = "Locker Room" + name = "\improper Locker Room" icon_state = "locker" /area/crew_quarters/locker/locker_toilet - name = "Locker Toilets" + name = "\improper Locker Toilets" icon_state = "toilet" /area/crew_quarters/fitness - name = "Fitness Room" + name = "\improper Fitness Room" icon_state = "fitness" /area/crew_quarters/cafeteria - name = "Cafeteria" + name = "\improper Cafeteria" icon_state = "cafeteria" /area/crew_quarters/kitchen - name = "Kitchen" + name = "\improper Kitchen" icon_state = "kitchen" /area/crew_quarters/bar - name = "Bar" + name = "\improper Bar" icon_state = "bar" /area/crew_quarters/theatre - name = "Theatre" + name = "\improper Theatre" icon_state = "Theatre" /area/library - name = "Library" + name = "\improper Library" icon_state = "library" /area/chapel/main - name = "Chapel" + name = "\improper Chapel" icon_state = "chapel" /area/chapel/office - name = "Chapel Office" + name = "\improper Chapel Office" icon_state = "chapeloffice" /area/lawoffice - name = "Law Office" + name = "\improper Law Office" icon_state = "law" @@ -787,37 +787,37 @@ proc/process_ghost_teleport_locs() /area/holodeck - name = "Holodeck" + name = "\improper Holodeck" icon_state = "Holodeck" luminosity = 1 sd_lighting = 0 /area/holodeck/alphadeck - name = "Holodeck Alpha" + name = "\improper Holodeck Alpha" /area/holodeck/source_plating - name = "Holodeck - Off" + name = "\improper Holodeck - Off" icon_state = "Holodeck" /area/holodeck/source_emptycourt - name = "Holodeck - Empty Court" + name = "\improper Holodeck - Empty Court" /area/holodeck/source_boxingcourt - name = "Holodeck - Boxing Court" + name = "\improper Holodeck - Boxing Court" /area/holodeck/source_thunderdomecourt - name = "Holodeck - Thunderdome Court" + name = "\improper Holodeck - Thunderdome Court" /area/holodeck/source_beach - name = "Holodeck - Beach" + name = "\improper Holodeck - Beach" icon_state = "Holodeck" // Lazy. /area/holodeck/source_burntest - name = "Holodeck - Atmospheric Burn Test" + name = "\improper Holodeck - Atmospheric Burn Test" /area/holodeck/source_wildlife - name = "Holodeck - Wildlife Simulation" + name = "\improper Holodeck - Wildlife Simulation" @@ -833,7 +833,7 @@ proc/process_ghost_teleport_locs() /area/engine engine_smes - name = "Engineering SMES" + name = "\improper Engineering SMES" icon_state = "engine_smes" requires_power = 0//This area only covers the batteries and they deal with their own power @@ -842,11 +842,11 @@ proc/process_ghost_teleport_locs() icon_state = "engine" break_room - name = "Engineering Break Room" + name = "\improper Engineering Break Room" icon_state = "engine" chiefs_office - name = "Chief Engineer's office" + name = "\improper Chief Engineer's office" icon_state = "engine_control" @@ -858,27 +858,27 @@ proc/process_ghost_teleport_locs() sd_lighting = 0 auxport - name = "Port Auxiliary Solar Array" + name = "\improper Port Auxiliary Solar Array" icon_state = "panelsA" auxstarboard - name = "Starboard Auxiliary Solar Array" + name = "\improper Starboard Auxiliary Solar Array" icon_state = "panelsA" fore - name = "Fore Solar Array" + name = "\improper Fore Solar Array" icon_state = "yellow" aft - name = "Aft Solar Array" + name = "\improper Aft Solar Array" icon_state = "aft" starboard - name = "Starboard Solar Array" + name = "\improper Starboard Solar Array" icon_state = "panelsS" port - name = "Port Solar Array" + name = "\improper Port Solar Array" icon_state = "panelsP" /area/maintenance/auxsolarport @@ -899,31 +899,31 @@ proc/process_ghost_teleport_locs() /area/assembly/chargebay - name = "Recharging Bay" + name = "\improper Recharging Bay" icon_state = "mechbay" /area/assembly/showroom - name = "Robotics Showroom" + name = "\improper Robotics Showroom" icon_state = "showroom" /area/assembly/assembly_line - name = "Robotics Assembly Line" + name = "\improper Robotics Assembly Line" icon_state = "ass_line" //Teleporter /area/teleporter - name = "Teleporter" + name = "\improper Teleporter" icon_state = "teleporter" music = "signal" /area/teleporter/gateway - name = "Secure Construction Area" + name = "\improper Secure Construction Area" icon_state = "teleporter" music = "signal" /area/AIsattele - name = "AI Satellite Teleporter Room" + name = "\improper AI Satellite Teleporter Room" icon_state = "teleporter" music = "signal" @@ -935,11 +935,11 @@ proc/process_ghost_teleport_locs() music = 'signal.ogg' /area/medical/patients_rooms - name = "Patients Rooms" + name = "\improper Patient's Rooms" icon_state = "patients" /area/medical/cmo - name = "Chief Medical Officer's office" + name = "\improper Chief Medical Officer's office" icon_state = "CMO" /area/medical/robotics @@ -955,7 +955,7 @@ proc/process_ghost_teleport_locs() icon_state = "virology" /area/medical/morgue - name = "Morgue" + name = "\improper Morgue" icon_state = "morgue" /area/medical/chemistry @@ -971,7 +971,7 @@ proc/process_ghost_teleport_locs() icon_state = "cryo" /area/medical/exam_room - name = "Exam Room" + name = "\improper Exam Room" icon_state = "exam_room" /area/medical/genetics @@ -979,37 +979,37 @@ proc/process_ghost_teleport_locs() icon_state = "genetics" /area/medical/sleeper - name = "Medical Sleepers Room" + name = "\improper Medical Sleepers Room" icon_state = "medbay" //Security /area/security/main - name = "Security Office" + name = "\improper Security Office" icon_state = "security" /area/security/brig - name = "Brig" + name = "\improper Brig" icon_state = "brig" /area/security/prison - name = "Prison Wing" + name = "\improper Prison Wing" icon_state = "security" /area/security/warden - name = "Armory" + name = "\improper Armory" icon_state = "Warden" /area/security/hos - name = "Head of Security's Office" + name = "\improper Head of Security's Office" icon_state = "security" /area/security/detectives_office - name = "Detective's Office" + name = "\improper Detective's Office" icon_state = "detective" /area/security/range - name = "Firing Range" + name = "\improper Firing Range" icon_state = "firingrange" /* @@ -1030,59 +1030,59 @@ proc/process_ghost_teleport_locs() */ /area/security/nuke_storage - name = "Vault" + name = "\improper Vault" icon_state = "nuke_storage" /area/security/checkpoint - name = "Security Checkpoint" + name = "\improper Security Checkpoint" icon_state = "checkpoint1" /area/security/checkpoint2 - name = "Security Checkpoint" + name = "\improper Security Checkpoint" icon_state = "security" /area/security/vacantoffice - name = "Vacant Office" + name = "\improper Vacant Office" icon_state = "security" /area/quartermaster - name = "Quartermasters" + name = "\improper Quartermasters" icon_state = "quart" ///////////WORK IN PROGRESS////////// /area/quartermaster/sorting - name = "Delivery Office" + name = "\improper Delivery Office" icon_state = "quartstorage" ////////////WORK IN PROGRESS////////// /area/quartermaster/office - name = "Cargo Office" + name = "\improper Cargo Office" icon_state = "quartoffice" /area/quartermaster/storage - name = "Cargo Bay" + name = "\improper Cargo Bay" icon_state = "quartstorage" /area/quartermaster/qm - name = "Quartermaster's Office" + name = "\improper Quartermaster's Office" icon_state = "quart" /area/quartermaster/miningdock - name = "Mining Dock" + name = "\improper Mining Dock" icon_state = "mining" /area/quartermaster/miningstorage - name = "Mining Storage" + name = "\improper Mining Storage" icon_state = "green" /area/quartermaster/mechbay - name = "Mech Bay" + name = "\improper Mech Bay" icon_state = "yellow" /area/janitor/ - name = "Custodial Closet" + name = "\improper Custodial Closet" icon_state = "janitor" /area/hydroponics @@ -1092,27 +1092,27 @@ proc/process_ghost_teleport_locs() //Toxins /area/toxins/lab - name = "Research Lab" + name = "\improper Research Lab" icon_state = "toxlab" /area/toxins/xenobiology - name = "Xenobiology Lab" + name = "\improper Xenobiology Lab" icon_state = "toxlab" /area/toxins/storage - name = "Toxins Storage" + name = "\improper Toxins Storage" icon_state = "toxstorage" /area/toxins/test_area - name = "Toxins Test Area" + name = "\improper Toxins Test Area" icon_state = "toxtest" /area/toxins/mixing - name = "Toxins Mixing Room" + name = "\improper Toxins Mixing Room" icon_state = "toxmix" /area/toxins/server - name = "Server Room" + name = "\improper Server Room" icon_state = "server" //Storage @@ -1159,35 +1159,35 @@ proc/process_ghost_teleport_locs() /area/storage/testroom requires_power = 0 - name = "Test Room" + name = "\improper Test Room" icon_state = "storage" //DJSTATION /area/djstation - name = "Ruskie DJ Station" + name = "\improper Ruskie DJ Station" icon_state = "DJ" /area/djstation/solars - name = "DJ Station Solars" + name = "\improper DJ Station Solars" icon_state = "DJ" //DERELICT /area/derelict - name = "Derelict Station" + name = "\improper Derelict Station" icon_state = "storage" /area/derelict/hallway/primary - name = "Derelict Primary Hallway" + name = "\improper Derelict Primary Hallway" icon_state = "hallP" /area/derelict/hallway/secondary - name = "Derelict Secondary Hallway" + name = "\improper Derelict Secondary Hallway" icon_state = "hallS" /area/derelict/arrival - name = "Derelict Arrival Centre" + name = "\improper Derelict Arrival Centre" icon_state = "yellow" /area/derelict/storage/equipment @@ -1201,11 +1201,11 @@ proc/process_ghost_teleport_locs() icon_state = "green" /area/derelict/bridge - name = "Derelict Control Room" + name = "\improper Derelict Control Room" icon_state = "bridge" /area/derelict/secret - name = "Derelict Secret Room" + name = "\improper Derelict Secret Room" icon_state = "library" /area/derelict/bridge/access @@ -1213,15 +1213,15 @@ proc/process_ghost_teleport_locs() icon_state = "auxstorage" /area/derelict/bridge/ai_upload - name = "Derelict Computer Core" + name = "\improper Derelict Computer Core" icon_state = "ai" /area/derelict/solar_control - name = "Derelict Solar Control" + name = "\improper Derelict Solar Control" icon_state = "engine" /area/derelict/crew_quarters - name = "Derelict Crew Quarters" + name = "\improper Derelict Crew Quarters" icon_state = "fitness" /area/derelict/medical @@ -1229,15 +1229,15 @@ proc/process_ghost_teleport_locs() icon_state = "medbay" /area/derelict/medical/morgue - name = "Derelict Morgue" + name = "\improper Derelict Morgue" icon_state = "morgue" /area/derelict/medical/chapel - name = "Derelict Chapel" + name = "\improper Derelict Chapel" icon_state = "chapel" /area/derelict/teleporter - name = "Derelict Teleporter" + name = "\improper Derelict Teleporter" icon_state = "teleporter" /area/derelict/eva @@ -1245,33 +1245,33 @@ proc/process_ghost_teleport_locs() icon_state = "eva" /area/derelict/ship - name = "Abandoned Ship" + name = "\improper Abandoned Ship" icon_state = "yellow" /area/solar/derelict_starboard - name = "Derelict Starboard Solar Array" + name = "\improper Derelict Starboard Solar Array" icon_state = "panelsS" /area/solar/derelict_aft - name = "Derelict Aft Solar Array" + name = "\improper Derelict Aft Solar Array" icon_state = "aft" /area/derelict/singularity_engine - name = "Derelict Singularity Engine" + name = "\improper Derelict Singularity Engine" icon_state = "engine" //Construction /area/construction - name = "Construction Area" + name = "\improper Construction Area" icon_state = "yellow" /area/construction/supplyshuttle - name = "Supply Shuttle" + name = "\improper Supply Shuttle" icon_state = "yellow" /area/construction/quarters - name = "Engineer's Quarters" + name = "\improper Engineer's Quarters" icon_state = "yellow" /area/construction/qmaint @@ -1279,15 +1279,15 @@ proc/process_ghost_teleport_locs() icon_state = "yellow" /area/construction/hallway - name = "Hallway" + name = "\improper Hallway" icon_state = "yellow" /area/construction/solars - name = "Solar Panels" + name = "\improper Solar Panels" icon_state = "yellow" /area/construction/solarscontrol - name = "Solar Panel Control" + name = "\improper Solar Panel Control" icon_state = "yellow" /area/construction/Storage @@ -1309,51 +1309,51 @@ proc/process_ghost_teleport_locs() icon_state = "storage" /area/turret_protected/ai_upload - name = "AI Upload Chamber" + name = "\improper AI Upload Chamber" icon_state = "ai_upload" /area/turret_protected/ai_upload_foyer - name = "AI Upload Foyer" + name = "\improper AI Upload Foyer" icon_state = "ai_foyer" /area/turret_protected/ai - name = "AI Chamber" + name = "\improper AI Chamber" icon_state = "ai_chamber" /area/turret_protected/aisat - name = "AI Satellite" + name = "\improper AI Satellite" icon_state = "ai" /area/turret_protected/aisat_interior - name = "AI Satellite" + name = "\improper AI Satellite" icon_state = "ai" /area/turret_protected/AIsatextFP - name = "AI Sat Ext" + name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 sd_lighting = 0 /area/turret_protected/AIsatextFS - name = "AI Sat Ext" + name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 sd_lighting = 0 /area/turret_protected/AIsatextAS - name = "AI Sat Ext" + name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 sd_lighting = 0 /area/turret_protected/AIsatextAP - name = "AI Sat Ext" + name = "\improper AI Sat Ext" icon_state = "storage" luminosity = 1 sd_lighting = 0 /area/turret_protected/NewAIMain - name = "AI Main New" + name = "\improper AI Main New" icon_state = "storage" @@ -1363,19 +1363,19 @@ proc/process_ghost_teleport_locs() /area/wreck/ai - name = "AI Chamber" + name = "\improper AI Chamber" icon_state = "ai" /area/wreck/main - name = "Wreck" + name = "\improper Wreck" icon_state = "storage" /area/wreck/engineering - name = "Power Room" + name = "\improper Power Room" icon_state = "engine" /area/wreck/bridge - name = "Bridge" + name = "\improper Bridge" icon_state = "bridge" /area/generic @@ -1387,31 +1387,31 @@ proc/process_ghost_teleport_locs() // Telecommunications Satellite /area/tcommsat/entrance - name = "Telecommunications Satellite Teleporter" + name = "\improper Telecommunications Satellite Teleporter" icon_state = "tcomsatentrance" /area/tcommsat/chamber - name = "Telecommunications Satellite Central Compartment" + name = "\improper Telecommunications Satellite Central Compartment" icon_state = "tcomsatcham" /area/turret_protected/tcomfoyer - name = "Telecommunications Satellite Foyer" + name = "\improper Telecommunications Satellite Foyer" icon_state = "tcomsatlob" /area/turret_protected/tcomwest - name = "Telecommunications Satellite West Wing" + name = "\improper Telecommunications Satellite West Wing" icon_state = "tcomsatwest" /area/turret_protected/tcomeast - name = "Telecommunications Satellite East Wing" + name = "\improper Telecommunications Satellite East Wing" icon_state = "tcomsateast" /area/tcommsat/computer - name = "Telecommunications Satellite Observatory" + name = "\improper Telecommunications Satellite Observatory" icon_state = "tcomsatcomp" /area/tcommsat/lounge - name = "Telecommunications Satellite Lounge" + name = "\improper Telecommunications Satellite Lounge" icon_state = "tcomsatlounge" @@ -1426,7 +1426,7 @@ proc/process_ghost_teleport_locs() /area/turret_protected/AssistantRoom - name = "Assistant Room" + name = "\improper Assistant Room" icon_state = "storage" sd_lighting = 0 diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 7d6cd50c518..ce0d3aed735 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -62,7 +62,7 @@ return /atom/proc/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!(istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) && !(istype(W, /obj/item/weapon/cleaner)) && !(istype(W, /obj/item/weapon/chemsprayer)) && !(istype(W, /obj/item/weapon/pepperspray)) && !(istype(W, /obj/item/weapon/plantbgone)) && !(istype(W, /obj/item/weapon/packageWrap))) + if (!(istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) && !(istype(W, /obj/item/weapon/cleaner)) && !(istype(W, /obj/item/weapon/chemsprayer)) && !(istype(W, /obj/item/weapon/pepperspray)) && !(istype(W, /obj/item/weapon/plantbgone)) && !(istype(W, /obj/item/weapon/packageWrap)) && !istype(W, /obj/item/device/detective_scanner)) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O << "\red [src] has been hit by [user] with [W]" @@ -98,64 +98,62 @@ if(isnull(M.key)) return if (!( src.flags ) & FPRINT) return + //Smudge up dem prints some + for(var/P in fingerprints) + var/test_print = stars(fingerprints[P], rand(85,95)) + if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left) + fingerprints.Remove(P) + else + fingerprints[P] = test_print if (ishuman(M)) + //Add the list if it does not exist. if(!fingerprintshidden) fingerprintshidden = list() + //Fibers~ + add_fibers(M) + //Now, lets get to the dirty work. + //First, make sure their DNA makes sense. var/mob/living/carbon/human/H = M if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32)) if(!istype(H.dna, /datum/dna)) H.dna = new /datum/dna(null) H.check_dna() + //Now, deal with gloves. if (H.gloves && H.gloves != src) - if(src.fingerprintslast != H.key) - src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key) - src.fingerprintslast = H.key + if(fingerprintslast != H.key) + fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key) + fingerprintslast = H.key H.gloves.add_fingerprint(M) + //Deal with gloves the pass finger/palm prints. if(H.gloves != src) if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex)) return 0 else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex)) return 0 - if(src.fingerprintslast != H.key) - src.fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key) - src.fingerprintslast = H.key + //More adminstuffz + if(fingerprintslast != H.key) + fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key) + fingerprintslast = H.key + //Make the list if it does not exist. if(!fingerprints) fingerprints = list() - var/new_prints = 0 - var/prints - for(var/i = 1, i <= src.fingerprints.len, i++) - var/list/L = params2list(src.fingerprints[i]) - if(L[num2text(1)] == md5(H.dna.uni_identity)) - new_prints = i - prints = L[num2text(2)] - break - else - var/test_print = stars(L[num2text(2)], rand(80,90)) - if(stringpercent(test_print) == 32) - if(src.fingerprints.len == 1) - src.fingerprints = list() - else - for(var/j = (i + 1), j < (src.fingerprints.len), j++) - src.fingerprints[j-1] = src.fingerprints[j] - src.fingerprints.len-- - else - src.fingerprints[i] = "1=[L[num2text(1)]]&2=[test_print]" - if(new_prints) - src.fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40))))) - else if(new_prints == 0) - if(!src.fingerprints) - src.fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))) - else - src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))) - for(var/i = 1, i <= src.fingerprints.len, i++) - if(length(src.fingerprints[i]) != 69) - src.fingerprints.Remove(src.fingerprints[i]) - if(fingerprints && !fingerprints.len) del(fingerprints) + //Hash this shit. + var/full_print = md5(H.dna.uni_identity) + var/print = fingerprints[full_print] //Find if the print is already there. + //It is not! We need to add it! + if(!print) + fingerprints[full_print] = stars(full_print, H.gloves ? rand(10,20) : rand(25,40)) + //It's there, lets merge this shit! + else + fingerprints[full_print] = stringmerge(print, stars(full_print, (H.gloves ? rand(10,20) : rand(25,40)))) return 1 else - if(src.fingerprintslast != M.key) - src.fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key) - src.fingerprintslast = M.key + if(fingerprintslast != M.key) + fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key) + fingerprintslast = M.key + //Cleaning up shit. + if(fingerprints && !fingerprints.len) + del(fingerprints) return //returns 1 if made bloody, returns 0 otherwise @@ -190,11 +188,10 @@ O.overlays += O.blood_overlay //if this blood isn't already in the list, add it - for(var/i = 1, i <= O.blood_DNA.len, i++) - if((O.blood_DNA[i][1] == M.dna.unique_enzymes) && (O.blood_DNA[i][2] == M.dna.b_type)) - return 0 //already bloodied with this blood. Cannot add more. - O.blood_DNA.len++ - O.blood_DNA[O.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type) + + if(blood_DNA[M.dna.unique_enzymes]) + return 0 //already bloodied with this blood. Cannot add more. + blood_DNA[M.dna.unique_enzymes] = M.dna.b_type return 1 //we applied blood to the item //adding blood to turfs @@ -203,8 +200,8 @@ //get one blood decal and infect it with virus from M.viruses for(var/obj/effect/decal/cleanable/blood/B in T.contents) - B.blood_DNA.len++ - B.blood_DNA[B.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type) + if(!B.blood_DNA[M.dna.unique_enzymes]) + B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type for(var/datum/disease/D in M.viruses) var/datum/disease/newDisease = new D.type B.viruses += newDisease @@ -213,7 +210,7 @@ //if there isn't a blood decal already, make one. var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T) - newblood.blood_DNA = list(list(M.dna.unique_enzymes, M.dna.b_type)) + newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type for(var/datum/disease/D in M.viruses) var/datum/disease/newDisease = new D.type newblood.viruses += newDisease @@ -224,11 +221,9 @@ else if (istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src //if this blood isn't already in the list, add it - for(var/i = 1, i <= H.blood_DNA.len, i++) - if((H.blood_DNA[i][1] == M.dna.unique_enzymes) && (H.blood_DNA[i][2] == M.dna.b_type)) - return 0 //already bloodied with this blood. Cannot add more. - H.blood_DNA.len++ - H.blood_DNA[H.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type) + if(blood_DNA[H.dna.unique_enzymes]) + return 0 //already bloodied with this blood. Cannot add more. + blood_DNA[H.dna.unique_enzymes] = H.dna.b_type return 1 //we applied blood to the item return @@ -251,7 +246,7 @@ if( istype(src, /turf/simulated) ) var/turf/simulated/source1 = src var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1) - this.blood_DNA = list(list(M.dna.unique_enzymes,M.dna.b_type)) + this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type for(var/datum/disease/D in M.viruses) var/datum/disease/newDisease = new D.type this.viruses += newDisease @@ -261,6 +256,7 @@ if( istype(src, /turf/simulated) ) var/turf/simulated/source2 = src var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2) + this.blood_DNA["UNKNOWN BLOOD"] = "X*" for(var/datum/disease/D in M.viruses) var/datum/disease/newDisease = new D.type this.viruses += newDisease @@ -281,12 +277,15 @@ if (!( src.flags ) & FPRINT) return - if ( src.blood_DNA ) + if (blood_DNA) //Cleaning blood off of mobs if (istype (src, /mob/living/carbon)) var/mob/living/carbon/M = src del(M.blood_DNA) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + H.bloody_hands = 0 //Cleaning blood off of items else if (istype (src, /obj/item)) @@ -295,6 +294,10 @@ if(O.blood_overlay) O.overlays.Remove(O.blood_overlay) + if(istype(src, /obj/item/clothing/gloves)) + var/obj/item/clothing/gloves/G = src + G.transfer_blood = 0 + //Cleaning blood off of turfs else if (istype(src, /turf/simulated)) var/turf/simulated/T = src @@ -307,25 +310,14 @@ if(blood_DNA && istype(blood_DNA, /list) && !blood_DNA.len) del(blood_DNA) - if(src.fingerprints && src.fingerprints.len) - var/done = 0 - while(!done) - done = 1 - for(var/i = 1, i < (src.fingerprints.len + 1), i++) - var/list/prints = params2list(src.fingerprints[i]) - var/test_print = prints["2"] - var/new_print = stars(test_print, rand(1,20)) - if(stringpercent(new_print) == 32) - if(src.fingerprints.len == 1) - src.fingerprints = list() - else - for(var/j = (i + 1), j < (src.fingerprints.len), j++) - src.fingerprints[j-1] = src.fingerprints[j] - src.fingerprints.len-- - done = 0 - break - else - src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print + if(fingerprints && fingerprints.len) + //Smudge up dem prints some + for(var/P in fingerprints) + var/test_print = stars(fingerprints[P], rand(10,20)) + if(stringpercent(test_print) == 32) //She's full of stars! (No actual print left) + fingerprints.Remove(P) + else + fingerprints[P] = test_print if(fingerprints && !fingerprints.len) del(fingerprints) if(istype(src, /mob/living/carbon/human)) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 548a7eb5fc5..d212c533e28 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -106,9 +106,13 @@ var/obj/item/weapon/storage/box/survival/Evipack = new /obj/item/weapon/storage/box/survival(H) H.equip_if_possible(Evipack, H.slot_r_hand) new /obj/item/weapon/fcardholder(Evipack) + H.equip_if_possible(new /obj/item/weapon/storage/box/evidence(H), H.slot_l_hand) + H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_r_store) else H.equip_if_possible(new /obj/item/weapon/storage/box/survival(H.back), H.slot_in_backpack) H.equip_if_possible(new /obj/item/weapon/fcardholder(H), H.slot_in_backpack) + H.equip_if_possible(new /obj/item/weapon/storage/box/evidence(H), H.slot_in_backpack) + H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 3e07ccbec3e..0eb925c4670 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -797,7 +797,8 @@ H.apply_damage(0.5*damage, BRUTE, "r_arm") var/obj/effect/decal/cleanable/blood/B = new(src.loc) - B.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type)) + B.blood_DNA = list() + B.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type bloodiness += 4 diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 74721a2c8a2..60d606749d5 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -22,6 +22,8 @@ return } */ + if(istype(W, /obj/item/device/detective_scanner)) + return return src.attack_hand(user) /obj/machinery/door_control/attack_hand(mob/user as mob) @@ -103,6 +105,9 @@ return src.attack_hand(user) /obj/machinery/driver_button/attackby(obj/item/weapon/W, mob/user as mob) + + if(istype(W, /obj/item/device/detective_scanner)) + return return src.attack_hand(user) /obj/machinery/driver_button/attack_hand(mob/user as mob) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index e4671de1220..a69794c7b77 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -985,6 +985,8 @@ About the new airlock wires panel: if(src.isElectrified()) if(src.shock(user, 75)) return + if(istype(C, /obj/item/device/detective_scanner)) + return src.add_fingerprint(user) if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 95b5c2e8406..85430410e15 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -115,6 +115,8 @@ attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/device/detective_scanner)) + return if(src.operating || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. src.add_fingerprint(user) if(!src.requiresID()) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index a19a417e95d..c6ccc0747e2 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -60,6 +60,8 @@ src.sd_SetLuminosity(0) /obj/machinery/sparker/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/detective_scanner)) + return if (istype(W, /obj/item/weapon/screwdriver)) add_fingerprint(user) src.disable = !src.disable diff --git a/code/game/magic/cultist/ritual.dm b/code/game/magic/cultist/ritual.dm index ffc782c3f26..d3dba85a782 100644 --- a/code/game/magic/cultist/ritual.dm +++ b/code/game/magic/cultist/ritual.dm @@ -580,7 +580,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", R.word2 = w2 R.word3 = w3 R.check_icon() - R.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type)) + R.blood_DNA = list() + R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type return else user << "The book seems full of illegible scribbles. Is this a joke?" @@ -625,7 +626,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", var/obj/effect/rune/R = new /obj/effect/rune if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/H = user - R.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type)) + R.blood_DNA = list() + R.blood_DNA[H.dna.unique_enzymes] = H.dna.b_type switch(r) if("teleport") var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri") diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm index 5f98d2a9266..9a5a252aa90 100644 --- a/code/game/objects/closets/secure/security.dm +++ b/code/game/objects/closets/secure/security.dm @@ -170,6 +170,8 @@ new /obj/item/weapon/storage/fcard_kit(src) new /obj/item/weapon/fcardholder(src) new /obj/item/weapon/clipboard(src) + new /obj/item/device/detective_scanner(src) + new /obj/item/weapon/storage/box/evidence(src) return diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm index 36d5c69bcc4..a5c211327f2 100644 --- a/code/game/objects/devices/PDA/PDA.dm +++ b/code/game/objects/devices/PDA/PDA.dm @@ -835,9 +835,8 @@ else user << "\blue Blood found on [C]. Analysing..." spawn(15) - for(var/i = 1, i < C:blood_DNA.len, i++) - var/list/templist = C:blood_DNA[i] - user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]" + for(var/blood in C:blood_DNA) + user << "\blue Blood type: [C:blood_DNA[blood]]\nDNA: [blood]" if(4) for (var/mob/O in viewers(C, null)) @@ -852,23 +851,26 @@ /obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user as mob) switch(scanmode) if(2) - if (!A.fingerprints) - user << "\blue Unable to locate any fingerprints on [A]!" - else - user << "\blue Isolated [A:fingerprints.len] fingerprints." - var/list/prints = A:fingerprints - var/list/complete_prints = list() - for(var/i in prints) - var/list/templist = params2list(i) - var/temp = stringpercent(templist["2"]) - if(temp <= 6) - complete_prints += templist["2"] - if(complete_prints.len < 1) - user << "\blue No intact prints found" + if(!istype(A, /obj/item/weapon/f_card)) + if (!A.fingerprints) + user << "\blue Unable to locate any fingerprints on [A]!" else - user << "\blue Found [complete_prints.len] intact prints" - for(var/i in complete_prints) - user << "\blue " + i + user << "\blue Isolated [A:fingerprints.len] fingerprints." + var/list/prints = A:fingerprints + var/list/complete_prints = list() + for(var/i in prints) + var/print = prints[i] + if(stringpercent(print) <= FINGERPRINT_COMPLETE) + complete_prints += print + if(complete_prints.len < 1) + user << "\blue No intact prints found" + else + user << "\blue Found [complete_prints.len] intact prints" + for(var/i in complete_prints) + user << "\blue [i]" + if(cartridge && cartridge.access_security) + cartridge.add_data(A) + user << "Data added to internal storage. Scan with a High-Resolution Scanner to retreive." if(3) if(!isnull(A.reagents)) diff --git a/code/game/objects/devices/PDA/cart.dm b/code/game/objects/devices/PDA/cart.dm index 727a613f97e..2e188ff6693 100644 --- a/code/game/objects/devices/PDA/cart.dm +++ b/code/game/objects/devices/PDA/cart.dm @@ -30,6 +30,7 @@ var/list/powermonitors = list() var/message1 // used for status_displays var/message2 + var/list/stored_data = list() engineering name = "Power-ON Cartridge" @@ -598,6 +599,43 @@ Code: else menu += "ERROR: Unable to determine current location." + proc/add_data(atom/A as mob|obj|turf|area) + //I love hashtables. + var/list/data_entry = stored_data["\ref [A]"] + if(islist(data_entry)) //Yay, it was already stored! + //Merge the fingerprints. + var/list/data_prints = data_entry[1] + for(var/print in A.fingerprints) + var/merged_print = data_prints[print] + if(!merged_print) + data_prints[print] = A.fingerprints[print] + else + data_prints[print] = stringmerge(data_prints[print],A.fingerprints[print]) + + //Now the fibers + var/list/fibers = data_entry[2] + if(!fibers) + fibers = list() + if(A.suit_fibers && A.suit_fibers.len) + for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~ + if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add! + fibers += A.suit_fibers[j] + var/list/blood = data_entry[3] + if(!blood) + blood = list() + if(A.blood_DNA && A.blood_DNA.len) + for(var/main_blood in A.blood_DNA) + if(!blood[main_blood]) + blood[main_blood] = A.blood_DNA[blood] + return 1 + var/list/sum_list[4] //Pack it back up! + sum_list[1] = A.fingerprints + sum_list[2] = A.suit_fibers + sum_list[3] = A.blood_DNA + sum_list[4] = "\The [A] in \the [get_area(A)]" + stored_data["\ref [A]"] = sum_list + return 0 + /obj/item/weapon/cartridge/Topic(href, href_list) ..() diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm index 61c864dd8df..193ebb2ef3e 100644 --- a/code/game/objects/devices/scanners.dm +++ b/code/game/objects/devices/scanners.dm @@ -60,6 +60,168 @@ MASS SPECTROMETER if(M) M.invisibility = 2 + +/obj/item/device/detective_scanner + name = "Scanner" + desc = "Used to scan objects for DNA and fingerprints." + icon_state = "forensic1" + var/amount = 20.0 + var/list/stored = list() + w_class = 3.0 + item_state = "electronic" + flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY + slot_flags = SLOT_BELT + + attackby(obj/item/weapon/f_card/W as obj, mob/user as mob) + ..() + if (istype(W, /obj/item/weapon/f_card)) + if (W.fingerprints) + return + if (src.amount == 20) + return + if (W.amount + src.amount > 20) + src.amount = 20 + W.amount = W.amount + src.amount - 20 + else + src.amount += W.amount + //W = null + del(W) + add_fingerprint(user) + if (W) + W.add_fingerprint(user) + return + + attack(mob/living/carbon/human/M as mob, mob/user as mob) + if (!ishuman(M)) + user << "\red [M] is not human and cannot have the fingerprints." + return 0 + if (( !( istype(M.dna, /datum/dna) ) || M.gloves) ) + user << "\blue No fingerprints found on [M]" + return 0 + else + if (src.amount < 1) + user << text("\blue Fingerprints scanned on [M]. Need more cards to print.") + else + src.amount-- + var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) + F.amount = 1 + F.add_fingerprint(M) + F.icon_state = "fingerprint1" + F.name = text("FPrintC- '[M.name]'") + + user << "\blue Done printing." + user << "\blue [M]'s Fingerprints: [md5(M.dna.uni_identity)]" + if ( !M.blood_DNA || !M.blood_DNA.len ) + user << "\blue No blood found on [M]" + if(M.blood_DNA) + del(M.blood_DNA) + else + user << "\blue Blood found on [M]. Analysing..." + spawn(15) + for(var/blood in M.blood_DNA) + user << "\blue Blood type: [M.blood_DNA[blood]]\nDNA: [blood]" + return + + afterattack(atom/A as obj|turf|area, mob/user as mob) + if(!in_range(A,user)) + return + if(loc != user) + return + if(istype(A,/obj/machinery/computer/forensic_scanning)) //breaks shit. + return + if(istype(A,/obj/item/weapon/f_card)) + user << "The scanner displays on the screen: \"ERROR 43: Object on Excluded Object List.\"" + return + + add_fingerprint(user) + + + //Special case for blood splaters. + if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune)) + if(!isnull(A.blood_DNA)) + for(var/blood in A.blood_DNA) + user << "\blue Blood type: [A.blood_DNA[blood]]\nDNA: [blood]" + return + + //General + if ((!A.fingerprints || !A.fingerprints.len) && !A.suit_fibers && !A.blood_DNA) + user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]" ,\ + "\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!",\ + "You hear a faint hum of electrical equipment.") + return 0 + + if(add_data(A)) + user << "\blue Object already in internal memory. Consolidating data..." + return + + + //PRINTS + if(!A.fingerprints || !A.fingerprints.len) + if(A.fingerprints) + del(A.fingerprints) + else + user << "\blue Isolated [A.fingerprints.len] fingerprints: Data Stored: Scan with Hi-Res Forensic Scanner to retrieve." + + //FIBERS + if(A.suit_fibers) + user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve." + + //Blood + if (A.blood_DNA) + user << "\blue Blood found on [A]. Analysing..." + spawn(15) + for(var/blood in A.blood_DNA) + user << "Blood type: \red [A.blood_DNA[blood]] \t \black DNA: \red [blood]" + if(prob(5)) + user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]" ,\ + "You finish scanning \the [A].",\ + "You hear a faint hum of electrical equipment.") + return 0 + else + user.visible_message("\The [user] scans \the [A] with \a [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]\n[user.gender == MALE ? "He" : "She"] seems to perk up slightly at the readout." ,\ + "The results of the scan pique your interest.",\ + "You hear a faint hum of electrical equipment, and someone making a thoughtful noise.") + return 0 + return + + proc/add_data(atom/A as mob|obj|turf|area) + //I love hashtables. + var/list/data_entry = stored["\ref [A]"] + if(islist(data_entry)) //Yay, it was already stored! + //Merge the fingerprints. + var/list/data_prints = data_entry[1] + for(var/print in A.fingerprints) + var/merged_print = data_prints[print] + if(!merged_print) + data_prints[print] = A.fingerprints[print] + else + data_prints[print] = stringmerge(data_prints[print],A.fingerprints[print]) + + //Now the fibers + var/list/fibers = data_entry[2] + if(!fibers) + fibers = list() + if(A.suit_fibers && A.suit_fibers.len) + for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~ + if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add! + fibers += A.suit_fibers[j] + var/list/blood = data_entry[3] + if(!blood) + blood = list() + if(A.blood_DNA && A.blood_DNA.len) + for(var/main_blood in A.blood_DNA) + if(!blood[main_blood]) + blood[main_blood] = A.blood_DNA[blood] + return 1 + var/list/sum_list[4] //Pack it back up! + sum_list[1] = A.fingerprints + sum_list[2] = A.suit_fibers + sum_list[3] = A.blood_DNA + sum_list[4] = "\The [A] in \the [get_area(A)]" + stored["\ref [A]"] = sum_list + return 0 + + /obj/item/device/healthanalyzer name = "Health Analyzer" icon_state = "health" diff --git a/code/game/objects/gibs.dm b/code/game/objects/gibs.dm index 807358696bc..f428716c0b9 100644 --- a/code/game/objects/gibs.dm +++ b/code/game/objects/gibs.dm @@ -51,12 +51,13 @@ gib.viruses += viruus viruus.holder = gib viruus.spread_type = CONTACT_FEET + gib.blood_DNA = list() if(MobDNA) - gib.blood_DNA = list(list(MobDNA.unique_enzymes, MobDNA.b_type)) + gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type else if(istype(src, /obj/effect/gibspawner/xeno)) - gib.blood_DNA = list(list("UNKNOWN DNA", "X*")) + gib.blood_DNA["UNKNOWN DNA"] = "X*" else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey - gib.blood_DNA = list(list("Non-human DNA", "A+")) + gib.blood_DNA["Non-human DNA"] = "A+" var/list/directions = gibdirections[i] if(directions.len) gib.streak(directions) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 00351a1bdb8..839af17d01f 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -192,18 +192,13 @@ FINGERPRINT CARD return /obj/item/weapon/f_card/proc/display() - if(!fingerprints) return - if (!istype(src.fingerprints, /list)) - src.fingerprints = params2list(src.fingerprints) - if (length(src.fingerprints)) - var/dat = "Fingerprints on Card