Merge pull request #6 from PolarisSS13/master

Sync 12/5/2015
This commit is contained in:
Datraen
2015-12-05 14:22:44 -05:00
118 changed files with 1874 additions and 785 deletions
+1 -1
View File
@@ -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"
+22
View File
@@ -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)
+2 -1
View File
@@ -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")
+6 -6
View File
@@ -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
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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"
+2 -2
View File
@@ -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
View File
@@ -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"
+8
View File
@@ -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"
+8 -1
View File
@@ -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
+4 -4
View File
@@ -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
+2 -2
View File
@@ -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)
+14 -7
View File
@@ -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
+1
View File
@@ -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()
+2 -2
View File
@@ -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)
+12 -2
View File
@@ -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)
+3
View File
@@ -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)
+2 -2
View File
@@ -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)))
+9 -9
View File
@@ -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"
+3 -6
View File
@@ -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
+3
View File
@@ -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
+6 -6
View File
@@ -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"
+11 -3
View File
@@ -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)
+2 -2
View File
@@ -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
+4 -3
View File
@@ -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
+1 -1
View File
@@ -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."
+7 -8
View File
@@ -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))
+2 -1
View File
@@ -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 -2
View File
@@ -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)
+1 -1
View File
@@ -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 -1
View File
@@ -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) )
+2 -2
View File
@@ -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
+1
View File
@@ -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,
+1 -1
View File
@@ -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"])
+1 -4
View File
@@ -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--
+3
View File
@@ -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
+15
View File
@@ -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)
+71
View File
@@ -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 -1
View File
@@ -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",
+36
View File
@@ -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)
+7 -9
View File
@@ -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
+21
View File
@@ -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")
+10
View File
@@ -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"
+13 -3
View File
@@ -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"
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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
+3 -2
View File
@@ -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"
-2
View File
@@ -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))
+4 -4
View File
@@ -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)
+35 -18
View File
@@ -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)
+53 -13
View File
@@ -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()
+3 -3
View File
@@ -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()
+10 -9
View File
@@ -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
View File
@@ -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()
+1 -1
View File
@@ -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"
-1
View File
@@ -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
+1 -1
View File
@@ -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)
+4 -4
View File
@@ -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>"
+1 -1
View File
@@ -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()
+8 -8
View File
@@ -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
+3
View File
@@ -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)
+1
View File
@@ -0,0 +1 @@
#define SURGERY_FAILURE -1
+32 -32
View File
@@ -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)
//////////////////////////////////////////////////////////////////
+42 -42
View File
@@ -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>")
+4 -4
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
#undef SURGERY_FAILURE
+37
View File
@@ -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."
+36
View File
@@ -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."
+36
View File
@@ -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