copmile fixes, rework a few things to better fit tg code structure, replace tgstation.2.0.9.1.dmm with tgstation.2.1.0.dmm (kept old map file), tgstation.2.0.9.1.dmm has 1233 errors

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2013-01-14 21:07:16 +10:00
parent bdeb96b7e5
commit 1c9b04ec74
58 changed files with 1759 additions and 1722 deletions

View File

@@ -5,6 +5,49 @@
// END_INTERNALS // END_INTERNALS
// BEGIN_FILE_DIR // BEGIN_FILE_DIR
#define FILE_DIR . #define FILE_DIR .
#define FILE_DIR "code"
#define FILE_DIR "code/TriDimension"
#define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust"
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter"
#define FILE_DIR "code/WorkInProgress/Susan"
#define FILE_DIR "html"
#define FILE_DIR "icons"
#define FILE_DIR "icons/48x48"
#define FILE_DIR "icons/effects"
#define FILE_DIR "icons/mecha"
#define FILE_DIR "icons/misc"
#define FILE_DIR "icons/mob"
#define FILE_DIR "icons/mob/human_races"
#define FILE_DIR "icons/obj"
#define FILE_DIR "icons/obj/assemblies"
#define FILE_DIR "icons/obj/atmospherics"
#define FILE_DIR "icons/obj/clothing"
#define FILE_DIR "icons/obj/doors"
#define FILE_DIR "icons/obj/flora"
#define FILE_DIR "icons/obj/machines"
#define FILE_DIR "icons/obj/pipes"
#define FILE_DIR "icons/pda_icons"
#define FILE_DIR "icons/spideros_icons"
#define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf"
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "maps"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/effects"
#define FILE_DIR "sound/effects/wind"
#define FILE_DIR "sound/hallucinations"
#define FILE_DIR "sound/items"
#define FILE_DIR "sound/machines"
#define FILE_DIR "sound/mecha"
#define FILE_DIR "sound/misc"
#define FILE_DIR "sound/piano"
#define FILE_DIR "sound/violin"
#define FILE_DIR "sound/voice"
#define FILE_DIR "sound/weapons"
// END_FILE_DIR // END_FILE_DIR
// BEGIN_PREFERENCES // BEGIN_PREFERENCES
@@ -388,12 +431,10 @@
#include "code\game\objects\explosion_recursive.dm" #include "code\game\objects\explosion_recursive.dm"
#include "code\game\objects\items.dm" #include "code\game\objects\items.dm"
#include "code\game\objects\objs.dm" #include "code\game\objects\objs.dm"
#include "code\game\objects\sign_decals.dm"
#include "code\game\objects\structures.dm" #include "code\game\objects\structures.dm"
#include "code\game\objects\weapons.dm" #include "code\game\objects\weapons.dm"
#include "code\game\objects\closets\walllocker.dm" #include "code\game\objects\closets\walllocker.dm"
#include "code\game\objects\effects\aliens.dm" #include "code\game\objects\effects\aliens.dm"
#include "code\game\objects\effects\barsign.dm"
#include "code\game\objects\effects\biomass_rift.dm" #include "code\game\objects\effects\biomass_rift.dm"
#include "code\game\objects\effects\bump_teleporter.dm" #include "code\game\objects\effects\bump_teleporter.dm"
#include "code\game\objects\effects\effect_system.dm" #include "code\game\objects\effects\effect_system.dm"
@@ -405,7 +446,6 @@
#include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\misc.dm"
#include "code\game\objects\effects\overlays.dm" #include "code\game\objects\effects\overlays.dm"
#include "code\game\objects\effects\portals.dm" #include "code\game\objects\effects\portals.dm"
#include "code\game\objects\effects\signs.dm"
#include "code\game\objects\effects\step_triggers.dm" #include "code\game\objects\effects\step_triggers.dm"
#include "code\game\objects\effects\decals\cleanable.dm" #include "code\game\objects\effects\decals\cleanable.dm"
#include "code\game\objects\effects\decals\contraband.dm" #include "code\game\objects\effects\decals\contraband.dm"
@@ -556,6 +596,8 @@
#include "code\game\objects\structures\morgue.dm" #include "code\game\objects\structures\morgue.dm"
#include "code\game\objects\structures\musician.dm" #include "code\game\objects\structures\musician.dm"
#include "code\game\objects\structures\noticeboard.dm" #include "code\game\objects\structures\noticeboard.dm"
#include "code\game\objects\structures\safe.dm"
#include "code\game\objects\structures\signs.dm"
#include "code\game\objects\structures\tables_racks.dm" #include "code\game\objects\structures\tables_racks.dm"
#include "code\game\objects\structures\tank_dispenser.dm" #include "code\game\objects\structures\tank_dispenser.dm"
#include "code\game\objects\structures\target_stake.dm" #include "code\game\objects\structures\target_stake.dm"
@@ -729,10 +771,10 @@
#include "code\modules\clothing\under\jobs\security.dm" #include "code\modules\clothing\under\jobs\security.dm"
#include "code\modules\customitems\item_defines.dm" #include "code\modules\customitems\item_defines.dm"
#include "code\modules\customitems\item_spawning.dm" #include "code\modules\customitems\item_spawning.dm"
#include "code\modules\DetectiveWork\detective_work.dm" #include "code\modules\detectivework\detective_work.dm"
#include "code\modules\DetectiveWork\evidence.dm" #include "code\modules\detectivework\evidence.dm"
#include "code\modules\DetectiveWork\footprints_and_rag.dm" #include "code\modules\detectivework\footprints_and_rag.dm"
#include "code\modules\DetectiveWork\scanner.dm" #include "code\modules\detectivework\scanner.dm"
#include "code\modules\events\alien_infestation.dm" #include "code\modules\events\alien_infestation.dm"
#include "code\modules\events\blob.dm" #include "code\modules\events\blob.dm"
#include "code\modules\events\carp_migration.dm" #include "code\modules\events\carp_migration.dm"
@@ -1135,7 +1177,6 @@
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\SuperMatter.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\SuperMatter.dm"
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\Ported\policetape.dm"
#include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm" #include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm"
#include "code\WorkInProgress\Susan\susan_desert_turfs.dm" #include "code\WorkInProgress\Susan\susan_desert_turfs.dm"
@@ -1158,7 +1199,7 @@
#include "code\ZAS\ZAS_Zones.dm" #include "code\ZAS\ZAS_Zones.dm"
#include "interface\interface.dm" #include "interface\interface.dm"
#include "interface\skin.dmf" #include "interface\skin.dmf"
#include "maps\tgstation.2.0.9.1.dmm" #include "maps\tgstation.2.1.0.dmm"
#include "maps\RandomZLevels\Academy.dm" #include "maps\RandomZLevels\Academy.dm"
#include "maps\RandomZLevels\challenge.dm" #include "maps\RandomZLevels\challenge.dm"
#include "maps\RandomZLevels\stationCollision.dm" #include "maps\RandomZLevels\stationCollision.dm"

View File

@@ -29,7 +29,7 @@
var/obj/item/clothing/mask/cigarette/cig = W var/obj/item/clothing/mask/cigarette/cig = W
if (cig.lit == 1) if (cig.lit == 1)
src.visible_message("[user] crushes [cig] in [src], putting it out.") src.visible_message("[user] crushes [cig] in [src], putting it out.")
cig.put_out() cig.smoketime = 0
else if (cig.lit == 0) else if (cig.lit == 0)
if(istype(cig, /obj/item/weapon/match)) if(istype(cig, /obj/item/weapon/match))
user << "You place [cig] in [src] without even lighting it. Why would you do that?" user << "You place [cig] in [src] without even lighting it. Why would you do that?"

View File

@@ -6,7 +6,6 @@ turf/unsimulated/desert
icon_state = "desert" icon_state = "desert"
temperature = 393.15 temperature = 393.15
luminosity = 5 luminosity = 5
brightness_on = 1
lighting_lumcount = 8 lighting_lumcount = 8
turf/unsimulated/desert/New() turf/unsimulated/desert/New()
@@ -54,47 +53,8 @@ turf/unsimulated/desert/New()
//corpses and possibly other decorative items //corpses and possibly other decorative items
/obj/effect/landmark/corpse/alien/New() //Creates a mob and checks for gear in each slot before attempting to equip it. /obj/effect/landmark/corpse/alien
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) mutantrace = "lizard"
M.dna.mutantrace = "lizard"
M.real_name = src.name
M.stat = 2 //Kills the new mob
if(src.corpseuniform)
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
if(src.corpsesuit)
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
if(src.corpseshoes)
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
if(src.corpsegloves)
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
if(src.corpseradio)
M.equip_to_slot_or_del(new src.corpseradio(M), slot_ears)
if(src.corpseglasses)
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
if(src.corpsemask)
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
if(src.corpsehelmet)
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
if(src.corpsebelt)
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
if(src.corpsepocket1)
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
if(src.corpsepocket2)
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
if(src.corpseback)
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
if(src.corpseid == 1)
var/obj/item/weapon/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
if(src.corpseidicon)
W.icon_state = corpseidicon
if(src.corpseidaccess)
W.access = get_access(corpseidaccess)
if(corpseidjob)
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
del(src)
/obj/effect/landmark/corpse/alien/cargo /obj/effect/landmark/corpse/alien/cargo
name = "Cargo Technician" name = "Cargo Technician"

View File

@@ -1,3 +1,12 @@
//moved these here from code/defines/obj/weapon.dm
//please preference put stuff where it's easy to find - C
/obj/item/weapon/autopsy_scanner/var/list/datum/autopsy_data_scanner/wdata = list()
/obj/item/weapon/autopsy_scanner/var/list/datum/autopsy_data_scanner/chemtraces = list()
/obj/item/weapon/autopsy_scanner/var/target_name = null
/obj/item/weapon/autopsy_scanner/var/timeofdeath = null
/datum/autopsy_data_scanner /datum/autopsy_data_scanner
var/weapon = null // this is the DEFINITE weapon type that was used var/weapon = null // this is the DEFINITE weapon type that was used
var/list/organs_scanned = list() // this maps a number of scanned organs to var/list/organs_scanned = list() // this maps a number of scanned organs to

View File

@@ -884,6 +884,8 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
user.visible_message("\red [user]'s hand slips, tearing [target]'s innards with \the [tool]!", \ user.visible_message("\red [user]'s hand slips, tearing [target]'s innards with \the [tool]!", \
"\red Your hand slips, tearing [target]'s innards with \the [tool]!") "\red Your hand slips, tearing [target]'s innards with \the [tool]!")
//see slimes
/*
/datum/surgery_step/metroid/saw_core /datum/surgery_step/metroid/saw_core
required_tool = /obj/item/weapon/circular_saw required_tool = /obj/item/weapon/circular_saw
@@ -909,6 +911,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
fail_step(mob/user, mob/living/carbon/metroid/target, target_zone, obj/item/tool) fail_step(mob/user, mob/living/carbon/metroid/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, failing to cut core out!", \ user.visible_message("\red [user]'s hand slips, failing to cut core out!", \
"\red Your hand slips, failing to cut core out!") "\red Your hand slips, failing to cut core out!")
*/
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
// LIMB SURGERY // // LIMB SURGERY //
@@ -1182,7 +1185,7 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/embryo = 0 var/embryo = 0
for(var/datum/disease/alien_embryo/A in target.viruses) for(var/obj/item/alien_embryo/A in target)
embryo = 1 embryo = 1
break break
return ..() && embryo && target.ribcage_op_stage == 2 return ..() && embryo && target.ribcage_op_stage == 2
@@ -1197,11 +1200,8 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", user.visible_message("\red [user] rips the larva out of [target]'s ribcage!",
"You rip the larva out of [target]'s ribcage!") "You rip the larva out of [target]'s ribcage!")
var/mob/living/carbon/alien/larva/stupid = new(target.loc) for(var/obj/item/alien_embryo/A in target)
stupid.death(0) A.loc = A.loc.loc
for(var/datum/disease/alien_embryo in target.viruses)
alien_embryo.cure()
if (ishuman(user)) user:bloody_hands(target, 0) if (ishuman(user)) user:bloody_hands(target, 0)

View File

@@ -206,8 +206,9 @@ proc/AirflowSpace(zone/A)
if(M.last_airflow > world.time - vsc.airflow_delay) continue if(M.last_airflow > world.time - vsc.airflow_delay) continue
if(ismob(M) && n > vsc.airflow_stun_pressure) if(ismob(M) && n > vsc.airflow_stun_pressure)
if(M:nodamage) continue var/mob/O = M
M:airflow_stun() if(O.status_flags & GODMODE) continue
O.airflow_stun()
if(M.check_airflow_movable(n)) if(M.check_airflow_movable(n))

View File

@@ -4,6 +4,13 @@ What are the archived variables for?
This prevents race conditions that arise based on the order of tile processing. This prevents race conditions that arise based on the order of tile processing.
*/ */
#define SPECIFIC_HEAT_TOXIN 200
#define SPECIFIC_HEAT_AIR 20
#define SPECIFIC_HEAT_CDO 30
#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
(carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)
#define MINIMUM_HEAT_CAPACITY 0.0003
#define QUANTIZE(variable) (round(variable,0.0001)) #define QUANTIZE(variable) (round(variable,0.0001))
#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer #define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer

View File

@@ -151,8 +151,10 @@ zone/proc/process()
//Sometimes explosions will cause the air to be deleted for some reason. //Sometimes explosions will cause the air to be deleted for some reason.
if(!air) if(!air)
air = new() air = new()
air.adjust(MOLES_O2STANDARD, 0, MOLES_N2STANDARD, 0, list()) air.oxygen = MOLES_O2STANDARD
air.nitrogen = MOLES_N2STANDARD
air.temperature = T0C air.temperature = T0C
air.total_moles()
world.log << "Air object lost in zone. Regenerating." world.log << "Air object lost in zone. Regenerating."
progress = "problem with: ShareSpace()" progress = "problem with: ShareSpace()"

View File

@@ -275,7 +275,8 @@ proc/isInSight(var/atom/A, var/atom/B)
if(M.ckey == lowertext(key)) if(M.ckey == lowertext(key))
return M return M
return null return null
/*
//i think this is used soley by verb/give(), cael
proc/check_can_reach(atom/user, atom/target) proc/check_can_reach(atom/user, atom/target)
if(!in_range(user,target)) if(!in_range(user,target))
return 0 return 0
@@ -315,9 +316,8 @@ var/list/DummyCache = list()
D.loc = null D.loc = null
DummyCache.Add(D) DummyCache.Add(D)
return 1 return 1
*/
// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer.
// Will return a list of active candidates. It increases the buffer 5 times until it finds a candidate which is active within the buffer.
/proc/get_active_candidates(var/buffer = 1) /proc/get_active_candidates(var/buffer = 1)
var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn

View File

@@ -300,73 +300,6 @@ area
//show the dark overlay so areas, not yet in a lighting subarea, won't be bright as day and look silly. //show the dark overlay so areas, not yet in a lighting subarea, won't be bright as day and look silly.
SetLightLevel(4) SetLightLevel(4)
atom
var/light_on = 0 //Am I emitting light?
var/brightness_on = 0 //Luminosity when the above: light_on = 1
//Called when turning off or dropping a flashlight for ex.
//It checks the users slots for another source of light, and return the appropriate brightness. 0 if no other source is found
proc/search_light(mob/M, obj/item/W as obj)
var/list/slots
var/obj/item/I
var brightness = 0 //the new brightness to be returned
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
slots = list (
"l_hand",
"r_hand",
"belt",
"head",
"l_pocket",
"r_pocket",
"s_store")
for (var/slot in slots)
switch(slot)
if("belt")
I = H.belt
if("head")
I = H.head
if("l_hand")
I = H.l_hand
if("r_hand")
I = H.r_hand
if("l_pocket")
I = H.l_store
if("r_pocket")
I = H.r_store
if("s_store")
I = H.s_store
if (I)
if ((I.light_on) && (I != W)) //an item emitting light other than itself
if (I.brightness_on > brightness)
brightness = I.brightness_on
else if (istype(M, /mob/living/carbon/monkey))
slots = list (
"l_hand",
"r_hand")
for (var/slot in slots)
switch(slot)
if("l_hand")
I = M.l_hand
if("r_hand")
I = M.r_hand
if (I)
if ((I.light_on) && (I != W)) //an item emitting light other than itself
if (I.brightness_on > brightness)
brightness = I.brightness_on
else
for (I in M.contents) //Justin Case
if (I)
if ((I.light_on) && (I != W)) //an item emitting light other than itself
if (I.brightness_on > brightness)
brightness = I.brightness_on
return brightness
#undef LIGHTING_MAX_LUMINOSITY #undef LIGHTING_MAX_LUMINOSITY
#undef LIGHTING_MAX_LUMINOSITY_MOB #undef LIGHTING_MAX_LUMINOSITY_MOB

View File

@@ -101,9 +101,7 @@
/obj/item/weapon/reagent_containers/food/drinks/beer, /obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer, /obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer, /obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer, /obj/item/weapon/reagent_containers/food/drinks/beer)
/obj/item/weapon/cigpacket/dromedaryco,
/obj/item/weapon/lipstick/random)
cost = 20 cost = 20
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Party equipment" containername = "Party equipment"
@@ -657,7 +655,7 @@
/datum/supply_packs/artscrafts /datum/supply_packs/artscrafts
name = "Arts and Crafts supplies" name = "Arts and Crafts supplies"
contains = list(/obj/item/weapon/storage/crayonbox, contains = list(/obj/item/weapon/storage/fancy/crayons,
/obj/item/device/camera, /obj/item/device/camera,
/obj/item/device/camera_film, /obj/item/device/camera_film,
/obj/item/device/camera_film, /obj/item/device/camera_film,
@@ -735,8 +733,8 @@
name = "Sterile equipment crate" name = "Sterile equipment crate"
contains = list(/obj/item/clothing/under/rank/medical/green, contains = list(/obj/item/clothing/under/rank/medical/green,
/obj/item/clothing/under/rank/medical/green, /obj/item/clothing/under/rank/medical/green,
/obj/item/weapon/storage/stma_kit, /obj/item/weapon/storage/box/masks,
/obj/item/weapon/storage/lglo_kit) /obj/item/weapon/storage/box/gloves)
cost = 10 cost = 10
containertype = "/obj/structure/closet/crate" containertype = "/obj/structure/closet/crate"
containername = "Sterile equipment crate" containername = "Sterile equipment crate"

View File

@@ -822,7 +822,6 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
if ( !alien.restrained() ) if ( !alien.restrained() )
attack_larva(alien) attack_larva(alien)
else if(ismetroid(usr))
else if(isslime(usr)) else if(isslime(usr))
var/mob/living/carbon/slime/slime = usr var/mob/living/carbon/slime/slime = usr
//-slime stuff- //-slime stuff-

View File

@@ -15,7 +15,8 @@
event() event()
hadevent = 1 hadevent = 1
else else
Holiday_Random_Event() else Holiday_Random_Event()
else
event = 0 event = 0
sleep(2400) sleep(2400)

View File

@@ -290,7 +290,8 @@
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
else else
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
H.equip_to_slot_or_del(new /obj/item/key(H), slot_l_store) return 1 H.equip_to_slot_or_del(new /obj/item/key(H), slot_l_store)
return 1

View File

@@ -84,7 +84,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) // H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand)
if(H.backbag == 1) if(H.backbag == 1)

File diff suppressed because it is too large Load Diff

View File

@@ -20,7 +20,7 @@
if (istype(zvent_conn)) if (istype(zvent_conn))
//both floors have simulated turfs, share() //both floors have simulated turfs, share()
var/turf/simulated/myturf = loc var/turf/simulated/myturf = loc
var/datum/gas_mixture/conn_air = zturf_conn.air //TODO: pop culture reference var/datum/gas_mixture/conn_air = zturf_conn.zone.air //TODO: pop culture reference
var/datum/gas_mixture/my_air = myturf.air var/datum/gas_mixture/my_air = myturf.air
if (istype(conn_air) && istype(my_air)) if (istype(conn_air) && istype(my_air))
// if (!my_air.compare(conn_air)) // if (!my_air.compare(conn_air))

View File

@@ -45,7 +45,8 @@
if(!C.amount) del(C) if(!C.amount) del(C)
user << "\blue You add cables to the frame." user << "\blue You add cables to the frame."
state = 2 state = 2
icon_state = "box_1" else icon_state = "box_1"
else
if(istype(P, /obj/item/weapon/wrench)) if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
user << "\blue You dismantle the frame" user << "\blue You dismantle the frame"

View File

@@ -244,33 +244,6 @@
update_heat_protection(loc) update_heat_protection(loc)
if(need_rebuild)
if(istype(source)) //Rebuild/update nearby group geometry
if(source.parent)
air_master.groups_to_rebuild += source.parent
else
air_master.tiles_to_update += source
if(istype(north))
if(north.parent)
air_master.groups_to_rebuild += north.parent
else
air_master.tiles_to_update += north
if(istype(south))
if(south.parent)
air_master.groups_to_rebuild += south.parent
else
air_master.tiles_to_update += south
if(istype(east))
if(east.parent)
air_master.groups_to_rebuild += east.parent
else
air_master.tiles_to_update += east
if(istype(west))
if(west.parent)
air_master.groups_to_rebuild += west.parent
else
air_master.tiles_to_update += west
else
if(istype(source)) air_master.tiles_to_update += source if(istype(source)) air_master.tiles_to_update += source
if(istype(north)) air_master.tiles_to_update += north if(istype(north)) air_master.tiles_to_update += north
if(istype(south)) air_master.tiles_to_update += south if(istype(south)) air_master.tiles_to_update += south
@@ -285,43 +258,6 @@
else else
source.thermal_conductivity = initial(source.thermal_conductivity) source.thermal_conductivity = initial(source.thermal_conductivity)
//skytodo
/*if(need_rebuild)
if(istype(source)) //Rebuild/update nearby group geometry
if(source.parent)
air_master.groups_to_rebuild += source.parent
else
air_master.tiles_to_update += source
if(istype(north))
if(north.parent)
air_master.groups_to_rebuild += north.parent
else
air_master.tiles_to_update += north
if(istype(south))
if(south.parent)
air_master.groups_to_rebuild += south.parent
else
air_master.tiles_to_update += south
if(istype(east))
if(east.parent)
air_master.groups_to_rebuild += east.parent
else
air_master.tiles_to_update += east
if(istype(west))
if(west.parent)
air_master.groups_to_rebuild += west.parent
else
air_master.tiles_to_update += west
else*/
if(istype(source)) air_master.tiles_to_update |= source
if(istype(north)) air_master.tiles_to_update |= north
if(istype(south)) air_master.tiles_to_update |= south
if(istype(east)) air_master.tiles_to_update |= east
if(istype(west)) air_master.tiles_to_update |= west
return 1
/obj/machinery/door/proc/autoclose() /obj/machinery/door/proc/autoclose()
var/obj/machinery/door/airlock/A = src var/obj/machinery/door/airlock/A = src
if(!A.density && !A.operating && !A.locked && !A.welded && A.autoclose) if(!A.density && !A.operating && !A.locked && !A.welded && A.autoclose)

View File

@@ -253,18 +253,6 @@
update_heat_protection(loc) update_heat_protection(loc)
if(need_rebuild)
if(istype(source)) //Rebuild/update nearby group geometry
if(source.parent)
air_master.groups_to_rebuild += source.parent
else
air_master.tiles_to_update += source
if(istype(destination))
if(destination.parent)
air_master.groups_to_rebuild += destination.parent
else
air_master.tiles_to_update += destination
else
if(istype(source)) air_master.tiles_to_update += source if(istype(source)) air_master.tiles_to_update += source
if(istype(destination)) air_master.tiles_to_update += destination if(istype(destination)) air_master.tiles_to_update += destination
return 1 return 1

View File

@@ -25,14 +25,9 @@ obj/effect/decal/cleanable/liquid_fuel
var/turf/simulated/S = loc var/turf/simulated/S = loc
if(!istype(S)) return if(!istype(S)) return
for(var/d in cardinal) for(var/d in cardinal)
if(S.air_check_directions & d)
if(rand(25)) if(rand(25))
var/turf/simulated/O = get_step(src,d) var/turf/simulated/O = get_step(src,d)
var/can_pass = 1 if(O.CanPass(target = get_turf(src), air_group = 1))
for (var/obj/machinery/door/airlock/door in O)
if (door.density)
can_pass = 0
if (can_pass)
if(!locate(/obj/effect/decal/cleanable/liquid_fuel) in O) if(!locate(/obj/effect/decal/cleanable/liquid_fuel) in O)
new/obj/effect/decal/cleanable/liquid_fuel(O,amount*0.25) new/obj/effect/decal/cleanable/liquid_fuel(O,amount*0.25)
amount *= 0.75 amount *= 0.75
@@ -50,8 +45,10 @@ obj/effect/decal/cleanable/liquid_fuel
if(!istype(S)) return if(!istype(S)) return
for(var/d in list(turn(dir,90),turn(dir,-90))) for(var/d in list(turn(dir,90),turn(dir,-90)))
if(S.air_check_directions & d)
var/turf/simulated/O = get_step(S,d) var/turf/simulated/O = get_step(S,d)
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
continue
if(O.CanPass(target = get_turf(src), air_group = 1))
new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d) new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately. O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.

View File

@@ -58,7 +58,7 @@
trace_gas.moles = 30 trace_gas.moles = 30
payload += trace_gas payload += trace_gas
target.air.merge(payload) target.zone.air.merge(payload)
spawn(0) spawn(0)
del(src) del(src)
@@ -71,7 +71,7 @@
payload.toxins = 30 payload.toxins = 30
target.air.merge(payload) target.zone.air.merge(payload)
target.hotspot_expose(1000, CELL_VOLUME) target.hotspot_expose(1000, CELL_VOLUME)

View File

@@ -5,11 +5,9 @@
icon_state = "candle1" icon_state = "candle1"
item_state = "candle1" item_state = "candle1"
w_class = 1 w_class = 1
light_on = 0
brightness_on = 3 //luminosity when on
var/wax = 200 var/wax = 200
var/lit = 0
proc proc
light(var/flavor_text = "\red [usr] lights the [name].") light(var/flavor_text = "\red [usr] lights the [name].")
@@ -21,7 +19,7 @@
else if(wax>80) else if(wax>80)
i = 2 i = 2
else i = 3 else i = 3
icon_state = "candle[i][light_on ? "_lit" : ""]" icon_state = "candle[i][lit ? "_lit" : ""]"
attackby(obj/item/weapon/W as obj, mob/user as mob) attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -32,30 +30,30 @@
light("\red [user] casually lights the [name] with [W], what a badass.") light("\red [user] casually lights the [name] with [W], what a badass.")
else if(istype(W, /obj/item/weapon/lighter)) else if(istype(W, /obj/item/weapon/lighter))
var/obj/item/weapon/lighter/L = W var/obj/item/weapon/lighter/L = W
if(L.light_on) if(L.lit)
light() light()
else if(istype(W, /obj/item/weapon/match)) else if(istype(W, /obj/item/weapon/match))
var/obj/item/weapon/match/M = W var/obj/item/weapon/match/M = W
if(M.light_on) if(M.lit)
light() light()
else if(istype(W, /obj/item/candle)) else if(istype(W, /obj/item/candle))
var/obj/item/candle/C = W var/obj/item/candle/C = W
if(C.light_on) if(C.lit)
light() light()
light(var/flavor_text = "\red [usr] lights the [name].") light(var/flavor_text = "\red [usr] lights the [name].")
if(!src.light_on) if(!src.lit)
src.light_on = 1 src.lit = 1
//src.damtype = "fire" //src.damtype = "fire"
for(var/mob/O in viewers(usr, null)) for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1) O.show_message(flavor_text, 1)
SetLuminosity(brightness_on) SetLuminosity(CANDLE_LUM)
processing_objects.Add(src) processing_objects.Add(src)
process() process()
if(!light_on) if(!lit)
return return
wax-- wax--
if(!wax) if(!wax)
@@ -70,29 +68,20 @@
attack_self(mob/user as mob) attack_self(mob/user as mob)
if(light_on) if(lit)
light_on = 0 lit = 0
update_icon() update_icon()
SetLuminosity(0) SetLuminosity(0)
user.SetLuminosity(search_light(user, src)) user.SetLuminosity(user.luminosity - CANDLE_LUM)
pickup(mob/user) pickup(mob/user)
if(light_on) if(lit)
if (user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
SetLuminosity(0) SetLuminosity(0)
user.SetLuminosity(user.luminosity + CANDLE_LUM)
dropped(mob/user) dropped(mob/user)
if(light_on) if(lit)
if ((layer <= 3) || (loc != user.loc)) user.SetLuminosity(user.luminosity - CANDLE_LUM)
user.SetLuminosity(search_light(user, src)) SetLuminosity(CANDLE_LUM)
SetLuminosity(brightness_on)
equipped(mob/user, slot)
if(light_on)
if (user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
SetLuminosity(0)

View File

@@ -13,8 +13,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
w_class = 1.0 w_class = 1.0
flags = FPRINT | TABLEPASS flags = FPRINT | TABLEPASS
slot_flags = SLOT_ID | SLOT_BELT slot_flags = SLOT_ID | SLOT_BELT
light_on = 0 //Is the flashlight function on?
brightness_on = 4 //Luminosity for the flashlight function
//Main variables //Main variables
var/owner = null var/owner = null
@@ -24,6 +22,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
//Secondary variables //Secondary variables
var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner. var/scanmode = 0 //1 is medical scanner, 2 is forensics, 3 is reagent scanner.
var/fon = 0 //Is the flashlight function on?
var/f_lum = 4 //Luminosity for the flashlight function
var/silent = 0 //To beep or not to beep, that is the question var/silent = 0 //To beep or not to beep, that is the question
var/toff = 0 //If 1, messenger disabled var/toff = 0 //If 1, messenger disabled
var/tnote = null //Current Texts var/tnote = null //Current Texts
@@ -113,6 +113,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/captain /obj/item/device/pda/captain
default_cartridge = /obj/item/weapon/cartridge/captain default_cartridge = /obj/item/weapon/cartridge/captain
icon_state = "pda-c" icon_state = "pda-c"
toff = 1
/obj/item/device/pda/cargo /obj/item/device/pda/cargo
default_cartridge = /obj/item/weapon/cartridge/quartermaster default_cartridge = /obj/item/weapon/cartridge/quartermaster
@@ -199,22 +200,14 @@ var/global/list/obj/item/device/pda/PDAs = list()
* The Actual PDA * The Actual PDA
*/ */
/obj/item/device/pda/pickup(mob/user) /obj/item/device/pda/pickup(mob/user)
if(light_on) if(fon)
if(user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
SetLuminosity(0) SetLuminosity(0)
user.SetLuminosity(user.luminosity + f_lum)
/obj/item/device/pda/dropped(mob/user) /obj/item/device/pda/dropped(mob/user)
if(light_on) if(fon)
if ((layer <= 3) || (loc != user.loc)) user.SetLuminosity(user.luminosity - f_lum)
user.SetLuminosity(search_light(user, src)) SetLuminosity(f_lum)
SetLuminosity(brightness_on)
/obj/item/device/pda/equipped(mob/user, slot)
if(light_on)
if(user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
SetLuminosity(0)
/obj/item/device/pda/New() /obj/item/device/pda/New()
..() ..()
@@ -343,7 +336,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (cartridge.access_remote_door) if (cartridge.access_remote_door)
dat += "<li><a href='byond://?src=\ref[src];choice=Toggle Door'><img src=pda_rdoor.png> Toggle Remote Door</a></li>" dat += "<li><a href='byond://?src=\ref[src];choice=Toggle Door'><img src=pda_rdoor.png> Toggle Remote Door</a></li>"
dat += "<li><a href='byond://?src=\ref[src];choice=3'><img src=pda_atmos.png> Atmospheric Scan</a></li>" dat += "<li><a href='byond://?src=\ref[src];choice=3'><img src=pda_atmos.png> Atmospheric Scan</a></li>"
dat += "<li><a href='byond://?src=\ref[src];choice=Light'><img src=pda_flashlight.png> [light_on ? "Disable" : "Enable"] Flashlight</a></li>" dat += "<li><a href='byond://?src=\ref[src];choice=Light'><img src=pda_flashlight.png> [fon ? "Disable" : "Enable"] Flashlight</a></li>"
if (pai) if (pai)
if(pai.loc != src) if(pai.loc != src)
pai = null pai = null
@@ -518,18 +511,14 @@ var/global/list/obj/item/device/pda/PDAs = list()
//MAIN FUNCTIONS=================================== //MAIN FUNCTIONS===================================
if("Light") if("Light")
if(light_on) if(fon)
light_on = 0 fon = 0
if(src in U.contents) if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
U.SetLuminosity(search_light(U, src)) else SetLuminosity(0)
else else
SetLuminosity(0) fon = 1
else if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
light_on = 1 else SetLuminosity(f_lum)
if((src in U.contents) && (U.luminosity < brightness_on))
U.SetLuminosity(brightness_on)
else
SetLuminosity(brightness_on)
if("Medical Scan") if("Medical Scan")
if(scanmode == 1) if(scanmode == 1)
scanmode = 0 scanmode = 0
@@ -769,14 +758,12 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (prob(15)) //Give the AI a chance of intercepting the message if (prob(15)) //Give the AI a chance of intercepting the message
var/who = src.owner var/who = src.owner
var/sp_word = "from"
if(prob(50)) if(prob(50))
who = P:owner who = P:owner
sp_word = "to"
for(var/mob/living/silicon/ai/ai in mob_list) for(var/mob/living/silicon/ai/ai in mob_list)
// Allows other AIs to intercept the message but the AI won't intercept their own message. // Allows other AIs to intercept the message but the AI won't intercept their own message.
if(ai.aiPDA != P && ai.aiPDA != src) if(ai.aiPDA != P && ai.aiPDA != src)
ai.show_message("<i>Intercepted message [sp_word] <b>[who]</b>: [t]</i>") ai.show_message("<i>Intercepted message from <b>[who]</b>: [t]</i>")
if (!P.silent) if (!P.silent)
playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1) playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1)
@@ -870,6 +857,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
user << "<span class='notice'>You insert [cartridge] into [src].</span>" user << "<span class='notice'>You insert [cartridge] into [src].</span>"
if(cartridge.radio) if(cartridge.radio)
cartridge.radio.hostpda = src cartridge.radio.hostpda = src
else if(istype(C, /obj/item/weapon/card/id)) else if(istype(C, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/idcard = C var/obj/item/weapon/card/id/idcard = C
if(!idcard.registered_name) if(!idcard.registered_name)
@@ -1011,15 +999,16 @@ var/global/list/obj/item/device/pda/PDAs = list()
for (var/mob/O in viewers(user, null)) for (var/mob/O in viewers(user, null))
O << "\red [user] has used [src] on \icon[icon] [A]" O << "\red [user] has used [src] on \icon[icon] [A]"
var/pressure = A:parent.air.return_pressure() var/obj/machinery/atmospherics/pipe/tank/T = A
var/total_moles = A:parent.air.total_moles() var/pressure = T.parent.air.return_pressure()
var/total_moles = T.parent.air.total_moles()
user << "\blue Results of analysis of \icon[icon]" user << "\blue Results of analysis of \icon[icon]"
if (total_moles>0) if (total_moles>0)
var/o2_concentration = A:parent.air.oxygen/total_moles var/o2_concentration = T.parent.air.oxygen/total_moles
var/n2_concentration = A:parent.air.nitrogen/total_moles var/n2_concentration = T.parent.air.nitrogen/total_moles
var/co2_concentration = A:parent.air.carbon_dioxide/total_moles var/co2_concentration = T.parent.air.carbon_dioxide/total_moles
var/plasma_concentration = A:parent.air.toxins/total_moles var/plasma_concentration = T.parent.air.toxins/total_moles
var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration) var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration)
@@ -1030,7 +1019,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
user << "\blue Plasma: [round(plasma_concentration*100)]%" user << "\blue Plasma: [round(plasma_concentration*100)]%"
if(unknown_concentration>0.01) if(unknown_concentration>0.01)
user << "\red Unknown: [round(unknown_concentration*100)]%" user << "\red Unknown: [round(unknown_concentration*100)]%"
user << "\blue Temperature: [round(A:parent.air.temperature-T0C)]&deg;C" user << "\blue Temperature: [round(T.parent.air.temperature-T0C)]&deg;C"
else else
user << "\blue Tank is empty!" user << "\blue Tank is empty!"

View File

@@ -59,6 +59,7 @@
icon_state = "emag" icon_state = "emag"
item_state = "card-id" item_state = "card-id"
origin_tech = "magnets=2;syndicate=2" origin_tech = "magnets=2;syndicate=2"
var/uses = 10
/obj/item/weapon/card/id /obj/item/weapon/card/id
name = "identification card" name = "identification card"
@@ -69,8 +70,14 @@
var/registered_name = null // The name registered_name on the card var/registered_name = null // The name registered_name on the card
slot_flags = SLOT_ID slot_flags = SLOT_ID
var/blood_type = "\[UNSET\]"
var/dna_hash = "\[UNSET\]"
var/fingerprint_hash = "\[UNSET\]"
var/assignment = null var/assignment = null
var/assignment_real_title = null
var/dorm = 0 // determines if this ID has claimed a dorm already var/dorm = 0 // determines if this ID has claimed a dorm already
/obj/item/weapon/card/id/attack_self(mob/user as mob) /obj/item/weapon/card/id/attack_self(mob/user as mob)
for(var/mob/O in viewers(user, null)) for(var/mob/O in viewers(user, null))
O.show_message(text("[] shows you: \icon[] []: assignment: []", user, src, src.name, src.assignment), 1) O.show_message(text("[] shows you: \icon[] []: assignment: []", user, src, src.name, src.assignment), 1)

View File

@@ -63,7 +63,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/lit = 0 var/lit = 0
var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
var/icon_off = "cigoff" var/icon_off = "cigoff"
var/butt_icon = "cigbutt" var/type_butt = /obj/item/weapon/cigbutt
var/lastHolder = null var/lastHolder = null
var/smoketime = 300 var/smoketime = 300
var/chem_volume = 15 var/chem_volume = 15
@@ -86,12 +86,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else if(istype(W, /obj/item/weapon/lighter/zippo)) else if(istype(W, /obj/item/weapon/lighter/zippo))
var/obj/item/weapon/lighter/zippo/Z = W var/obj/item/weapon/lighter/zippo/Z = W
if(Z.light_on) if(Z.lit)
light("<span class='rose'>With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.</span>") light("<span class='rose'>With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.</span>")
else if(istype(W, /obj/item/weapon/lighter)) else if(istype(W, /obj/item/weapon/lighter))
var/obj/item/weapon/lighter/L = W var/obj/item/weapon/lighter/L = W
if(L.light_on) if(L.lit)
light("<span class='notice'>After some fiddling, [user] manages to light their [name] with [W].</span>") light("<span class='notice'>After some fiddling, [user] manages to light their [name] with [W].</span>")
else if(istype(W, /obj/item/weapon/match)) else if(istype(W, /obj/item/weapon/match))
@@ -116,7 +116,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob) /obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob)
..() ..()
if(lit == 0)
if(istype(glass)) //you can dip cigarettes into beakers if(istype(glass)) //you can dip cigarettes into beakers
var/transfered = glass.reagents.trans_to(src, chem_volume) var/transfered = glass.reagents.trans_to(src, chem_volume)
if(transfered) //if reagents were transfered, show the message if(transfered) //if reagents were transfered, show the message
@@ -157,14 +156,15 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/turf/location = get_turf(src) var/turf/location = get_turf(src)
smoketime-- smoketime--
if(smoketime < 1) if(smoketime < 1)
put_out() new type_butt(location)
processing_objects.Remove(src)
if(ismob(loc)) if(ismob(loc))
var/mob/living/M = loc var/mob/living/M = loc
M << "<span class='notice'>Your [name] goes out.</span>" M << "<span class='notice'>Your [name] goes out.</span>"
//M.u_equip(src) //un-equip it so the overlays can update M.u_equip(src) //un-equip it so the overlays can update
//M.update_inv_wear_mask(0) M.update_inv_wear_mask(0)
del(src)
return return
if(lit == 1)
if(location) if(location)
location.hotspot_expose(700, 5) location.hotspot_expose(700, 5)
if(reagents && reagents.total_volume) // check if it has any reagents at all if(reagents && reagents.total_volume) // check if it has any reagents at all
@@ -180,27 +180,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/attack_self(mob/user as mob) /obj/item/clothing/mask/cigarette/attack_self(mob/user as mob)
if(lit == 1) if(lit == 1)
var/mob/living/carbon/human/H = user user.visible_message("<span class='notice'>[user] calmly drops and treads on the lit [src], putting it out instantly.</span>")
if(H.shoes) var/turf/T = get_turf(src)
user.visible_message("<span class='notice'>[user] crushes [src] on the sole of his shoes, putting it out instantly.</span>") new type_butt(T)
else processing_objects.Remove(src)
user.visible_message("<span class='notice'>[user] spits oh his fingers, then puts down [src].</span>") del(src)
put_out()
return ..() return ..()
/obj/item/clothing/mask/cigarette/proc/put_out()
if(src.lit == 1)
src.lit = -1
icon_state = src.butt_icon
desc = "Old manky [src] butt."
name = "[src] butt"
attack_verb = list("poked")
processing_objects.Remove(src)
if (usr)
usr.update_inv_l_hand()
usr.update_inv_r_hand()
//////////// ////////////
// CIGARS // // CIGARS //
@@ -211,7 +198,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigaroff" icon_state = "cigaroff"
icon_on = "cigaron" icon_on = "cigaron"
icon_off = "cigaroff" icon_off = "cigaroff"
butt_icon = "cigarbutt" type_butt = /obj/item/weapon/cigbutt/cigarbutt
throw_speed = 0.5 throw_speed = 0.5
item_state = "cigaroff" item_state = "cigaroff"
smoketime = 1500 smoketime = 1500
@@ -247,6 +234,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigarbutt" icon_state = "cigarbutt"
/obj/item/clothing/mask/cigarette/cigar/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/match))
..()
else
user << "<span class='notice'>\The [src] straight out REFUSES to be lit by such uncivilized means.</span>"
///////////////// /////////////////
//SMOKING PIPES// //SMOKING PIPES//
///////////////// /////////////////
@@ -300,6 +293,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
smoketime = initial(smoketime) smoketime = initial(smoketime)
return return
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/match))
..()
else
user << "<span class='notice'>\The [src] straight out REFUSES to be lit by such means.</span>"
/obj/item/clothing/mask/cigarette/pipe/cobpipe /obj/item/clothing/mask/cigarette/pipe/cobpipe
name = "corn cob pipe" name = "corn cob pipe"
desc = "A nicotine delivery system popularized by folksy backwoodsmen and kept popular in the modern age and beyond by space hipsters." desc = "A nicotine delivery system popularized by folksy backwoodsmen and kept popular in the modern age and beyond by space hipsters."
@@ -327,8 +326,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
flags = TABLEPASS | CONDUCT flags = TABLEPASS | CONDUCT
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
attack_verb = list("burnt", "singed") attack_verb = list("burnt", "singed")
light_on = 0 var/lit = 0
brightness_on = 2 //luminosity when on
/obj/item/weapon/lighter/zippo /obj/item/weapon/lighter/zippo
name = "Zippo lighter" name = "Zippo lighter"
@@ -347,28 +345,24 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/lighter/attack_self(mob/living/user) /obj/item/weapon/lighter/attack_self(mob/living/user)
if(user.r_hand == src || user.l_hand == src) if(user.r_hand == src || user.l_hand == src)
if(!light_on) if(!lit)
light_on = 1 lit = 1
icon_state = icon_on icon_state = icon_on
item_state = icon_on item_state = icon_on
if(istype(src, /obj/item/weapon/lighter/zippo) ) if(istype(src, /obj/item/weapon/lighter/zippo) )
user.visible_message("<span class='rose'>Without even breaking stride, [user] flips open and lights [src] in one smooth movement.</span>") user.visible_message("<span class='rose'>Without even breaking stride, [user] flips open and lights [src] in one smooth movement.</span>")
else else
if(prob(90)) if(prob(75))
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src].</span>") user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src].</span>")
else else
user << "<span class='warning'>You burn yourself while lighting the lighter.</span>" user << "<span class='warning'>You burn yourself while lighting the lighter.</span>"
if (user.l_hand == src) user.adjustFireLoss(5)
user.apply_damage(2,BURN,"l_hand")
else
user.apply_damage(2,BURN,"r_hand")
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src], they however burn their finger in the process.</span>") user.visible_message("<span class='notice'>After a few attempts, [user] manages to light the [src], they however burn their finger in the process.</span>")
if (user.luminosity < brightness_on) user.SetLuminosity(user.luminosity + 2)
user.SetLuminosity(brightness_on)
processing_objects.Add(src) processing_objects.Add(src)
else else
light_on = 0 lit = 0
icon_state = icon_off icon_state = icon_off
item_state = icon_off item_state = icon_off
if(istype(src, /obj/item/weapon/lighter/zippo) ) if(istype(src, /obj/item/weapon/lighter/zippo) )
@@ -376,7 +370,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else else
user.visible_message("<span class='notice'>[user] quietly shuts off the [src].") user.visible_message("<span class='notice'>[user] quietly shuts off the [src].")
user.SetLuminosity(search_light(user, src)) user.SetLuminosity(user.luminosity - 2)
processing_objects.Remove(src) processing_objects.Remove(src)
else else
return ..() return ..()
@@ -387,7 +381,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(!istype(M, /mob)) if(!istype(M, /mob))
return return
if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && light_on) if(istype(M.wear_mask, /obj/item/clothing/mask/cigarette) && user.zone_sel.selecting == "mouth" && lit)
var/obj/item/clothing/mask/cigarette/cig = M.wear_mask var/obj/item/clothing/mask/cigarette/cig = M.wear_mask
if(M == user) if(M == user)
cig.attackby(src, user) cig.attackby(src, user)
@@ -407,24 +401,14 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/weapon/lighter/pickup(mob/user) /obj/item/weapon/lighter/pickup(mob/user)
if(light_on) if(lit)
if (user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
SetLuminosity(0) SetLuminosity(0)
user.SetLuminosity(user.luminosity+2)
return return
/obj/item/weapon/lighter/dropped(mob/user) /obj/item/weapon/lighter/dropped(mob/user)
if(light_on) if(lit)
if ((layer <= 3) || (loc != user.loc)) user.SetLuminosity(user.luminosity-2)
user.SetLuminosity(search_light(user, src)) SetLuminosity(2)
SetLuminosity(brightness_on)
return
/obj/item/weapon/lighter/equipped(mob/user, slot)
if(light_on)
if (user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
SetLuminosity(0)
return return

View File

@@ -22,16 +22,17 @@
w_class = 1.0 w_class = 1.0
origin_tech = "materials=1;biotech=1" origin_tech = "materials=1;biotech=1"
/obj/item/weapon/retractor/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
return
/*HAHA, SUCK IT, 2000 LINES OF SPAGHETTI CODE! /*HAHA, SUCK IT, 2000 LINES OF SPAGHETTI CODE!
NOW YOUR JOB IOS DONE BY ONLY 500 LINES OF SPAGHETTI CODE! NOW YOUR JOB IOS DONE BY ONLY 500 LINES OF SPAGHETTI CODE!
LOOK FOR SURGERY.DM*/ LOOK FOR SURGERY.DM*/
/*
/obj/item/weapon/retractor/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
return
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
if(istype(H) && ( \ if(istype(H) && ( \
(H.head && H.head.flags & HEADCOVERSEYES) || \ (H.head && H.head.flags & HEADCOVERSEYES) || \
@@ -119,6 +120,7 @@ LOOK FOR SURGERY.DM*/
return ..() return ..()
return return
*/
/* /*
* Hemostat * Hemostat
@@ -135,6 +137,7 @@ LOOK FOR SURGERY.DM*/
origin_tech = "materials=1;biotech=1" origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "pinched") attack_verb = list("attacked", "pinched")
/*
/obj/item/weapon/hemostat/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) /obj/item/weapon/hemostat/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M)) if(!istype(M))
return return
@@ -252,6 +255,7 @@ LOOK FOR SURGERY.DM*/
return ..() return ..()
return return
*/
/* /*
* Cautery * Cautery
@@ -268,6 +272,7 @@ LOOK FOR SURGERY.DM*/
origin_tech = "materials=1;biotech=1" origin_tech = "materials=1;biotech=1"
attack_verb = list("burnt") attack_verb = list("burnt")
/*
/obj/item/weapon/cautery/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) /obj/item/weapon/cautery/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M)) if(!istype(M))
return return
@@ -340,6 +345,7 @@ LOOK FOR SURGERY.DM*/
return ..() return ..()
return return
*/
/* /*
* Surgical Drill * Surgical Drill
@@ -362,6 +368,7 @@ LOOK FOR SURGERY.DM*/
viewers(user) << pick("/red <b>[user] is pressing the [src] to \his temple and activating it! It looks like \he's trying to commit suicide.</b>", \ viewers(user) << pick("/red <b>[user] is pressing the [src] to \his temple and activating it! It looks like \he's trying to commit suicide.</b>", \
"/red <b>[user] is pressing [src] to \his chest and activating it! It looks like \he's trying to commit suicide.</b>") "/red <b>[user] is pressing [src] to \his chest and activating it! It looks like \he's trying to commit suicide.</b>")
return (BRUTELOSS) return (BRUTELOSS)
/* /*
* Scalpel * Scalpel
*/ */
@@ -387,6 +394,7 @@ LOOK FOR SURGERY.DM*/
"\red <b>[user] is slitting \his stomach open with the [src]! It looks like \he's trying to commit seppuku.</b>") "\red <b>[user] is slitting \his stomach open with the [src]! It looks like \he's trying to commit seppuku.</b>")
return (BRUTELOSS) return (BRUTELOSS)
/*
/obj/item/weapon/scalpel/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) /obj/item/weapon/scalpel/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M)) if(!istype(M))
return ..() return ..()
@@ -610,7 +618,7 @@ LOOK FOR SURGERY.DM*/
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
return ..()*/ return ..()*/
return return
*/
/* /*
* Circular Saw * Circular Saw
@@ -632,6 +640,7 @@ LOOK FOR SURGERY.DM*/
origin_tech = "materials=1;biotech=1" origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "sawed", "cut") attack_verb = list("attacked", "slashed", "sawed", "cut")
/*
/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) /obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M)) if(!istype(M))
return ..() return ..()
@@ -780,6 +789,7 @@ LOOK FOR SURGERY.DM*/
return ..() return ..()
*/ */
return return
*/
//misc, formerly from code/defines/weapons.dm //misc, formerly from code/defines/weapons.dm
/obj/item/weapon/bonegel /obj/item/weapon/bonegel

View File

@@ -0,0 +1,12 @@
/obj/structure/sign/barsign
icon = 'barsigns.dmi'
icon_state = "empty"
anchored = 1
New()
ChangeSign(pick("pinkflamingo", "magmasea", "limbo", "rustyaxe", "armokbar", "brokendrum", "meadbay", "thedamnwall", "thecavern", "cindikate", "theorchard", "thesaucyclown", "theclownshead"))
return
proc/ChangeSign(var/Text)
src.icon_state = "[Text]"
//on = 0
//brightness_on = 4 //uncomment these when the lighting fixes get in
return

View File

@@ -17,7 +17,8 @@
new /obj/item/clothing/suit/apron(src) new /obj/item/clothing/suit/apron(src)
if(2) if(2)
new /obj/item/clothing/suit/apron/overalls(src) new /obj/item/clothing/suit/apron/overalls(src)
new /obj/item/weapon/storage/bag/plants(src) new /obj/item/clothing/under/rank/hydroponics(src) new /obj/item/weapon/storage/bag/plants(src)
new /obj/item/clothing/under/rank/hydroponics(src)
new /obj/item/device/analyzer/plant_analyzer(src) new /obj/item/device/analyzer/plant_analyzer(src)
new /obj/item/clothing/head/greenbandana(src) new /obj/item/clothing/head/greenbandana(src)
new /obj/item/weapon/minihoe(src) new /obj/item/weapon/minihoe(src)

View File

@@ -13,7 +13,8 @@
sleep(2) sleep(2)
new /obj/item/clothing/under/rank/scientist(src) new /obj/item/clothing/under/rank/scientist(src)
//new /obj/item/clothing/suit/labcoat/science(src) //new /obj/item/clothing/suit/labcoat/science(src)
new /obj/item/clothing/suit/storage/labcoat(src) new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/shoes/white(src)
// new /obj/item/weapon/cartridge/signal/toxins(src) // new /obj/item/weapon/cartridge/signal/toxins(src)
new /obj/item/device/radio/headset/headset_sci(src) new /obj/item/device/radio/headset/headset_sci(src)
new /obj/item/weapon/tank/air(src) new /obj/item/weapon/tank/air(src)

View File

@@ -159,10 +159,10 @@ turf/simulated/floor/proc/update_icon()
if( !(icon_state in wood_icons) ) if( !(icon_state in wood_icons) )
icon_state = "wood" icon_state = "wood"
//world << "[icon_state]y's got [icon_state]" //world << "[icon_state]y's got [icon_state]"
spawn(1) /*spawn(1)
if(istype(src,/turf/simulated/floor)) //Was throwing runtime errors due to a chance of it changing to space halfway through. if(istype(src,/turf/simulated/floor)) //Was throwing runtime errors due to a chance of it changing to space halfway through.
if(air) if(air)
update_visuals(air) update_visuals(air)*/
/turf/simulated/floor/return_siding_icon_state() /turf/simulated/floor/return_siding_icon_state()
..() ..()

View File

@@ -243,6 +243,7 @@
//////Assimilate Air////// //////Assimilate Air//////
/turf/simulated/proc/Assimilate_Air() /turf/simulated/proc/Assimilate_Air()
/*
var/aoxy = 0//Holders to assimilate air from nearby turfs var/aoxy = 0//Holders to assimilate air from nearby turfs
var/anitro = 0 var/anitro = 0
var/aco = 0 var/aco = 0
@@ -269,6 +270,7 @@
air.carbon_dioxide = (aco/max(turf_count,1)) air.carbon_dioxide = (aco/max(turf_count,1))
air.toxins = (atox/max(turf_count,1)) air.toxins = (atox/max(turf_count,1))
air.temperature = (atemp/max(turf_count,1))//Trace gases can get bant air.temperature = (atemp/max(turf_count,1))//Trace gases can get bant
*/
/turf/proc/ReplaceWithLattice() /turf/proc/ReplaceWithLattice()
src.ChangeTurf(/turf/space) src.ChangeTurf(/turf/space)

View File

@@ -459,11 +459,12 @@ obj/machinery/computer/forensic_scanning
proc/add_data_scanner(var/obj/item/device/W) proc/add_data_scanner(var/obj/item/device/W)
if(istype(W, /obj/item/device/detective_scanner)) if(istype(W, /obj/item/device/detective_scanner))
if(W:stored) var/obj/item/device/detective_scanner/D = W
for(var/atom in W:stored) if(D.stored)
var/list/data = W:stored[atom] for(var/atom in D.stored)
var/list/data = D.stored[atom]
add_data_master(atom,data[1],data[2],data[3],data[4]) add_data_master(atom,data[1],data[2],data[3],data[4])
W:stored = list() D.stored = list()
else if(istype(W, /obj/item/device/pda) && W:cartridge && W:cartridge.access_security) else if(istype(W, /obj/item/device/pda) && W:cartridge && W:cartridge.access_security)
if(W:cartridge.stored_data) if(W:cartridge.stored_data)
for(var/atom in W:cartridge.stored_data) for(var/atom in W:cartridge.stored_data)

View File

@@ -1,166 +1,173 @@
//CONTAINS: Detective's Scanner //CONTAINS: Detective's Scanner
// TODO: Split everything into easy to manage procs.
/obj/item/device/detective_scanner /obj/item/device/detective_scanner
name = "scanner" name = "Scanner"
desc = "Used to scan objects for DNA and fingerprints. Can print a report of the findings." desc = "Used to scan objects for DNA and fingerprints."
icon_state = "forensic1" icon_state = "forensic1"
var/amount = 20.0
var/list/stored = list()
w_class = 3.0 w_class = 3.0
item_state = "electronic" item_state = "electronic"
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
var/scanning = 0
var/list/log = list()
/obj/item/device/detective_scanner/attack_self(var/mob/user) attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
if(log.len && !scanning) ..()
scanning = 1 if (istype(W, /obj/item/weapon/f_card))
user << "<span class='notice'>Printing report, please wait...</span>" if (W.fingerprints)
spawn(100)
// Create our paper
var/obj/item/weapon/paper/P = new(get_turf(src))
P.name = "paper- 'Scanner Report'"
P.info = "<center><font size='6'><B>Scanner Report</B></font></center><HR><BR>"
P.info += dd_list2text(log, "<BR>")
P.info += "<HR><B>Notes:</B><BR>"
P.info_links = P.info
if(ismob(loc))
var/mob/M = loc
M.put_in_hands(P)
M << "<span class='notice'>Report printed. Log cleared.<span>"
// Clear the logs
log = list()
scanning = 0
else
user << "<span class='notice'>The scanner has no logs or is in use.</span>"
/obj/item/device/detective_scanner/attack(mob/living/M as mob, mob/user as mob)
scan(M, user)
/obj/item/device/detective_scanner/afterattack(atom/A as obj|turf|area, mob/user as mob)
if(!in_range(A,user))
return return
if(!isturf(A) && !isobj(A)) 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 return
if(loc != user) if(loc != user)
return return
scan(A, user) if(istype(A,/obj/machinery/computer/forensic_scanning)) //breaks shit.
return
/obj/item/device/detective_scanner/proc/scan(var/atom/A, var/mob/user) if(istype(A,/obj/item/weapon/f_card))
user << "The scanner displays on the screen: \"ERROR 43: Object on Excluded Object List.\""
if(!scanning)
scanning = 1
user.visible_message("\The [user] scans \the [A] with \the [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]")
user << "<span class='notice'>You scan [A]. The scanner is analysing the results...</span>"
// GATHER INFORMATION
//Make our lists
var/list/fingerprints = list()
var/list/blood = list()
var/list/fibers = list()
var/list/reagents = list()
var/target_name = A.name
// Start gathering
if(ishuman(A))
var/mob/living/carbon/human/H = A
if (istype(H.dna, /datum/dna) && !H.gloves)
fingerprints += md5(H.dna.uni_identity)
if(H.blood_DNA && H.blood_DNA.len)
blood = H.blood_DNA.Copy()
else
if(A.fingerprints && A.fingerprints.len)
fingerprints = A.fingerprints.Copy()
if(A.blood_DNA && A.blood_DNA.len)
blood = A.blood_DNA.Copy()
if(A.reagents && A.reagents.reagent_list.len)
for(var/datum/reagent/R in A.reagents.reagent_list)
reagents[R.name] = R.volume
if(A.suit_fibers && A.suit_fibers.len)
fibers = A.suit_fibers.Copy()
// We gathered everything. Create a fork and slowly display the results to the holder of the scanner.
spawn(0)
var/found_something = 0
add_log("<B>[get_timestamp()] - [target_name]</B>", 0)
// Fingerprints
if(fingerprints && fingerprints.len)
sleep(30)
add_log("<span class='info'><B>Prints:</B></span>")
for(var/finger in fingerprints)
add_log("[finger]")
found_something = 1
// Blood
if (blood && blood.len)
sleep(30)
add_log("<span class='info'><B>Blood:</B></span>")
found_something = 1
for(var/B in blood)
add_log("Type: <font color='red'>[blood[B]]</font> DNA: <font color='red'>[B]</font>")
//Fibers
if(fibers && fibers.len)
sleep(30)
add_log("<span class='info'><B>Fibers:</B></span>")
for(var/fiber in fibers)
add_log("[fiber]")
found_something = 1
//Reagents
if(reagents && reagents.len)
sleep(30)
add_log("<span class='info'><B>Reagents:</B></span>")
for(var/R in reagents)
add_log("Reagent: <font color='red'>[R]</font> Volume: <font color='red'>[reagents[R]]</font>")
found_something = 1
// Get a new user
var/mob/holder = null
if(ismob(src.loc))
holder = src.loc
if(!found_something)
add_log("<I># No forensic traces found #</I>", 0) // Don't display this to the holder user
if(holder)
holder << "<span class='notice'>Unable to locate any fingerprints, materials, fibers, or blood on [target_name]!</span>"
else
if(holder)
holder << "<span class='notice'>You finish scanning \the [target_name].</span>"
add_log("---------------------------------------------------------", 0)
scanning = 0
return return
/obj/item/device/detective_scanner/proc/add_log(var/msg, var/broadcast = 1) add_fingerprint(user)
if(scanning)
if(broadcast && ismob(loc))
var/mob/M = loc
M << msg
log += "&nbsp;&nbsp;[msg]"
else
CRASH("[src] \ref[src] is adding a log when it was never put in scanning mode!")
/obj/item/device/detective_scanner/proc/get_timestamp()
return time2text(world.time + 432000, "hh:mm:ss") //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."
var/list/complete_prints = list()
for(var/i in A.fingerprints)
var/print = A.fingerprints[i]
if(stringpercent(print) <= FINGERPRINT_COMPLETE)
complete_prints += print
if(complete_prints.len < 1)
user << "\blue &nbsp;&nbsp;No intact prints found"
else
user << "\blue &nbsp;&nbsp;Found [complete_prints.len] intact prints"
for(var/i in complete_prints)
user << "\blue &nbsp;&nbsp;&nbsp;&nbsp;[i]"
//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(80) || !A.fingerprints)
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 associative lists.
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 ? A.fingerprints.Copy() : null
sum_list[2] = A.suit_fibers ? A.suit_fibers.Copy() : null
sum_list[3] = A.blood_DNA ? A.blood_DNA.Copy() : null
sum_list[4] = "\The [A] in \the [get_area(A)]"
stored["\ref [A]"] = sum_list
return 0

View File

@@ -182,6 +182,7 @@
else else
usr << "Local airgroup is unsimulated!" usr << "Local airgroup is unsimulated!"
feedback_add_details("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","KLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
*/
/client/proc/print_jobban_old() /client/proc/print_jobban_old()
set name = "Print Jobban Log" set name = "Print Jobban Log"

View File

@@ -23,7 +23,6 @@
set desc = "Give somebody access to any session logfiles saved to the /log/runtime/ folder." set desc = "Give somebody access to any session logfiles saved to the /log/runtime/ folder."
set category = null set category = null
if( !src.holder )
if(!src.holder) if(!src.holder)
src << "<font color='red'>Only Admins may use this command.</font>" src << "<font color='red'>Only Admins may use this command.</font>"
return return

View File

@@ -23,12 +23,14 @@
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID
var/mutantrace = "human"
/obj/effect/landmark/corpse/initialize() /obj/effect/landmark/corpse/initialize()
createCorpse() createCorpse()
/obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. /obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
M.dna.mutantrace = mutantrace
M.real_name = src.name M.real_name = src.name
M.death(1) //Kills the new mob M.death(1) //Kills the new mob
if(src.corpseuniform) if(src.corpseuniform)

View File

@@ -358,7 +358,8 @@ datum/preferences
user << browse(dat, "window=preferences;size=560x580") user << browse(dat, "window=preferences;size=560x580")
proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), width = 550, height = 550) proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), width = 550, height = 550)
if(!job_master) return if(!job_master)
return
//limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice.
//splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice.

View File

@@ -4,8 +4,8 @@
icon_state = "hardhat0_yellow" icon_state = "hardhat0_yellow"
flags = FPRINT | TABLEPASS flags = FPRINT | TABLEPASS
item_state = "hardhat0_yellow" item_state = "hardhat0_yellow"
brightness_on = 4 //luminosity when on var/brightness_on = 4 //luminosity when on
light_on = 0 var/on = 0
color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite) color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20) armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0 flags_inv = 0
@@ -15,35 +15,24 @@
if(!isturf(user.loc)) if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities. user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
return return
light_on = !light_on on = !on
icon_state = "hardhat[light_on]_[color]" icon_state = "hardhat[on]_[color]"
item_state = "hardhat[light_on]_[color]" item_state = "hardhat[on]_[color]"
if((light_on) && (user.luminosity < brightness_on)) if(on) user.SetLuminosity(user.luminosity + brightness_on)
user.SetLuminosity(brightness_on) else user.SetLuminosity(user.luminosity - brightness_on)
else
user.SetLuminosity(search_light(user, src))
pickup(mob/user) pickup(mob/user)
if(light_on) if(on)
if (user.luminosity < brightness_on) user.SetLuminosity(user.luminosity + brightness_on)
user.SetLuminosity(brightness_on)
// user.UpdateLuminosity() //TODO: Carn // user.UpdateLuminosity() //TODO: Carn
SetLuminosity(0) SetLuminosity(0)
dropped(mob/user) dropped(mob/user)
if(light_on) if(on)
if ((layer <= 3) || (loc != user.loc)) user.SetLuminosity(user.luminosity - brightness_on)
user.SetLuminosity(search_light(user, src))
SetLuminosity(brightness_on)
// user.UpdateLuminosity() // user.UpdateLuminosity()
SetLuminosity(brightness_on)
equipped(mob/user, slot)
if(light_on)
if (user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
// user.UpdateLuminosity() //TODO: Carn
SetLuminosity(0)
/obj/item/clothing/head/hardhat/orange /obj/item/clothing/head/hardhat/orange

View File

@@ -122,42 +122,32 @@
color = "pumpkin" color = "pumpkin"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
brightness_on = 2 //luminosity when on var/brightness_on = 2 //luminosity when on
light_on = 0 var/on = 0
attack_self(mob/user) attack_self(mob/user)
if(!isturf(user.loc)) if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities. user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
return return
light_on = !light_on on = !on
icon_state = "hardhat[light_on]_[color]" icon_state = "hardhat[on]_[color]"
item_state = "hardhat[light_on]_[color]" item_state = "hardhat[on]_[color]"
if((light_on) && (user.luminosity < brightness_on)) if(on) user.SetLuminosity(user.luminosity + brightness_on)
user.SetLuminosity(brightness_on) else user.SetLuminosity(user.luminosity - brightness_on)
else
user.SetLuminosity(search_light(user, src))
pickup(mob/user) pickup(mob/user)
if(light_on) if(on)
if (user.luminosity < brightness_on) user.SetLuminosity(user.luminosity + brightness_on)
user.SetLuminosity(brightness_on) // user.UpdateLuminosity()
// user.UpdateLuminosity() //TODO: Carn
SetLuminosity(0) SetLuminosity(0)
dropped(mob/user) dropped(mob/user)
if(light_on) if(on)
if ((layer <= 3) || (loc != user.loc)) user.SetLuminosity(user.luminosity - brightness_on)
user.SetLuminosity(search_light(user, src))
SetLuminosity(brightness_on)
// user.UpdateLuminosity() // user.UpdateLuminosity()
SetLuminosity(brightness_on)
equipped(mob/user, slot)
if(light_on)
if (user.luminosity < brightness_on)
user.SetLuminosity(brightness_on)
// user.UpdateLuminosity() //TODO: Carn
SetLuminosity(0)
/* /*
* Kitty ears * Kitty ears
*/ */

View File

@@ -75,7 +75,7 @@
desc = "A forensics technician jacket." desc = "A forensics technician jacket."
item_state = "det_suit" item_state = "det_suit"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/cigpacket,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/storage/forensics/red /obj/item/clothing/suit/storage/forensics/red

View File

@@ -25,7 +25,6 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECITON_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = FIRESUIT_MIN_COLD_PROTECITON_TEMPERATURE
/obj/item/clothing/suit/fire/firefighter /obj/item/clothing/suit/fire/firefighter

View File

@@ -42,7 +42,7 @@
I.blood_type = C.blood_type I.blood_type = C.blood_type
I.dna_hash = C.dna_hash I.dna_hash = C.dna_hash
I.fingerprint_hash = C.fingerprint_hash I.fingerprint_hash = C.fingerprint_hash
I.pin = C.pin //I.pin = C.pin
//custom stuff //custom stuff
if(M.ckey == "fastler" && M.real_name == "Fastler Greay") //This is a Lifetime ID if(M.ckey == "fastler" && M.real_name == "Fastler Greay") //This is a Lifetime ID

View File

@@ -1,166 +1,173 @@
//CONTAINS: Detective's Scanner //CONTAINS: Detective's Scanner
// TODO: Split everything into easy to manage procs.
/obj/item/device/detective_scanner /obj/item/device/detective_scanner
name = "scanner" name = "Scanner"
desc = "Used to scan objects for DNA and fingerprints. Can print a report of the findings." desc = "Used to scan objects for DNA and fingerprints."
icon_state = "forensic1" icon_state = "forensic1"
var/amount = 20.0
var/list/stored = list()
w_class = 3.0 w_class = 3.0
item_state = "electronic" item_state = "electronic"
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
var/scanning = 0
var/list/log = list()
/obj/item/device/detective_scanner/attack_self(var/mob/user) attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
if(log.len && !scanning) ..()
scanning = 1 if (istype(W, /obj/item/weapon/f_card))
user << "<span class='notice'>Printing report, please wait...</span>" if (W.fingerprints)
spawn(100)
// Create our paper
var/obj/item/weapon/paper/P = new(get_turf(src))
P.name = "paper- 'Scanner Report'"
P.info = "<center><font size='6'><B>Scanner Report</B></font></center><HR><BR>"
P.info += dd_list2text(log, "<BR>")
P.info += "<HR><B>Notes:</B><BR>"
P.info_links = P.info
if(ismob(loc))
var/mob/M = loc
M.put_in_hands(P)
M << "<span class='notice'>Report printed. Log cleared.<span>"
// Clear the logs
log = list()
scanning = 0
else
user << "<span class='notice'>The scanner has no logs or is in use.</span>"
/obj/item/device/detective_scanner/attack(mob/living/M as mob, mob/user as mob)
scan(M, user)
/obj/item/device/detective_scanner/afterattack(atom/A as obj|turf|area, mob/user as mob)
if(!in_range(A,user))
return return
if(!isturf(A) && !isobj(A)) 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 return
if(loc != user) if(loc != user)
return return
scan(A, user) if(istype(A,/obj/machinery/computer/forensic_scanning)) //breaks shit.
return
/obj/item/device/detective_scanner/proc/scan(var/atom/A, var/mob/user) if(istype(A,/obj/item/weapon/f_card))
user << "The scanner displays on the screen: \"ERROR 43: Object on Excluded Object List.\""
if(!scanning)
scanning = 1
user.visible_message("\The [user] scans \the [A] with \the [src], the air around [user.gender == MALE ? "him" : "her"] humming[prob(70) ? " gently." : "."]")
user << "<span class='notice'>You scan [A]. The scanner is analysing the results...</span>"
// GATHER INFORMATION
//Make our lists
var/list/fingerprints = list()
var/list/blood = list()
var/list/fibers = list()
var/list/reagents = list()
var/target_name = A.name
// Start gathering
if(ishuman(A))
var/mob/living/carbon/human/H = A
if (istype(H.dna, /datum/dna) && !H.gloves)
fingerprints += md5(H.dna.uni_identity)
if(H.blood_DNA && H.blood_DNA.len)
blood = H.blood_DNA.Copy()
else
if(A.fingerprints && A.fingerprints.len)
fingerprints = A.fingerprints.Copy()
if(A.blood_DNA && A.blood_DNA.len)
blood = A.blood_DNA.Copy()
if(A.reagents && A.reagents.reagent_list.len)
for(var/datum/reagent/R in A.reagents.reagent_list)
reagents[R.name] = R.volume
if(A.suit_fibers && A.suit_fibers.len)
fibers = A.suit_fibers.Copy()
// We gathered everything. Create a fork and slowly display the results to the holder of the scanner.
spawn(0)
var/found_something = 0
add_log("<B>[get_timestamp()] - [target_name]</B>", 0)
// Fingerprints
if(fingerprints && fingerprints.len)
sleep(30)
add_log("<span class='info'><B>Prints:</B></span>")
for(var/finger in fingerprints)
add_log("[finger]")
found_something = 1
// Blood
if (blood && blood.len)
sleep(30)
add_log("<span class='info'><B>Blood:</B></span>")
found_something = 1
for(var/B in blood)
add_log("Type: <font color='red'>[blood[B]]</font> DNA: <font color='red'>[B]</font>")
//Fibers
if(fibers && fibers.len)
sleep(30)
add_log("<span class='info'><B>Fibers:</B></span>")
for(var/fiber in fibers)
add_log("[fiber]")
found_something = 1
//Reagents
if(reagents && reagents.len)
sleep(30)
add_log("<span class='info'><B>Reagents:</B></span>")
for(var/R in reagents)
add_log("Reagent: <font color='red'>[R]</font> Volume: <font color='red'>[reagents[R]]</font>")
found_something = 1
// Get a new user
var/mob/holder = null
if(ismob(src.loc))
holder = src.loc
if(!found_something)
add_log("<I># No forensic traces found #</I>", 0) // Don't display this to the holder user
if(holder)
holder << "<span class='notice'>Unable to locate any fingerprints, materials, fibers, or blood on [target_name]!</span>"
else
if(holder)
holder << "<span class='notice'>You finish scanning \the [target_name].</span>"
add_log("---------------------------------------------------------", 0)
scanning = 0
return return
/obj/item/device/detective_scanner/proc/add_log(var/msg, var/broadcast = 1) add_fingerprint(user)
if(scanning)
if(broadcast && ismob(loc))
var/mob/M = loc
M << msg
log += "&nbsp;&nbsp;[msg]"
else
CRASH("[src] \ref[src] is adding a log when it was never put in scanning mode!")
/obj/item/device/detective_scanner/proc/get_timestamp()
return time2text(world.time + 432000, "hh:mm:ss") //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."
var/list/complete_prints = list()
for(var/i in A.fingerprints)
var/print = A.fingerprints[i]
if(stringpercent(print) <= FINGERPRINT_COMPLETE)
complete_prints += print
if(complete_prints.len < 1)
user << "\blue &nbsp;&nbsp;No intact prints found"
else
user << "\blue &nbsp;&nbsp;Found [complete_prints.len] intact prints"
for(var/i in complete_prints)
user << "\blue &nbsp;&nbsp;&nbsp;&nbsp;[i]"
//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(80) || !A.fingerprints)
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 associative lists.
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 ? A.fingerprints.Copy() : null
sum_list[2] = A.suit_fibers ? A.suit_fibers.Copy() : null
sum_list[3] = A.blood_DNA ? A.blood_DNA.Copy() : null
sum_list[4] = "\The [A] in \the [get_area(A)]"
stored["\ref [A]"] = sum_list
return 0

View File

@@ -137,7 +137,7 @@ Doesn't work on other aliens/AI.*/
if(!istype(T, /turf)) if(!istype(T, /turf))
return return
if (U == T) if (U == T)
usr.bullet_act(new /obj/item/projectile/neurotoxin(usr.loc), get_organ_target()) usr.bullet_act(new /obj/item/projectile/energy/neurotoxin(usr.loc), get_organ_target())
return return
if(!istype(U, /turf)) if(!istype(U, /turf))
return return

View File

@@ -151,7 +151,8 @@
swap_hand() swap_hand()
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M) /mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
if (src.health >= config.health_threshold_crit) if(src == M && istype(src, /mob/living/carbon/human)) if (src.health >= config.health_threshold_crit)
if(src == M && istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src var/mob/living/carbon/human/H = src
src.visible_message( \ src.visible_message( \
text("\blue [src] examines [].",src.gender==MALE?"himself":"herself"), \ text("\blue [src] examines [].",src.gender==MALE?"himself":"herself"), \

View File

@@ -57,7 +57,8 @@
switch(M.a_intent) switch(M.a_intent)
if("help") if("help")
if(health >= config.health_threshold_crit) help_shake_act(M) if(health >= config.health_threshold_crit)
help_shake_act(M)
return 1 return 1
// if(M.health < -75) return 0 // if(M.health < -75) return 0

View File

@@ -1340,7 +1340,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS) sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
if(dna) if(dna)
switch(dna.mutantrace) switch(dna.mutantrace)
if("lizard","slime") see_in_dark = 3 if("lizard","slime")
see_in_dark = 3
see_invisible = SEE_INVISIBLE_LEVEL_ONE see_invisible = SEE_INVISIBLE_LEVEL_ONE
if("tajaran") if("tajaran")
see_in_dark = 4 see_in_dark = 4

View File

@@ -22,7 +22,7 @@
/*if(src.dna.mutantrace == "lizard") //Soghun stutterss-s-ss-sss. /*if(src.dna.mutantrace == "lizard") //Soghun stutterss-s-ss-sss.
if(copytext(message, 1, 2) != "*") if(copytext(message, 1, 2) != "*")
message = replacetext(message, "s", stutter("ss"))*/ message = replacetext(message, "s", stutter("ss"))*/
/*if(src.dna.mutantrace == "slime" && prob(5)) if(src.dna.mutantrace == "slime" && prob(5))
if(copytext(message, 1, 2) != "*") if(copytext(message, 1, 2) != "*")
if(copytext(message, 1, 2) == ";") if(copytext(message, 1, 2) == ";")
message = ";" message = ";"
@@ -31,7 +31,7 @@
message += "SKR" message += "SKR"
var/imax = rand(5,20) var/imax = rand(5,20)
for(var/i = 0,i<imax,i++) for(var/i = 0,i<imax,i++)
message += "E"*/ message += "E"
if(stat != DEAD) if(stat != DEAD)
for(var/datum/disease/pierrot_throat/D in viruses) for(var/datum/disease/pierrot_throat/D in viruses)
@@ -69,7 +69,6 @@
if(prob(25)) if(prob(25))
message += " OLE!" message += " OLE!"
if ((HULK in mutations) && health >= 25)
if ((HULK in mutations) && health >= 25 && length(message)) if ((HULK in mutations) && health >= 25 && length(message))
if(copytext(message, 1, 2) != "*") if(copytext(message, 1, 2) != "*")
message = "[uppertext(message)]!!" //because I don't know how to code properly in getting vars from other files -Bro message = "[uppertext(message)]!!" //because I don't know how to code properly in getting vars from other files -Bro

View File

@@ -448,7 +448,8 @@ proc/get_damage_icon_part(damage_state, body_part)
//BS12 EDIT //BS12 EDIT
if(dna) if(dna)
switch(dna.mutantrace) switch(dna.mutantrace)
if("lizard","golem","slime","shadow","adamantine") overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l") if("lizard","golem","slime","shadow","adamantine")
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l")
overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s") overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s")
if("lizard","tajaran","skrell") if("lizard","tajaran","skrell")
overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[gender]_l") overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[gender]_l")

View File

@@ -179,7 +179,7 @@
src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
var/obj/item/weapon/lighter/zippo/L = new /obj/item/weapon/lighter/zippo(src) var/obj/item/weapon/lighter/zippo/L = new /obj/item/weapon/lighter/zippo(src)
L.light_on = 1 L.lit = 1
src.modules += L src.modules += L
src.modules += new /obj/item/weapon/tray/robotray(src) src.modules += new /obj/item/weapon/tray/robotray(src)

View File

@@ -289,15 +289,14 @@
proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank) proc/AnnounceArrival(var/mob/living/carbon/human/character, var/rank)
if (ticker.current_state == GAME_STATE_PLAYING) if (ticker.current_state == GAME_STATE_PLAYING)
var/obj/item/device/radio/intercom/a = new /obj/item/device/radio/intercom(null)// BS12 EDIT Arrivals Announcement Computer, rather than the AI. var/obj/item/device/radio/intercom/a = new /obj/item/device/radio/intercom(null)// BS12 EDIT Arrivals Announcement Computer, rather than the AI.
a.autosay("\"[character.real_name],[character.wear_id.assignment ? " [character.wear_id.assignment]," : "" ] has arrived on the station.\"", "Arrivals Announcement Computer")
//unlikely for this to be an issue, but just in case
if(istype(character.wear_id, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = character.wear_id
a.autosay("\"[character.real_name],[I.assignment ? " [I.assignment]," : "" ] has arrived on the station.\"", "Arrivals Announcement Computer")
else
a.autosay("\"[character.real_name], visitor, has arrived on the station.\"", "Arrivals Announcement Computer")
del(a) del(a)
/*
var/mob/living/silicon/ai/announcer = new (null)
announcer.name = "Arrivals Announcement Computer"
announcer.real_name = "Arrivals Announcement Computer"
a.autosay("\"[character.real_name],[character.wear_id.assignment ? " [character.wear_id.assignment]," : "" ] has arrived on the station.\"", announcer)
del(announcer)
*/
proc/LateChoices() proc/LateChoices()
var/mills = world.time // 1/10 of a second, not real milliseconds but whatever var/mills = world.time // 1/10 of a second, not real milliseconds but whatever

View File

@@ -213,7 +213,7 @@ datum
for(var/mob/living/carbon/slime/M in T) for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(rand(15,20)) M.adjustToxLoss(rand(15,20))
var/hotspot = (locate(/obj/effect/hotspot) in T) var/hotspot = (locate(/obj/fire) in T)
if(hotspot && !istype(T, /turf/space)) if(hotspot && !istype(T, /turf/space))
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
@@ -224,7 +224,7 @@ datum
reaction_obj(var/obj/O, var/volume) reaction_obj(var/obj/O, var/volume)
src = null src = null
var/turf/T = get_turf(O) var/turf/T = get_turf(O)
var/hotspot = (locate(/obj/effect/hotspot) in T) var/hotspot = (locate(/obj/fire) in T)
if(hotspot && !istype(T, /turf/space)) if(hotspot && !istype(T, /turf/space))
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
@@ -2102,7 +2102,7 @@ datum
if(T.wet_overlay) if(T.wet_overlay)
T.overlays -= T.wet_overlay T.overlays -= T.wet_overlay
T.wet_overlay = null T.wet_overlay = null
var/hotspot = (locate(/obj/effect/hotspot) in T) var/hotspot = (locate(/obj/fire) in T)
if(hotspot) if(hotspot)
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0) lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)

View File

@@ -1109,8 +1109,6 @@ datum
sleep(50) sleep(50)
var/turf/location = get_turf(holder.my_atom.loc) var/turf/location = get_turf(holder.my_atom.loc)
for(var/turf/simulated/floor/target_tile in range(0,location)) for(var/turf/simulated/floor/target_tile in range(0,location))
if(target_tile.parent && target_tile.parent.group_processing)
target_tile.parent.suspend_group_processing()
var/datum/gas_mixture/napalm = new var/datum/gas_mixture/napalm = new

View File

@@ -236,8 +236,8 @@
seed = "/obj/item/seeds/glowberryseed" seed = "/obj/item/seeds/glowberryseed"
name = "bunch of glow-berries" name = "bunch of glow-berries"
desc = "Nutritious!" desc = "Nutritious!"
light_on = 1 var/light_on = 1
brightness_on = 2 //luminosity when on var/brightness_on = 2 //luminosity when on
icon_state = "glowberrypile" icon_state = "glowberrypile"
New() New()
..() ..()

View File

@@ -547,7 +547,8 @@ datum/design/telecomms_processor
build_path = "/obj/item/weapon/circuitboard/telecomms/processor" build_path = "/obj/item/weapon/circuitboard/telecomms/processor"
datum/design/telecomms_server datum/design/telecomms_server
name = "Circuit Design (Server Mainframe)" desc = "Allows for the construction of Telecommunications Servers." name = "Circuit Design (Server Mainframe)"
desc = "Allows for the construction of Telecommunications Servers."
id = "s-server" id = "s-server"
req_tech = list("programming" = 4, "engineering" = 4) req_tech = list("programming" = 4, "engineering" = 4)
build_type = IMPRINTER build_type = IMPRINTER

View File

@@ -51,8 +51,6 @@
#define HELMET_MAX_HEAT_PROTECITON_TEMPERATURE 600 //For normal helmets #define HELMET_MAX_HEAT_PROTECITON_TEMPERATURE 600 //For normal helmets
#define ARMOR_MIN_COLD_PROTECITON_TEMPERATURE 160 //For armor #define ARMOR_MIN_COLD_PROTECITON_TEMPERATURE 160 //For armor
#define ARMOR_MAX_HEAT_PROTECITON_TEMPERATURE 600 //For armor #define ARMOR_MAX_HEAT_PROTECITON_TEMPERATURE 600 //For armor
#define FIRESUIT_MIN_COLD_PROTECITON_TEMPERATURE 50 //These need better cold protect
#define SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE 5000 //These need better heat protect
#define GLOVES_MIN_COLD_PROTECITON_TEMPERATURE 2.0 //For some gloves (black and) #define GLOVES_MIN_COLD_PROTECITON_TEMPERATURE 2.0 //For some gloves (black and)
#define GLOVES_MAX_HEAT_PROTECITON_TEMPERATURE 1500 //For some gloves #define GLOVES_MAX_HEAT_PROTECITON_TEMPERATURE 1500 //For some gloves
@@ -71,11 +69,8 @@
#define DOOR_CRUSH_DAMAGE 10 #define DOOR_CRUSH_DAMAGE 10
// Factor of how fast mob nutrition decreases // Factor of how fast mob nutrition decreases
#define HUNGER_FACTOR 0.05 #define HUNGER_FACTOR 0.1
#define REAGENTS_METABOLISM 0.02 #define REAGENTS_METABOLISM 0.4
// By defining the effect multiplier this way, it'll exactly adjust
// all effects according to how they originally were with the 0.4 metabolism
#define REAGENTS_EFFECT_MULTIPLIER REAGENTS_METABOLISM / 0.4
#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 #define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05
//Minimum ratio of air that must move to/from a tile to suspend group processing //Minimum ratio of air that must move to/from a tile to suspend group processing
@@ -110,7 +105,7 @@
#define FIRE_PLASMA_ENERGY_RELEASED 3000000 //Amount of heat released per mole of burnt plasma into the tile #define FIRE_PLASMA_ENERGY_RELEASED 3000000 //Amount of heat released per mole of burnt plasma into the tile
#define FIRE_GROWTH_RATE 40000 //For small fires #define FIRE_GROWTH_RATE 40000 //For small fires
#define WATER_BOIL_TEMP 393 //#define WATER_BOIL_TEMP 393
// Fire Damage // Fire Damage
#define CARBON_LIFEFORM_FIRE_RESISTANCE 200+T0C #define CARBON_LIFEFORM_FIRE_RESISTANCE 200+T0C
@@ -127,16 +122,6 @@
#define T20C 293.15 // 20degC #define T20C 293.15 // 20degC
#define TCMB 2.7 // -270.3degC #define TCMB 2.7 // -270.3degC
#define SPECIFIC_HEAT_TOXIN 200
#define SPECIFIC_HEAT_AIR 20
#define SPECIFIC_HEAT_CDO 30
#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
(carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)
#define MINIMUM_HEAT_CAPACITY 0.0003
#define QUANTIZE(variable) (round(variable,0.0001))
#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer
var/turf/space/Space_Tile = locate(/turf/space) // A space tile to reference when atmos wants to remove excess heat. var/turf/space/Space_Tile = locate(/turf/space) // A space tile to reference when atmos wants to remove excess heat.
#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking #define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking
@@ -549,7 +534,7 @@ var/list/liftable_structures = list(\
#define INVISIBILITY_MAXIMUM 100 #define INVISIBILITY_MAXIMUM 100
//Object specific defines //Object specific defines
//#define CANDLE_LUM 3 //For how bright candles are //Why is this here? Moved to candle.dm (brightness_on) -SweeperM #define CANDLE_LUM 3 //For how bright candles are
//Some mob defines below //Some mob defines below
@@ -572,8 +557,13 @@ var/list/TAGGERLOCATIONS = list("Disposals",
"Robotics", "HoP Office", "Library", "Chapel", "Theatre", "Robotics", "HoP Office", "Library", "Chapel", "Theatre",
"Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics") "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics")
#define MIN_PLAYER_AGE 19 #define HOSTILE_STANCE_IDLE 1
#define MAX_PLAYER_AGE 60 #define HOSTILE_STANCE_ALERT 2
#define HOSTILE_STANCE_ATTACK 3
#define HOSTILE_STANCE_ATTACKING 4
#define HOSTILE_STANCE_TIRED 5
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
//Damage things //Damage things
@@ -607,14 +597,6 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define ORGAN_SPLINTED 256 #define ORGAN_SPLINTED 256
#define SALVED 512 #define SALVED 512
#define HOSTILE_STANCE_IDLE 1
#define HOSTILE_STANCE_ALERT 2
#define HOSTILE_STANCE_ATTACK 3
#define HOSTILE_STANCE_ATTACKING 4
#define HOSTILE_STANCE_TIRED 5
#define LEFT 1
#define RIGHT 2
#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. #define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
@@ -692,3 +674,6 @@ var/list/be_special_flags = list(
#define LANGUAGE_OTHER 32768 #define LANGUAGE_OTHER 32768
#define LANGUAGE_UNIVERSAL 65535 #define LANGUAGE_UNIVERSAL 65535
#define LEFT 1
#define RIGHT 2

View File

@@ -5002,7 +5002,7 @@
"bSj" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bSj" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"bSk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating,/area/construction) "bSk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating,/area/construction)
"bSl" = (/obj/machinery/power/apc{dir = 2; name = "Construction Area APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/construction) "bSl" = (/obj/machinery/power/apc{dir = 2; name = "Construction Area APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/construction)
"bSm" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/hazardvest,/turf/simulated/floor/plating,/area/construction) "bSm" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating,/area/construction)
"bSn" = (/obj/structure/table,/obj/item/weapon/cable_coil{amount = 5},/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/construction) "bSn" = (/obj/structure/table,/obj/item/weapon/cable_coil{amount = 5},/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/construction)
"bSo" = (/obj/structure/table,/turf/simulated/floor/plating,/area/construction) "bSo" = (/obj/structure/table,/turf/simulated/floor/plating,/area/construction)
"bSp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "bSp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
@@ -5041,7 +5041,7 @@
"bSW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{tag = "icon-manifold-r (EAST)"; icon_state = "manifold-r"; dir = 4; level = 2; color = "red"},/turf/simulated/floor,/area/atmos) "bSW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold{tag = "icon-manifold-r (EAST)"; icon_state = "manifold-r"; dir = 4; level = 2; color = "red"},/turf/simulated/floor,/area/atmos)
"bSX" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/atmos) "bSX" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/atmos)
"bSY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/atmos) "bSY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/atmos)
"bSZ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/simulated/floor,/area/atmos) "bSZ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/simulated/floor,/area/atmos)
"bTa" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/atmos) "bTa" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/atmos)
"bTb" = (/obj/machinery/atmospherics/pipe/manifold{icon_state = "manifold"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "bTb" = (/obj/machinery/atmospherics/pipe/manifold{icon_state = "manifold"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
"bTc" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos) "bTc" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos)
@@ -5791,7 +5791,7 @@
"chs" = (/obj/structure/closet/radiation,/turf/simulated/floor,/area/engine/engineering) "chs" = (/obj/structure/closet/radiation,/turf/simulated/floor,/area/engine/engineering)
"cht" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engine/engineering) "cht" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engine/engineering)
"chu" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/turf/simulated/floor,/area/engine/engineering) "chu" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/turf/simulated/floor,/area/engine/engineering)
"chv" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = "SS13"; pixel_x = 0; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) "chv" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = "SS13"; pixel_x = 0; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
"chw" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology) "chw" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"chx" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area) "chx" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area)
"chy" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/engine/engineering) "chy" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/engine/engineering)