mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 15:08:34 +01:00
@@ -38,7 +38,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
|
||||
#define NETWORK_ENGINEERING "Engineering"
|
||||
#define NETWORK_ENGINEERING_OUTPOST "Engineering Outpost"
|
||||
#define NETWORK_ERT "ZeEmergencyResponseTeam"
|
||||
#define NETWORK_EXODUS "Exodus"
|
||||
#define NETWORK_EXODUS "Northern Star"
|
||||
#define NETWORK_MEDICAL "Medical"
|
||||
#define NETWORK_MERCENARY "MercurialNet"
|
||||
#define NETWORK_MINE "MINE"
|
||||
|
||||
@@ -82,6 +82,7 @@
|
||||
|
||||
// Click cooldown
|
||||
#define DEFAULT_ATTACK_COOLDOWN 8 //Default timeout for aggressive actions
|
||||
#define DEFAULT_QUICK_COOLDOWN 4
|
||||
|
||||
|
||||
#define MIN_SUPPLIED_LAW_NUMBER 15
|
||||
@@ -114,3 +115,24 @@
|
||||
#define MOB_SMALL 10
|
||||
#define MOB_TINY 5
|
||||
#define MOB_MINISCULE 1
|
||||
|
||||
#define TINT_NONE 0
|
||||
#define TINT_MODERATE 1
|
||||
#define TINT_HEAVY 2
|
||||
#define TINT_BLIND 3
|
||||
|
||||
#define FLASH_PROTECTION_REDUCED -1
|
||||
#define FLASH_PROTECTION_NONE 0
|
||||
#define FLASH_PROTECTION_MODERATE 1
|
||||
#define FLASH_PROTECTION_MAJOR 2
|
||||
|
||||
#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
|
||||
#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
|
||||
|
||||
// Incapacitation flags, used by the mob/proc/incapacitated() proc
|
||||
#define INCAPACITATION_RESTRAINED 1
|
||||
#define INCAPACITATION_BUCKLED_PARTIALLY 2
|
||||
#define INCAPACITATION_BUCKLED_FULLY 4
|
||||
|
||||
#define INCAPACITATION_DEFAULT (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY)
|
||||
#define INCAPACITATION_ALL (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY)
|
||||
|
||||
@@ -66,7 +66,8 @@ var/global/list/socks_t = list(
|
||||
"White normal" = "white_norm", "White short" = "white_short", "White knee" = "white_knee",
|
||||
"White thigh" = "white_thigh", "Black normal" = "black_norm", "Black short" = "black_short",
|
||||
"Black knee" = "black_knee", "Black thigh" = "black_thigh", "Thin knee" = "thin_knee",
|
||||
"Thin thigh" = "thin_thigh", "Pantyhose" = "pantyhose", "None")
|
||||
"Thin thigh" = "thin_thigh", "Pantyhose" = "pantyhose", "Striped thigh" = "striped_thigh",
|
||||
"Striped knee" = "striped_knee", "Rainbow knee" = "rainbow_knee", "Rainbow thigh" = "rainbow_thigh", "None")
|
||||
|
||||
//Backpacks
|
||||
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt")
|
||||
|
||||
@@ -229,14 +229,14 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
#define LOCATE_COORDS(X, Y, Z) locate(between(1, X, world.maxx), between(1, Y, world.maxy), Z)
|
||||
/proc/getcircle(turf/center, var/radius) //Uses a fast Bresenham rasterization algorithm to return the turfs in a thin circle.
|
||||
if(!radius) return list(center)
|
||||
|
||||
|
||||
var/x = 0
|
||||
var/y = radius
|
||||
var/p = 3 - 2 * radius
|
||||
|
||||
|
||||
. = list()
|
||||
while(y >= x) // only formulate 1/8 of circle
|
||||
|
||||
|
||||
. += LOCATE_COORDS(center.x - x, center.y - y, center.z) //upper left left
|
||||
. += LOCATE_COORDS(center.x - y, center.y - x, center.z) //upper upper left
|
||||
. += LOCATE_COORDS(center.x + y, center.y - x, center.z) //upper upper right
|
||||
@@ -247,7 +247,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
. += LOCATE_COORDS(center.x + x, center.y + y, center.z) //lower right right
|
||||
|
||||
if(p < 0)
|
||||
p += 4*x++ + 6;
|
||||
p += 4*x++ + 6;
|
||||
else
|
||||
p += 4*(x++ - y--) + 10;
|
||||
|
||||
@@ -875,7 +875,7 @@ proc/GaussRandRound(var/sigma,var/roundto)
|
||||
if(turftoleave)
|
||||
fromupdate += T.ChangeTurf(turftoleave)
|
||||
else
|
||||
T.ChangeTurf(get_base_turf(T.z))
|
||||
T.ChangeTurf(get_base_turf_by_area(T))
|
||||
|
||||
refined_src -= T
|
||||
refined_trg -= B
|
||||
@@ -962,7 +962,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0)
|
||||
var/old_underlays = T.underlays.Copy()
|
||||
|
||||
if(platingRequired)
|
||||
if(istype(B, get_base_turf(B.z)))
|
||||
if(istype(B, get_base_turf_by_area(B)))
|
||||
continue moving
|
||||
|
||||
var/turf/X = B
|
||||
|
||||
@@ -255,6 +255,8 @@ datum/hud/New(mob/owner)
|
||||
|
||||
if(ishuman(mymob))
|
||||
human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences
|
||||
else if(isrobot(mymob))
|
||||
robot_hud()
|
||||
else if(issmall(mymob))
|
||||
monkey_hud(ui_style, ui_color, ui_alpha)
|
||||
else if(isbrain(mymob))
|
||||
@@ -265,8 +267,6 @@ datum/hud/New(mob/owner)
|
||||
slime_hud()
|
||||
else if(isAI(mymob))
|
||||
ai_hud()
|
||||
else if(isrobot(mymob))
|
||||
robot_hud()
|
||||
else if(isobserver(mymob))
|
||||
ghost_hud()
|
||||
else
|
||||
|
||||
@@ -264,7 +264,7 @@ var/global/datum/shuttle_controller/shuttle_controller
|
||||
var/datum/shuttle/ferry/multidock/specops/ERT = new()
|
||||
ERT.location = 0
|
||||
ERT.warmup_time = 10
|
||||
ERT.area_offsite = locate(/area/shuttle/specops/station) //centcom is the home station, the Exodus is offsite
|
||||
ERT.area_offsite = locate(/area/shuttle/specops/station) //centcom is the home station, the Northern Star is offsite
|
||||
ERT.area_station = locate(/area/shuttle/specops/centcom)
|
||||
ERT.docking_controller_tag = "specops_shuttle_port"
|
||||
ERT.docking_controller_tag_station = "specops_shuttle_port"
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
if(H.mind && !player_is_antag(H.mind, only_offstation_roles = 1))
|
||||
var/assignment = GetAssignment(H)
|
||||
|
||||
var/id = add_zero(num2hex(rand(1, 1.6777215E7)), 6) //this was the best they could come up with? A large random number? *sigh*
|
||||
var/id = add_zero(num2hex(rand(1, 65535)), 4) //no point generating higher numbers because of the limitations of num2hex
|
||||
//General Record
|
||||
var/datum/data/record/G = CreateGeneralRecord(H, id)
|
||||
G.fields["name"] = H.real_name
|
||||
@@ -395,7 +395,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H, var/assigned_role)
|
||||
side = new(get_id_photo(dummy), dir = WEST)
|
||||
qdel(dummy)
|
||||
|
||||
if(!id) id = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
|
||||
if(!id) id = text("[]", add_zero(num2hex(rand(1, 65536)), 4))
|
||||
var/datum/data/record/G = new /datum/data/record()
|
||||
G.name = "Employee Record #[id]"
|
||||
G.fields["name"] = "New Record"
|
||||
|
||||
+540
-4
@@ -1537,11 +1537,9 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/obj/item/clothing/head/helmet/space/void/mining,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/clothing/mask/breath,
|
||||
/obj/item/clothing/shoes/magboots,
|
||||
/obj/item/clothing/shoes/magboots,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/weapon/tank/oxygen)
|
||||
cost = 40
|
||||
cost = 35
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Mining voidsuit crate"
|
||||
access = access_mining
|
||||
@@ -1606,4 +1604,542 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical voidsuit crate"
|
||||
access = access_medical_equip
|
||||
group = "Medical"
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/securityextragear
|
||||
name = "Security surplus equipment"
|
||||
contains = list(/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/device/radio/headset/headset_sec/alt,
|
||||
/obj/item/device/radio/headset/headset_sec/alt,
|
||||
/obj/item/device/radio/headset/headset_sec/alt,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security)
|
||||
cost = 25
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security surplus equipment"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/detectivegear
|
||||
name = "Forensic investigation equipment"
|
||||
contains = list(/obj/item/device/detective_scanner,
|
||||
/obj/item/weapon/storage/box/evidence,
|
||||
/obj/item/weapon/storage/box/evidence,
|
||||
/obj/item/clothing/suit/storage/vest/detective,
|
||||
/obj/item/weapon/cartridge/detective,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/device/camera,
|
||||
/obj/item/weapon/folder/red,
|
||||
/obj/item/weapon/folder/blue,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/device/taperecorder,
|
||||
/obj/item/device/mass_spectrometer,
|
||||
/obj/item/device/camera_film,
|
||||
/obj/item/device/camera_film,
|
||||
/obj/item/weapon/storage/photo_album,
|
||||
/obj/item/device/reagent_scanner)
|
||||
cost = 35
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Forensic equipment"
|
||||
access = access_forensics_lockers
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/detectiveclothes
|
||||
name = "Investigation apparel"
|
||||
contains = list(/obj/item/clothing/under/det/black,
|
||||
/obj/item/clothing/under/det/black,
|
||||
/obj/item/clothing/under/det/grey,
|
||||
/obj/item/clothing/under/det/grey,
|
||||
/obj/item/clothing/head/det/grey,
|
||||
/obj/item/clothing/head/det/grey,
|
||||
/obj/item/clothing/under/det,
|
||||
/obj/item/clothing/under/det,
|
||||
/obj/item/clothing/head/det,
|
||||
/obj/item/clothing/head/det,
|
||||
/obj/item/clothing/suit/storage/det_trench,
|
||||
/obj/item/clothing/suit/storage/det_trench/grey,
|
||||
/obj/item/clothing/suit/storage/forensics/red,
|
||||
/obj/item/clothing/suit/storage/forensics/blue,
|
||||
/obj/item/clothing/under/det/corporate,
|
||||
/obj/item/clothing/under/det/corporate,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Investigation clothing"
|
||||
access = access_forensics_lockers
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/officergear
|
||||
name = "Officer equipment"
|
||||
contains = list(/obj/item/clothing/suit/storage/vest/officer,
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/clothing/accessory/badge/holo,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/grenade/flashbang,
|
||||
/obj/item/weapon/melee/baton/loaded,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/device/flashlight/flare,
|
||||
/obj/item/clothing/accessory/storage/black_vest,
|
||||
/obj/item/clothing/head/soft/sec/corp,
|
||||
/obj/item/clothing/under/rank/security/corp,
|
||||
/obj/item/weapon/gun/energy/taser)
|
||||
cost = 30
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Officer equipment"
|
||||
access = access_brig
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/wardengear
|
||||
name = "Warden equipment"
|
||||
contains = list(/obj/item/clothing/suit/storage/vest/warden,
|
||||
/obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/warden/corp,
|
||||
/obj/item/clothing/suit/armor/vest/warden,
|
||||
/obj/item/clothing/suit/armor/vest/warden/alt,
|
||||
/obj/item/clothing/head/helmet/warden,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/taperoll/police,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/weapon/storage/box/flashbangs,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/weapon/reagent_containers/spray/pepper,
|
||||
/obj/item/weapon/melee/baton/loaded,
|
||||
/obj/item/weapon/storage/box/holobadge,
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden)
|
||||
cost = 45
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Warden equipment"
|
||||
access = access_armory
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/headofsecgear
|
||||
name = "Head of security equipment"
|
||||
contains = list(/obj/item/clothing/head/helmet/HoS,
|
||||
/obj/item/clothing/suit/storage/vest/hos,
|
||||
/obj/item/clothing/under/rank/head_of_security/corp,
|
||||
/obj/item/clothing/suit/armor/hos,
|
||||
/obj/item/clothing/head/helmet/HoS/dermal,
|
||||
/obj/item/weapon/cartridge/hos,
|
||||
/obj/item/device/radio/headset/heads/hos,
|
||||
/obj/item/clothing/glasses/sunglasses/sechud,
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/device/flash,
|
||||
/obj/item/device/hailer,
|
||||
/obj/item/clothing/accessory/holster/waist,
|
||||
/obj/item/weapon/melee/telebaton,
|
||||
/obj/item/weapon/shield/riot/tele,
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos)
|
||||
cost = 65
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Head of security equipment"
|
||||
access = access_hos
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/securityclothing
|
||||
name = "Security uniform crate"
|
||||
contains = list(/obj/item/weapon/storage/backpack/satchel_sec,
|
||||
/obj/item/weapon/storage/backpack/satchel_sec,
|
||||
/obj/item/weapon/storage/backpack/security,
|
||||
/obj/item/weapon/storage/backpack/security,
|
||||
/obj/item/clothing/accessory/armband,
|
||||
/obj/item/clothing/accessory/armband,
|
||||
/obj/item/clothing/accessory/armband,
|
||||
/obj/item/clothing/accessory/armband,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/under/rank/security2,
|
||||
/obj/item/clothing/under/rank/security2,
|
||||
/obj/item/clothing/under/rank/security2,
|
||||
/obj/item/clothing/under/rank/security2,
|
||||
/obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/head_of_security,
|
||||
/obj/item/clothing/suit/armor/hos/jensen,
|
||||
/obj/item/clothing/head/soft/sec,
|
||||
/obj/item/clothing/head/soft/sec,
|
||||
/obj/item/clothing/head/soft/sec,
|
||||
/obj/item/clothing/head/soft/sec,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/weapon/storage/box/holobadge)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security uniform crate"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/navybluesecurityclothing
|
||||
name = "Navy blue security uniform crate"
|
||||
contains = list(/obj/item/weapon/storage/backpack/satchel_sec,
|
||||
/obj/item/weapon/storage/backpack/satchel_sec,
|
||||
/obj/item/weapon/storage/backpack/security,
|
||||
/obj/item/weapon/storage/backpack/security,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/under/rank/security/navyblue,
|
||||
/obj/item/clothing/suit/security/navyofficer,
|
||||
/obj/item/clothing/suit/security/navyofficer,
|
||||
/obj/item/clothing/suit/security/navyofficer,
|
||||
/obj/item/clothing/suit/security/navyofficer,
|
||||
/obj/item/clothing/under/rank/warden/navyblue,
|
||||
/obj/item/clothing/suit/security/navywarden,
|
||||
/obj/item/clothing/under/rank/head_of_security/navyblue,
|
||||
/obj/item/clothing/suit/security/navyhos,
|
||||
/obj/item/clothing/head/beret/sec/navy/officer,
|
||||
/obj/item/clothing/head/beret/sec/navy/officer,
|
||||
/obj/item/clothing/head/beret/sec/navy/officer,
|
||||
/obj/item/clothing/head/beret/sec/navy/officer,
|
||||
/obj/item/clothing/head/beret/sec/navy/warden,
|
||||
/obj/item/clothing/head/beret/sec/navy/hos,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/weapon/storage/box/holobadge)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Navy blue security uniform crate"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/corporatesecurityclothing
|
||||
name = "Corporate security uniform crate"
|
||||
contains = list(/obj/item/weapon/storage/backpack/satchel_sec,
|
||||
/obj/item/weapon/storage/backpack/satchel_sec,
|
||||
/obj/item/weapon/storage/backpack/security,
|
||||
/obj/item/weapon/storage/backpack/security,
|
||||
/obj/item/clothing/under/rank/security/corp,
|
||||
/obj/item/clothing/under/rank/security/corp,
|
||||
/obj/item/clothing/under/rank/security/corp,
|
||||
/obj/item/clothing/under/rank/security/corp,
|
||||
/obj/item/clothing/head/soft/sec/corp,
|
||||
/obj/item/clothing/head/soft/sec/corp,
|
||||
/obj/item/clothing/head/soft/sec/corp,
|
||||
/obj/item/clothing/head/soft/sec/corp,
|
||||
/obj/item/clothing/under/rank/warden/corp,
|
||||
/obj/item/clothing/under/rank/head_of_security/corp,
|
||||
/obj/item/clothing/head/beret/sec,
|
||||
/obj/item/clothing/head/beret/sec,
|
||||
/obj/item/clothing/head/beret/sec,
|
||||
/obj/item/clothing/head/beret/sec,
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden,
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos,
|
||||
/obj/item/clothing/under/det/corporate,
|
||||
/obj/item/clothing/under/det/corporate,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/weapon/storage/box/holobadge)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Corporate security uniform crate"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/securitybiosuit
|
||||
name = "Security biohazard gear"
|
||||
contains = list(/obj/item/clothing/head/bio_hood/security,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/suit/bio_suit/security,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/clothing/gloves/latex)
|
||||
cost = 35
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security biohazard gear"
|
||||
access = access_security
|
||||
group = "Security"
|
||||
|
||||
/datum/supply_packs/medicalextragear
|
||||
name = "Medical surplus equipment"
|
||||
contains = list(/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/device/radio/headset/headset_med/alt,
|
||||
/obj/item/device/radio/headset/headset_med/alt,
|
||||
/obj/item/device/radio/headset/headset_med/alt,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical surplus equipment"
|
||||
access = access_medical
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/cmogear
|
||||
name = "Chief medical officer equipment"
|
||||
contains = list(/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/device/radio/headset/heads/cmo,
|
||||
/obj/item/clothing/under/rank/chief_medical_officer,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/cartridge/cmo,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe)
|
||||
cost = 60
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Chief medical officer equipment"
|
||||
access = access_cmo
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/doctorgear
|
||||
name = "Medical Doctor equipment"
|
||||
contains = list(/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/clothing/under/rank/medical,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/weapon/storage/firstaid/adv,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical Doctor equipment"
|
||||
access = access_medical_equip
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/chemistgear
|
||||
name = "Chemist equipment"
|
||||
contains = list(/obj/item/weapon/storage/box/beakers,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/weapon/storage/box/autoinjectors,
|
||||
/obj/item/clothing/under/rank/chemist,
|
||||
/obj/item/clothing/glasses/science,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/chemist,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/cartridge/chemistry,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/storage/box/pillbottles,
|
||||
/obj/item/weapon/reagent_containers/syringe)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Chemist equipment"
|
||||
access = access_chemistry
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/paramedicgear
|
||||
name = "Paramedic equipment"
|
||||
contains = list(/obj/item/weapon/storage/belt/medical/emt,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/clothing/under/rank/medical/black,
|
||||
/obj/item/clothing/accessory/armband/medgreen,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/suit/storage/toggle/fr_jacket,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/weapon/storage/firstaid/adv,
|
||||
/obj/item/clothing/shoes/jackboots,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Paramedic equipment"
|
||||
access = access_medical_equip
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/psychiatristgear
|
||||
name = "Psychiatrist equipment"
|
||||
contains = list(/obj/item/clothing/under/rank/psych,
|
||||
/obj/item/device/radio/headset/headset_med,
|
||||
/obj/item/clothing/under/rank/psych/turtleneck,
|
||||
/obj/item/clothing/shoes/laceup,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/clipboard,
|
||||
/obj/item/weapon/folder/white,
|
||||
/obj/item/weapon/pen,
|
||||
/obj/item/weapon/cartridge/medical)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Psychiatrist equipment"
|
||||
access = access_psychiatrist
|
||||
group = "Medical"
|
||||
|
||||
/*
|
||||
/datum/supply_packs/geneticistgear
|
||||
name = "Geneticist equipment"
|
||||
contains = list(/obj/item/weapon/storage/belt/medical,
|
||||
/obj/item/device/radio/headset/headset_medsci,
|
||||
/obj/item/clothing/under/rank/geneticist,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/genetics,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Geneticist equipment"
|
||||
access = access_genetics
|
||||
group = "Medical"
|
||||
*/
|
||||
|
||||
/datum/supply_packs/medicalscrubs
|
||||
name = "Medical scrubs"
|
||||
contains = list(/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/under/rank/medical/blue,
|
||||
/obj/item/clothing/under/rank/medical/blue,
|
||||
/obj/item/clothing/under/rank/medical/blue,
|
||||
/obj/item/clothing/under/rank/medical/green,
|
||||
/obj/item/clothing/under/rank/medical/green,
|
||||
/obj/item/clothing/under/rank/medical/green,
|
||||
/obj/item/clothing/under/rank/medical/purple,
|
||||
/obj/item/clothing/under/rank/medical/purple,
|
||||
/obj/item/clothing/under/rank/medical/purple,
|
||||
/obj/item/clothing/under/rank/medical/black,
|
||||
/obj/item/clothing/under/rank/medical/black,
|
||||
/obj/item/clothing/under/rank/medical/black,
|
||||
/obj/item/clothing/head/surgery,
|
||||
/obj/item/clothing/head/surgery,
|
||||
/obj/item/clothing/head/surgery,
|
||||
/obj/item/clothing/head/surgery/purple,
|
||||
/obj/item/clothing/head/surgery/purple,
|
||||
/obj/item/clothing/head/surgery/purple,
|
||||
/obj/item/clothing/head/surgery/blue,
|
||||
/obj/item/clothing/head/surgery/blue,
|
||||
/obj/item/clothing/head/surgery/blue,
|
||||
/obj/item/clothing/head/surgery/green,
|
||||
/obj/item/clothing/head/surgery/green,
|
||||
/obj/item/clothing/head/surgery/green,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical scrubs crate"
|
||||
access = access_medical_equip
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/autopsy
|
||||
name = "Autopsy equipment"
|
||||
contains = list(/obj/item/weapon/folder/white,
|
||||
/obj/item/device/camera,
|
||||
/obj/item/device/camera_film,
|
||||
/obj/item/device/camera_film,
|
||||
/obj/item/weapon/autopsy_scanner,
|
||||
/obj/item/weapon/scalpel,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves,
|
||||
/obj/item/weapon/pen)
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Autopsy equipment crate"
|
||||
access = access_morgue
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/medicaluniforms
|
||||
name = "Medical uniforms"
|
||||
contains = list(/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/under/rank/chief_medical_officer,
|
||||
/obj/item/clothing/under/rank/geneticist,
|
||||
/obj/item/clothing/under/rank/virologist,
|
||||
/obj/item/clothing/under/rank/nursesuit,
|
||||
/obj/item/clothing/under/rank/nurse,
|
||||
/obj/item/clothing/under/rank/orderly,
|
||||
/obj/item/clothing/under/rank/medical,
|
||||
/obj/item/clothing/under/rank/medical,
|
||||
/obj/item/clothing/under/rank/medical,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/genetics,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/virologist,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/chemist,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves)
|
||||
cost = 15
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical uniform crate"
|
||||
access = access_medical_equip
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/medicalbiosuits
|
||||
name = "Medical biohazard gear"
|
||||
contains = list(/obj/item/clothing/head/bio_hood,
|
||||
/obj/item/clothing/head/bio_hood,
|
||||
/obj/item/clothing/head/bio_hood,
|
||||
/obj/item/clothing/suit/bio_suit,
|
||||
/obj/item/clothing/suit/bio_suit,
|
||||
/obj/item/clothing/suit/bio_suit,
|
||||
/obj/item/clothing/head/bio_hood/virology,
|
||||
/obj/item/clothing/suit/bio_suit/virology,
|
||||
/obj/item/clothing/suit/bio_suit/cmo,
|
||||
/obj/item/clothing/head/bio_hood/cmo,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves)
|
||||
cost = 50
|
||||
containername = "Medical biohazard equipment"
|
||||
access = access_medical_equip
|
||||
group = "Medical"
|
||||
@@ -53,6 +53,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
|
||||
var/list/forced_ambience = null
|
||||
var/sound_env = STANDARD_STATION
|
||||
var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf
|
||||
|
||||
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
|
||||
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
|
||||
var/list/teleportlocs = list()
|
||||
@@ -145,6 +147,7 @@ area/space/atmosalert()
|
||||
requires_power = 0
|
||||
flags = RAD_SHIELDED
|
||||
sound_env = SMALL_ENCLOSED
|
||||
base_turf = /turf/space
|
||||
|
||||
/area/shuttle/arrival
|
||||
name = "\improper Arrival Shuttle"
|
||||
@@ -1023,14 +1026,17 @@ area/space/atmosalert()
|
||||
/area/hallway/secondary/entry/D1
|
||||
name = "\improper Shuttle Dock Hallway - Dock One"
|
||||
icon_state = "entry_D1"
|
||||
base_turf = /turf/space
|
||||
|
||||
/area/hallway/secondary/entry/D2
|
||||
name = "\improper Shuttle Dock Hallway - Dock Two"
|
||||
icon_state = "entry_D2"
|
||||
base_turf = /turf/space
|
||||
|
||||
/area/hallway/secondary/entry/D3
|
||||
name = "\improper Shuttle Dock Hallway - Dock Three"
|
||||
icon_state = "entry_D3"
|
||||
base_turf = /turf/space
|
||||
|
||||
/area/hallway/secondary/entry/D4
|
||||
name = "\improper Shuttle Dock Hallway - Dock Four"
|
||||
@@ -1601,6 +1607,7 @@ area/space/atmosalert()
|
||||
requires_power = 1
|
||||
always_unpowered = 1
|
||||
lighting_use_dynamic = 0
|
||||
base_turf = /turf/space
|
||||
|
||||
auxport
|
||||
name = "\improper Fore Port Solar Array"
|
||||
@@ -2283,6 +2290,7 @@ area/space/atmosalert()
|
||||
/area/shuttle/constructionsite
|
||||
name = "\improper Construction Site Shuttle"
|
||||
icon_state = "yellow"
|
||||
lighting_use_dynamic = 0
|
||||
|
||||
/area/shuttle/constructionsite/station
|
||||
name = "\improper Construction Site Shuttle"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Returns the lowest turf available on a given Z-level, defaults to space.
|
||||
// Returns the lowest turf available on a given Z-level, defaults to asteroid for Polaris.
|
||||
var/global/list/base_turf_by_z = list(
|
||||
"1" = /turf/simulated/floor/asteroid,
|
||||
"4" = /turf/simulated/floor/asteroid,
|
||||
@@ -10,6 +10,13 @@ proc/get_base_turf(var/z)
|
||||
base_turf_by_z["[z]"] = /turf/space
|
||||
return base_turf_by_z["[z]"]
|
||||
|
||||
//An area can override the z-level base turf, so our solar array areas etc. can be space-based.
|
||||
proc/get_base_turf_by_area(var/turf/T)
|
||||
var/area/A = T.loc
|
||||
if(A.base_turf)
|
||||
return A.base_turf
|
||||
return get_base_turf(T.z)
|
||||
|
||||
/client/proc/set_base_turf()
|
||||
set category = "Debug"
|
||||
set name = "Set Base Turf"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/power/changeling/arm_blade
|
||||
name = "Arm Blade"
|
||||
desc = "We reform one of our arms into a deadly blade."
|
||||
helptext = "We may retract our armblade by dropping it. It can deflect projectiles. Cannot be used while in lesser form."
|
||||
helptext = "We may retract our armblade by dropping it. It can deflect projectiles."
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_arm_blade
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/power/changeling/space_suit
|
||||
name = "Organic Space Suit"
|
||||
desc = "We grow an organic suit to protect ourselves from space exposure."
|
||||
helptext = "Cannot be used in lesser form. To remove the suit, use the ability again."
|
||||
helptext = "To remove the suit, use the ability again."
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_spacesuit
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
/datum/power/changeling/armor
|
||||
name = "Chitinous Spacearmor"
|
||||
desc = "We turn our skin into tough chitin to protect us from damage and space exposure."
|
||||
helptext = "Cannot be used in lesser form. To remove the armor, use the ability again."
|
||||
helptext = "To remove the armor, use the ability again."
|
||||
genomecost = 3
|
||||
verbpath = /mob/proc/changeling_spacearmor
|
||||
|
||||
|
||||
@@ -223,9 +223,9 @@ var/global/list/narsie_list = list()
|
||||
consume(AM2)
|
||||
continue
|
||||
|
||||
if (dist <= consume_range && !istype(A, get_base_turf(A.z)))
|
||||
if (dist <= consume_range && !istype(A, get_base_turf_by_area(A)))
|
||||
var/turf/T2 = A
|
||||
T2.ChangeTurf(get_base_turf(A.z))
|
||||
T2.ChangeTurf(get_base_turf_by_area(A))
|
||||
|
||||
/obj/singularity/narsie/consume(const/atom/A) //This one is for the small ones.
|
||||
if(!(A.singuloCanEat()))
|
||||
@@ -265,9 +265,9 @@ var/global/list/narsie_list = list()
|
||||
spawn (0)
|
||||
AM2.singularity_pull(src, src.current_size)
|
||||
|
||||
if (dist <= consume_range && !istype(A, get_base_turf(A.z)))
|
||||
if (dist <= consume_range && !istype(A, get_base_turf_by_area(A)))
|
||||
var/turf/T2 = A
|
||||
T2.ChangeTurf(get_base_turf(A.z))
|
||||
T2.ChangeTurf(get_base_turf_by_area(A))
|
||||
|
||||
/obj/singularity/narsie/ex_act(severity) //No throwing bombs at it either. --NEO
|
||||
return
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
qdel(M)
|
||||
for(var/obj/O in orange(1,src))
|
||||
qdel(O)
|
||||
var/base_turf = get_base_turf(src.z)
|
||||
var/base_turf = get_base_turf_by_area(src)
|
||||
for(var/turf/simulated/ST in orange(1,src))
|
||||
if(ST.type == base_turf)
|
||||
continue
|
||||
@@ -87,6 +87,6 @@
|
||||
//Destroying the turf
|
||||
if( T && istype(T,/turf/simulated) && prob(turf_removal_chance) )
|
||||
var/turf/simulated/ST = T
|
||||
var/base_turf = get_base_turf(src.z)
|
||||
var/base_turf = get_base_turf_by_area(src)
|
||||
if(ST.type != base_turf)
|
||||
ST.ChangeTurf(base_turf)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var/global/datum/controller/gameticker/ticker
|
||||
|
||||
/datum/controller/gameticker
|
||||
var/const/restart_timeout = 600
|
||||
var/const/restart_timeout = 3 MINUTES //One minute is 600.
|
||||
var/current_state = GAME_STATE_PREGAME
|
||||
|
||||
var/hide_mode = 0
|
||||
@@ -326,27 +326,34 @@ var/global/datum/controller/gameticker/ticker
|
||||
spawn(50)
|
||||
callHook("roundend")
|
||||
|
||||
var/time_left
|
||||
|
||||
if (mode.station_was_nuked)
|
||||
feedback_set_details("end_proper","nuke")
|
||||
time_left = 1 MINUTE //No point waiting five minutes if everyone's dead.
|
||||
if(!delay_end)
|
||||
world << "<span class='notice'><b>Rebooting due to destruction of station in [restart_timeout/10] seconds</b></span>"
|
||||
world << "<span class='notice'><b>Rebooting due to destruction of station in [round(time_left/600)] minutes.</b></span>"
|
||||
else
|
||||
feedback_set_details("end_proper","proper completion")
|
||||
if(!delay_end)
|
||||
world << "<span class='notice'><b>Restarting in [restart_timeout/10] seconds</b></span>"
|
||||
time_left = round(restart_timeout)
|
||||
|
||||
|
||||
if(blackbox)
|
||||
blackbox.save_all_data_to_sql()
|
||||
|
||||
if(!delay_end)
|
||||
sleep(restart_timeout)
|
||||
while(time_left > 0)
|
||||
if(delay_end)
|
||||
break
|
||||
world << "<span class='notice'><b>Restarting in [round(time_left/600)] minute\s.</b></span>"
|
||||
time_left -= 1 MINUTES
|
||||
sleep(600)
|
||||
if(!delay_end)
|
||||
world.Reboot()
|
||||
else
|
||||
world << "<span class='notice'><b>An admin has delayed the round end</b></span>"
|
||||
world << "<span class='notice'><b>An admin has delayed the round end.</b></span>"
|
||||
else
|
||||
world << "<span class='notice'><b>An admin has delayed the round end</b></span>"
|
||||
world << "<span class='notice'><b>An admin has delayed the round end.</b></span>"
|
||||
|
||||
else if (mode_finished)
|
||||
post_game = 1
|
||||
|
||||
@@ -11,6 +11,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
spawn_positions = 1
|
||||
supervisors = "company officials and Corporate Regulations"
|
||||
selection_color = "#ccccff"
|
||||
alt_titles = list("Station Administrator")
|
||||
idtype = /obj/item/weapon/card/id/gold
|
||||
req_admin_notify = 1
|
||||
access = list() //See get_access()
|
||||
|
||||
@@ -46,8 +46,8 @@
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#ffeef0"
|
||||
economic_modifier = 7
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
|
||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology)
|
||||
access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_eva)
|
||||
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva)
|
||||
alt_titles = list("Surgeon","Emergency Physician","Nurse","Virologist")
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -136,9 +136,19 @@
|
||||
if(weld(W, user))
|
||||
if(assembly)
|
||||
assembly.loc = src.loc
|
||||
assembly.state = 1
|
||||
assembly.anchored = 1
|
||||
assembly.camera_name = c_tag
|
||||
assembly.camera_network = english_list(network, NETWORK_EXODUS, ",", ",")
|
||||
assembly.update_icon()
|
||||
assembly.dir = src.dir
|
||||
assembly = null //so qdel doesn't eat it.
|
||||
new /obj/item/stack/cable_coil(src.loc, length=2)
|
||||
if(stat & BROKEN)
|
||||
assembly.state = 2
|
||||
user << "<span class='notice'>You repaired \the [src] frame.</span>"
|
||||
else
|
||||
assembly.state = 1
|
||||
user << "<span class='notice'>You cut \the [src] free from the wall.</span>"
|
||||
new /obj/item/stack/cable_coil(src.loc, length=2)
|
||||
qdel(src)
|
||||
|
||||
// OTHER
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
// Motion, EMP-Proof, X-Ray
|
||||
var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/material/osmium, /obj/item/weapon/stock_parts/scanning_module)
|
||||
var/list/upgrades = list()
|
||||
var/camera_name
|
||||
var/camera_network
|
||||
var/state = 0
|
||||
var/busy = 0
|
||||
/*
|
||||
@@ -47,7 +49,7 @@
|
||||
|
||||
else if(iswrench(W))
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
user << "You unattach the assembly from it's place."
|
||||
user << "You unattach the assembly from its place."
|
||||
anchored = 0
|
||||
update_icon()
|
||||
state = 0
|
||||
@@ -67,7 +69,7 @@
|
||||
else if(iswelder(W))
|
||||
|
||||
if(weld(W, user))
|
||||
user << "You unweld the assembly from it's place."
|
||||
user << "You unweld the assembly from its place."
|
||||
state = 1
|
||||
anchored = 1
|
||||
return
|
||||
@@ -78,7 +80,7 @@
|
||||
if(isscrewdriver(W))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
|
||||
var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Exodus,Security,Secret ", "Set Network", NETWORK_EXODUS))
|
||||
var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Northern Star,Security,Secret ", "Set Network", camera_network ? camera_network : NETWORK_EXODUS))
|
||||
if(!input)
|
||||
usr << "No input found please hang up and try your call again."
|
||||
return
|
||||
@@ -90,7 +92,7 @@
|
||||
|
||||
var/area/camera_area = get_area(src)
|
||||
var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])"
|
||||
input = sanitizeSafe(input(usr, "How would you like to name the camera?", "Set Camera Name", temptag), MAX_NAME_LEN)
|
||||
input = sanitizeSafe(input(usr, "How would you like to name the camera?", "Set Camera Name", camera_name ? camera_name : temptag), MAX_NAME_LEN)
|
||||
|
||||
state = 4
|
||||
var/obj/machinery/camera/C = new(src.loc)
|
||||
|
||||
@@ -100,6 +100,9 @@ var/global/list/engineering_networks = list(
|
||||
/obj/machinery/camera/xray
|
||||
icon_state = "xraycam" // Thanks to Krutchen for the icons.
|
||||
|
||||
/obj/machinery/camera/xray/command
|
||||
network = list(NETWORK_COMMAND)
|
||||
|
||||
/obj/machinery/camera/xray/security
|
||||
network = list(NETWORK_SECURITY)
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
|
||||
//Get the clone body ready
|
||||
H.adjustCloneLoss(150) // New damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
|
||||
H.adjustBrainLoss(80) // Even if healed to full health, it will have some brain damage
|
||||
H.adjustBrainLoss(50) // Even if healed to full health, it will have some brain damage
|
||||
H.Paralyse(4)
|
||||
|
||||
//Here let's calculate their health so the pod doesn't immediately eject them!!!
|
||||
@@ -255,7 +255,7 @@
|
||||
locked = 0
|
||||
go_out()
|
||||
return 1
|
||||
|
||||
|
||||
//Put messages in the connected computer's temp var for display.
|
||||
/obj/machinery/clonepod/proc/connected_message(var/message)
|
||||
if((isnull(connected)) || (!istype(connected, /obj/machinery/computer/cloning)))
|
||||
|
||||
@@ -40,14 +40,14 @@
|
||||
allow_items = 0
|
||||
|
||||
/obj/machinery/computer/cryopod/dorms
|
||||
name = "residental oversight console"
|
||||
desc = "An interface between visitors and the residental oversight systems tasked with keeping track of all visitors in the deeper section of the colony."
|
||||
name = "residential oversight console"
|
||||
desc = "An interface between visitors and the residential oversight systems tasked with keeping track of all visitors in the deeper section of the colony."
|
||||
icon = 'icons/obj/robot_storage.dmi' //placeholder
|
||||
icon_state = "console" //placeholder
|
||||
circuit = "/obj/item/weapon/circuitboard/robotstoragecontrol"
|
||||
|
||||
storage_type = "visitors"
|
||||
storage_name = "Residental Oversight Control"
|
||||
storage_name = "Residential Oversight Control"
|
||||
allow_items = 1
|
||||
|
||||
/obj/machinery/computer/cryopod/travel
|
||||
@@ -173,7 +173,7 @@
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
|
||||
/obj/item/weapon/circuitboard/dormscontrol
|
||||
name = "Circuit board (Residental Oversight Console)"
|
||||
name = "Circuit board (Residential Oversight Console)"
|
||||
build_path = "/obj/machinery/computer/cryopod/door/dorms"
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
|
||||
@@ -271,13 +271,13 @@
|
||||
disallow_occupant_types = list(/mob/living/silicon/robot/drone)
|
||||
|
||||
/obj/machinery/cryopod/robot/door/dorms
|
||||
name = "Residental District Elevator"
|
||||
name = "Residential District Elevator"
|
||||
desc = "A small elevator that goes down to the deeper section of the colony."
|
||||
on_store_message = "has departed for the residental district."
|
||||
on_store_name = "Residental Oversight"
|
||||
on_enter_occupant_message = "The elevator door closes slowly, ready to bring you down to the residental district."
|
||||
on_store_message = "has departed for the residential district."
|
||||
on_store_name = "Residential Oversight"
|
||||
on_enter_occupant_message = "The elevator door closes slowly, ready to bring you down to the residential district."
|
||||
on_store_visible_message_1 = "makes a ding as it moves"
|
||||
on_store_visible_message_2 = "to the residental district."
|
||||
on_store_visible_message_2 = "to the residential district."
|
||||
|
||||
/obj/machinery/cryopod/robot/door/travel
|
||||
name = "Passenger Elevator"
|
||||
|
||||
@@ -556,7 +556,7 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/attack_ai(mob/user as mob)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
|
||||
data["main_power_loss"] = round(main_power_lost_until > 0 ? max(main_power_lost_until - world.time, 0) / 10 : main_power_lost_until, 1)
|
||||
@@ -576,7 +576,7 @@ About the new airlock wires panel:
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls", 450, 350)
|
||||
ui = new(user, src, ui_key, "door_control.tmpl", "Door Controls", 450, 350, state = state)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
@@ -671,13 +671,10 @@ About the new airlock wires panel:
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/CanUseTopic(var/mob/user)
|
||||
if(issilicon(user))
|
||||
return STATUS_CLOSE
|
||||
|
||||
if(operating < 0) //emagged
|
||||
user << "<span class='warning'>Unable to interface: Internal error.</span>"
|
||||
return STATUS_CLOSE
|
||||
if(!src.canAIControl())
|
||||
if(issilicon(user) && !src.canAIControl())
|
||||
if(src.canAIHack(user))
|
||||
src.hack(user)
|
||||
else
|
||||
|
||||
@@ -19,6 +19,9 @@ var/list/floor_light_cache = list()
|
||||
var/default_light_power = 2
|
||||
var/default_light_colour = "#FFFFFF"
|
||||
|
||||
/obj/machinery/floor_light/prebuilt
|
||||
anchored = 1
|
||||
|
||||
/obj/machinery/floor_light/attackby(var/obj/item/W, var/mob/user)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
anchored = !anchored
|
||||
|
||||
@@ -990,7 +990,7 @@
|
||||
if(helmet)
|
||||
helmet.name = "engineering voidsuit helmet"
|
||||
helmet.icon_state = "rig0-engineering"
|
||||
helmet.item_state = "eng_helm"
|
||||
helmet.item_state = "rig0-engineering"
|
||||
if(suit)
|
||||
suit.name = "engineering voidsuit"
|
||||
suit.icon_state = "rig-engineering"
|
||||
@@ -999,7 +999,7 @@
|
||||
if(helmet)
|
||||
helmet.name = "mining voidsuit helmet"
|
||||
helmet.icon_state = "rig0-mining"
|
||||
helmet.item_state = "mining_helm"
|
||||
helmet.item_state = "rig0-mining"
|
||||
if(suit)
|
||||
suit.name = "mining voidsuit"
|
||||
suit.icon_state = "rig-mining"
|
||||
@@ -1008,7 +1008,7 @@
|
||||
if(helmet)
|
||||
helmet.name = "medical voidsuit helmet"
|
||||
helmet.icon_state = "rig0-medical"
|
||||
helmet.item_state = "medical_helm"
|
||||
helmet.item_state = "rig0-medical"
|
||||
if(suit)
|
||||
suit.name = "medical voidsuit"
|
||||
suit.icon_state = "rig-medical"
|
||||
@@ -1017,7 +1017,7 @@
|
||||
if(helmet)
|
||||
helmet.name = "security voidsuit helmet"
|
||||
helmet.icon_state = "rig0-sec"
|
||||
helmet.item_state = "sec_helm"
|
||||
helmet.item_state = "rig0-sec"
|
||||
if(suit)
|
||||
suit.name = "security voidsuit"
|
||||
suit.icon_state = "rig-sec"
|
||||
@@ -1026,7 +1026,7 @@
|
||||
if(helmet)
|
||||
helmet.name = "atmospherics voidsuit helmet"
|
||||
helmet.icon_state = "rig0-atmos"
|
||||
helmet.item_state = "atmos_helm"
|
||||
helmet.item_state = "rig0-atmos"
|
||||
if(suit)
|
||||
suit.name = "atmospherics voidsuit"
|
||||
suit.icon_state = "rig-atmos"
|
||||
@@ -1035,7 +1035,7 @@
|
||||
if(helmet)
|
||||
helmet.name = "blood-red voidsuit helmet"
|
||||
helmet.icon_state = "rig0-syndie"
|
||||
helmet.item_state = "syndie_helm"
|
||||
helmet.item_state = "rig0-syndie"
|
||||
if(suit)
|
||||
suit.name = "blood-red voidsuit"
|
||||
suit.item_state = "syndie_voidsuit"
|
||||
|
||||
@@ -767,12 +767,20 @@
|
||||
name = "Cigarette machine" //OCD had to be uppercase to look nice with the new formating
|
||||
desc = "If you want to get cancer, might as well do it in style!"
|
||||
product_slogans = "Space cigs taste good like a cigarette should.;I'd rather toolbox than switch.;Smoke!;Don't believe the reports - smoke today!"
|
||||
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs."
|
||||
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs.;Feeling temperamental? Try a Temperamento!;Carcinoma Angels - go fuck yerself!;Don't be so hard on yourself, kid. Smoke a Lucky Star!"
|
||||
vend_delay = 34
|
||||
icon_state = "cigs"
|
||||
products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,/obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/flame/lighter/random = 4)
|
||||
products = list(/obj/item/weapon/storage/fancy/cigarettes = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/luckystars = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/menthols = 5,
|
||||
/obj/item/weapon/storage/box/matches = 10,
|
||||
/obj/item/weapon/flame/lighter/random = 4)
|
||||
contraband = list(/obj/item/weapon/flame/lighter/zippo = 4)
|
||||
premium = list(/obj/item/weapon/storage/fancy/cigar = 5,/obj/item/weapon/storage/fancy/cigarettes/killthroat = 5 )
|
||||
premium = list(/obj/item/weapon/storage/fancy/cigar = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/carcinomas = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/professionals = 5,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/killthroat = 5)
|
||||
prices = list(/obj/item/weapon/storage/fancy/cigarettes = 15,/obj/item/weapon/storage/box/matches = 1,/obj/item/weapon/flame/lighter/random = 2)
|
||||
|
||||
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
if(do_after_cooldown(target))
|
||||
if(disabled) return
|
||||
chassis.spark_system.start()
|
||||
target:ChangeTurf(get_base_turf(target.z))
|
||||
target:ChangeTurf(get_base_turf_by_area(target))
|
||||
playsound(target, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
chassis.use_power(energy_drain)
|
||||
else if (istype(target, /obj/machinery/door/airlock))
|
||||
@@ -297,7 +297,7 @@
|
||||
playsound(target, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
chassis.use_power(energy_drain)
|
||||
if(1)
|
||||
if(istype(target, /turf/space) || istype(target,get_base_turf(target.z)))
|
||||
if(istype(target, /turf/space) || istype(target,get_base_turf_by_area(target)))
|
||||
occupant_message("Building Floor...")
|
||||
set_ready_state(0)
|
||||
if(do_after_cooldown(target))
|
||||
|
||||
@@ -33,10 +33,12 @@
|
||||
|
||||
/obj/item/device/radio/intercom/department/medbay
|
||||
name = "station intercom (Medbay)"
|
||||
icon_state = "secintercom"
|
||||
frequency = MED_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/department/security
|
||||
name = "station intercom (Security)"
|
||||
icon_state = "medintercom"
|
||||
frequency = SEC_I_FREQ
|
||||
|
||||
/obj/item/device/radio/intercom/New()
|
||||
@@ -110,7 +112,7 @@
|
||||
if(!on)
|
||||
icon_state = "intercom-p"
|
||||
else
|
||||
icon_state = "intercom"
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/device/radio/intercom/locked
|
||||
var/locked_frequency
|
||||
|
||||
@@ -137,6 +137,7 @@
|
||||
if (istype(O, /obj/item/stack))
|
||||
var/obj/item/stack/S = O
|
||||
S.amount = produced
|
||||
S.add_to_stacks(user)
|
||||
|
||||
if (istype(O, /obj/item/weapon/storage)) //BubbleWrap - so newly formed boxes are empty
|
||||
for (var/obj/item/I in O)
|
||||
@@ -284,13 +285,13 @@
|
||||
return
|
||||
return max_amount
|
||||
|
||||
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
|
||||
for (var/obj/item/stack/item in usr.loc)
|
||||
/obj/item/stack/proc/add_to_stacks(mob/user as mob)
|
||||
for (var/obj/item/stack/item in user.loc)
|
||||
if (item==src)
|
||||
continue
|
||||
var/transfer = src.transfer_to(item)
|
||||
if (transfer)
|
||||
usr << "You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s."
|
||||
user << "<span class='notice'>You add a new [item.singular_name] to the stack. It now contains [item.amount] [item.singular_name]\s.</span>"
|
||||
if(!amount)
|
||||
break
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
build_delay = 50
|
||||
build_type = "airlock"
|
||||
build_other = /obj/machinery/door/airlock
|
||||
else if(!deconstruct && (istype(T,/turf/space) || istype(T,get_base_turf(T.z))))
|
||||
else if(!deconstruct && (istype(T,/turf/space) || istype(T,get_base_turf_by_area(T))))
|
||||
build_cost = 1
|
||||
build_type = "floor"
|
||||
build_turf = /turf/simulated/floor/airless
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
var/global/list/syndicate_ids = list()
|
||||
var/list/syndicate_ids = list()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate
|
||||
name = "agent card"
|
||||
@@ -9,8 +9,8 @@ var/global/list/syndicate_ids = list()
|
||||
var/registered_user = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
|
||||
syndicate_ids += src
|
||||
..()
|
||||
syndicate_ids += src
|
||||
access = syndicate_access.Copy()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||
|
||||
@@ -681,13 +681,3 @@
|
||||
max_storage_space = 21
|
||||
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
|
||||
|
||||
/obj/item/weapon/storage/box/fcard //Serves as a replacement to the fcard holder.
|
||||
name = "finger-print card box"
|
||||
desc = "Holds fingerprint cards."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "box"
|
||||
item_state = "syringe_kit"
|
||||
storage_slots=21
|
||||
max_w_class = 1
|
||||
can_hold = list(/obj/item/weapon/f_card)
|
||||
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
* .. Sorry for the shitty path name, I couldnt think of a better one.
|
||||
*
|
||||
* WARNING: var/icon_type is used for both examine text and sprite name. Please look at the procs below and adjust your sprite names accordingly
|
||||
* TODO: Cigarette boxes should be ported to this standard
|
||||
*
|
||||
* Contains:
|
||||
* Donut Box
|
||||
@@ -127,8 +126,8 @@
|
||||
//CIG PACK//
|
||||
////////////
|
||||
/obj/item/weapon/storage/fancy/cigarettes
|
||||
name = "cigarette packet"
|
||||
desc = "The most popular brand of Space Cigarettes, sponsors of the Space Olympics."
|
||||
name = "\improper pack of Trans-Stellar Duty-frees"
|
||||
desc = "A ubiquitous brand of cigarettes, found in every major spacefaring corporation in the universe. As mild and flavorless as it gets."
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "cigpacket"
|
||||
item_state = "cigpacket"
|
||||
@@ -187,6 +186,38 @@
|
||||
..()
|
||||
fill_cigarre_package(src,list("fuel" = 15))
|
||||
|
||||
// New exciting ways to kill your lungs! - Earthcrusher //
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/luckystars
|
||||
name = "\improper pack of Lucky Stars"
|
||||
desc = "A mellow blend made from synthetic, pod-grown tobacco. The commercial jingle is guaranteed to get stuck in your head."
|
||||
icon_state = "LSpacket"
|
||||
item_state = "Dpacket" //I actually don't mind cig packs not showing up in the hand. whotf doesn't just keep them in their pockets/coats //
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/jerichos
|
||||
name = "\improper pack of Jerichos"
|
||||
desc = "Typically seen dangling from the lips of Martian soldiers and border world hustlers. Tastes like hickory smoke, feels like warm liquid death down your lungs."
|
||||
icon_state = "Jpacket"
|
||||
item_state = "Dpacket"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/menthols
|
||||
name = "\improper pack of Temperamento Menthols"
|
||||
desc = "With a sharp and natural organic menthol flavor, these Temperamentos are a favorite of NDV crews. Hardly anyone knows they make 'em in non-menthol!"
|
||||
icon_state = "TMpacket"
|
||||
item_state = "Dpacket"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/carcinomas
|
||||
name = "\improper pack of Carcinoma Angels"
|
||||
desc = "This unknown brand was slated for the chopping block, until they were publicly endorsed by an old Earthling gonzo journalist. The rest is history. They sell a variety for cats, too."
|
||||
icon_state = "CApacket"
|
||||
item_state = "Dpacket"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigarettes/professionals
|
||||
name = "\improper pack of Professional 120s"
|
||||
desc = "Let's face it - if you're smoking these, you're either trying to look upper-class or you're 80 years old. That's the only excuse. They taste disgusting, too."
|
||||
icon_state = "P100packet"
|
||||
item_state = "Dpacket"
|
||||
|
||||
/obj/item/weapon/storage/fancy/cigar
|
||||
name = "cigar case"
|
||||
desc = "A case for holding your cigars when you are not smoking them."
|
||||
|
||||
@@ -78,20 +78,19 @@
|
||||
//armour
|
||||
var/blocked = L.run_armor_check(target_zone, "melee")
|
||||
|
||||
if(blocked >= 2)
|
||||
if(blocked >= 100)
|
||||
return
|
||||
|
||||
if(!L.apply_damage(30, BRUTE, target_zone, blocked, used_weapon=src))
|
||||
return 0
|
||||
|
||||
//trap the victim in place
|
||||
if(!blocked)
|
||||
set_dir(L.dir)
|
||||
can_buckle = 1
|
||||
buckle_mob(L)
|
||||
L << "<span class='danger'>The steel jaws of \the [src] bite into you, trapping you in place!</span>"
|
||||
deployed = 0
|
||||
can_buckle = initial(can_buckle)
|
||||
set_dir(L.dir)
|
||||
can_buckle = 1
|
||||
buckle_mob(L)
|
||||
L << "<span class='danger'>The steel jaws of \the [src] bite into you, trapping you in place!</span>"
|
||||
deployed = 0
|
||||
can_buckle = initial(can_buckle)
|
||||
|
||||
/obj/item/weapon/beartrap/Crossed(AM as mob|obj)
|
||||
if(deployed && isliving(AM))
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
return STATUS_CLOSE
|
||||
|
||||
/mob/living/silicon/CanUseObjTopic(var/obj/O)
|
||||
return O.allowed(src)
|
||||
var/id = src.GetIdCard()
|
||||
return O.check_access(id)
|
||||
|
||||
/mob/proc/CanUseObjTopic()
|
||||
return 1
|
||||
|
||||
@@ -21,7 +21,12 @@
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
//..() //That's very useful, Erro
|
||||
|
||||
var/hasaxe = 0 //gonna come in handy later~
|
||||
// This could stand to be put further in, made better, etc. but fuck you. Fuck whoever
|
||||
// wrote this code. Fuck everything about this object. I hope you step on a Lego.
|
||||
user.setClickCooldown(10)
|
||||
// Seriously why the fuck is this even a closet aghasjdhasd I hate you
|
||||
|
||||
var/hasaxe = 0 //gonna come in handy later~ // FUCK YOUR TILDES.
|
||||
if(fireaxe)
|
||||
hasaxe = 1
|
||||
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
new /obj/item/clothing/head/that(src)
|
||||
new /obj/item/device/radio/headset/headset_service(src)
|
||||
new /obj/item/device/radio/headset/headset_service(src)
|
||||
new /obj/item/clothing/head/hairflower
|
||||
new /obj/item/clothing/head/hairflower/pink
|
||||
new /obj/item/clothing/head/hairflower/yellow
|
||||
new /obj/item/clothing/head/hairflower/blue
|
||||
new /obj/item/clothing/head/hairflower(src)
|
||||
new /obj/item/clothing/head/hairflower/pink(src)
|
||||
new /obj/item/clothing/head/hairflower/yellow(src)
|
||||
new /obj/item/clothing/head/hairflower/blue(src)
|
||||
new /obj/item/clothing/under/sl_suit(src)
|
||||
new /obj/item/clothing/under/sl_suit(src)
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
else
|
||||
togglelock(user)
|
||||
|
||||
/obj/structure/closet/secure_closet/attack_hand(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
|
||||
/obj/structure/closet/secure_closet/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
|
||||
if(!broken)
|
||||
broken = 1
|
||||
locked = 0
|
||||
|
||||
@@ -110,13 +110,13 @@
|
||||
new /obj/item/weapon/storage/backpack/satchel_sec(src)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
|
||||
new /obj/item/clothing/head/HoS(src)
|
||||
new /obj/item/clothing/head/helmet/HoS(src)
|
||||
new /obj/item/clothing/suit/storage/vest/hos(src)
|
||||
new /obj/item/clothing/under/rank/head_of_security/jensen(src)
|
||||
new /obj/item/clothing/under/rank/head_of_security/corp(src)
|
||||
new /obj/item/clothing/suit/armor/hos/jensen(src)
|
||||
new /obj/item/clothing/suit/armor/hos(src)
|
||||
new /obj/item/clothing/head/HoS/dermal(src)
|
||||
new /obj/item/clothing/head/helmet/HoS/dermal(src)
|
||||
new /obj/item/weapon/cartridge/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos/alt(src)
|
||||
@@ -161,7 +161,7 @@
|
||||
new /obj/item/clothing/under/rank/warden/corp(src)
|
||||
new /obj/item/clothing/suit/armor/vest/warden(src)
|
||||
new /obj/item/clothing/suit/armor/vest/warden/alt(src)
|
||||
new /obj/item/clothing/head/warden(src)
|
||||
new /obj/item/clothing/head/helmet/warden(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
/obj/structure/closet/secure_closet/security
|
||||
name = "security officer's locker"
|
||||
req_access = list(access_security)
|
||||
req_access = list(access_brig)
|
||||
icon_state = "sec1"
|
||||
icon_closed = "sec"
|
||||
icon_locked = "sec1"
|
||||
@@ -199,7 +199,7 @@
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
|
||||
new /obj/item/clothing/suit/storage/vest/officer(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
// new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
@@ -268,6 +268,8 @@
|
||||
new /obj/item/clothing/under/det(src)
|
||||
new /obj/item/clothing/under/det/grey(src)
|
||||
new /obj/item/clothing/under/det/black(src)
|
||||
new /obj/item/clothing/under/det/waistcoat(src)
|
||||
new /obj/item/clothing/under/det/grey/waistcoat(src)
|
||||
new /obj/item/clothing/suit/storage/det_trench(src)
|
||||
new /obj/item/clothing/suit/storage/det_trench/grey(src)
|
||||
new /obj/item/clothing/suit/storage/forensics/blue(src)
|
||||
@@ -278,6 +280,7 @@
|
||||
new /obj/item/clothing/shoes/laceup(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
||||
new /obj/item/device/detective_scanner(src)
|
||||
new /obj/item/clothing/suit/storage/vest/detective(src)
|
||||
new /obj/item/ammo_magazine/c45m/rubber(src)
|
||||
|
||||
@@ -152,9 +152,12 @@
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/green(src)
|
||||
new /obj/item/clothing/shoes/green(src)
|
||||
new /obj/item/clothing/shoes/green(src)
|
||||
new /obj/item/clothing/head/soft/green(src)
|
||||
new /obj/item/clothing/head/soft/green(src)
|
||||
new /obj/item/clothing/head/soft/green(src)
|
||||
new /obj/item/clothing/mask/bandana/green(src)
|
||||
new /obj/item/clothing/mask/bandana/green(src)
|
||||
new /obj/item/clothing/mask/bandana/green(src)
|
||||
@@ -206,9 +209,12 @@
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/yellow(src)
|
||||
new /obj/item/clothing/shoes/yellow(src)
|
||||
new /obj/item/clothing/shoes/yellow(src)
|
||||
new /obj/item/clothing/head/soft/yellow(src)
|
||||
new /obj/item/clothing/head/soft/yellow(src)
|
||||
new /obj/item/clothing/head/soft/yellow(src)
|
||||
new /obj/item/clothing/mask/bandana/gold(src)
|
||||
new /obj/item/clothing/mask/bandana/gold(src)
|
||||
new /obj/item/clothing/mask/bandana/gold(src)
|
||||
@@ -481,7 +487,6 @@
|
||||
new /obj/item/clothing/under/color/blue(src)
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/color/pink(src)
|
||||
new /obj/item/clothing/under/dress/plaid_blue(src)
|
||||
new /obj/item/clothing/under/dress/plaid_red(src)
|
||||
@@ -489,7 +494,6 @@
|
||||
new /obj/item/clothing/shoes/blue(src)
|
||||
new /obj/item/clothing/shoes/yellow(src)
|
||||
new /obj/item/clothing/shoes/green(src)
|
||||
new /obj/item/clothing/shoes/orange(src)
|
||||
new /obj/item/clothing/shoes/purple(src)
|
||||
new /obj/item/clothing/shoes/red(src)
|
||||
new /obj/item/clothing/shoes/leather(src)
|
||||
|
||||
@@ -39,6 +39,7 @@ var/list/floor_decals = list()
|
||||
if(T.decals && T.decals.len)
|
||||
T.decals.Cut()
|
||||
T.update_icon()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/effect/floor_decal/corner
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
//set src in oview(1)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
src.ChangeTurf(get_base_turf_by_area(src))
|
||||
if(2.0)
|
||||
switch(pick(40;1,40;2,3))
|
||||
if (1)
|
||||
if(prob(33)) new /obj/item/stack/material/steel(src)
|
||||
src.ReplaceWithLattice()
|
||||
if(2)
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
src.ChangeTurf(get_base_turf_by_area(src))
|
||||
if(3)
|
||||
if(prob(33)) new /obj/item/stack/material/steel(src)
|
||||
if(prob(80))
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
density = 0
|
||||
update_icon()
|
||||
set_light(0)
|
||||
src.blocks_air = 0
|
||||
src.opacity = 0
|
||||
for(var/turf/simulated/turf in loc)
|
||||
air_master.mark_for_update(turf)
|
||||
else
|
||||
can_open = WALL_OPENING
|
||||
//flick("[material.icon_base]fwall_closing", src)
|
||||
@@ -18,6 +22,10 @@
|
||||
update_icon()
|
||||
sleep(15)
|
||||
set_light(1)
|
||||
src.blocks_air = 1
|
||||
src.opacity = 1
|
||||
for(var/turf/simulated/turf in loc)
|
||||
air_master.mark_for_update(turf)
|
||||
|
||||
can_open = WALL_CAN_OPEN
|
||||
update_icon()
|
||||
@@ -313,3 +321,4 @@
|
||||
else if(!istype(W,/obj/item/weapon/rcd) && !istype(W, /obj/item/weapon/reagent_containers))
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ var/const/enterloopsanity = 100
|
||||
..()
|
||||
var/objects = 0
|
||||
if(A && (A.flags & PROXMOVE))
|
||||
for(var/atom/thing as mob|obj|turf|area in range(1))
|
||||
for(var/atom/movable/thing in range(1))
|
||||
if(objects > enterloopsanity) break
|
||||
objects++
|
||||
spawn(0)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/turf/proc/ReplaceWithLattice()
|
||||
src.ChangeTurf(get_base_turf(src.z))
|
||||
src.ChangeTurf(get_base_turf_by_area(src))
|
||||
spawn()
|
||||
new /obj/structure/lattice( locate(src.x, src.y, src.z) )
|
||||
|
||||
|
||||
@@ -8,14 +8,14 @@ var/global/floorIsLava = 0
|
||||
msg = "<span class=\"log_message\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
log_adminwarn(msg)
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN||R_MOD) & C.holder.rights)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
/proc/msg_admin_attack(var/text) //Toggleable Attack Messages
|
||||
log_attack(text)
|
||||
var/rendered = "<span class=\"log_message\"><span class=\"prefix\">ATTACK:</span> <span class=\"message\">[text]</span></span>"
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN||R_MOD) & C.holder.rights)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
if(C.prefs.toggles & CHAT_ATTACKLOGS)
|
||||
var/msg = rendered
|
||||
C << msg
|
||||
|
||||
@@ -293,6 +293,7 @@ var/list/admin_verbs_mod = list(
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
|
||||
/client/proc/cmd_mod_say,
|
||||
/client/proc/toggleattacklogs,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/player_panel_new,
|
||||
/client/proc/dsay,
|
||||
|
||||
@@ -1190,7 +1190,7 @@
|
||||
check_antagonists()
|
||||
|
||||
else if(href_list["adminplayerobservecoodjump"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
if(!check_rights(R_ADMIN|R_SERVER|R_MOD)) return
|
||||
|
||||
var/x = text2num(href_list["X"])
|
||||
var/y = text2num(href_list["Y"])
|
||||
|
||||
@@ -187,13 +187,10 @@
|
||||
return
|
||||
|
||||
/obj/effect/beam/i_beam/process()
|
||||
//world << "i_beam \ref[src] : process"
|
||||
|
||||
if((loc.density || !(master)))
|
||||
// world << "beam hit loc [loc] or no master [master], deleting"
|
||||
if((loc && loc.density) || !master)
|
||||
qdel(src)
|
||||
return
|
||||
//world << "proccess: [src.left] left"
|
||||
|
||||
if(left > 0)
|
||||
left--
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
|
||||
|
||||
HasProximity(atom/movable/AM as mob|obj)
|
||||
if(!istype(AM))
|
||||
log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).")
|
||||
return
|
||||
if (istype(AM, /obj/effect/beam)) return
|
||||
if (AM.move_speed < 12) sense()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
/client/New()
|
||||
..()
|
||||
dir = NORTH
|
||||
|
||||
/client/verb/spinleft()
|
||||
set name = "Spin View CCW"
|
||||
set category = "OOC"
|
||||
dir = turn(dir, 90)
|
||||
|
||||
/client/verb/spinright()
|
||||
set name = "Spin View CW"
|
||||
set category = "OOC"
|
||||
dir = turn(dir, -90)
|
||||
|
||||
@@ -453,84 +453,98 @@ var/global/list/gear_datums = list()
|
||||
path = /obj/item/clothing/under/rank/chief_engineer/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Chief Engineer")
|
||||
|
||||
/datum/gear/skirt_atmos
|
||||
display_name = "skirt, atmos"
|
||||
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician")
|
||||
|
||||
/datum/gear/skirt_eng
|
||||
display_name = "skirt, engineer"
|
||||
path = /obj/item/clothing/under/rank/engineer/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Chief Engineer","Station Engineer")
|
||||
|
||||
/datum/gear/skirt_cmo
|
||||
display_name = "skirt, cmo"
|
||||
path = /obj/item/clothing/under/rank/chief_medical_officer
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/skirt_chem
|
||||
display_name = "skirt, chemist"
|
||||
path = /obj/item/clothing/under/rank/chemist/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Chief Medical Officer","Chemist")
|
||||
|
||||
/datum/gear/skirt_viro
|
||||
display_name = "skirt, virologist"
|
||||
path = /obj/item/clothing/under/rank/virologist/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor")
|
||||
|
||||
/datum/gear/skirt_med
|
||||
display_name = "skirt, medical"
|
||||
path = /obj/item/clothing/under/rank/medical/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Paramedic")
|
||||
|
||||
/datum/gear/skirt_sci
|
||||
display_name = "skirt, scientist"
|
||||
path = /obj/item/clothing/under/rank/scientist/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Research Director","Scientist")
|
||||
|
||||
/datum/gear/skirt_qm
|
||||
display_name = "skirt, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/jeans_qm
|
||||
display_name = "jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/jeans_qmf
|
||||
display_name = "female jeans, QM"
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans/female
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/skirt_cargo
|
||||
display_name = "skirt, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/skirt
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/jeans_cargo
|
||||
display_name = "jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/jeans_cargof
|
||||
display_name = "female jeans, cargo"
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans/female
|
||||
slot = slot_w_uniform
|
||||
cost = 1
|
||||
allowed_roles = list("Quartermaster","Cargo Technician")
|
||||
|
||||
/datum/gear/classicjeans
|
||||
display_name = "pants, classic jeans"
|
||||
@@ -1240,6 +1254,20 @@ var/global/list/gear_datums = list()
|
||||
slot = slot_wear_suit
|
||||
whitelisted = "Tajara" // You do have a monopoly on a fur suit tho
|
||||
|
||||
/datum/gear/forensics/red
|
||||
display_name = "forensics, red"
|
||||
path = /obj/item/clothing/suit/storage/forensics/red/long
|
||||
cost = 2
|
||||
slot = slot_wear_suit
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/forensics/blue
|
||||
display_name = "forensics, blue"
|
||||
path = /obj/item/clothing/suit/storage/forensics/blue/long
|
||||
cost = 2
|
||||
slot = slot_wear_suit
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
// Gloves
|
||||
|
||||
/datum/gear/black_gloves
|
||||
@@ -1419,6 +1447,49 @@ var/global/list/gear_datums = list()
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/flats_black
|
||||
display_name = "flats, black"
|
||||
path = /obj/item/clothing/shoes/flats
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/flats_blue
|
||||
display_name = "flats, blue"
|
||||
path = /obj/item/clothing/shoes/flats/blue
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/flats_brown
|
||||
display_name = "flats, brown"
|
||||
path = /obj/item/clothing/shoes/flats/brown
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/flats_orange
|
||||
display_name = "flats, orange"
|
||||
path = /obj/item/clothing/shoes/flats/orange
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/flats_purple
|
||||
display_name = "flats, purple"
|
||||
path = /obj/item/clothing/shoes/flats/purple
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/flats_red
|
||||
display_name = "flats, red"
|
||||
path = /obj/item/clothing/shoes/flats/red
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
/datum/gear/flats_white
|
||||
display_name = "flats, white"
|
||||
path = /obj/item/clothing/shoes/flats/white
|
||||
cost = 1
|
||||
slot = slot_shoes
|
||||
|
||||
|
||||
// "Useful" items - I'm guessing things that might be used at work?
|
||||
|
||||
/datum/gear/briefcase
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/clothing/head/helmet
|
||||
name = "helmet"
|
||||
desc = "Standard Security gear. Protects the head from impacts. This one has a adjustable visor."
|
||||
desc = "Standard Security gear. Protects the head from impacts."
|
||||
icon_state = "helmet"
|
||||
item_state_slots = list(
|
||||
slot_l_hand_str = "helmet",
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
heat_protection = FEET
|
||||
max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/brown
|
||||
name = "brown shoes"
|
||||
desc = "A pair of brown shoes."
|
||||
@@ -53,6 +54,41 @@
|
||||
desc = "Very gay shoes."
|
||||
icon_state = "rain_bow"
|
||||
|
||||
/obj/item/clothing/shoes/flats
|
||||
name = "black flats"
|
||||
desc = "Sleek black flats."
|
||||
icon_state = "flatsblack"
|
||||
|
||||
/obj/item/clothing/shoes/flats/white
|
||||
name = "white flats"
|
||||
desc = "Shiny white flats."
|
||||
icon_state = "flatswhite"
|
||||
|
||||
/obj/item/clothing/shoes/flats/red
|
||||
name = "red flats"
|
||||
desc = "Ruby red flats."
|
||||
icon_state = "flatsred"
|
||||
|
||||
/obj/item/clothing/shoes/flats/purple
|
||||
name = "purple flats"
|
||||
desc = "Royal purple flats."
|
||||
icon_state = "flatspurple"
|
||||
|
||||
/obj/item/clothing/shoes/flats/blue
|
||||
name = "blue flats"
|
||||
desc = "Sleek blue flats."
|
||||
icon_state = "flatsblue"
|
||||
|
||||
/obj/item/clothing/shoes/flats/brown
|
||||
name = "brown flats"
|
||||
desc = "Sleek brown flats."
|
||||
icon_state = "flatsbrown"
|
||||
|
||||
/obj/item/clothing/shoes/flats/orange
|
||||
name = "orange flats"
|
||||
desc = "Radiant orange flats."
|
||||
icon_state = "flatsorange"
|
||||
|
||||
/obj/item/clothing/shoes/orange
|
||||
name = "orange shoes"
|
||||
icon_state = "orange"
|
||||
|
||||
@@ -169,6 +169,10 @@
|
||||
|
||||
interface_name = "dead man's switch"
|
||||
interface_desc = "An integrated self-destruct module. When the wearer dies, so does the surrounding area. Do not press this button."
|
||||
var/list/explosion_values = list(1,2,4,5)
|
||||
|
||||
/obj/item/rig_module/self_destruct/small
|
||||
explosion_values = list(0,0,3,4)
|
||||
|
||||
/obj/item/rig_module/self_destruct/activate()
|
||||
return
|
||||
@@ -184,17 +188,12 @@
|
||||
|
||||
//OH SHIT.
|
||||
if(holder.wearer.stat == 2)
|
||||
engage()
|
||||
engage(1)
|
||||
|
||||
/obj/item/rig_module/self_destruct/engage()
|
||||
explosion(get_turf(src), 1, 2, 4, 5)
|
||||
if(holder && holder.wearer)
|
||||
holder.wearer.drop_from_inventory(src)
|
||||
qdel(holder)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/rig_module/self_destruct/small/engage()
|
||||
explosion(get_turf(src), 0, 0, 3, 4)
|
||||
/obj/item/rig_module/self_destruct/engage(var/skip_check)
|
||||
if(!skip_check && usr && alert(usr, "Are you sure you want to push that button?", "Self-destruct", "No", "Yes") == "No")
|
||||
return
|
||||
explosion(get_turf(src), explosion_values[1], explosion_values[2], explosion_values[3], explosion_values[4])
|
||||
if(holder && holder.wearer)
|
||||
holder.wearer.drop_from_inventory(src)
|
||||
qdel(holder)
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
if(piece.loc != src && !(wearer && piece.loc == wearer))
|
||||
if(istype(piece.loc, /mob/living))
|
||||
M = piece.loc
|
||||
M.drop_from_inventory(piece)
|
||||
M.unEquip(piece)
|
||||
piece.forceMove(src)
|
||||
|
||||
if(!istype(wearer) || loc != wearer || wearer.back != src || canremove || !cell || cell.charge <= 0)
|
||||
@@ -560,8 +560,8 @@
|
||||
M.visible_message("<font color='blue'>[M] starts putting on \the [src]...</font>", "<font color='blue'>You start putting on \the [src]...</font>")
|
||||
if(!do_after(M,seal_delay))
|
||||
if(M && M.back == src)
|
||||
M.back = null
|
||||
M.drop_from_inventory(src)
|
||||
if(!M.unEquip(src))
|
||||
return
|
||||
src.forceMove(get_turf(src))
|
||||
return
|
||||
|
||||
@@ -632,12 +632,9 @@
|
||||
use_obj.forceMove(src)
|
||||
if(check_slot)
|
||||
H << "<span class='danger'>You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.</span>"
|
||||
return
|
||||
else
|
||||
use_obj.forceMove(H)
|
||||
if(!H.equip_to_slot_if_possible(use_obj, equip_to, 0))
|
||||
use_obj.forceMove(src)
|
||||
else
|
||||
H << "<span class='notice'>Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.</span>"
|
||||
H << "<span class='notice'>Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.</span>"
|
||||
|
||||
if(piece == "helmet" && helmet)
|
||||
helmet.update_light(H)
|
||||
@@ -683,7 +680,8 @@
|
||||
..()
|
||||
for(var/piece in list("helmet","gauntlets","chest","boots"))
|
||||
toggle_piece(piece, user, ONLY_RETRACT)
|
||||
wearer.wearing_rig = null
|
||||
if(wearer && wearer.wearing_rig == src)
|
||||
wearer.wearing_rig = null
|
||||
wearer = null
|
||||
|
||||
//Todo
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
user << "\The [src] already has a tank installed."
|
||||
return
|
||||
|
||||
user.drop_from_inventory(W)
|
||||
if(!user.unEquip(W)) return
|
||||
air_supply = W
|
||||
W.forceMove(src)
|
||||
user << "You slot [W] into [src] and tighten the connecting valve."
|
||||
@@ -84,8 +84,8 @@
|
||||
return
|
||||
if(!user || !W)
|
||||
return
|
||||
if(!user.unEquip(mod)) return
|
||||
user << "You install \the [mod] into \the [src]."
|
||||
user.drop_from_inventory(mod)
|
||||
installed_modules |= mod
|
||||
mod.forceMove(src)
|
||||
mod.installed(src)
|
||||
@@ -94,8 +94,8 @@
|
||||
|
||||
else if(!cell && istype(W,/obj/item/weapon/cell))
|
||||
|
||||
if(!user.unEquip(W)) return
|
||||
user << "You jack \the [W] into \the [src]'s battery mount."
|
||||
user.drop_from_inventory(W)
|
||||
W.forceMove(src)
|
||||
src.cell = W
|
||||
return
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space
|
||||
name = "Space suit"
|
||||
desc = "A suit that protects against low pressure environments. \"NSS EXODUS\" is written in large block letters on the back."
|
||||
desc = "A suit that protects against low pressure environments. \"NORTHERN STAR\" is written in large block letters on the back."
|
||||
icon_state = "space"
|
||||
item_state = "s_suit"
|
||||
w_class = 4//bulky item
|
||||
|
||||
@@ -22,11 +22,13 @@
|
||||
//Green syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/green
|
||||
name = "green space helmet"
|
||||
desc = "A green helmet sporting clean lines and durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-green"
|
||||
item_state = "syndicate-helm-green"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/green
|
||||
name = "green space suit"
|
||||
desc = "A green spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-green"
|
||||
item_state = "syndicate-green"
|
||||
|
||||
@@ -34,11 +36,13 @@
|
||||
//Dark green syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/green/dark
|
||||
name = "dark green space helmet"
|
||||
desc = "A dark green helmet sporting clean lines and durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-green-dark"
|
||||
item_state = "syndicate-helm-green-dark"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/green/dark
|
||||
name = "dark green space suit"
|
||||
desc = "A dark green spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-green-dark"
|
||||
item_state = "syndicate-green-dark"
|
||||
|
||||
@@ -46,11 +50,13 @@
|
||||
//Orange syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/orange
|
||||
name = "orange space helmet"
|
||||
desc = "An orange helmet sporting clean lines and durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-orange"
|
||||
item_state = "syndicate-helm-orange"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/orange
|
||||
name = "orange space suit"
|
||||
desc = "An orange spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-orange"
|
||||
item_state = "syndicate-orange"
|
||||
|
||||
@@ -58,11 +64,13 @@
|
||||
//Blue syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/blue
|
||||
name = "blue space helmet"
|
||||
desc = "A blue helmet sporting clean lines and durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-blue"
|
||||
item_state = "syndicate-helm-blue"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/blue
|
||||
name = "blue space suit"
|
||||
desc = "A blue spacesuit sporting clean lines and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-blue"
|
||||
item_state = "syndicate-blue"
|
||||
|
||||
@@ -70,11 +78,13 @@
|
||||
//Black syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black
|
||||
name = "black space helmet"
|
||||
desc = "A black helmet sporting durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-black"
|
||||
item_state = "syndicate-helm-black"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black
|
||||
name = "black space suit"
|
||||
desc = "A black spacesuit sporting durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-black"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
@@ -82,11 +92,13 @@
|
||||
//Black-green syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/green
|
||||
name = "black and green space helmet"
|
||||
desc = "A black helmet sporting a single green stripe and durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-black-green"
|
||||
item_state = "syndicate-helm-black-green"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/green
|
||||
name = "black and green space suit"
|
||||
desc = "A black spacesuit sporting green stripes and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-black-green"
|
||||
item_state = "syndicate-black-green"
|
||||
|
||||
@@ -94,11 +106,13 @@
|
||||
//Black-blue syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/blue
|
||||
name = "black and blue space helmet"
|
||||
desc = "A black helmet sporting a single blue stripe and durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-black-blue"
|
||||
item_state = "syndicate-helm-black-blue"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/blue
|
||||
name = "black and blue space suit"
|
||||
desc = "A black spacesuit sporting blue stripes and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-black-blue"
|
||||
item_state = "syndicate-black-blue"
|
||||
|
||||
@@ -106,11 +120,13 @@
|
||||
//Black medical syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/med
|
||||
name = "black medical space helmet"
|
||||
desc = "A black helmet sporting a medical cross and durable plating. Hopefully the wearer abides by space geneva."
|
||||
icon_state = "syndicate-helm-black-med"
|
||||
item_state_slots = list(slot_head_str = "syndicate-black-med")
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/med
|
||||
name = "black medical space suit"
|
||||
desc = "A black spacesuit sporting a medical cross and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-black-med"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
@@ -123,6 +139,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/orange
|
||||
name = "black and orange space suit"
|
||||
desc = "A black spacesuit sporting orange stripes and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-black-orange"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
@@ -130,21 +147,25 @@
|
||||
//Black-red syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/red
|
||||
name = "black and red space helmet"
|
||||
desc = "A black helmet sporting a single red stripe and durable plating. Engineered to look menacing."
|
||||
icon_state = "syndicate-helm-black-red"
|
||||
item_state = "syndicate-helm-black-red"
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/red
|
||||
name = "black and red space suit"
|
||||
desc = "A black spacesuit sporting red stripes and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-black-red"
|
||||
item_state = "syndicate-black-red"
|
||||
|
||||
//Black with yellow/red engineering syndicate space suit
|
||||
/obj/item/clothing/head/helmet/space/syndicate/black/engie
|
||||
name = "black engineering space helmet"
|
||||
desc = "A black helmet sporting red and yellow stripes and durable plating. Engineered to look well... engineering-ish."
|
||||
icon_state = "syndicate-helm-black-engie"
|
||||
item_state_slots = list(slot_head_str = "syndicate-helm-black-engie")
|
||||
|
||||
/obj/item/clothing/suit/space/syndicate/black/engie
|
||||
name = "black engineering space suit"
|
||||
desc = "A black spacesuit sporting red and yellow stripes and durable plating. Robust, reliable, and slightly suspicious."
|
||||
icon_state = "syndicate-black-engie"
|
||||
item_state = "syndicate-black"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "blood-red voidsuit helmet"
|
||||
desc = "An advanced helmet designed for work in special operations. Property of Gorlex Marauders."
|
||||
icon_state = "rig0-syndie"
|
||||
item_state = "syndie_helm"
|
||||
item_state = "rig0-syndie"
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60)
|
||||
siemens_coefficient = 0.6
|
||||
species_restricted = list("Human")
|
||||
|
||||
@@ -117,11 +117,21 @@
|
||||
desc = "A red forensics technician jacket."
|
||||
icon_state = "forensics_red"
|
||||
|
||||
/obj/item/clothing/suit/storage/forensics/red/long
|
||||
name = "long red jacket"
|
||||
desc = "A long red forensics technician jacket."
|
||||
icon_state = "forensics_red_long"
|
||||
|
||||
/obj/item/clothing/suit/storage/forensics/blue
|
||||
name = "blue jacket"
|
||||
desc = "A blue forensics technician jacket."
|
||||
icon_state = "forensics_blue"
|
||||
|
||||
/obj/item/clothing/suit/storage/forensics/blue/long
|
||||
name = "long blue jacket"
|
||||
desc = "A long blue forensics technician jacket."
|
||||
icon_state = "forensics_blue_long"
|
||||
|
||||
//Engineering
|
||||
/obj/item/clothing/suit/storage/hazardvest
|
||||
name = "hazard vest"
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/head/warden
|
||||
/obj/item/clothing/head/helmet/warden
|
||||
name = "warden's hat"
|
||||
desc = "It's a special helmet issued to the Warden of a securiy force."
|
||||
icon_state = "policehelm"
|
||||
@@ -110,6 +110,16 @@
|
||||
worn_state = "det_corporate"
|
||||
desc = "A more modern uniform for corporate investigators."
|
||||
|
||||
/obj/item/clothing/under/det/waistcoat
|
||||
icon_state = "detective_waistcoat"
|
||||
worn_state = "detective_waistcoat"
|
||||
desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie, faux-gold tie clip, and waistcoat."
|
||||
|
||||
/obj/item/clothing/under/det/grey/waistcoat
|
||||
icon_state = "detective2_waistcoat"
|
||||
worn_state = "detective2_waistcoat"
|
||||
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
|
||||
|
||||
/obj/item/clothing/head/det
|
||||
name = "fedora"
|
||||
desc = "A brown fedora - either the cornerstone of a detective's style or a poor attempt at looking cool, depending on the person wearing it."
|
||||
@@ -145,14 +155,14 @@
|
||||
//item_state = "hos_corporate"
|
||||
worn_state = "hos_corporate"
|
||||
|
||||
/obj/item/clothing/head/HoS
|
||||
/obj/item/clothing/head/helmet/HoS
|
||||
name = "Head of Security Hat"
|
||||
desc = "The hat of the Head of Security. For showing the officers who's in charge."
|
||||
icon_state = "hoscap"
|
||||
body_parts_covered = 0
|
||||
siemens_coefficient = 0.8
|
||||
|
||||
/obj/item/clothing/head/HoS/dermal
|
||||
/obj/item/clothing/head/helmet/HoS/dermal
|
||||
name = "Dermal Armour Patch"
|
||||
desc = "You're not quite sure how you manage to take it on and off, but it implants nicely in your head."
|
||||
icon_state = "dermal"
|
||||
|
||||
@@ -8,7 +8,7 @@ var/list/weighted_mundaneevent_locations = list()
|
||||
var/distance = 0
|
||||
var/list/willing_to_buy = list()
|
||||
var/list/willing_to_sell = list()
|
||||
var/can_shuttle_here = 0 //one day crew from the exodus will be able to travel to this destination
|
||||
var/can_shuttle_here = 0 //one day crew from the Northern Star will be able to travel to this destination
|
||||
var/list/viable_random_events = list()
|
||||
var/list/temp_price_change[BIOMEDICAL]
|
||||
var/list/viable_mundane_events = list()
|
||||
|
||||
@@ -81,7 +81,7 @@ proc/populate_ghost_traps()
|
||||
target << "<b>You are a positronic brain, brought into existence on [station_name()].</b>"
|
||||
target << "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>"
|
||||
target << "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>"
|
||||
target << "<b>Use say :b to speak to other artificial intelligences.</b>"
|
||||
target << "<b>Use say #b to speak to other artificial intelligences.</b>"
|
||||
var/turf/T = get_turf(target)
|
||||
T.visible_message("<span class='notice'>\The [src] chimes quietly.</span>")
|
||||
var/obj/item/device/mmi/digital/posibrain/P = target.loc
|
||||
|
||||
@@ -65,9 +65,10 @@
|
||||
var/obj/item/stack/material/M = S
|
||||
if(!istype(M) || material.name != M.material.name)
|
||||
return 0
|
||||
..(S,tamount,1)
|
||||
var/transfer = ..(S,tamount,1)
|
||||
if(src) update_strings()
|
||||
if(M) M.update_strings()
|
||||
return transfer
|
||||
|
||||
/obj/item/stack/material/attack_self(var/mob/user)
|
||||
if(!material.build_windows(user, src))
|
||||
@@ -207,4 +208,4 @@
|
||||
desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods."
|
||||
singular_name = "reinforced borosilicate glass sheet"
|
||||
icon_state = "sheet-phoronrglass"
|
||||
default_type = "reinforced borosilicate glass"
|
||||
default_type = "reinforced borosilicate glass"
|
||||
|
||||
@@ -127,8 +127,6 @@ var/list/name_to_material
|
||||
var/obj/item/stack/S = new rod_product(get_turf(user))
|
||||
S.add_fingerprint(user)
|
||||
S.add_to_stacks(user)
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(S)
|
||||
|
||||
/material/proc/build_wired_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
|
||||
if(!wire_product)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/turf/T = loc
|
||||
var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
|
||||
if(L)
|
||||
light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 5 //hardcapped so it's not abused by having a ton of flashlights
|
||||
light_amount = 2 * (min(5,L.lum_r + L.lum_g + L.lum_b) - 2.5) //hardcapped so it's not abused by having a ton of flashlights
|
||||
else
|
||||
light_amount = 5
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
src.brainmob << "<b>You are a positronic brain, brought into existence on [station_name()].</b>"
|
||||
src.brainmob << "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>"
|
||||
src.brainmob << "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>"
|
||||
src.brainmob << "<b>Use say :b to speak to other artificial intelligences.</b>"
|
||||
src.brainmob << "<b>Use say #b to speak to other artificial intelligences.</b>"
|
||||
src.brainmob.mind.assigned_role = "Positronic Brain"
|
||||
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
var/armor_check = run_armor_check(affecting, "melee")
|
||||
apply_effect(3, WEAKEN, armor_check)
|
||||
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
if(armor_check < 2)
|
||||
if(armor_check < 60)
|
||||
visible_message("<span class='danger'>[M] has pushed [src]!</span>")
|
||||
else
|
||||
visible_message("<span class='warning'>[M] attempted to push [src]!</span>")
|
||||
|
||||
@@ -351,6 +351,8 @@ This function restores all organs.
|
||||
return organs_by_name[zone]
|
||||
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0, var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/edge = 0, var/obj/used_weapon = null)
|
||||
if(Debug2)
|
||||
world.log << "## DEBUG: human/apply_damage() was called on [src], with [damage] damage, and an armor value of [blocked]."
|
||||
|
||||
//visible_message("Hit debug. [damage] | [damagetype] | [def_zone] | [blocked] | [sharp] | [used_weapon]")
|
||||
|
||||
@@ -366,7 +368,8 @@ This function restores all organs.
|
||||
//Handle BRUTE and BURN damage
|
||||
handle_suit_punctures(damagetype, damage, def_zone)
|
||||
|
||||
if(blocked >= 2) return 0
|
||||
if(blocked >= 100)
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/organ = null
|
||||
if(isorgan(def_zone))
|
||||
@@ -377,7 +380,10 @@ This function restores all organs.
|
||||
if(!organ) return 0
|
||||
|
||||
if(blocked)
|
||||
damage = (damage/(blocked+1))
|
||||
blocked = (100-blocked)/100
|
||||
damage = (damage * blocked)
|
||||
if(Debug2)
|
||||
world.log << "## DEBUG: [src] was hit for [damage]."
|
||||
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
|
||||
@@ -16,14 +16,14 @@ emp_act
|
||||
|
||||
var/obj/item/organ/external/organ = get_organ()
|
||||
|
||||
//Shields
|
||||
//Shields
|
||||
var/shield_check = check_shields(P.damage, P, null, def_zone, "the [P.name]")
|
||||
if(shield_check)
|
||||
if(shield_check < 0)
|
||||
return shield_check
|
||||
else
|
||||
P.on_hit(src, 2, def_zone)
|
||||
return 2
|
||||
return 2
|
||||
|
||||
//Shrapnel
|
||||
if(P.can_embed())
|
||||
@@ -156,13 +156,13 @@ emp_act
|
||||
target_zone = user.zone_sel.selecting
|
||||
if(!target_zone)
|
||||
visible_message("<span class='danger'>[user] misses [src] with \the [I]!</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/affecting = get_organ(target_zone)
|
||||
|
||||
if (!affecting || (affecting.status & ORGAN_DESTROYED) || affecting.is_stump())
|
||||
user << "<span class='danger'>They are missing that limb!</span>"
|
||||
return
|
||||
return 0
|
||||
|
||||
var/effective_force = I.force
|
||||
if(user.a_intent == "disarm") effective_force = round(I.force/2)
|
||||
@@ -196,7 +196,7 @@ emp_act
|
||||
weapon_sharp = 0
|
||||
weapon_edge = 0
|
||||
|
||||
if(armor >= 2) return 0
|
||||
if(armor >= 100) return 0
|
||||
if(!effective_force) return 0
|
||||
var/Iforce = effective_force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
|
||||
|
||||
@@ -229,7 +229,7 @@ emp_act
|
||||
if(prob(effective_force + 10))
|
||||
apply_effect(6, WEAKEN, armor)
|
||||
visible_message("<span class='danger'>[src] has been knocked down!</span>")
|
||||
|
||||
|
||||
//Apply blood
|
||||
if(bloody)
|
||||
switch(hit_area)
|
||||
@@ -313,7 +313,7 @@ emp_act
|
||||
src.visible_message("\red [src] has been hit in the [hit_area] by [O].")
|
||||
var/armor = run_armor_check(affecting, "melee", O.armor_penetration, "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") //I guess "melee" is the best fit here
|
||||
|
||||
if(armor < 2)
|
||||
if(armor < 100)
|
||||
apply_damage(throw_damage, dtype, zone, armor, is_sharp(O), has_edge(O), O)
|
||||
|
||||
if(ismob(O.thrower))
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
/mob/living/carbon/proc/escape_handcuffs()
|
||||
//if(!(last_special <= world.time)) return
|
||||
|
||||
//These two lines represent a significant buff to grabs...
|
||||
if(!canClick()) return
|
||||
//This line represent a significant buff to grabs...
|
||||
// We don't have to check the click cooldown because /mob/living/verb/resist() has done it for us, we can simply set the delay
|
||||
setClickCooldown(100)
|
||||
|
||||
if(can_break_cuffs()) //Don't want to do a lot of logic gating here.
|
||||
@@ -48,7 +48,7 @@
|
||||
displaytime = breakouttime / 600 //Minutes
|
||||
|
||||
visible_message(
|
||||
"<span class='danger'>[src] attempts to remove \the [HC]!</span>",
|
||||
"<span class='danger'>\The [src] attempts to remove \the [HC]!</span>",
|
||||
"<span class='warning'>You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)</span>"
|
||||
)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
if(!handcuffed || buckled)
|
||||
return
|
||||
visible_message(
|
||||
"<span class='danger'>[src] manages to remove \the [handcuffed]!</span>",
|
||||
"<span class='danger'>\The [src] manages to remove \the [handcuffed]!</span>",
|
||||
"<span class='notice'>You successfully remove \the [handcuffed].</span>"
|
||||
)
|
||||
drop_from_inventory(handcuffed)
|
||||
|
||||
@@ -9,28 +9,34 @@
|
||||
standard 0 if fail
|
||||
*/
|
||||
/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/used_weapon = null, var/sharp = 0, var/edge = 0)
|
||||
if(!damage || (blocked >= 2)) return 0
|
||||
if(Debug2)
|
||||
world.log << "## DEBUG: apply_damage() was called on [src], with [damage] damage, and an armor value of [blocked]."
|
||||
if(!damage || (blocked >= 100))
|
||||
return 0
|
||||
blocked = (100-blocked)/100
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
adjustBruteLoss(damage/(blocked+1))
|
||||
adjustBruteLoss(damage * blocked)
|
||||
if(BURN)
|
||||
if(COLD_RESISTANCE in mutations) damage = 0
|
||||
adjustFireLoss(damage/(blocked+1))
|
||||
if(COLD_RESISTANCE in mutations)
|
||||
damage = 0
|
||||
adjustFireLoss(damage * blocked)
|
||||
if(TOX)
|
||||
adjustToxLoss(damage/(blocked+1))
|
||||
adjustToxLoss(damage * blocked)
|
||||
if(OXY)
|
||||
adjustOxyLoss(damage/(blocked+1))
|
||||
adjustOxyLoss(damage * blocked)
|
||||
if(CLONE)
|
||||
adjustCloneLoss(damage/(blocked+1))
|
||||
adjustCloneLoss(damage * blocked)
|
||||
if(HALLOSS)
|
||||
adjustHalLoss(damage/(blocked+1))
|
||||
adjustHalLoss(damage * blocked)
|
||||
flash_weak_pain()
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/blocked = 0)
|
||||
if(blocked >= 2) return 0
|
||||
if(blocked >= 100)
|
||||
return 0
|
||||
if(brute) apply_damage(brute, BRUTE, def_zone, blocked)
|
||||
if(burn) apply_damage(burn, BURN, def_zone, blocked)
|
||||
if(tox) apply_damage(tox, TOX, def_zone, blocked)
|
||||
@@ -42,32 +48,43 @@
|
||||
|
||||
|
||||
/mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0, var/check_protection = 1)
|
||||
if(!effect || (blocked >= 2)) return 0
|
||||
if(Debug2)
|
||||
world.log << "## DEBUG: apply_effect() was called. The type of effect is [effecttype]. Blocked by [blocked]."
|
||||
if(!effect || (blocked >= 100))
|
||||
return 0
|
||||
blocked = (100-blocked)/100
|
||||
|
||||
switch(effecttype)
|
||||
if(STUN)
|
||||
Stun(effect/(blocked+1))
|
||||
Stun(effect * blocked)
|
||||
if(WEAKEN)
|
||||
Weaken(effect/(blocked+1))
|
||||
Weaken(effect * blocked)
|
||||
if(PARALYZE)
|
||||
Paralyse(effect/(blocked+1))
|
||||
Paralyse(effect * blocked)
|
||||
if(AGONY)
|
||||
halloss += effect // Useful for objects that cause "subdual" damage. PAIN!
|
||||
halloss += max((effect * blocked), 0) // Useful for objects that cause "subdual" damage. PAIN!
|
||||
if(IRRADIATE)
|
||||
/*
|
||||
var/rad_protection = check_protection ? getarmor(null, "rad")/100 : 0
|
||||
radiation += max((1-rad_protection)*effect/(blocked+1),0)//Rads auto check armor
|
||||
*/
|
||||
var/rad_protection = getarmor(null, "rad")
|
||||
rad_protection = (100-rad_protection)/100
|
||||
radiation += max((effect * rad_protection), 0)
|
||||
if(STUTTER)
|
||||
if(status_flags & CANSTUN) // stun is usually associated with stutter
|
||||
stuttering = max(stuttering,(effect/(blocked+1)))
|
||||
stuttering = max(stuttering,(effect * blocked))
|
||||
if(EYE_BLUR)
|
||||
eye_blurry = max(eye_blurry,(effect/(blocked+1)))
|
||||
eye_blurry = max(eye_blurry,(effect * blocked))
|
||||
if(DROWSY)
|
||||
drowsyness = max(drowsyness,(effect/(blocked+1)))
|
||||
drowsyness = max(drowsyness,(effect * blocked))
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/agony = 0, var/blocked = 0)
|
||||
if(blocked >= 2) return 0
|
||||
if(blocked >= 100)
|
||||
return 0
|
||||
if(stun) apply_effect(stun, STUN, blocked)
|
||||
if(weaken) apply_effect(weaken, WEAKEN, blocked)
|
||||
if(paralyze) apply_effect(paralyze, PARALYZE, blocked)
|
||||
|
||||
@@ -2,33 +2,66 @@
|
||||
/*
|
||||
run_armor_check(a,b)
|
||||
args
|
||||
a:def_zone - What part is getting hit, if null will check entire body
|
||||
b:attack_flag - What type of attack, bullet, laser, energy, melee
|
||||
a:def_zone - What part is getting hit, if null will check entire body
|
||||
b:attack_flag - What type of attack, bullet, laser, energy, melee
|
||||
c:armour_pen - How much armor to ignore.
|
||||
d:absorb_text - Custom text to send to the player when the armor fully absorbs an attack.
|
||||
e:soften_text - Similar to absorb_text, custom text to send to the player when some damage is reduced.
|
||||
|
||||
Returns
|
||||
0 - no block
|
||||
1 - halfblock
|
||||
2 - fullblock
|
||||
A number between 0 and 100, with higher numbers resulting in less damage taken.
|
||||
*/
|
||||
/mob/living/proc/run_armor_check(var/def_zone = null, var/attack_flag = "melee", var/armour_pen = 0, var/absorb_text = null, var/soften_text = null)
|
||||
if(Debug2)
|
||||
world.log << "## DEBUG: getarmor() was called."
|
||||
|
||||
if(armour_pen >= 100)
|
||||
return 0 //might as well just skip the processing
|
||||
|
||||
var/armor = getarmor(def_zone, attack_flag)
|
||||
if(armor)
|
||||
var/armor_variance_range = round(armor * 0.25) //Armor's effectiveness has a +25%/-25% variance.
|
||||
var/armor_variance = rand(-armor_variance_range, armor_variance_range) //Get a random number between -25% and +25% of the armor's base value
|
||||
if(Debug2)
|
||||
world.log << "## DEBUG: The range of armor variance is [armor_variance_range]. The variance picked by RNG is [armor_variance]."
|
||||
|
||||
armor = min(armor + armor_variance, 100) //Now we calcuate damage using the new armor percentage.
|
||||
armor = max(armor - armour_pen, 0) //Armor pen makes armor less effective.
|
||||
if(armor >= 100)
|
||||
if(absorb_text)
|
||||
src << "<span class='danger'>[absorb_text]</span>"
|
||||
else
|
||||
src << "<span class='danger'>Your armor absorbs the blow!</span>"
|
||||
|
||||
else if(armor > 0)
|
||||
if(soften_text)
|
||||
src << "<span class='danger'>[soften_text]</span>"
|
||||
else
|
||||
src << "<span class='danger'>Your armor softens the blow!</span>"
|
||||
if(Debug2)
|
||||
world.log << "## DEBUG: Armor when [src] was attacked was [armor]."
|
||||
return armor
|
||||
|
||||
/*
|
||||
//Old armor code here.
|
||||
if(armour_pen >= 100)
|
||||
return 0 //might as well just skip the processing
|
||||
|
||||
var/armor = getarmor(def_zone, attack_flag)
|
||||
var/absorb = 0
|
||||
|
||||
|
||||
//Roll armour
|
||||
if(prob(armor))
|
||||
absorb += 1
|
||||
if(prob(armor))
|
||||
absorb += 1
|
||||
|
||||
|
||||
//Roll penetration
|
||||
if(prob(armour_pen))
|
||||
absorb -= 1
|
||||
if(prob(armour_pen))
|
||||
absorb -= 1
|
||||
|
||||
|
||||
if(absorb >= 2)
|
||||
if(absorb_text)
|
||||
show_message("[absorb_text]")
|
||||
@@ -42,7 +75,7 @@
|
||||
show_message("<span class='warning'>Your armor softens the blow!</span>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
*/
|
||||
|
||||
//if null is passed for def_zone, then this should return something appropriate for all zones (e.g. area effect damage)
|
||||
/mob/living/proc/getarmor(var/def_zone, var/type)
|
||||
@@ -85,7 +118,15 @@
|
||||
if(!P.nodamage)
|
||||
apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=proj_sharp, edge=proj_edge)
|
||||
P.on_hit(src, absorb, def_zone)
|
||||
return absorb
|
||||
|
||||
if(absorb == 100)
|
||||
return 2
|
||||
else if (absorb >= 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
// return absorb
|
||||
|
||||
//Handles the effects of "stun" weapons
|
||||
/mob/living/proc/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null)
|
||||
@@ -130,8 +171,7 @@
|
||||
src.visible_message("\red [src] has been hit by [O].")
|
||||
var/armor = run_armor_check(null, "melee")
|
||||
|
||||
if(armor < 2)
|
||||
apply_damage(throw_damage, dtype, null, armor, is_sharp(O), has_edge(O), O)
|
||||
apply_damage(throw_damage, dtype, null, armor, is_sharp(O), has_edge(O), O)
|
||||
|
||||
O.throwing = 0 //it hit, so stop moving
|
||||
|
||||
@@ -262,7 +302,7 @@
|
||||
return 0
|
||||
|
||||
//Scale quadratically so that single digit numbers of fire stacks don't burn ridiculously hot.
|
||||
//lower limit of 700 K, same as matches and roughly the temperature of a cool flame.
|
||||
//lower limit of 700 K, same as matches and roughly the temperature of a cool flame.
|
||||
return max(2.25*round(FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE*(fire_stacks/FIRE_MAX_FIRESUIT_STACKS)**2), 700)
|
||||
|
||||
/mob/living/proc/reagent_permeability()
|
||||
|
||||
@@ -46,7 +46,7 @@ var/list/ai_verbs_default = list(
|
||||
density = 1
|
||||
status_flags = CANSTUN|CANPARALYSE|CANPUSH
|
||||
shouldnt_see = list(/obj/effect/rune)
|
||||
var/list/network = list("Exodus")
|
||||
var/list/network = list("Northern Star")
|
||||
var/obj/machinery/camera/camera = null
|
||||
var/list/connected_robots = list()
|
||||
var/aiRestorePowerRoutine = 0
|
||||
@@ -128,7 +128,7 @@ var/list/ai_verbs_default = list(
|
||||
aiRadio = new(src)
|
||||
common_radio = aiRadio
|
||||
aiRadio.myAi = src
|
||||
additional_law_channels["Binary"] = ":b"
|
||||
additional_law_channels["Binary"] = "#b"
|
||||
additional_law_channels["Holopad"] = ":h"
|
||||
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src)
|
||||
@@ -180,7 +180,7 @@ var/list/ai_verbs_default = list(
|
||||
src << "<B>To look at other parts of the station, click on yourself to get a camera menu.</B>"
|
||||
src << "<B>While observing through a camera, you can use most (networked) devices which you can see, such as computers, APCs, intercoms, doors, etc.</B>"
|
||||
src << "To use something, simply click on it."
|
||||
src << "Use say :b to speak to your cyborgs through binary. Use say :h to speak from an active holopad."
|
||||
src << "Use <B>say #b</B> to speak to your cyborgs through binary. Use say :h to speak from an active holopad."
|
||||
src << "For department channels, use the following say commands:"
|
||||
|
||||
var/radio_text = ""
|
||||
|
||||
@@ -42,7 +42,7 @@ var/list/mob_hat_cache = list()
|
||||
mob_push_flags = SIMPLE_ANIMAL
|
||||
mob_always_swap = 1
|
||||
|
||||
mob_size = MOB_TINY
|
||||
mob_size = MOB_LARGE // Small mobs can't open doors, it's a huge pain for drones.
|
||||
|
||||
//Used for self-mailing.
|
||||
var/mail_destination = ""
|
||||
@@ -70,7 +70,6 @@ var/list/mob_hat_cache = list()
|
||||
can_pull_mobs = 1
|
||||
hat_x_offset = 1
|
||||
hat_y_offset = -12
|
||||
mob_size = MOB_SMALL
|
||||
|
||||
/mob/living/silicon/robot/drone/New()
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
idle_power_usage = 20
|
||||
active_power_usage = 5000
|
||||
|
||||
var/fabricator_tag = "Exodus"
|
||||
var/fabricator_tag = "Northern Star Upper Level"
|
||||
var/drone_progress = 0
|
||||
var/produce_drones = 1
|
||||
var/time_last_drone = 500
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/obj/machinery/drone_fabricator/derelict
|
||||
name = "construction drone fabricator"
|
||||
fabricator_tag = "Derelict"
|
||||
fabricator_tag = "Northern Star Depths"
|
||||
drone_type = /mob/living/silicon/robot/drone/construction
|
||||
|
||||
/obj/machinery/drone_fabricator/New()
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
/mob/living/silicon/robot/proc/init()
|
||||
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
|
||||
laws = new /datum/ai_laws/nanotrasen()
|
||||
additional_law_channels["Binary"] = ":b"
|
||||
additional_law_channels["Binary"] = "#b"
|
||||
var/new_ai = select_active_ai_with_fewest_borgs()
|
||||
if(new_ai)
|
||||
lawupdate = 1
|
||||
@@ -219,14 +219,15 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/silicon/robot/proc/set_module_sprites(var/list/new_sprites)
|
||||
module_sprites = new_sprites.Copy()
|
||||
//Custom_sprite check and entry
|
||||
if (custom_sprite == 1)
|
||||
module_sprites["Custom"] = "[src.ckey]-[modtype]"
|
||||
icontype = "Custom"
|
||||
else
|
||||
icontype = module_sprites[1]
|
||||
icon_state = module_sprites[icontype]
|
||||
if(new_sprites && new_sprites.len)
|
||||
module_sprites = new_sprites.Copy()
|
||||
//Custom_sprite check and entry
|
||||
if (custom_sprite == 1)
|
||||
module_sprites["Custom"] = "[src.ckey]-[modtype]"
|
||||
icontype = "Custom"
|
||||
else
|
||||
icontype = module_sprites[1]
|
||||
icon_state = module_sprites[icontype]
|
||||
updateicon()
|
||||
return module_sprites
|
||||
|
||||
|
||||
+29
-5
@@ -85,8 +85,7 @@
|
||||
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
|
||||
|
||||
/mob/visible_message(var/message, var/self_message, var/blind_message)
|
||||
|
||||
var/list/see = get_mobs_or_objects_in_view(world.view,src) | viewers(get_turf(src), null)
|
||||
var/list/see = get_mobs_or_objects_in_view(world.view,src) | viewers(world.view,src)
|
||||
|
||||
for(var/I in see)
|
||||
if(isobj(I))
|
||||
@@ -152,8 +151,33 @@
|
||||
//handle_typing_indicator() //You said the typing indicator would be fine. The test determined that was a lie.
|
||||
return
|
||||
|
||||
/mob/proc/incapacitated()
|
||||
return (stat || paralysis || stunned || weakened || restrained())
|
||||
#define UNBUCKLED 0
|
||||
#define PARTIALLY_BUCKLED 1
|
||||
#define FULLY_BUCKLED 2
|
||||
/mob/proc/buckled()
|
||||
// Preliminary work for a future buckle rewrite,
|
||||
// where one might be fully restrained (like an elecrical chair), or merely secured (shuttle chair, keeping you safe but not otherwise restrained from acting)
|
||||
return buckled ? FULLY_BUCKLED : UNBUCKLED
|
||||
|
||||
/mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT)
|
||||
if (stat || paralysis || stunned || weakened || resting || sleeping || (status_flags & FAKEDEATH))
|
||||
return 1
|
||||
|
||||
if((incapacitation_flags & INCAPACITATION_RESTRAINED) && restrained())
|
||||
return 1
|
||||
|
||||
if((incapacitation_flags & (INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY)))
|
||||
var/buckling = buckled()
|
||||
if(buckling >= PARTIALLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_PARTIALLY))
|
||||
return 1
|
||||
if(buckling == FULLY_BUCKLED && (incapacitation_flags & INCAPACITATION_BUCKLED_FULLY))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
#undef UNBUCKLED
|
||||
#undef PARTIALLY_BUCKLED
|
||||
#undef FULLY_BUCKLED
|
||||
|
||||
/mob/proc/restrained()
|
||||
return
|
||||
@@ -697,7 +721,7 @@
|
||||
return 0
|
||||
|
||||
/mob/proc/cannot_stand()
|
||||
return incapacitated() || restrained() || resting || sleeping || (status_flags & FAKEDEATH)
|
||||
return incapacitated(INCAPACITATION_DEFAULT & (~INCAPACITATION_RESTRAINED))
|
||||
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
/mob/proc/update_canmove()
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
attacker.visible_message("<span class='danger'>[attacker] [pick("bent", "twisted")] [target]'s [organ.name] into a jointlock!</span>")
|
||||
var/armor = target.run_armor_check(target, "melee")
|
||||
if(armor < 2)
|
||||
if(armor < 60)
|
||||
target << "<span class='danger'>You feel extreme pain!</span>"
|
||||
affecting.adjustHalLoss(Clamp(0, 60-affecting.halloss, 30)) //up to 60 halloss
|
||||
|
||||
|
||||
@@ -206,6 +206,14 @@
|
||||
name = "Bun"
|
||||
icon_state = "hair_bun"
|
||||
|
||||
bun2
|
||||
name = "Bun 2"
|
||||
icon_state = "hair_bun2"
|
||||
|
||||
bun3
|
||||
name = "Bun 3"
|
||||
icon_state = "hair_bun3"
|
||||
|
||||
bowl
|
||||
name = "Bowl"
|
||||
icon_state = "hair_bowlcut"
|
||||
@@ -267,6 +275,14 @@
|
||||
name = "Long Emo"
|
||||
icon_state = "hair_emolong"
|
||||
|
||||
fringeemo
|
||||
name = "Emo Fringe"
|
||||
icon_state = "hair_emofringe"
|
||||
|
||||
veryshortovereyealternate
|
||||
name = "Overeye Very Short, Alternate"
|
||||
icon_state = "hair_veryshortovereyealternate"
|
||||
|
||||
veryshortovereye
|
||||
name = "Overeye Very Short"
|
||||
icon_state = "hair_veryshortovereye"
|
||||
@@ -406,6 +422,22 @@
|
||||
name = "Volaju"
|
||||
icon_state = "hair_volaju"
|
||||
|
||||
eighties
|
||||
name = "80's"
|
||||
icon_state = "hair_80s"
|
||||
|
||||
nia
|
||||
name = "Nia"
|
||||
icon_state = "hair_nia"
|
||||
|
||||
unkept
|
||||
name = "Unkept"
|
||||
icon_state = "hair_unkept"
|
||||
|
||||
modern
|
||||
name = "Modern"
|
||||
icon_state = "hair_modern"
|
||||
|
||||
bald
|
||||
name = "Bald"
|
||||
icon_state = "bald"
|
||||
|
||||
@@ -7,7 +7,6 @@ var/global/datum/robolimb/basic_robolimb
|
||||
for(var/limb_type in typesof(/datum/robolimb))
|
||||
var/datum/robolimb/R = new limb_type()
|
||||
all_robolimbs[R.company] = R
|
||||
world << "Adding [R.company] as [R], [R.type]"
|
||||
if(!R.unavailable_at_chargen)
|
||||
chargen_robolimbs[R.company] = R
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
continue
|
||||
if(O.invisibility == 101)
|
||||
O.singularity_act(src, current_size)
|
||||
ChangeTurf(get_base_turf(src.z))
|
||||
ChangeTurf(get_base_turf_by_area(src))
|
||||
return 2
|
||||
|
||||
/turf/simulated/wall/singularity_pull(S, current_size)
|
||||
|
||||
@@ -187,7 +187,8 @@
|
||||
target = targloc
|
||||
pointblank = 0
|
||||
|
||||
admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].")
|
||||
// admin_attack_log(usr, attacker_message="Fired [src]", admin_message="fired a gun ([src]) (MODE: [src.mode_name]) [reflex ? "by reflex" : "manually"].")
|
||||
//Commented out due to potential lag issues, possibly with excess I/O
|
||||
|
||||
update_held_icon()
|
||||
|
||||
@@ -374,7 +375,7 @@
|
||||
var/datum/firemode/current_mode = firemodes[sel_mode]
|
||||
user << "The fire selector is set to [current_mode.name]."
|
||||
|
||||
/obj/item/weapon/gun/proc/switch_firemodes()
|
||||
/obj/item/weapon/gun/proc/switch_firemodes(mob/user)
|
||||
if(firemodes.len <= 1)
|
||||
return null
|
||||
|
||||
@@ -383,11 +384,10 @@
|
||||
sel_mode = 1
|
||||
var/datum/firemode/new_mode = firemodes[sel_mode]
|
||||
new_mode.apply_to(src)
|
||||
user << "<span class='notice'>\The [src] is now set to [mode_name].</span>"
|
||||
|
||||
return new_mode
|
||||
|
||||
/obj/item/weapon/gun/attack_self(mob/user)
|
||||
switch_firemodes(user)
|
||||
if(firemodes.len > 1)
|
||||
user << "<span class='notice'>\The [src] is now set to [mode_name].</span>"
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/recharge_time = 4
|
||||
var/charge_tick = 0
|
||||
|
||||
/obj/item/weapon/gun/energy/switch_firemodes()
|
||||
/obj/item/weapon/gun/energy/switch_firemodes(mob/user)
|
||||
if(..())
|
||||
update_icon()
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
if(use_launcher)
|
||||
launcher.Fire(target, user, params, pointblank, reflex)
|
||||
if(!launcher.chambered)
|
||||
switch_firemodes() //switch back automatically
|
||||
switch_firemodes(user) //switch back automatically
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -242,8 +242,8 @@
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="semiauto", burst=1, fire_delay=0),
|
||||
list(mode_name="3-round bursts", burst=3, move_delay=6, accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6)),
|
||||
// list(mode_name="6-round bursts", burst=6, move_delay=6, accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)),
|
||||
list(mode_name="3-round bursts", burst=3, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.0, 0.6, 0.6)),
|
||||
// list(mode_name="6-round bursts", burst=6, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2, 1.2)),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/as24/update_icon()
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
//TODO: make it so this is called more reliably, instead of sometimes by bullet_act() and sometimes not
|
||||
/obj/item/projectile/proc/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
|
||||
if(blocked >= 2) return 0//Full block
|
||||
if(blocked >= 100) return 0//Full block
|
||||
if(!isliving(target)) return 0
|
||||
if(isanimal(target)) return 0
|
||||
var/mob/living/L = target
|
||||
@@ -144,19 +144,19 @@
|
||||
on_impact(user)
|
||||
qdel(src)
|
||||
return 0
|
||||
|
||||
|
||||
loc = get_turf(user) //move the projectile out into the world
|
||||
|
||||
|
||||
firer = user
|
||||
shot_from = launcher.name
|
||||
silenced = launcher.silenced
|
||||
|
||||
|
||||
return launch(target, target_zone, x_offset, y_offset)
|
||||
|
||||
//Used to change the direction of the projectile in flight.
|
||||
/obj/item/projectile/proc/redirect(var/new_x, var/new_y, var/atom/starting_loc, var/mob/new_firer=null)
|
||||
var/turf/new_target = locate(new_x, new_y, src.z)
|
||||
|
||||
|
||||
original = new_target
|
||||
if(new_firer)
|
||||
firer = src
|
||||
@@ -402,9 +402,9 @@
|
||||
var/turf/targloc = get_turf(target)
|
||||
if(!curloc || !targloc)
|
||||
return 0
|
||||
|
||||
|
||||
original = target
|
||||
|
||||
|
||||
//plot the initial trajectory
|
||||
setup_trajectory(curloc, targloc)
|
||||
return process(targloc)
|
||||
@@ -438,7 +438,7 @@
|
||||
|
||||
//Set the flags and pass flags to that of the real projectile...
|
||||
if(!isnull(flags))
|
||||
trace.flags = flags
|
||||
trace.flags = flags
|
||||
trace.pass_flags = pass_flags
|
||||
|
||||
var/output = trace.launch(target) //Test it!
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1, 5)
|
||||
|
||||
// This is shit but it will do for the sake of testing.
|
||||
for(var/obj/structure/droppod_door/D in range(5,src))
|
||||
for(var/obj/structure/droppod_door/D in orange(1,src))
|
||||
if(D.deployed)
|
||||
continue
|
||||
D.deploy()
|
||||
|
||||
@@ -91,6 +91,9 @@
|
||||
|
||||
if(invisibility) // if invisible, fade icon
|
||||
alpha = 128
|
||||
else
|
||||
alpha = 255
|
||||
//otherwise burying half-finished pipes under floors causes them to half-fade
|
||||
|
||||
// hide called by levelupdate if turf intact status changes
|
||||
// change visibility status and force update of icon
|
||||
@@ -318,3 +321,9 @@
|
||||
else
|
||||
user << "You need to attach it to the plating first!"
|
||||
return
|
||||
|
||||
/obj/structure/disposalconstruct/hides_under_flooring()
|
||||
if(anchored)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -940,6 +940,9 @@
|
||||
expel(H, T, 0)
|
||||
..()
|
||||
|
||||
/obj/structure/disposalpipe/hides_under_flooring()
|
||||
return 1
|
||||
|
||||
// *** TEST verb
|
||||
//client/verb/dispstop()
|
||||
// for(var/obj/structure/disposalholder/H in world)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#define SURGERY_FAILURE -1
|
||||
@@ -45,7 +45,7 @@
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user] rips the larva out of [target]'s ribcage!",
|
||||
user.visible_message("<span class='warning'>[user] rips the larva out of [target]'s ribcage!</span>",
|
||||
"You rip the larva out of [target]'s ribcage!")
|
||||
|
||||
for(var/obj/item/alien_embryo/A in target)
|
||||
@@ -112,8 +112,8 @@
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic < 2)
|
||||
user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \
|
||||
"\blue You treat damage to [target]'s [I.name] with [tool_name]." )
|
||||
user.visible_message("<span class='notice'>[user] treats damage to [target]'s [I.name] with [tool_name].</span>", \
|
||||
"<span class='notice'>You treat damage to [target]'s [I.name] with [tool_name].</span>" )
|
||||
I.damage = 0
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -122,8 +122,8 @@
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
user.visible_message("\red [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \
|
||||
"\red Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>")
|
||||
var/dam_amt = 2
|
||||
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
@@ -185,8 +185,8 @@
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\blue [user] has separated [target]'s [target.op_stage.current_organ] with \the [tool]." , \
|
||||
"\blue You have separated [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
user.visible_message("<span class='notice'>[user] has separated [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have separated [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
@@ -194,8 +194,8 @@
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \
|
||||
"\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(CUT, rand(30,50), 1)
|
||||
|
||||
/datum/surgery_step/internal/remove_organ
|
||||
@@ -236,8 +236,8 @@
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\blue [user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"\blue You have removed [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
user.visible_message("<span class='notice'>[user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have removed [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
// Extract the organ!
|
||||
if(target.op_stage.current_organ)
|
||||
@@ -248,8 +248,8 @@
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \
|
||||
"\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(BRUISE, 20)
|
||||
|
||||
/datum/surgery_step/internal/replace_organ
|
||||
@@ -273,11 +273,11 @@
|
||||
|
||||
if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT))
|
||||
user << "<span class='danger'>You cannot install a naked organ into a robotic body.</span>"
|
||||
return 2
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!target.species)
|
||||
user << "\red You have no idea what species this person is. Report this on the bug tracker."
|
||||
return 2
|
||||
user << "<span class='danger'>You have no idea what species this person is. Report this on the bug tracker.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
var/o_is = (O.gender == PLURAL) ? "are" : "is"
|
||||
var/o_a = (O.gender == PLURAL) ? "" : "a "
|
||||
@@ -288,23 +288,23 @@
|
||||
else if(target.species.has_organ[O.organ_tag])
|
||||
|
||||
if(O.damage > (O.max_damage * 0.75))
|
||||
user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted."
|
||||
return 2
|
||||
user << "<span class='warning'>\The [O.organ_tag] [o_is] in no state to be transplanted.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!target.internal_organs_by_name[O.organ_tag])
|
||||
organ_missing = 1
|
||||
else
|
||||
user << "\red \The [target] already has [o_a][O.organ_tag]."
|
||||
return 2
|
||||
user << "<span class='warning'>\The [target] already has [o_a][O.organ_tag].</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(O && affected.limb_name == O.parent_organ)
|
||||
organ_compatible = 1
|
||||
else
|
||||
user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.name]."
|
||||
return 2
|
||||
user << "<span class='warning'>\The [O.organ_tag] [o_do] normally go in \the [affected.name].</span>"
|
||||
return SURGERY_FAILURE
|
||||
else
|
||||
user << "\red You're pretty sure [target.species.name_plural] don't normally have [o_a][O.organ_tag]."
|
||||
return 2
|
||||
user << "<span class='warning'>You're pretty sure [target.species.name_plural] don't normally have [o_a][O.organ_tag].</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
return ..() && organ_missing && organ_compatible
|
||||
|
||||
@@ -317,16 +317,16 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] has transplanted \the [tool] into [target]'s [affected.name].", \
|
||||
"\blue You have transplanted \the [tool] into [target]'s [affected.name].")
|
||||
user.visible_message("<span class='notice'>[user] has transplanted \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have transplanted \the [tool] into [target]'s [affected.name].</span>")
|
||||
var/obj/item/organ/O = tool
|
||||
if(istype(O))
|
||||
user.remove_from_mob(O)
|
||||
O.replaced(target,affected)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips, damaging \the [tool]!", \
|
||||
"\red Your hand slips, damaging \the [tool]!")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging \the [tool]!</span>")
|
||||
var/obj/item/organ/I = tool
|
||||
if(istype(I))
|
||||
I.take_damage(rand(3,5),0)
|
||||
@@ -367,8 +367,8 @@
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \
|
||||
"\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
user.visible_message("<span class='notice'>[user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
@@ -376,8 +376,8 @@
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \
|
||||
"\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(BRUISE, 20)
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -44,14 +44,14 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
|
||||
"\blue You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",)
|
||||
user.visible_message("<span class='notice'>[user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>",)
|
||||
affected.open = 1
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", \
|
||||
"\red Your [tool] slips, failing to unscrew [target]'s [affected.name].")
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].</span>", \
|
||||
"<span class='warning'>Your [tool] slips, failing to unscrew [target]'s [affected.name].</span>")
|
||||
|
||||
/datum/surgery_step/robotics/open_hatch
|
||||
allowed_tools = list(
|
||||
@@ -76,14 +76,14 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
|
||||
"\blue You open the maintenance hatch on [target]'s [affected.name] with \the [tool]." )
|
||||
user.visible_message("<span class='notice'>[user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You open the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.open = 2
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].",
|
||||
"\red Your [tool] slips, failing to open the hatch on [target]'s [affected.name].")
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool] slips, failing to open the hatch on [target]'s [affected.name].</span>")
|
||||
|
||||
/datum/surgery_step/robotics/close_hatch
|
||||
allowed_tools = list(
|
||||
@@ -108,15 +108,15 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \
|
||||
"\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].")
|
||||
user.visible_message("<span class='notice'>[user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You close and secure the hatch on [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.open = 0
|
||||
affected.germ_level = 0
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].",
|
||||
"\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].")
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].</span>")
|
||||
|
||||
/datum/surgery_step/robotics/repair_brute
|
||||
allowed_tools = list(
|
||||
@@ -144,14 +144,14 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \
|
||||
"\blue You finish patching damage to [target]'s [affected.name] with \the [tool].")
|
||||
user.visible_message("<span class='notice'>[user] finishes patching damage to [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You finish patching damage to [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.heal_damage(rand(30,50),0,1,1)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].",
|
||||
"\red Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].")
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].</span>")
|
||||
target.apply_damage(rand(5,10), BURN, affected)
|
||||
|
||||
/datum/surgery_step/robotics/repair_burn
|
||||
@@ -171,7 +171,7 @@
|
||||
if(istype(C))
|
||||
if(!C.get_amount() >= 3)
|
||||
user << "<span class='danger'>You need three or more cable pieces to repair this damage.</span>"
|
||||
return 2
|
||||
return SURGERY_FAILURE
|
||||
C.use(3)
|
||||
return 1
|
||||
return 0
|
||||
@@ -184,14 +184,14 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] finishes splicing cable into [target]'s [affected.name].", \
|
||||
"\blue You finishes splicing new cable into [target]'s [affected.name].")
|
||||
user.visible_message("<span class='notice'>[user] finishes splicing cable into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You finishes splicing new cable into [target]'s [affected.name].</span>")
|
||||
affected.heal_damage(0,rand(30,50),1,1)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\red [user] causes a short circuit in [target]'s [affected.name]!",
|
||||
"\red You cause a short circuit in [target]'s [affected.name]!")
|
||||
user.visible_message("<span class='warning'>[user] causes a short circuit in [target]'s [affected.name]!</span>",
|
||||
"<span class='warning'>You cause a short circuit in [target]'s [affected.name]!</span>")
|
||||
target.apply_damage(rand(5,10), BURN, affected)
|
||||
|
||||
/datum/surgery_step/robotics/fix_organ_robotic //For artificial organs
|
||||
@@ -242,8 +242,8 @@
|
||||
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic >= 2)
|
||||
user.visible_message("\blue [user] repairs [target]'s [I.name] with [tool].", \
|
||||
"\blue You repair [target]'s [I.name] with [tool]." )
|
||||
user.visible_message("<span class='notice'>[user] repairs [target]'s [I.name] with [tool].</span>", \
|
||||
"<span class='notice'>You repair [target]'s [I.name] with [tool].</span>" )
|
||||
I.damage = 0
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
@@ -252,8 +252,8 @@
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
user.visible_message("\red [user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!", \
|
||||
"\red Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!</span>")
|
||||
|
||||
target.adjustToxLoss(5)
|
||||
affected.createwound(CUT, 5)
|
||||
@@ -301,16 +301,16 @@
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \
|
||||
"\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
user.visible_message("<span class='notice'>[user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status |= ORGAN_CUT_AWAY
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \
|
||||
"\red Your hand slips, disconnecting \the [tool].")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, disconnecting \the [tool].</span>", \
|
||||
"<span class='warning'>Your hand slips, disconnecting \the [tool].</span>")
|
||||
|
||||
/datum/surgery_step/robotics/attach_organ_robotic
|
||||
allowed_tools = list(
|
||||
@@ -349,16 +349,16 @@
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \
|
||||
"\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
user.visible_message("<span class='notice'>[user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status &= ~ORGAN_CUT_AWAY
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \
|
||||
"\red Your hand slips, disconnecting \the [tool].")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, disconnecting \the [tool].</span>", \
|
||||
"<span class='warning'>Your hand slips, disconnecting \the [tool].</span>")
|
||||
|
||||
/datum/surgery_step/robotics/install_mmi
|
||||
allowed_tools = list(
|
||||
@@ -383,23 +383,23 @@
|
||||
|
||||
if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD)
|
||||
user << "<span class='danger'>That brain is not usable.</span>"
|
||||
return 2
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!(affected.status & ORGAN_ROBOT))
|
||||
user << "<span class='danger'>You cannot install a computer brain into a meat skull.</span>"
|
||||
return 2
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!target.species)
|
||||
user << "<span class='danger'>You have no idea what species this person is. Report this on the bug tracker.</span>"
|
||||
return 2
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!target.species.has_organ["brain"])
|
||||
user << "<span class='danger'>You're pretty sure [target.species.name_plural] don't normally have a brain.</span>"
|
||||
return 2
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!isnull(target.internal_organs["brain"]))
|
||||
user << "<span class='danger'>Your subject already has a brain.</span>"
|
||||
return 2
|
||||
return SURGERY_FAILURE
|
||||
|
||||
return 1
|
||||
|
||||
@@ -411,8 +411,8 @@
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("\blue [user] has installed \the [tool] into [target]'s [affected.name].", \
|
||||
"\blue You have installed \the [tool] into [target]'s [affected.name].")
|
||||
user.visible_message("<span class='notice'>[user] has installed \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have installed \the [tool] into [target]'s [affected.name].</span>")
|
||||
|
||||
var/obj/item/device/mmi/M = tool
|
||||
var/obj/item/organ/mmi_holder/holder = new(target, 1)
|
||||
@@ -426,5 +426,5 @@
|
||||
M.brainmob.mind.transfer_to(target)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("\red [user]'s hand slips.", \
|
||||
"\red Your hand slips.")
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
"<span class='warning'>Your hand slips.</span>")
|
||||
@@ -84,14 +84,14 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
|
||||
return 0
|
||||
var/zone = user.zone_sel.selecting
|
||||
if(zone in M.op_stage.in_progress) //Can't operate on someone repeatedly.
|
||||
user << "\red You can't operate on this area while surgery is already in progress."
|
||||
user << "<span class='warning'>You can't operate on this area while surgery is already in progress.</span>"
|
||||
return 1
|
||||
for(var/datum/surgery_step/S in surgery_steps)
|
||||
//check if tool is right or close enough and if this step is possible
|
||||
if(S.tool_quality(tool))
|
||||
var/step_is_valid = S.can_use(user, M, zone, tool)
|
||||
if(step_is_valid && S.is_valid_target(M))
|
||||
if(step_is_valid == 2) // This is a failure that already has a message for failing.
|
||||
if(step_is_valid == SURGERY_FAILURE) // This is a failure that already has a message for failing.
|
||||
return 1
|
||||
M.op_stage.in_progress += zone
|
||||
S.begin_step(user, M, zone, tool) //start on it
|
||||
@@ -101,7 +101,7 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
|
||||
else if ((tool in user.contents) && user.Adjacent(M)) //or
|
||||
S.fail_step(user, M, zone, tool) //malpractice~
|
||||
else // This failing silently was a pain.
|
||||
user << "\red You must remain close to your patient to conduct surgery."
|
||||
user << "<span class='warning'>You must remain close to your patient to conduct surgery.</span>"
|
||||
M.op_stage.in_progress -= zone // Clear the in-progress flag.
|
||||
if (ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -109,7 +109,7 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
|
||||
return 1 //don't want to do weapony things after surgery
|
||||
|
||||
if (user.a_intent == I_HELP)
|
||||
user << "\red You can't see any useful way to use [tool] on [M]."
|
||||
user << "<span class='warning'>You can't see any useful way to use [tool] on [M].</span>"
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#undef SURGERY_FAILURE
|
||||
@@ -0,0 +1,37 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Hubblenaut
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- bugfix: "Material stacks now properly merge upon creation."
|
||||
- bugfix: "Messages for adding to existing stack appear again."
|
||||
@@ -0,0 +1,36 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: MagmaRam
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- bugfix: "Fixed cloners killing fresh clones instantly with brain damage."
|
||||
@@ -0,0 +1,36 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: MagmaRam
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- bugfix: "Fixed a bug where disposals pipes would show up above floors despite being installed under them."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 149 KiB |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user