mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2026-08-29 15:50:10 +01:00
Merge branch 'master' into pr/600
This commit is contained in:
@@ -3953,7 +3953,6 @@
|
||||
/area/service/bar)
|
||||
"ann" = (
|
||||
/obj/effect/spawner/lootdrop/maintenance,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"ano" = (
|
||||
@@ -4154,12 +4153,17 @@
|
||||
/obj/item/radio/intercom{
|
||||
pixel_y = 25
|
||||
},
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/briefcase,
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"aoc" = (
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"aod" = (
|
||||
@@ -4859,6 +4863,9 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"aqa" = (
|
||||
@@ -4866,9 +4873,16 @@
|
||||
/turf/open/floor/carpet,
|
||||
/area/commons/dorms)
|
||||
"aqb" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/storage/briefcase,
|
||||
/obj/effect/decal/cleanable/cobweb/cobweb2,
|
||||
/obj/machinery/power/apc{
|
||||
areastring = "/area/service/lawoffice";
|
||||
dir = 1;
|
||||
name = "Law Office APC";
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"aqc" = (
|
||||
@@ -5175,15 +5189,6 @@
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
/area/security/warden)
|
||||
"aqO" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"aqP" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-8"
|
||||
@@ -5503,9 +5508,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/fore)
|
||||
"asc" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
},
|
||||
@@ -5543,15 +5545,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"asi" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 10
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"ask" = (
|
||||
/obj/item/flashlight/lamp/green{
|
||||
pixel_x = -2;
|
||||
@@ -5575,6 +5568,9 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"asq" = (
|
||||
@@ -6378,19 +6374,6 @@
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/floor/wood,
|
||||
/area/maintenance/port/fore)
|
||||
"avi" = (
|
||||
/obj/machinery/power/apc{
|
||||
areastring = "/area/service/lawoffice";
|
||||
dir = 1;
|
||||
name = "Law Office APC";
|
||||
pixel_y = 23
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"avj" = (
|
||||
/obj/machinery/firealarm{
|
||||
dir = 4;
|
||||
@@ -7190,16 +7173,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"ayh" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"ayi" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
@@ -7525,7 +7498,6 @@
|
||||
name = "Garden Maintenance";
|
||||
req_access_txt = "12"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"azq" = (
|
||||
@@ -8062,9 +8034,6 @@
|
||||
/obj/item/seeds/watermelon,
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/seeds/tower,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/service/hydroponics/garden)
|
||||
"aBB" = (
|
||||
@@ -8083,9 +8052,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/fore)
|
||||
"aBG" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/service/hydroponics/garden)
|
||||
"aBH" = (
|
||||
@@ -8892,6 +8859,9 @@
|
||||
/obj/machinery/door/airlock{
|
||||
name = "Garden"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/service/hydroponics/garden)
|
||||
"aEM" = (
|
||||
@@ -41348,12 +41318,12 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"cwS" = (
|
||||
@@ -42331,11 +42301,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/surgery)
|
||||
"cCs" = (
|
||||
/obj/structure/closet/emcloset,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"cCt" = (
|
||||
/obj/structure/closet,
|
||||
/obj/effect/spawner/lootdrop/maintenance{
|
||||
@@ -45161,6 +45126,9 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-4"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"eev" = (
|
||||
@@ -45396,6 +45364,12 @@
|
||||
"evR" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/bar)
|
||||
"ewb" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"ewu" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 6
|
||||
@@ -47758,6 +47732,9 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/landmark/navigate_destination/lawyer,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"gtZ" = (
|
||||
@@ -49027,11 +49004,6 @@
|
||||
/obj/structure/lattice,
|
||||
/turf/closed/wall,
|
||||
/area/maintenance/fore)
|
||||
"hCn" = (
|
||||
/obj/structure/closet/firecloset,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"hCp" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
@@ -49476,9 +49448,6 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
@@ -52542,26 +52511,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/processing)
|
||||
"kHw" = (
|
||||
/obj/machinery/door/airlock/security/glass{
|
||||
id_tag = "innerbrig";
|
||||
name = "Brig";
|
||||
req_access_txt = "1"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/effect/turf_decal/tile/red,
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/brig)
|
||||
"kHN" = (
|
||||
/obj/structure/chair{
|
||||
dir = 1
|
||||
@@ -55546,6 +55495,12 @@
|
||||
},
|
||||
/turf/open/floor/wood/wood_large,
|
||||
/area/service/chapel/office)
|
||||
"nrS" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"nsf" = (
|
||||
/obj/structure/cable/white{
|
||||
icon_state = "0-2"
|
||||
@@ -57441,19 +57396,6 @@
|
||||
/obj/effect/landmark/blobstart,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"pbQ" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/structure/disposalpipe/segment{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"pcz" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
@@ -57860,6 +57802,15 @@
|
||||
"pun" = (
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/security/prison/cells)
|
||||
"puO" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/commons/storage/primary)
|
||||
"pvJ" = (
|
||||
/obj/structure/rack,
|
||||
/obj/effect/spawner/lootdrop/maintenance{
|
||||
@@ -62475,10 +62426,6 @@
|
||||
/obj/structure/bookcase/random/religion,
|
||||
/turf/open/floor/wood/wood_large,
|
||||
/area/service/chapel/main)
|
||||
"tGO" = (
|
||||
/obj/machinery/power/apc/auto_name/west,
|
||||
/turf/closed/wall,
|
||||
/area/service/lawoffice)
|
||||
"tHc" = (
|
||||
/obj/machinery/door/airlock/grunge{
|
||||
name = "Prison Visitation";
|
||||
@@ -62737,6 +62684,12 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/starboard/aft)
|
||||
"tUc" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/service/lawoffice)
|
||||
"tUd" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 4
|
||||
@@ -64523,6 +64476,12 @@
|
||||
},
|
||||
/turf/open/floor/wood,
|
||||
/area/maintenance/bar)
|
||||
"vzY" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/commons/storage/primary)
|
||||
"vAI" = (
|
||||
/obj/effect/turf_decal/siding/white{
|
||||
dir = 1
|
||||
@@ -81256,7 +81215,7 @@ alU
|
||||
alU
|
||||
alU
|
||||
alU
|
||||
aqO
|
||||
auT
|
||||
lPA
|
||||
mUQ
|
||||
kwY
|
||||
@@ -81513,7 +81472,7 @@ alU
|
||||
atM
|
||||
atW
|
||||
alU
|
||||
aqO
|
||||
auT
|
||||
lPA
|
||||
aCW
|
||||
lPA
|
||||
@@ -82027,7 +81986,7 @@ arO
|
||||
amC
|
||||
aom
|
||||
ank
|
||||
aqO
|
||||
auT
|
||||
alU
|
||||
axf
|
||||
ayu
|
||||
@@ -82798,7 +82757,7 @@ alU
|
||||
alU
|
||||
alU
|
||||
auY
|
||||
aqO
|
||||
auT
|
||||
alU
|
||||
alU
|
||||
enJ
|
||||
@@ -83312,17 +83271,17 @@ ali
|
||||
aok
|
||||
amC
|
||||
anJ
|
||||
asi
|
||||
arH
|
||||
cCs
|
||||
auT
|
||||
alU
|
||||
aoX
|
||||
ann
|
||||
ann
|
||||
hCn
|
||||
cwS
|
||||
ayh
|
||||
avX
|
||||
amC
|
||||
asK
|
||||
azi
|
||||
aAx
|
||||
aBm
|
||||
aAQ
|
||||
aAQ
|
||||
aAQ
|
||||
aAQ
|
||||
aAQ
|
||||
@@ -83836,7 +83795,7 @@ alU
|
||||
asK
|
||||
azF
|
||||
aAS
|
||||
aFP
|
||||
aAQ
|
||||
aAQ
|
||||
aAQ
|
||||
aAQ
|
||||
@@ -84094,8 +84053,8 @@ asK
|
||||
azF
|
||||
aAU
|
||||
aBG
|
||||
aAQ
|
||||
aAQ
|
||||
aAx
|
||||
aBm
|
||||
aAQ
|
||||
aAQ
|
||||
aAQ
|
||||
@@ -84352,7 +84311,7 @@ azF
|
||||
aAP
|
||||
aAP
|
||||
aAP
|
||||
aAQ
|
||||
aFP
|
||||
aFO
|
||||
aHA
|
||||
aIT
|
||||
@@ -84866,7 +84825,7 @@ atN
|
||||
aAV
|
||||
aBQ
|
||||
aDh
|
||||
aDo
|
||||
vzY
|
||||
aFQ
|
||||
aHe
|
||||
aIN
|
||||
@@ -85123,7 +85082,7 @@ cwS
|
||||
aAN
|
||||
aBL
|
||||
aDd
|
||||
aDd
|
||||
puO
|
||||
aFR
|
||||
aDd
|
||||
aDd
|
||||
@@ -94881,8 +94840,8 @@ aph
|
||||
arW
|
||||
aso
|
||||
auf
|
||||
avi
|
||||
pbQ
|
||||
ayJ
|
||||
auo
|
||||
axy
|
||||
ayS
|
||||
jUT
|
||||
@@ -95132,7 +95091,7 @@ aiX
|
||||
anz
|
||||
anz
|
||||
aov
|
||||
tGO
|
||||
aph
|
||||
aob
|
||||
ara
|
||||
arV
|
||||
@@ -95391,9 +95350,9 @@ anz
|
||||
aov
|
||||
aph
|
||||
aoc
|
||||
ata
|
||||
nrS
|
||||
gtK
|
||||
ata
|
||||
ewb
|
||||
auh
|
||||
aph
|
||||
awg
|
||||
@@ -95647,7 +95606,7 @@ aqC
|
||||
anz
|
||||
aov
|
||||
api
|
||||
ata
|
||||
tUc
|
||||
dPR
|
||||
arX
|
||||
atc
|
||||
@@ -96924,7 +96883,7 @@ jyO
|
||||
ajC
|
||||
akC
|
||||
akX
|
||||
kHw
|
||||
alw
|
||||
amJ
|
||||
aoY
|
||||
rCl
|
||||
|
||||
@@ -53141,22 +53141,16 @@
|
||||
/turf/closed/wall,
|
||||
/area/medical/surgery)
|
||||
"dsN" = (
|
||||
/obj/item/clothing/gloves/color/latex,
|
||||
/obj/item/clothing/suit/apron/surgical,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/surgical_drapes,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/closet/secure_closet/medical2,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dsO" = (
|
||||
/obj/item/retractor,
|
||||
/obj/item/hemostat,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
@@ -53168,14 +53162,16 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/clothing/gloves/color/latex{
|
||||
pixel_y = 10
|
||||
},
|
||||
/obj/item/clothing/suit/apron/surgical,
|
||||
/obj/item/clothing/mask/surgical{
|
||||
pixel_y = -6
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dsP" = (
|
||||
/obj/item/circular_saw,
|
||||
/obj/item/surgicaldrill{
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 1
|
||||
},
|
||||
@@ -53189,11 +53185,10 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/limbgrower,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dsQ" = (
|
||||
/obj/item/scalpel,
|
||||
/obj/item/cautery,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
@@ -53207,6 +53202,13 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/clothing/gloves/color/latex{
|
||||
pixel_y = 10
|
||||
},
|
||||
/obj/item/clothing/suit/apron/surgical,
|
||||
/obj/item/clothing/mask/surgical{
|
||||
pixel_y = -6
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dsR" = (
|
||||
@@ -54364,9 +54366,6 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dvF" = (
|
||||
/obj/machinery/computer/operating{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/cable/white{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
@@ -54383,10 +54382,11 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/surgery)
|
||||
"dvG" = (
|
||||
/obj/structure/table/optable,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/structure/cable/white{
|
||||
icon_state = "2-8"
|
||||
@@ -54407,17 +54407,19 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/reagent_containers/spray/cleaner,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/surgery)
|
||||
"dvH" = (
|
||||
/obj/machinery/holopad,
|
||||
/obj/structure/cable/white{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/bot,
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/storage/backpack/duffelbag/med/surgery,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/surgery)
|
||||
"dvI" = (
|
||||
@@ -55091,21 +55093,21 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dxm" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dxn" = (
|
||||
/obj/structure/cable/white{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/obj/machinery/holopad,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/surgery)
|
||||
"dxo" = (
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
@@ -55704,7 +55706,6 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/surgery)
|
||||
"dyG" = (
|
||||
/obj/structure/closet/secure_closet/medical2,
|
||||
/obj/structure/sign/poster/official/cleanliness{
|
||||
pixel_x = -32
|
||||
},
|
||||
@@ -55718,25 +55719,12 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/surgery)
|
||||
"dyH" = (
|
||||
/obj/machinery/computer/operating{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/status_display/ai{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/surgery)
|
||||
"dyI" = (
|
||||
@@ -55762,12 +55750,10 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/crate/freezer/blood,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/surgery)
|
||||
"dyJ" = (
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_y = -32
|
||||
},
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 1
|
||||
},
|
||||
@@ -55778,7 +55764,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/closet/crate/freezer/blood,
|
||||
/obj/structure/table/optable,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/surgery)
|
||||
"dyK" = (
|
||||
@@ -55797,7 +55783,12 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/limbgrower,
|
||||
/obj/machinery/computer/operating{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/status_display/evac{
|
||||
pixel_y = -32
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/surgery)
|
||||
"dyL" = (
|
||||
@@ -177579,7 +177570,7 @@ dsO
|
||||
dtR
|
||||
dvF
|
||||
dxm
|
||||
dyH
|
||||
dyJ
|
||||
dma
|
||||
cPy
|
||||
cPy
|
||||
|
||||
@@ -3070,6 +3070,12 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/xenobiology)
|
||||
"baV" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science)
|
||||
"bbh" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/airalarm{
|
||||
@@ -11271,6 +11277,7 @@
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/security/brig)
|
||||
"dTD" = (
|
||||
@@ -15587,6 +15594,18 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/commons/dorms)
|
||||
"fsv" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/starboard)
|
||||
"fsw" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 4
|
||||
@@ -16469,12 +16488,10 @@
|
||||
/turf/open/floor/plasteel/freezer,
|
||||
/area/engineering/main)
|
||||
"fHN" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"fHP" = (
|
||||
@@ -17771,6 +17788,16 @@
|
||||
dir = 4
|
||||
},
|
||||
/area/service/theater)
|
||||
"gdN" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/command/storage/eva)
|
||||
"gdR" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -18902,6 +18929,12 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/secondary/exit/departure_lounge)
|
||||
"gBx" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science)
|
||||
"gBI" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -20199,6 +20232,7 @@
|
||||
/area/hallway/primary/port)
|
||||
"gWN" = (
|
||||
/obj/effect/landmark/navigate_destination/eva,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/command/storage/eva)
|
||||
"gWU" = (
|
||||
@@ -20626,6 +20660,10 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/commons/fitness/pool)
|
||||
"hfV" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/command/storage/eva)
|
||||
"hgb" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 5
|
||||
@@ -21076,6 +21114,9 @@
|
||||
/area/command/heads_quarters/captain/private)
|
||||
"hlw" = (
|
||||
/obj/effect/landmark/event_spawn,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science)
|
||||
"hlG" = (
|
||||
@@ -29183,6 +29224,14 @@
|
||||
/obj/machinery/door/poddoor/incinerator_atmos_aux,
|
||||
/turf/open/floor/engine/vacuum,
|
||||
/area/maintenance/disposal/incinerator)
|
||||
"kkl" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"kks" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/obj/structure/cable{
|
||||
@@ -32072,6 +32121,13 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/service/chapel/main)
|
||||
"ljB" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"ljD" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 4
|
||||
@@ -34926,6 +34982,15 @@
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/command/gateway)
|
||||
"mgC" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/starboard)
|
||||
"mgN" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
@@ -38489,6 +38554,12 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engineering/atmos)
|
||||
"nnq" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"nnU" = (
|
||||
/obj/effect/spawner/structure/window,
|
||||
/turf/open/floor/plating,
|
||||
@@ -41729,12 +41800,12 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"owR" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 10
|
||||
},
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/starboard)
|
||||
"owU" = (
|
||||
@@ -44050,6 +44121,18 @@
|
||||
"poG" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/command/heads_quarters/hop)
|
||||
"poJ" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/starboard)
|
||||
"poL" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
@@ -48055,6 +48138,12 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/service/chapel/main)
|
||||
"qKZ" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science)
|
||||
"qLd" = (
|
||||
/obj/structure/curtain,
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
@@ -49896,6 +49985,15 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/construction)
|
||||
"rqA" = (
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"rqE" = (
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -51363,6 +51461,7 @@
|
||||
req_access_txt = "19"
|
||||
},
|
||||
/obj/machinery/door/firedoor,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/command/storage/eva)
|
||||
"rSV" = (
|
||||
@@ -59779,6 +59878,12 @@
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/commons/storage/primary)
|
||||
"uKi" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science)
|
||||
"uKn" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
@@ -62035,6 +62140,15 @@
|
||||
initial_gas_mix = "o2=21.78;n2=82.36;TEMP=293"
|
||||
},
|
||||
/area/service/hydroponics/enclosure)
|
||||
"vyE" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/starboard)
|
||||
"vyF" = (
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/structure/cable{
|
||||
@@ -62475,6 +62589,9 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/starboard)
|
||||
"vEQ" = (
|
||||
@@ -63879,6 +63996,15 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engineering/atmos)
|
||||
"weT" = (
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"wfa" = (
|
||||
/obj/effect/turf_decal/tile/neutral,
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
@@ -101847,9 +101973,9 @@ snT
|
||||
xmJ
|
||||
tGd
|
||||
gzq
|
||||
gzq
|
||||
gzq
|
||||
gzq
|
||||
rqA
|
||||
ljB
|
||||
kkl
|
||||
fHN
|
||||
tPs
|
||||
xzv
|
||||
@@ -102104,7 +102230,7 @@ xmJ
|
||||
xmJ
|
||||
tGd
|
||||
xzv
|
||||
xzv
|
||||
nnq
|
||||
xzv
|
||||
xzv
|
||||
sxj
|
||||
@@ -102361,7 +102487,7 @@ nsR
|
||||
xmJ
|
||||
tGd
|
||||
wVf
|
||||
wVf
|
||||
weT
|
||||
wVf
|
||||
wVf
|
||||
wVf
|
||||
@@ -102618,7 +102744,7 @@ wzB
|
||||
xpx
|
||||
tGO
|
||||
tGO
|
||||
uZn
|
||||
brI
|
||||
uZn
|
||||
uZn
|
||||
tGO
|
||||
@@ -102875,7 +103001,7 @@ wzZ
|
||||
pnq
|
||||
tGO
|
||||
xQm
|
||||
xfq
|
||||
baV
|
||||
xfq
|
||||
xfq
|
||||
mcU
|
||||
@@ -103132,7 +103258,7 @@ wzZ
|
||||
mXv
|
||||
tGO
|
||||
xQA
|
||||
xfq
|
||||
baV
|
||||
xfq
|
||||
xfq
|
||||
cfk
|
||||
@@ -103646,7 +103772,7 @@ osB
|
||||
tGO
|
||||
xqj
|
||||
xSI
|
||||
xfq
|
||||
baV
|
||||
cqK
|
||||
rWx
|
||||
ejR
|
||||
@@ -103897,13 +104023,13 @@ qBJ
|
||||
unB
|
||||
rkv
|
||||
rLF
|
||||
stQ
|
||||
ygo
|
||||
mgC
|
||||
tnC
|
||||
owR
|
||||
kNN
|
||||
xfq
|
||||
xfq
|
||||
xfq
|
||||
gBx
|
||||
uKi
|
||||
mSt
|
||||
xyJ
|
||||
gzS
|
||||
@@ -104154,12 +104280,12 @@ qUx
|
||||
kXA
|
||||
spt
|
||||
rLF
|
||||
stQ
|
||||
vyE
|
||||
ygo
|
||||
bNF
|
||||
brI
|
||||
xfq
|
||||
xfq
|
||||
baV
|
||||
uzk
|
||||
mSt
|
||||
hIM
|
||||
@@ -104411,12 +104537,12 @@ qUx
|
||||
qUx
|
||||
uFH
|
||||
rOu
|
||||
stQ
|
||||
vyE
|
||||
vox
|
||||
jpU
|
||||
tpU
|
||||
tHV
|
||||
tHV
|
||||
qKZ
|
||||
rMv
|
||||
mSt
|
||||
hIM
|
||||
@@ -104925,7 +105051,7 @@ qCy
|
||||
qUj
|
||||
rqE
|
||||
rSV
|
||||
suO
|
||||
fsv
|
||||
ygo
|
||||
oDS
|
||||
xNa
|
||||
@@ -105176,13 +105302,13 @@ thT
|
||||
nUe
|
||||
rTi
|
||||
qti
|
||||
pmj
|
||||
pSO
|
||||
qUx
|
||||
qUx
|
||||
plH
|
||||
gdN
|
||||
hfV
|
||||
hfV
|
||||
gWN
|
||||
rST
|
||||
suO
|
||||
poJ
|
||||
ygo
|
||||
ygo
|
||||
vbA
|
||||
|
||||
@@ -91,13 +91,13 @@
|
||||
},
|
||||
/area/holodeck/rec_center/lounge)
|
||||
"ap" = (
|
||||
/turf/open/floor/holofloor/plating,
|
||||
/turf/open/floor/holofloor/basalt,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"aq" = (
|
||||
/turf/open/floor/holofloor/plating,
|
||||
/area/holodeck/rec_center/offline)
|
||||
"ar" = (
|
||||
/turf/open/floor/holofloor/plating/burnmix,
|
||||
/turf/open/indestructible/binary,
|
||||
/area/holodeck/rec_center/burn)
|
||||
"as" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -178,12 +178,12 @@
|
||||
},
|
||||
/area/holodeck/rec_center/lounge)
|
||||
"aB" = (
|
||||
/obj/effect/holodeck_effect/mobspawner,
|
||||
/turf/open/floor/holofloor/plating,
|
||||
/obj/effect/holodeck_effect/mobspawner/funclaw,
|
||||
/turf/open/floor/holofloor/basalt,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"aC" = (
|
||||
/obj/effect/holodeck_effect/sparks,
|
||||
/turf/open/floor/holofloor/plating/burnmix,
|
||||
/turf/open/indestructible/binary,
|
||||
/area/holodeck/rec_center/burn)
|
||||
"aD" = (
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
@@ -413,7 +413,7 @@
|
||||
/turf/closed/indestructible/riveted,
|
||||
/area/space)
|
||||
"bk" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/bee,
|
||||
/obj/effect/holodeck_effect/mobspawner/bumbles,
|
||||
/turf/open/floor/holofloor/asteroid,
|
||||
/area/holodeck/rec_center/anthophila)
|
||||
"bl" = (
|
||||
@@ -752,7 +752,7 @@
|
||||
},
|
||||
/area/holodeck/rec_center/medical)
|
||||
"ce" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/bee,
|
||||
/obj/effect/holodeck_effect/mobspawner/bumbles,
|
||||
/obj/item/clothing/head/beekeeper_head,
|
||||
/turf/open/floor/holofloor/asteroid,
|
||||
/area/holodeck/rec_center/anthophila)
|
||||
@@ -856,13 +856,13 @@
|
||||
/turf/open/floor/holofloor,
|
||||
/area/holodeck/rec_center/dodgeball)
|
||||
"cq" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/bee,
|
||||
/obj/effect/holodeck_effect/mobspawner/bumbles,
|
||||
/obj/effect/decal/remains/human,
|
||||
/obj/item/clothing/suit/beekeeper_suit,
|
||||
/turf/open/floor/holofloor/asteroid,
|
||||
/area/holodeck/rec_center/anthophila)
|
||||
"cr" = (
|
||||
/obj/effect/holodeck_effect/mobspawner/bee,
|
||||
/obj/effect/holodeck_effect/mobspawner/bumbles,
|
||||
/obj/item/melee/flyswatter,
|
||||
/turf/open/floor/holofloor/asteroid,
|
||||
/area/holodeck/rec_center/anthophila)
|
||||
@@ -20270,6 +20270,9 @@
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"Vy" = (
|
||||
/turf/open/chasm/lavaland,
|
||||
/area/holodeck/rec_center/wildlife)
|
||||
"Vz" = (
|
||||
/obj/machinery/vending/wallmed{
|
||||
name = "Emergency NanoMed";
|
||||
@@ -80911,16 +80914,16 @@ aa
|
||||
"}
|
||||
(232,1,1) = {"
|
||||
ac
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
bj
|
||||
bt
|
||||
bI
|
||||
@@ -81168,7 +81171,7 @@ aa
|
||||
"}
|
||||
(233,1,1) = {"
|
||||
ac
|
||||
ap
|
||||
Vy
|
||||
aB
|
||||
ap
|
||||
ap
|
||||
@@ -81177,7 +81180,7 @@ ap
|
||||
ap
|
||||
ap
|
||||
aB
|
||||
ap
|
||||
Vy
|
||||
bj
|
||||
Xg
|
||||
TF
|
||||
@@ -81425,7 +81428,7 @@ aa
|
||||
"}
|
||||
(234,1,1) = {"
|
||||
ac
|
||||
ap
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
@@ -81434,7 +81437,7 @@ aB
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
Vy
|
||||
bj
|
||||
bu
|
||||
bJ
|
||||
@@ -81682,16 +81685,16 @@ aa
|
||||
"}
|
||||
(235,1,1) = {"
|
||||
ac
|
||||
ap
|
||||
aB
|
||||
Vy
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
aB
|
||||
ap
|
||||
ap
|
||||
Vy
|
||||
bj
|
||||
bv
|
||||
bK
|
||||
@@ -81939,16 +81942,16 @@ aa
|
||||
"}
|
||||
(236,1,1) = {"
|
||||
ac
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
ap
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
Vy
|
||||
bj
|
||||
RD
|
||||
Va
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
id = "QMLoad";
|
||||
name = "off ramp"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/supply)
|
||||
"j" = (
|
||||
@@ -82,6 +83,7 @@
|
||||
dir = 4;
|
||||
dwidth = 4
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/mineral/plastitanium,
|
||||
/area/shuttle/supply)
|
||||
"n" = (
|
||||
@@ -137,6 +139,7 @@
|
||||
req_access_txt = "31"
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/mineral/plastitanium,
|
||||
/area/shuttle/supply)
|
||||
"t" = (
|
||||
@@ -149,6 +152,7 @@
|
||||
id = "QMLoad2";
|
||||
name = "on ramp"
|
||||
},
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/supply)
|
||||
"u" = (
|
||||
|
||||
@@ -51,4 +51,4 @@
|
||||
#define ORGAN_NO_SPOIL (1<<5) //Do not spoil under any circumstances
|
||||
#define ORGAN_NO_DISMEMBERMENT (1<<6) //Immune to disembowelment.
|
||||
#define ORGAN_EDIBLE (1<<7) //is a snack? :D
|
||||
#define ORGAN_SYNTHETIC_EMP (1<<6) //Synthetic organ affected by an EMP. Deteriorates over time.
|
||||
#define ORGAN_SYNTHETIC_EMP (1<<8) //Synthetic organ affected by an EMP. Deteriorates over time.
|
||||
|
||||
@@ -74,7 +74,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
#define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid))
|
||||
#define isethereal(A) (is_species(A, /datum/species/ethereal))
|
||||
#define isvampire(A) (is_species(A,/datum/species/vampire))
|
||||
#define isdullahan(A) (is_species(A, /datum/species/dullahan))
|
||||
|
||||
#define ismush(A) (is_species(A, /datum/species/mush))
|
||||
#define isshadow(A) (is_species(A, /datum/species/shadow))
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
//backpack
|
||||
#define LOADOUT_CATEGORY_BACKPACK "In backpack"
|
||||
#define LOADOUT_SUBCATEGORY_BACKPACK_GENERAL "General" //basically anything that there's not enough of to have its own subcategory
|
||||
#define LOADOUT_SUBCATEGORY_BACKPACK_ACCESSORIES "Accessories" //maybe one day someone will make loadouts have accessory compatibility
|
||||
#define LOADOUT_SUBCATEGORY_BACKPACK_TOYS "Toys"
|
||||
//neck
|
||||
#define LOADOUT_CATEGORY_NECK "Neck"
|
||||
|
||||
@@ -279,9 +279,13 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE))
|
||||
#define PDA_SKIN_MODERN "Modern"
|
||||
#define PDA_SKIN_MINIMAL "Minimal"
|
||||
|
||||
GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_SKIN_ALT = 'icons/obj/pda_alt.dmi',
|
||||
PDA_SKIN_RUGGED = 'icons/obj/pda_rugged.dmi', PDA_SKIN_MODERN = 'icons/obj/pda_modern.dmi',
|
||||
PDA_SKIN_MINIMAL = 'icons/obj/pda_minimal.dmi'))
|
||||
GLOBAL_LIST_INIT(pda_reskins, list(
|
||||
PDA_SKIN_CLASSIC = list("icon" = 'icons/obj/pda.dmi'),
|
||||
PDA_SKIN_ALT = list("icon" = 'icons/obj/pda_alt.dmi'),
|
||||
PDA_SKIN_RUGGED = list("icon" = 'icons/obj/pda_rugged.dmi'),
|
||||
PDA_SKIN_MODERN = list("icon" = 'icons/obj/pda_modern.dmi'),
|
||||
PDA_SKIN_MINIMAL = list("icon" = 'icons/obj/pda_minimal.dmi')
|
||||
))
|
||||
|
||||
/////////////////////////////////////
|
||||
// atom.appearence_flags shortcuts //
|
||||
|
||||
@@ -295,7 +295,8 @@
|
||||
|
||||
// MINOR TWEAKS/MISC
|
||||
#define AGE_MIN 18 // youngest a character can be // CITADEL EDIT - 17 --> 18
|
||||
#define AGE_MAX 85 // oldest a character can be
|
||||
#define AGE_MAX 85 // oldest a character can be randomly generated
|
||||
#define AGE_MAX_INPUT 85 // oldest a character's age can be manually set
|
||||
#define WIZARD_AGE_MIN 30 // youngest a wizard can be
|
||||
#define APPRENTICE_AGE_MIN 29 // youngest an apprentice can be
|
||||
#define SHOES_SLOWDOWN 0 // How much shoes slow you down by default. Negative values speed you up
|
||||
|
||||
@@ -114,6 +114,3 @@
|
||||
#define span_warning(str) ("<span class='warning'>" + str + "</span>")
|
||||
#define span_yell(str) ("<span class='yell'>" + str + "</span>")
|
||||
#define span_yellowteamradio(str) ("<span class='yellowteamradio'>" + str + "</span>")
|
||||
|
||||
//SANDSTORM DEFINES
|
||||
#define span_love(str) ("<span class='love'>" + str + "</span>")
|
||||
|
||||
@@ -235,6 +235,8 @@
|
||||
#define TRAIT_BEING_CARRIED "being_carried"
|
||||
#define TRAIT_GLASS_BONES "glass_bones"
|
||||
#define TRAIT_PAPER_SKIN "paper_skin"
|
||||
//used because it's more reliable than checking for the component
|
||||
#define TRAIT_DULLAHAN "dullahan"
|
||||
|
||||
// mobility flag traits
|
||||
// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it)
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
/// Checks if potential_weakref is a weakref of thing.
|
||||
#define IS_WEAKREF_OF(thing, potential_weakref) (istype(thing, /datum) && !isnull(potential_weakref) && thing.weak_reference == potential_weakref)
|
||||
@@ -1,2 +1,3 @@
|
||||
#define span_userlove(str) ("<span class='userlove'>" + str + "</span>")
|
||||
#define span_lewd(str) ("<span class='lewd'>" + str + "</span>")
|
||||
#define span_love(str) ("<span class='love'>" + str + "</span>")
|
||||
#define span_userlove(str) ("<span class='userlove'>" + str + "</span>")
|
||||
@@ -2,3 +2,7 @@
|
||||
#define PLAYER_READY_TO_OBSERVE 2
|
||||
|
||||
#define WENDIGO_BODYPART "wendigo"
|
||||
|
||||
// Increase max age
|
||||
#undef AGE_MAX_INPUT
|
||||
#define AGE_MAX_INPUT SHORT_REAL_LIMIT // Maximum safe number
|
||||
|
||||
@@ -7,5 +7,6 @@
|
||||
#define TRAIT_IN_HEAT "in_heat"
|
||||
#define TRAIT_HEAT_DETECT "heat_detect"
|
||||
#define TRAIT_ILLITERATE "illiterate"
|
||||
#define TRAIT_HIDE_BACKPACK "hide_backpack"
|
||||
|
||||
#define TRAIT_DUMB4CUM "dumb4cum"
|
||||
|
||||
@@ -209,7 +209,8 @@ GLOBAL_LIST_INIT(backbaglist, list(DBACKPACK, DSATCHEL, DDUFFELBAG, //everything
|
||||
"Grey Satchel" = /obj/item/storage/backpack/satchel,
|
||||
"Grey Duffel Bag" = /obj/item/storage/backpack/duffelbag,
|
||||
"Leather Satchel" = /obj/item/storage/backpack/satchel/leather,
|
||||
"Snail Shell" = /obj/item/storage/backpack/snail))
|
||||
"Snail Shell" = /obj/item/storage/backpack/snail,
|
||||
"Sloog Shell" = /obj/item/storage/backpack/sloogshell))
|
||||
|
||||
//Suit/Skirt
|
||||
#define PREF_SUIT "Jumpsuit"
|
||||
@@ -378,7 +379,7 @@ GLOBAL_LIST_INIT(job_heirlooms, list(
|
||||
GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem"))
|
||||
|
||||
//list of eye types, corresponding to a respective left and right icon state for the set of eyes
|
||||
GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin"))
|
||||
GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin", "none"))
|
||||
|
||||
//list linking bodypart bitflags to their actual names
|
||||
GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm"))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
GLOBAL_LIST_INIT(loadout_categories, list(
|
||||
LOADOUT_CATEGORY_BACKPACK = list(LOADOUT_SUBCATEGORY_BACKPACK_GENERAL, LOADOUT_SUBCATEGORY_BACKPACK_TOYS),
|
||||
LOADOUT_CATEGORY_BACKPACK = list(LOADOUT_SUBCATEGORY_BACKPACK_GENERAL, LOADOUT_SUBCATEGORY_BACKPACK_ACCESSORIES, LOADOUT_SUBCATEGORY_BACKPACK_TOYS),
|
||||
LOADOUT_CATEGORY_NECK = list(LOADOUT_SUBCATEGORY_NECK_GENERAL, LOADOUT_SUBCATEGORY_NECK_TIE, LOADOUT_SUBCATEGORY_NECK_SCARVES),
|
||||
LOADOUT_CATEGORY_MASK = LOADOUT_SUBCATEGORIES_NONE,
|
||||
LOADOUT_CATEGORY_HANDS = LOADOUT_SUBCATEGORIES_NONE,
|
||||
|
||||
@@ -405,7 +405,7 @@
|
||||
return
|
||||
|
||||
/atom/proc/CtrlShiftClick(mob/user)
|
||||
SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT)
|
||||
SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT, user)
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
@@ -18,6 +18,7 @@ SUBSYSTEM_DEF(statpanels)
|
||||
"Map: [SSmapping.config?.map_name || "Loading..."]",
|
||||
cached ? "Next Map: [cached.map_name]" : null,
|
||||
"Round ID: [GLOB.round_id ? GLOB.round_id : "NULL"]",
|
||||
"Game Mode: [GLOB.master_mode]",
|
||||
"Connected Players: [GLOB.clients.len]",
|
||||
" ",
|
||||
"OOC: [GLOB.ooc_allowed ? "Enabled" : "Disabled"]",
|
||||
|
||||
@@ -87,6 +87,7 @@ SUBSYSTEM_DEF(throwing)
|
||||
if(HAS_TRAIT_FROM(thrownthing, TRAIT_SPOOKY_THROW, "revenant"))
|
||||
REMOVE_TRAIT(thrownthing, TRAIT_SPOOKY_THROW, "revenant")
|
||||
SSthrowing.processing -= thrownthing
|
||||
SSthrowing.currentrun -= thrownthing
|
||||
thrownthing.throwing = null
|
||||
thrownthing = null
|
||||
target = null
|
||||
|
||||
@@ -94,10 +94,9 @@
|
||||
|
||||
/datum/accent/dullahan/modify_speech(list/speech_args, datum/source, mob/living/carbon/owner)
|
||||
if(owner)
|
||||
if(isdullahan(owner))
|
||||
var/datum/species/dullahan/D = owner.dna.species
|
||||
if(isobj(D.myhead.loc))
|
||||
var/obj/O = D.myhead.loc
|
||||
O.say(speech_args[SPEECH_MESSAGE])
|
||||
var/datum/component/dullahan/dullahan = owner.GetComponent(/datum/component/dullahan)
|
||||
if(dullahan)
|
||||
if(dullahan.dullahan_head)
|
||||
dullahan.dullahan_head.say(speech_args[SPEECH_MESSAGE])
|
||||
speech_args[SPEECH_MESSAGE] = ""
|
||||
return speech_args
|
||||
|
||||
@@ -43,8 +43,7 @@
|
||||
if(owner)
|
||||
Remove(owner)
|
||||
target = null
|
||||
qdel(button)
|
||||
button = null
|
||||
QDEL_NULL(button)
|
||||
return ..()
|
||||
|
||||
/datum/action/proc/Grant(mob/M)
|
||||
|
||||
@@ -287,7 +287,7 @@
|
||||
name = "Durathread Reinforcement Kit"
|
||||
result = /obj/item/armorkit
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 4)
|
||||
tools = list(/obj/item/stack/sheet/mineral/titanium, TOOL_WIRECUTTER) // tough needle for a tough fabric
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
time = 40
|
||||
category = CAT_CLOTHING
|
||||
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
/datum/component/dullahan
|
||||
var/obj/item/dullahan_head/dullahan_head
|
||||
|
||||
/datum/component/dullahan/Initialize()
|
||||
. = ..()
|
||||
|
||||
var/mob/living/carbon/human/H = parent
|
||||
if(!H)
|
||||
return .
|
||||
|
||||
ADD_TRAIT(H, TRAIT_DULLAHAN, "dullahan_component")
|
||||
ADD_TRAIT(H, TRAIT_NOHUNGER, "dullahan_component_no_hunger")
|
||||
ADD_TRAIT(H, TRAIT_NOBREATH, "dullahan_component_no_breath")
|
||||
|
||||
dullahan_head = new(get_turf(H))
|
||||
|
||||
update_name()
|
||||
|
||||
dullahan_head.owner = H
|
||||
RegisterSignal(H, COMSIG_LIVING_REGENERATE_LIMBS, .proc/unlist_head)
|
||||
|
||||
// make sure the brain can't decay or fall out
|
||||
var/obj/item/organ/brain/B = H.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
B.zone = "abstract" // it exists in the ethereal plain
|
||||
B.organ_flags = ORGAN_NO_SPOIL | ORGAN_NO_DISMEMBERMENT | ORGAN_VITAL
|
||||
dullahan_head.B = B
|
||||
|
||||
// the eyes get similar treatment
|
||||
var/obj/item/organ/eyes/dullahan/new_eyes = new()
|
||||
var/obj/item/organ/eyes/E = H.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(E)
|
||||
new_eyes.left_eye_color = E.left_eye_color
|
||||
new_eyes.right_eye_color = E.right_eye_color
|
||||
E.Remove()
|
||||
qdel(E)
|
||||
new_eyes.Insert(H)
|
||||
|
||||
// make sure you handle the tongue correctly, too!
|
||||
var/obj/item/organ/tongue/T = H.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
T.Remove()
|
||||
qdel(T)
|
||||
|
||||
var/obj/item/organ/tongue/dullahan/new_tongue = new()
|
||||
new_tongue.Insert(H)
|
||||
|
||||
// uh, eyes!
|
||||
var/obj/item/organ/ears/dullahan_ears = H.getorganslot(ORGAN_SLOT_EARS)
|
||||
if(dullahan_ears)
|
||||
dullahan_ears.zone = "abstract"
|
||||
|
||||
// moving the brain's zone means we don't need the head to survive
|
||||
var/obj/item/bodypart/head/head = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
if(head)
|
||||
head.drop_limb()
|
||||
qdel(head)
|
||||
|
||||
H.flags_1 &= ~(HEAR_1)
|
||||
|
||||
RegisterSignal(dullahan_head, COMSIG_ATOM_HEARER_IN_VIEW, .proc/include_owner)
|
||||
|
||||
dullahan_head.update_appearance()
|
||||
|
||||
/datum/component/dullahan/proc/update_name(retries = 0)
|
||||
if(retries > 30)
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/H = parent
|
||||
if(length(H.name))
|
||||
dullahan_head.name = "[H.name]'s head"
|
||||
dullahan_head.desc = "the decapitated head of [H.name]"
|
||||
return TRUE
|
||||
addtimer(CALLBACK(src, .proc/update_name, retries + 1), 2 SECONDS)
|
||||
|
||||
/datum/component/dullahan/proc/include_owner(datum/source, list/processing_list, list/hearers)
|
||||
if(!QDELETED(parent))
|
||||
hearers += parent
|
||||
|
||||
/datum/component/dullahan/proc/unlist_head(datum/source, noheal = FALSE, list/excluded_limbs)
|
||||
excluded_limbs |= BODY_ZONE_HEAD // So we don't gib when regenerating limbs.
|
||||
|
||||
/obj/item/organ/tongue/dullahan
|
||||
zone = "abstract"
|
||||
initial_accents = list(/datum/accent/dullahan)
|
||||
organ_flags = ORGAN_NO_SPOIL | ORGAN_NO_DISMEMBERMENT
|
||||
|
||||
/obj/item/organ/eyes/dullahan
|
||||
name = "head vision"
|
||||
desc = "An abstraction."
|
||||
actions_types = list(/datum/action/item_action/organ_action/dullahan)
|
||||
zone = "abstract"
|
||||
tint = INFINITY // used to switch the vision perspective to the head on species_gain().
|
||||
organ_flags = ORGAN_NO_SPOIL | ORGAN_NO_DISMEMBERMENT
|
||||
|
||||
/obj/item/dullahan_head
|
||||
name = "coders lament"
|
||||
desc = "you shouldn't be reading this"
|
||||
flags_1 = HEAR_1
|
||||
var/mob/living/carbon/human/owner
|
||||
// this is for keeping track of the overlays because you can't read the actual overlays list as it's a special byond var
|
||||
var/list/overlays_standing
|
||||
var/obj/item/organ/brain/B
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/dullahan_head/Destroy()
|
||||
if(owner)
|
||||
B.Remove()
|
||||
B.forceMove(get_turf(src))
|
||||
owner.gib()
|
||||
. = ..()
|
||||
|
||||
// update head sprite
|
||||
/obj/item/dullahan_head/proc/remove_head_overlays()
|
||||
overlays_standing = list()
|
||||
cut_overlays()
|
||||
|
||||
/obj/item/dullahan_head/proc/add_head_overlay(var/overlay)
|
||||
overlays_standing += overlay
|
||||
add_overlay(overlay)
|
||||
|
||||
/obj/item/dullahan_head/update_appearance()
|
||||
if(owner && !HAS_TRAIT(owner, TRAIT_HUMAN_NO_RENDER))
|
||||
remove_head_overlays()
|
||||
// to do this without duplicating large amounts of code
|
||||
// it's best to regenerate the head, then remove it once we have the overlays we want
|
||||
owner.regenerate_limb(BODY_ZONE_HEAD, TRUE) // don't heal them
|
||||
owner.cut_overlays()
|
||||
owner.regenerate_icons(TRUE) // yes i know it's expensive but do you want me to rewrite our entire overlay system, also block recursive calls here by passing in TRUE (it wont go back to call update_appearance this way)
|
||||
var/obj/item/bodypart/head/head = owner.get_bodypart(BODY_ZONE_HEAD)
|
||||
if(head)
|
||||
add_overlay(head.get_limb_icon(FALSE, TRUE, TRUE))
|
||||
for(var/overlay in owner.overlays_standing)
|
||||
if(istype(overlay, /mutable_appearance))
|
||||
var/mutable_appearance/mutable = overlay
|
||||
if(mutable.category == "HEAD")
|
||||
add_head_overlay(mutable)
|
||||
else
|
||||
if(islist(overlay))
|
||||
var/list/list_appearances = overlay
|
||||
for(var/overlay2 in list_appearances)
|
||||
if(istype(overlay2, /mutable_appearance))
|
||||
var/mutable_appearance/mutable = overlay2
|
||||
if(mutable.category == "HEAD")
|
||||
add_head_overlay(mutable)
|
||||
head.drop_limb()
|
||||
qdel(head)
|
||||
|
||||
/obj/item/dullahan_head/proc/unlist_head(datum/source, noheal = FALSE, list/excluded_limbs)
|
||||
excluded_limbs |= BODY_ZONE_HEAD // So we don't gib when regenerating limbs.
|
||||
|
||||
/datum/action/item_action/organ_action/dullahan
|
||||
name = "Toggle Perspective"
|
||||
desc = "Switch between seeing normally from your head, or blindly from your body."
|
||||
|
||||
/datum/action/item_action/organ_action/dullahan/Trigger()
|
||||
. = ..()
|
||||
var/mob/living/carbon/human/H = owner
|
||||
var/obj/item/organ/eyes/E = owner.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(E)
|
||||
if(E.tint)
|
||||
E.tint = 0
|
||||
else
|
||||
E.tint = INFINITY
|
||||
|
||||
var/datum/component/dullahan/D = H.GetComponent(/datum/component/dullahan)
|
||||
if(D)
|
||||
D.update_vision_perspective()
|
||||
|
||||
/datum/component/dullahan/proc/update_vision_perspective()
|
||||
var/mob/living/carbon/human/H = parent
|
||||
if(!H)
|
||||
return .
|
||||
var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(eyes)
|
||||
H.update_tint()
|
||||
if(eyes.tint)
|
||||
H.reset_perspective(H)
|
||||
else
|
||||
H.reset_perspective(dullahan_head)
|
||||
|
||||
/datum/component/dullahan/Destroy()
|
||||
UnregisterSignal(parent, COMSIG_LIVING_REGENERATE_LIMBS)
|
||||
dullahan_head.owner = null
|
||||
qdel(dullahan_head)
|
||||
REMOVE_TRAIT(parent, TRAIT_DULLAHAN, "dullahan_component")
|
||||
|
||||
// work out what organs to give them based on their species
|
||||
if(ishuman(parent))
|
||||
var/mob/living/carbon/human/H = parent
|
||||
var/obj/item/organ/eyes/new_eyes = new H.dna.species.mutanteyes()
|
||||
var/obj/item/organ/brain/new_brain = new H.dna.species.mutant_brain()
|
||||
var/obj/item/organ/tongue/new_tongue = new H.dna.species.mutanttongue()
|
||||
var/obj/item/organ/eyes/old_eyes = H.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/brain/old_brain = H.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
var/obj/item/organ/tongue/old_tongue = H.getorganslot(ORGAN_SLOT_TONGUE)
|
||||
|
||||
H.regenerate_limb(BODY_ZONE_HEAD, TRUE)
|
||||
H.reset_perspective(H)
|
||||
|
||||
old_brain.Remove(TRUE,TRUE)
|
||||
QDEL_NULL(old_brain)
|
||||
new_brain.Insert(H, TRUE, TRUE)
|
||||
|
||||
old_eyes.Remove(TRUE,TRUE)
|
||||
QDEL_NULL(old_eyes)
|
||||
new_eyes.Insert(H, TRUE, TRUE)
|
||||
|
||||
old_tongue.Remove(TRUE,TRUE)
|
||||
QDEL_NULL(old_tongue)
|
||||
new_tongue.Insert(H, TRUE, TRUE)
|
||||
. = ..()
|
||||
@@ -34,6 +34,7 @@
|
||||
RegisterSignal(parent, COMSIG_MOB_HUD_CREATED, .proc/modify_hud)
|
||||
RegisterSignal(parent, COMSIG_MOB_DEATH, .proc/stop_processing)
|
||||
RegisterSignal(parent, COMSIG_VOID_MASK_ACT, .proc/direct_sanity_drain)
|
||||
RegisterSignal(parent, COMSIG_ENTER_AREA, .proc/update_beauty)
|
||||
|
||||
|
||||
if(owner.hud_used)
|
||||
@@ -355,7 +356,7 @@
|
||||
if(ETHEREAL_CHARGE_OVERLOAD to ETHEREAL_CHARGE_DANGEROUS)
|
||||
add_event(null, "charge", /datum/mood_event/supercharged)
|
||||
|
||||
/datum/component/mood/proc/update_beauty(area/A)
|
||||
/datum/component/mood/proc/update_beauty(datum/source, area/A)
|
||||
if(A.outdoors) //if we're outside, we don't care.
|
||||
clear_event(null, "area_beauty")
|
||||
return FALSE
|
||||
|
||||
+6
-9
@@ -709,16 +709,13 @@
|
||||
death()
|
||||
petrify(INFINITY)
|
||||
if(3)
|
||||
if(prob(90))
|
||||
var/obj/item/bodypart/BP = get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD))
|
||||
if(BP)
|
||||
BP.dismember()
|
||||
else
|
||||
unequip_everything()
|
||||
drop_all_held_items()
|
||||
gib()
|
||||
var/obj/item/bodypart/BP = get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD))
|
||||
if(BP)
|
||||
BP.dismember()
|
||||
else
|
||||
set_species(/datum/species/dullahan)
|
||||
unequip_everything()
|
||||
drop_all_held_items()
|
||||
gib()
|
||||
|
||||
/datum/dna/proc/update_body_size(old_size)
|
||||
if(!holder || features["body_size"] == old_size)
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/// This element hooks a signal onto the loc the current object is on.
|
||||
/// When the object moves, it will unhook the signal and rehook it to the new object.
|
||||
/datum/element/connect_loc
|
||||
element_flags = ELEMENT_BESPOKE
|
||||
id_arg_index = 2
|
||||
|
||||
/// An assoc list of signal -> procpath to register to the loc this object is on.
|
||||
var/list/connections
|
||||
|
||||
/datum/element/connect_loc/Attach(atom/movable/listener, list/connections)
|
||||
. = ..()
|
||||
if (!istype(listener))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
|
||||
src.connections = connections
|
||||
|
||||
RegisterSignal(listener, COMSIG_MOVABLE_MOVED, .proc/on_moved, override = TRUE)
|
||||
update_signals(listener)
|
||||
|
||||
/datum/element/connect_loc/Detach(atom/movable/listener)
|
||||
. = ..()
|
||||
unregister_signals(listener, listener.loc)
|
||||
UnregisterSignal(listener, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
/datum/element/connect_loc/proc/update_signals(atom/movable/listener)
|
||||
var/atom/listener_loc = listener.loc
|
||||
if(isnull(listener_loc))
|
||||
return
|
||||
|
||||
for (var/signal in connections)
|
||||
//override=TRUE because more than one connect_loc element instance tracked object can be on the same loc
|
||||
listener.RegisterSignal(listener_loc, signal, connections[signal], override=TRUE)
|
||||
|
||||
/datum/element/connect_loc/proc/unregister_signals(datum/listener, atom/old_loc)
|
||||
if(isnull(old_loc))
|
||||
return
|
||||
|
||||
listener.UnregisterSignal(old_loc, connections)
|
||||
|
||||
/datum/element/connect_loc/proc/on_moved(atom/movable/listener, atom/old_loc)
|
||||
SIGNAL_HANDLER
|
||||
unregister_signals(listener, old_loc)
|
||||
update_signals(listener)
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* # Element: Object Reskinning
|
||||
*
|
||||
* Allows players to modify the appearance of their object (and other attributes if possible)
|
||||
* PLEASE DO NOT HAVE INVALID VALUES IN unique_reskin I DON'T EVEN WANT TO KNOW WHAT HAPPENS.
|
||||
* USAGE:
|
||||
* unique_reskins = list(
|
||||
* "skin 1" = list(
|
||||
* "desc" = "very cool description",
|
||||
* "icon" = 'very_cool_icon.dmi'
|
||||
* ),
|
||||
* "skin 2" = list(
|
||||
* "desc" = "not as cool description",
|
||||
* "icon" = 'the_boring_skin.dmi'
|
||||
* )
|
||||
* )
|
||||
*/
|
||||
/datum/element/object_reskinning
|
||||
element_flags = ELEMENT_DETACH
|
||||
|
||||
/datum/element/object_reskinning/Attach(datum/target)
|
||||
. = ..()
|
||||
var/obj/the_obj = target
|
||||
if(!istype(the_obj))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
if(!islist(the_obj.unique_reskin) || !length(the_obj.unique_reskin))
|
||||
message_admins("[src] was given to an object without any unique reskins, if you really need to, give it a couple skins first.")
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
|
||||
RegisterSignal(the_obj, COMSIG_PARENT_EXAMINE, .proc/on_examine)
|
||||
RegisterSignal(the_obj, the_obj.reskin_binding, .proc/reskin)
|
||||
|
||||
/datum/element/object_reskinning/Detach(datum/source, force)
|
||||
var/obj/being_deleted = source
|
||||
UnregisterSignal(source, list(COMSIG_PARENT_EXAMINE, being_deleted.reskin_binding))
|
||||
return ..()
|
||||
|
||||
/datum/element/object_reskinning/proc/on_examine(obj/obj, mob/user, list/examine_list)
|
||||
examine_list += span_notice("[capitalize(replacetext(obj.reskin_binding, "_", "-"))] to reskin it ([length(obj.unique_reskin)] possible styles).")
|
||||
if(obj.always_reskinnable)
|
||||
examine_list += span_notice("It has no limit to reskinning.")
|
||||
|
||||
/*
|
||||
* Reskins an object according to user's choice.
|
||||
* Will detach itself if there's no skins or if done successfully but not always reskinnable.
|
||||
*
|
||||
* Arguments:
|
||||
* * to_reskin The object we will be reskinning
|
||||
* * user The user who wants to choose a skin for the object
|
||||
*/
|
||||
/datum/element/object_reskinning/proc/reskin(obj/to_reskin, mob/user)
|
||||
// Just stop early
|
||||
if(!LAZYLEN(to_reskin.unique_reskin))
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] attempted to reskin an object that has no skins!")
|
||||
Detach(to_reskin)
|
||||
return FALSE
|
||||
|
||||
// Can't use
|
||||
if(!user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY, NO_TK))
|
||||
return FALSE
|
||||
|
||||
// Get our choices
|
||||
var/list/items = list()
|
||||
for(var/reskin_option in to_reskin.unique_reskin)
|
||||
var/image/item_image = image(
|
||||
icon = to_reskin.unique_reskin[reskin_option]["icon"] ? to_reskin.unique_reskin[reskin_option]["icon"] : to_reskin.icon,
|
||||
icon_state = to_reskin.unique_reskin[reskin_option]["icon_state"] ? to_reskin.unique_reskin[reskin_option]["icon_state"] : to_reskin.icon_state)
|
||||
items += list("[reskin_option]" = item_image)
|
||||
sortList(items)
|
||||
|
||||
// Display to the user
|
||||
var/pick = show_radial_menu(user, to_reskin, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, user, to_reskin), radius = 38, require_near = TRUE)
|
||||
if(!pick)
|
||||
return FALSE
|
||||
|
||||
// Finish the work
|
||||
to_reskin.current_skin = pick
|
||||
for(var/reskin_var in to_reskin.unique_reskin[pick])
|
||||
to_reskin.vars[reskin_var] = to_reskin.unique_reskin[pick][reskin_var]
|
||||
to_chat(user, "[to_reskin] is now skinned as '[pick].'")
|
||||
to_reskin.reskin_obj(user)
|
||||
|
||||
// Only once or always?
|
||||
if(!to_reskin.always_reskinnable)
|
||||
Detach(to_reskin)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Checks if we are allowed to interact with a radial menu for reskins
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with the menu
|
||||
* * obj The obj to be checking against
|
||||
*/
|
||||
/datum/element/object_reskinning/proc/check_reskin_menu(mob/user, obj/obj)
|
||||
if(QDELETED(obj))
|
||||
return FALSE
|
||||
if(!obj.always_reskinnable && obj.current_skin)
|
||||
return FALSE
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated())
|
||||
return FALSE
|
||||
return TRUE
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
// Mutable appearances are children of images, just so you know.
|
||||
|
||||
/mutable_appearance
|
||||
var/category // listen i want to store some meta information on mutable appearances don't judge me
|
||||
|
||||
/mutable_appearance/New()
|
||||
..()
|
||||
plane = FLOAT_PLANE // No clue why this is 0 by default yet images are on FLOAT_PLANE
|
||||
|
||||
@@ -187,10 +187,13 @@
|
||||
lose_text = "<span class='danger'>High-tech gizmos are a scam...</span>"
|
||||
|
||||
/datum/quirk/trandening/on_spawn()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
var/obj/item/autosurgeon/gloweyes/gloweyes = new(get_turf(H))
|
||||
H.equip_to_slot(gloweyes, ITEM_SLOT_BACKPACK)
|
||||
H.regenerate_icons()
|
||||
// Get targets
|
||||
var/obj/item/organ/eyes/old_eyes = quirk_holder.getorganslot(ORGAN_SLOT_EYES)
|
||||
var/obj/item/organ/eyes/robotic/glow/new_eyes = new
|
||||
|
||||
// Replace eyes
|
||||
qdel(old_eyes)
|
||||
new_eyes.Insert(quirk_holder)
|
||||
|
||||
/datum/quirk/bloodpressure
|
||||
name = "Polycythemia vera"
|
||||
|
||||
@@ -188,3 +188,12 @@
|
||||
value = 0
|
||||
medical_record_text = "Patient should not come into contact with sodium."
|
||||
mob_trait = TRAIT_SALT_SENSITIVE
|
||||
|
||||
/datum/quirk/dullahan
|
||||
name = "Dullahan"
|
||||
desc = "Your head is detached from your body."
|
||||
value = 0
|
||||
medical_record_text = "Patient seems to have some kind of spatial link with their decapitated head."
|
||||
|
||||
/datum/quirk/dullahan/post_add()
|
||||
quirk_holder.AddComponent(/datum/component/dullahan)
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
LAZYREMOVE(limb.scars, src)
|
||||
if(victim)
|
||||
LAZYREMOVE(victim.all_scars, src)
|
||||
limb = null
|
||||
victim = null
|
||||
. = ..()
|
||||
|
||||
/**
|
||||
@@ -45,6 +47,8 @@
|
||||
qdel(src)
|
||||
return
|
||||
limb = BP
|
||||
RegisterSignal(limb, COMSIG_PARENT_QDELETING, .proc/limb_gone)
|
||||
|
||||
severity = W.severity
|
||||
if(limb.owner)
|
||||
victim = limb.owner
|
||||
@@ -84,6 +88,7 @@
|
||||
return
|
||||
|
||||
limb = BP
|
||||
RegisterSignal(limb, COMSIG_PARENT_QDELETING, .proc/limb_gone)
|
||||
src.severity = severity
|
||||
LAZYADD(limb.scars, src)
|
||||
if(BP.owner)
|
||||
@@ -102,6 +107,10 @@
|
||||
visibility = 7
|
||||
return TRUE
|
||||
|
||||
/datum/scar/proc/limb_gone()
|
||||
SIGNAL_HANDLER
|
||||
qdel(src)
|
||||
|
||||
/// What will show up in examine_more() if this scar is visible
|
||||
/datum/scar/proc/get_examine_description(mob/viewer)
|
||||
if(!victim || !is_visible(viewer))
|
||||
|
||||
@@ -73,8 +73,6 @@
|
||||
|
||||
/// What status effect we assign on application
|
||||
var/status_effect_type
|
||||
/// The status effect we're linked to
|
||||
var/datum/status_effect/linked_status_effect
|
||||
/// If we're operating on this wound and it gets healed, we'll nix the surgery too
|
||||
var/datum/surgery/attached_surgery
|
||||
/// if you're a lazy git and just throw them in cryo, the wound will go away after accumulating severity * 25 power
|
||||
@@ -127,12 +125,13 @@
|
||||
return
|
||||
|
||||
victim = L.owner
|
||||
RegisterSignal(victim, COMSIG_PARENT_QDELETING, .proc/null_victim)
|
||||
limb = L
|
||||
LAZYADD(victim.all_wounds, src)
|
||||
LAZYADD(limb.wounds, src)
|
||||
limb.update_wounds()
|
||||
if(status_effect_type)
|
||||
linked_status_effect = victim.apply_status_effect(status_effect_type, src)
|
||||
victim.apply_status_effect(status_effect_type, src)
|
||||
SEND_SIGNAL(victim, COMSIG_CARBON_GAIN_WOUND, src, limb)
|
||||
victim.emote("pain")
|
||||
if(!victim.alerts["wound"]) // only one alert is shared between all of the wounds
|
||||
@@ -161,6 +160,14 @@
|
||||
wound_injury(old_wound)
|
||||
second_wind()
|
||||
|
||||
/datum/wound/proc/null_victim()
|
||||
SIGNAL_HANDLER
|
||||
victim = null
|
||||
|
||||
/datum/wound/proc/source_died()
|
||||
SIGNAL_HANDLER
|
||||
qdel(src)
|
||||
|
||||
/// Remove the wound from whatever it's afflicting, and cleans up whateverstatus effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim
|
||||
/datum/wound/proc/remove_wound(ignore_limb, replaced = FALSE)
|
||||
//TODO: have better way to tell if we're getting removed without replacement (full heal) scar stuff
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
if(isinsect(victim) || iscatperson(victim) || ismammal(victim) || isdwarf(victim) || ismonkey(victim)) // Yep you can lick monkeys.
|
||||
user.reagents.add_reagent(/datum/reagent/hairball, 2)
|
||||
|
||||
else if(ishumanbasic(victim) || isflyperson(victim) || islizard(victim) || isdullahan(victim))
|
||||
else if(ishumanbasic(victim) || isflyperson(victim) || islizard(victim) || HAS_TRAIT(victim, TRAIT_DULLAHAN))
|
||||
user.reagents.add_reagent(/datum/reagent/hairball, 1)
|
||||
|
||||
if(blood_flow > minimum_flow)
|
||||
|
||||
+28
-2
@@ -15,7 +15,10 @@
|
||||
|
||||
var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
|
||||
|
||||
var/fire = null
|
||||
///Do we have an active fire alarm?
|
||||
var/fire = FALSE
|
||||
///How many fire alarm sources do we have?
|
||||
var/triggered_firealarms = 0
|
||||
///Whether there is an atmos alarm in this area
|
||||
var/atmosalm = FALSE
|
||||
var/poweralm = FALSE
|
||||
@@ -443,7 +446,18 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/area/proc/firereset(obj/source)
|
||||
if (fire)
|
||||
var/should_reset_alarms = fire
|
||||
if(source)
|
||||
if(istype(source, /obj/machinery/firealarm))
|
||||
var/obj/machinery/firealarm/alarm = source
|
||||
if(alarm.triggered)
|
||||
alarm.triggered = FALSE
|
||||
triggered_firealarms -= 1
|
||||
if(triggered_firealarms > 0)
|
||||
should_reset_alarms = FALSE
|
||||
should_reset_alarms = should_reset_alarms & power_environ //No resetting if there's no power
|
||||
|
||||
if (should_reset_alarms) // if there's a source, make sure there's no fire alarms left
|
||||
set_fire_alarm_effects(FALSE)
|
||||
ModifyFiredoors(TRUE)
|
||||
|
||||
@@ -463,6 +477,18 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
||||
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
///Get rid of any dangling camera refs
|
||||
/area/proc/clear_camera(obj/machinery/camera/cam)
|
||||
LAZYREMOVE(cameras, cam)
|
||||
for (var/mob/living/silicon/aiPlayer as anything in GLOB.silicon_mobs)
|
||||
aiPlayer.freeCamera(src, cam)
|
||||
for (var/obj/machinery/computer/station_alert/comp as anything in GLOB.alert_consoles)
|
||||
comp.freeCamera(src, cam)
|
||||
for (var/mob/living/simple_animal/drone/drone_on as anything in GLOB.drones_list)
|
||||
drone_on.freeCamera(src, cam)
|
||||
for(var/datum/computer_file/program/alarm_monitor/monitor as anything in GLOB.alarmdisplay)
|
||||
monitor.freeCamera(src, cam)
|
||||
|
||||
/area/process()
|
||||
if(firedoors_last_closed_on + 100 < world.time) //every 10 seconds
|
||||
ModifyFiredoors(FALSE)
|
||||
|
||||
@@ -118,6 +118,9 @@
|
||||
|
||||
. = ..()
|
||||
|
||||
//We add ourselves to this list, best to clear it out
|
||||
// LAZYCLEARLIST(area_sensitive_contents)
|
||||
|
||||
for(var/movable_content in contents)
|
||||
qdel(movable_content)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
icon_state = "[state]"
|
||||
|
||||
/obj/machinery/bluespace_beacon/process()
|
||||
if(!Beacon)
|
||||
if(QDELETED(Beacon)) //Don't move it out of nullspace BACK INTO THE GAME for the love of god
|
||||
var/turf/T = loc
|
||||
Beacon = new(T)
|
||||
Beacon.invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
@@ -149,10 +149,11 @@ Class Procs:
|
||||
circuit = new circuit(src)
|
||||
circuit.apply_default_parts(src)
|
||||
|
||||
if(!speed_process && init_process)
|
||||
START_PROCESSING(SSmachines, src)
|
||||
else
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
if(init_process) // Required to prevent non-speed non-init machines from running
|
||||
if(speed_process)
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
else
|
||||
START_PROCESSING(SSmachines, src)
|
||||
RegisterSignal(src, COMSIG_ENTER_AREA, .proc/power_change)
|
||||
|
||||
if (occupant_typecache)
|
||||
|
||||
@@ -81,15 +81,15 @@
|
||||
if(can_use())
|
||||
toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks
|
||||
GLOB.cameranet.cameras -= src
|
||||
cancelCameraAlarm()
|
||||
if(isarea(myarea))
|
||||
LAZYREMOVE(myarea.cameras, src)
|
||||
myarea.clear_camera(src)
|
||||
QDEL_NULL(assembly)
|
||||
if(bug)
|
||||
bug.bugged_cameras -= src.c_tag
|
||||
bug.bugged_cameras -= c_tag
|
||||
if(bug.current == src)
|
||||
bug.current = null
|
||||
bug = null
|
||||
cancelCameraAlarm()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/camera/emp_act(severity)
|
||||
|
||||
@@ -351,8 +351,9 @@
|
||||
log_game("[key_name(usr)] enabled emergency maintenance access.")
|
||||
message_admins("[ADMIN_LOOKUPFLW(usr)] enabled emergency maintenance access.")
|
||||
deadchat_broadcast(" enabled emergency maintenance access at [span_name("[get_area_name(usr, TRUE)]")].", span_name("[usr.real_name]"), usr, message_type = DEADCHAT_ANNOUNCEMENT)
|
||||
|
||||
if("toggleBought")
|
||||
var/boughtID = params["id"]
|
||||
|
||||
for(var/tracked_slave in GLOB.tracked_slaves)
|
||||
var/obj/item/electropack/shockcollar/slave/C = tracked_slave
|
||||
if (REF(C) == boughtID) // Get collar
|
||||
|
||||
@@ -33,31 +33,46 @@
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/A, O, obj/source)
|
||||
/obj/machinery/computer/station_alert/proc/triggerAlarm(class, area/home, cameras, obj/source)
|
||||
if(source.z != z)
|
||||
return
|
||||
if(stat & (BROKEN))
|
||||
return
|
||||
|
||||
var/list/L = alarms[class]
|
||||
for(var/I in L)
|
||||
if (I == A.name)
|
||||
var/list/alarm = L[I]
|
||||
var/list/our_sort = alarms[class]
|
||||
for(var/areaname in our_sort)
|
||||
if (areaname == home.name)
|
||||
var/list/alarm = our_sort[areaname]
|
||||
var/list/sources = alarm[3]
|
||||
if (!(source in sources))
|
||||
sources += source
|
||||
return 1
|
||||
var/obj/machinery/camera/C = null
|
||||
var/list/CL = null
|
||||
if(O && islist(O))
|
||||
CL = O
|
||||
if (CL.len == 1)
|
||||
C = CL[1]
|
||||
else if(O && istype(O, /obj/machinery/camera))
|
||||
C = O
|
||||
L[A.name] = list(A, (C ? C : O), list(source))
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
var/obj/machinery/camera/cam = null
|
||||
var/list/our_cams = null
|
||||
if(cameras && islist(cameras))
|
||||
our_cams = cameras
|
||||
if (our_cams.len == 1)
|
||||
cam = our_cams[1]
|
||||
else if(cameras && istype(cameras, /obj/machinery/camera))
|
||||
cam = cameras
|
||||
our_sort[home.name] = list(home, (cam ? cam : cameras), list(source))
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/station_alert/proc/freeCamera(area/home, obj/machinery/camera/cam)
|
||||
for(var/class in alarms)
|
||||
var/our_area = alarms[class][home.name]
|
||||
if(!our_area)
|
||||
continue
|
||||
var/cams = our_area[2] //Get the cameras
|
||||
if(!cams)
|
||||
continue
|
||||
if(islist(cams))
|
||||
cams -= cam
|
||||
if(length(cams) == 1)
|
||||
our_area[2] = cams[1]
|
||||
else
|
||||
our_area[2] = null
|
||||
|
||||
/obj/machinery/computer/station_alert/proc/cancelAlarm(class, area/A, obj/origin)
|
||||
if(stat & (BROKEN))
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
var/state
|
||||
var/obj/machinery/embedded_controller/master
|
||||
|
||||
/datum/computer/file/embedded_program/Destroy()
|
||||
master = null
|
||||
. = ..()
|
||||
|
||||
/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
|
||||
if(master)
|
||||
master.post_signal(signal, comm_line)
|
||||
@@ -25,6 +29,11 @@
|
||||
|
||||
var/on = TRUE
|
||||
|
||||
/obj/machinery/embedded_controller/Destroy()
|
||||
if(program)
|
||||
QDEL_NULL(program)
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/embedded_controller/ui_interact(mob/user)
|
||||
. = ..()
|
||||
user.set_machine(src)
|
||||
|
||||
@@ -33,8 +33,10 @@
|
||||
|
||||
var/detecting = 1
|
||||
var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone
|
||||
var/last_alarm = 0
|
||||
COOLDOWN_DECLARE(last_alarm)
|
||||
var/area/myarea = null
|
||||
//Has this firealarm been triggered by its enviroment?
|
||||
var/triggered = FALSE
|
||||
|
||||
var/alarm_active = FALSE
|
||||
var/wire_override = FALSE
|
||||
@@ -56,6 +58,7 @@
|
||||
wires = new /datum/wires/firealarm(src)
|
||||
|
||||
/obj/machinery/firealarm/Destroy()
|
||||
myarea.firereset(src)
|
||||
LAZYREMOVE(myarea.firealarms, src)
|
||||
|
||||
qdel(wires)
|
||||
@@ -112,7 +115,7 @@
|
||||
. += mutable_appearance(icon, "fire_on")
|
||||
. += emissive_appearance(icon, "fire_on")
|
||||
|
||||
if(!panel_open && detecting) //It just looks horrible with the panel open
|
||||
if(!panel_open && detecting && triggered) //It just looks horrible with the panel open
|
||||
. += "fire_detected"
|
||||
. += mutable_appearance(icon, "fire_detected")
|
||||
. += emissive_appearance(icon, "fire_detected") //Pain
|
||||
@@ -139,14 +142,14 @@
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume)
|
||||
if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && (last_alarm+FIREALARM_COOLDOWN < world.time) && !(obj_flags & EMAGGED) && detecting && !stat)
|
||||
if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && COOLDOWN_FINISHED(src, last_alarm) && !(obj_flags & EMAGGED) && detecting && !stat)
|
||||
alarm()
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/firealarm/proc/alarm(mob/user)
|
||||
if(!is_operational() || (last_alarm+FIREALARM_COOLDOWN > world.time))
|
||||
if(!is_operational() || !COOLDOWN_FINISHED(src, last_alarm))
|
||||
return
|
||||
last_alarm = world.time
|
||||
COOLDOWN_START(src, last_alarm, FIREALARM_COOLDOWN)
|
||||
var/area/A = get_base_area(src)
|
||||
A.firealert(src)
|
||||
playsound(loc, 'goon/sound/machinery/FireAlarm.ogg', 75)
|
||||
@@ -159,7 +162,7 @@
|
||||
if(!is_operational())
|
||||
return
|
||||
var/area/A = get_base_area(src)
|
||||
A.firereset(src)
|
||||
A.firereset()
|
||||
if(user)
|
||||
log_game("[user] reset a fire alarm at [COORD(src)]")
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
connected_console = null
|
||||
for(var/obj/machinery/computer/mechpad/console in consoles)
|
||||
console.mechpads -= src
|
||||
GLOB.mechpad_list -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mechpad/screwdriver_act(mob/user, obj/item/tool)
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
if(istype(AM, /obj/item))
|
||||
var/obj/item/bodypart/head/as_head = AM
|
||||
var/obj/item/mmi/as_mmi = AM
|
||||
if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_relay))
|
||||
if(istype(AM, /obj/item/organ/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(AM, /obj/item/dullahan_head))
|
||||
living_detected = living_detected ? living_detected : AM
|
||||
nom += AM
|
||||
else if(isliving(AM))
|
||||
|
||||
@@ -61,12 +61,17 @@
|
||||
/obj/machinery/suit_storage_unit/engine
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine
|
||||
mask_type = /obj/item/clothing/mask/breath
|
||||
shoes_type= /obj/item/clothing/shoes/magboots
|
||||
shoes_type = /obj/item/clothing/shoes/magboots
|
||||
|
||||
/obj/machinery/suit_storage_unit/atmos
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos
|
||||
mask_type = /obj/item/clothing/mask/breath
|
||||
storage_type = /obj/item/watertank/atmos
|
||||
|
||||
/obj/machinery/suit_storage_unit/ce
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite
|
||||
mask_type = /obj/item/clothing/mask/breath
|
||||
shoes_type= /obj/item/clothing/shoes/magboots/advance
|
||||
shoes_type = /obj/item/clothing/shoes/magboots/advance
|
||||
|
||||
/obj/machinery/suit_storage_unit/security
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/security
|
||||
@@ -165,7 +170,6 @@
|
||||
|
||||
/obj/machinery/suit_storage_unit/update_overlays()
|
||||
. = ..()
|
||||
|
||||
if(uv)
|
||||
if(uv_super)
|
||||
. += "super"
|
||||
@@ -182,7 +186,7 @@
|
||||
. += "suit"
|
||||
if(helmet)
|
||||
. += "helm"
|
||||
if(storage)
|
||||
if(shoes || storage)
|
||||
. += "storage"
|
||||
else if(occupant)
|
||||
. += "human"
|
||||
@@ -199,7 +203,6 @@
|
||||
helmet = null
|
||||
suit = null
|
||||
mask = null
|
||||
shoes = null
|
||||
storage = null
|
||||
occupant = null
|
||||
|
||||
@@ -210,109 +213,8 @@
|
||||
new /obj/item/stack/sheet/metal(loc, 2)
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/suit_storage_unit/interact(mob/living/user)
|
||||
var/static/list/items
|
||||
|
||||
if (!items)
|
||||
items = list(
|
||||
"suit" = create_silhouette_of(/obj/item/clothing/suit/space/eva),
|
||||
"helmet" = create_silhouette_of(/obj/item/clothing/head/helmet/space/eva),
|
||||
"mask" = create_silhouette_of(/obj/item/clothing/mask/breath),
|
||||
"shoes" = create_silhouette_of(/obj/item/clothing/shoes/magboots),
|
||||
"storage" = create_silhouette_of(/obj/item/tank/internals/oxygen),
|
||||
)
|
||||
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
|
||||
if (!check_interactable(user))
|
||||
return
|
||||
|
||||
var/list/choices = list()
|
||||
|
||||
if (locked)
|
||||
choices["unlock"] = icon('modular_sand/icons/hud/radial.dmi', "radial_unlock")
|
||||
else if (state_open)
|
||||
choices["close"] = icon('modular_sand/icons/hud/radial.dmi', "radial_close")
|
||||
|
||||
for (var/item_key in items)
|
||||
var/item = vars[item_key]
|
||||
if (item)
|
||||
choices[item_key] = item
|
||||
else
|
||||
// If the item doesn't exist, put a silhouette in its place
|
||||
choices[item_key] = items[item_key]
|
||||
else
|
||||
choices["open"] = icon('modular_sand/icons/hud/radial.dmi', "radial_open")
|
||||
choices["disinfect"] = icon('modular_sand/icons/hud/radial.dmi', "radial_disinfect")
|
||||
choices["lock"] = icon('modular_sand/icons/hud/radial.dmi', "radial_lock")
|
||||
|
||||
var/choice = show_radial_menu(
|
||||
user,
|
||||
src,
|
||||
choices,
|
||||
custom_check = CALLBACK(src, .proc/check_interactable, user),
|
||||
require_near = !issilicon(user),
|
||||
)
|
||||
|
||||
if (!choice)
|
||||
return
|
||||
|
||||
switch (choice)
|
||||
if ("open")
|
||||
if (!state_open)
|
||||
open_machine(drop = FALSE)
|
||||
if (occupant)
|
||||
dump_contents()
|
||||
if ("close")
|
||||
if (state_open)
|
||||
close_machine()
|
||||
if ("disinfect")
|
||||
if (occupant && safeties)
|
||||
return
|
||||
else if (!helmet && !mask && !suit && !shoes && !storage && !occupant)
|
||||
return
|
||||
else
|
||||
if (occupant)
|
||||
var/mob/living/mob_occupant = occupant
|
||||
to_chat(mob_occupant, "<span class='userdanger'>[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!</span>")
|
||||
cook()
|
||||
if ("lock", "unlock")
|
||||
if (!state_open)
|
||||
locked = !locked
|
||||
else
|
||||
var/obj/item/item_to_dispense = vars[choice]
|
||||
if (item_to_dispense)
|
||||
vars[choice] = null
|
||||
user.put_in_hands(item_to_dispense)
|
||||
else
|
||||
var/obj/item/in_hands = user.get_active_held_item()
|
||||
if (in_hands)
|
||||
attackby(in_hands, user)
|
||||
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/check_interactable(mob/user)
|
||||
if (!state_open && !can_interact(user))
|
||||
return FALSE
|
||||
|
||||
if (panel_open)
|
||||
return FALSE
|
||||
|
||||
if (uv)
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/suit_storage_unit/proc/create_silhouette_of(atom/item)
|
||||
var/image/image = image(initial(item.icon), initial(item.icon_state))
|
||||
image.alpha = 128
|
||||
image.color = COLOR_RED
|
||||
return image
|
||||
|
||||
/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/living/user)
|
||||
if(!istype(user) || user.stat || !Adjacent(user) || !Adjacent(A) || !isliving(A))
|
||||
/obj/machinery/suit_storage_unit/MouseDrop_T(atom/A, mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !Adjacent(A) || !isliving(A))
|
||||
return
|
||||
var/mob/living/target = A
|
||||
if(!state_open)
|
||||
@@ -525,15 +427,93 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/* ref tg-git issue #45036
|
||||
screwdriving it open while it's running a decontamination sequence without closing the panel prior to finish
|
||||
causes the SSU to break due to state_open being set to TRUE at the end, and the panel becoming inaccessible.
|
||||
*/
|
||||
/obj/machinery/suit_storage_unit/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I)
|
||||
if(!(flags_1 & NODECONSTRUCT_1) && I.tool_behaviour == TOOL_SCREWDRIVER && uv)
|
||||
to_chat(user, "<span class='warning'>It might not be wise to fiddle with [src] while it's running...</span>")
|
||||
return TRUE
|
||||
return ..()
|
||||
/obj/machinery/suit_storage_unit/ui_state(mob/user)
|
||||
return GLOB.notcontained_state
|
||||
|
||||
/obj/machinery/suit_storage_unit/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "SuitStorageUnit", name)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/suit_storage_unit/ui_data()
|
||||
var/list/data = list()
|
||||
data["locked"] = locked
|
||||
data["open"] = state_open
|
||||
data["safeties"] = safeties
|
||||
data["uv_active"] = uv
|
||||
data["uv_super"] = uv_super
|
||||
if(helmet)
|
||||
data["helmet"] = helmet.name
|
||||
else
|
||||
data["helmet"] = null
|
||||
if(suit)
|
||||
data["suit"] = suit.name
|
||||
else
|
||||
data["suit"] = null
|
||||
if(mask)
|
||||
data["mask"] = mask.name
|
||||
else
|
||||
data["mask"] = null
|
||||
if(shoes)
|
||||
data["shoes"] = shoes.name
|
||||
else
|
||||
data["shoes"] = null
|
||||
if(storage)
|
||||
data["storage"] = storage.name
|
||||
else
|
||||
data["storage"] = null
|
||||
if(occupant)
|
||||
data["occupied"] = TRUE
|
||||
else
|
||||
data["occupied"] = FALSE
|
||||
return data
|
||||
|
||||
/obj/machinery/suit_storage_unit/ui_act(action, params)
|
||||
if(..() || uv)
|
||||
return
|
||||
switch(action)
|
||||
if("door")
|
||||
if(state_open)
|
||||
close_machine()
|
||||
else
|
||||
open_machine(0)
|
||||
if(occupant)
|
||||
dump_contents() // Dump out contents if someone is in there.
|
||||
. = TRUE
|
||||
if("lock")
|
||||
if(state_open)
|
||||
return
|
||||
locked = !locked
|
||||
. = TRUE
|
||||
if("uv")
|
||||
if(occupant && safeties)
|
||||
return
|
||||
else if(!helmet && !mask && !suit && !storage && !occupant)
|
||||
return
|
||||
else
|
||||
if(occupant)
|
||||
var/mob/living/mob_occupant = occupant
|
||||
to_chat(mob_occupant, "<span class='userdanger'>[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!</span>")
|
||||
cook()
|
||||
. = TRUE
|
||||
if("dispense")
|
||||
if(!state_open)
|
||||
return
|
||||
|
||||
var/static/list/valid_items = list("helmet", "suit", "mask", "shoes", "storage")
|
||||
var/item_name = params["item"]
|
||||
if(item_name in valid_items)
|
||||
var/obj/item/I = vars[item_name]
|
||||
vars[item_name] = null
|
||||
if(I)
|
||||
var/mob/living/living_person = usr
|
||||
if(!istype(living_person))
|
||||
return
|
||||
if(!istype(living_person) || !Adjacent(living_person) || !living_person.put_in_active_hand(I))
|
||||
I.forceMove(loc)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/suit_storage_unit/default_pry_open(obj/item/I)//needs to check if the storage is locked.
|
||||
. = !(state_open || panel_open || is_operational() || locked || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
var/body_colors = "#e3ba84" //a default color just in case.
|
||||
var/gibs_reagent_id = /datum/reagent/liquidgibs
|
||||
var/gibs_bloodtype = "A+"
|
||||
turf_loc_check = FALSE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases, list/blood_data)
|
||||
. = ..()
|
||||
@@ -22,6 +23,9 @@
|
||||
add_blood_DNA(list("Non-human DNA" = gibs_bloodtype), diseases)
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/replace_decal(obj/effect/decal/cleanable/C)
|
||||
return FALSE //Never fail to place us
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/update_icon()
|
||||
add_atom_colour(blood_DNA_to_color(), FIXED_COLOUR_PRIORITY)
|
||||
cut_overlays()
|
||||
|
||||
@@ -399,7 +399,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
if(throwing)
|
||||
throwing.finalize(FALSE)
|
||||
if(loc == user)
|
||||
if(!user.temporarilyRemoveItemFromInventory(I = src))
|
||||
if(!allow_attack_hand_drop(user) || !user.temporarilyRemoveItemFromInventory(src))
|
||||
return
|
||||
|
||||
. = FALSE
|
||||
@@ -428,7 +428,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
|
||||
if(throwing)
|
||||
throwing.finalize(FALSE)
|
||||
if(loc == user)
|
||||
if(!user.temporarilyRemoveItemFromInventory(src))
|
||||
if(!allow_attack_hand_drop(user) || !user.temporarilyRemoveItemFromInventory(I = src))
|
||||
return
|
||||
|
||||
pickup(user)
|
||||
|
||||
@@ -725,6 +725,26 @@
|
||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
||||
needs_anchored = FALSE
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser/fullupgrade
|
||||
build_path = /obj/machinery/chem_dispenser/fullupgrade
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||
/obj/item/stock_parts/manipulator/femto = 2,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stock_parts/cell/bluespace = 1,
|
||||
)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter
|
||||
build_path = /obj/machinery/chem_dispenser/mutagensaltpeter
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||
/obj/item/stock_parts/manipulator/femto = 2,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stock_parts/cell/bluespace = 1,
|
||||
)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser/apothecary
|
||||
name = "Apotechary Chem Dispenser (Machine Board)"
|
||||
build_path = /obj/machinery/chem_dispenser/apothecary
|
||||
@@ -740,7 +760,13 @@
|
||||
name = "Reagent Synthesizer (Abductor Machine Board)"
|
||||
icon_state = "abductor_mod"
|
||||
build_path = /obj/machinery/chem_dispenser/abductor
|
||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||
/obj/item/stock_parts/manipulator/femto = 2,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stock_parts/cell/bluespace = 1,
|
||||
)
|
||||
needs_anchored = FALSE
|
||||
|
||||
/obj/item/circuitboard/machine/chem_heater
|
||||
@@ -1175,11 +1201,31 @@
|
||||
icon_state = "service"
|
||||
build_path = /obj/machinery/chem_dispenser/drinks
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser/drinks/fullupgrade
|
||||
build_path = /obj/machinery/chem_dispenser/drinks/fullupgrade
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||
/obj/item/stock_parts/manipulator/femto = 2,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stock_parts/cell/bluespace = 1,
|
||||
)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer
|
||||
name = "Booze Dispenser (Machine Board)"
|
||||
icon_state = "service"
|
||||
build_path = /obj/machinery/chem_dispenser/drinks/beer
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser/drinks/beer/fullupgrade
|
||||
build_path = /obj/machinery/chem_dispenser/drinks/beer/fullupgrade
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin/bluespace = 2,
|
||||
/obj/item/stock_parts/capacitor/quadratic = 2,
|
||||
/obj/item/stock_parts/manipulator/femto = 2,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stock_parts/cell/bluespace = 1,
|
||||
)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_master/condi
|
||||
name = "CondiMaster 3000 (Machine Board)"
|
||||
icon_state = "service"
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
var/static/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
|
||||
var/static/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
|
||||
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER, RANDOM_SYMBOL, RANDOM_PUNCTUATION, RANDOM_DRAWING)
|
||||
var/static/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
|
||||
var/static/list/graffiti_large_h = list("yiffhell", "furrypride", "secborg", "paint")
|
||||
|
||||
var/static/list/all_drawables = graffiti + symbols + drawings + oriented + runes + graffiti_large_h
|
||||
|
||||
|
||||
@@ -32,6 +32,9 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
always_reskinnable = TRUE
|
||||
reskin_binding = COMSIG_CLICK_CTRL_SHIFT
|
||||
|
||||
//Main variables
|
||||
var/owner = null // String name of owner
|
||||
var/default_cartridge = 0 // Access level defined by cartridge
|
||||
@@ -112,10 +115,10 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
. += id ? "<span class='notice'>Alt-click to remove the id.</span>" : ""
|
||||
if(inserted_item && (!isturf(loc)))
|
||||
. += "<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
|
||||
if(LAZYLEN(GLOB.pda_reskins))
|
||||
. += "<span class='notice'>Ctrl-shift-click it to reskin it.</span>"
|
||||
|
||||
/obj/item/pda/Initialize(mapload)
|
||||
if(GLOB.pda_reskins)
|
||||
unique_reskin = GLOB.pda_reskins
|
||||
. = ..()
|
||||
if(fon)
|
||||
set_light(f_lum, f_pow, f_col)
|
||||
@@ -130,28 +133,10 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
new_overlays = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/item/pda/CtrlShiftClick(mob/living/user)
|
||||
. = ..()
|
||||
if(GLOB.pda_reskins && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
|
||||
reskin_obj(user)
|
||||
|
||||
/obj/item/pda/reskin_obj(mob/M)
|
||||
if(!LAZYLEN(GLOB.pda_reskins))
|
||||
return
|
||||
var/dat = "<b>Reskin options for [name]:</b>"
|
||||
for(var/V in GLOB.pda_reskins)
|
||||
var/output = icon2html(GLOB.pda_reskins[V], M, icon_state)
|
||||
dat += "\n[V]: <span class='reallybig'>[output]</span>"
|
||||
to_chat(M, dat)
|
||||
|
||||
var/choice = input(M, "Choose the a reskin for [src]","Reskin Object") as null|anything in GLOB.pda_reskins
|
||||
var/new_icon = GLOB.pda_reskins[choice]
|
||||
if(QDELETED(src) || isnull(new_icon) || new_icon == icon || !M.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
return
|
||||
icon = new_icon
|
||||
. = ..()
|
||||
new_overlays = TRUE
|
||||
update_icon()
|
||||
to_chat(M, "[src] is now skinned as '[choice]'.")
|
||||
|
||||
/obj/item/pda/proc/set_new_overlays()
|
||||
if(!overlays_offsets || !(icon in overlays_offsets))
|
||||
@@ -191,7 +176,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
else
|
||||
font_index = MODE_MONO
|
||||
font_mode = FONT_MONO
|
||||
var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]
|
||||
var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]["icon"]
|
||||
if(icon != pref_skin)
|
||||
icon = pref_skin
|
||||
new_overlays = TRUE
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
icon_state = "beacon-off"
|
||||
|
||||
/obj/item/beacon/Destroy()
|
||||
GLOB.teleportbeacons.Remove(src)
|
||||
GLOB.teleportbeacons -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/beacon/attack_self(mob/user)
|
||||
@@ -27,7 +27,7 @@
|
||||
GLOB.teleportbeacons += src
|
||||
else
|
||||
icon_state = "beacon-off"
|
||||
GLOB.teleportbeacons.Remove(src)
|
||||
GLOB.teleportbeacons -= src
|
||||
to_chat(user, "<span class='notice'>You [enabled ? "enable" : "disable"] the beacon.</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@
|
||||
// when we get this many shards, we get a free bulb.
|
||||
var/shards_required = 4
|
||||
|
||||
// whether it is "bluespace powered" (can be used at a range)
|
||||
var/bluespace_toggle = FALSE
|
||||
|
||||
/obj/item/lightreplacer/New()
|
||||
uses = max_uses / 2
|
||||
failmsg = "The [name]'s refill light blinks red."
|
||||
@@ -242,7 +245,7 @@
|
||||
|
||||
/obj/item/lightreplacer/afterattack(atom/T, mob/U, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
if(!proximity && !bluespace_toggle)
|
||||
return
|
||||
if(!isturf(T))
|
||||
return
|
||||
@@ -253,6 +256,18 @@
|
||||
break
|
||||
used = TRUE
|
||||
if(istype(A, /obj/machinery/light))
|
||||
if(!proximity && bluespace_toggle)
|
||||
// Set variable for target light
|
||||
var/obj/machinery/light/target = A
|
||||
|
||||
// Check light status before playing effects
|
||||
if(target.status != LIGHT_OK)
|
||||
// Display RPED beam
|
||||
U.Beam(A, icon_state = "rped_upgrade", time = 1 SECONDS)
|
||||
|
||||
// Play RPED sound
|
||||
playsound(src, 'sound/items/pshoom.ogg', 40, 1)
|
||||
|
||||
ReplaceLight(A, U)
|
||||
|
||||
if(!used)
|
||||
@@ -266,6 +281,15 @@
|
||||
/obj/item/lightreplacer/cyborg/janicart_insert(mob/user, obj/structure/janitorialcart/J)
|
||||
return
|
||||
|
||||
/obj/item/lightreplacer/blue
|
||||
name = "bluespace light replacer"
|
||||
desc = "A modified light replacer that zaps lights into place. Refill with broken or working lightbulbs, or sheets of glass."
|
||||
icon_state = "lightreplacer_blue"
|
||||
bluespace_toggle = TRUE
|
||||
|
||||
/obj/item/lightreplacer/blue/emag_act()
|
||||
return // balancing against longrange explosions
|
||||
|
||||
#undef LIGHT_OK
|
||||
#undef LIGHT_EMPTY
|
||||
#undef LIGHT_BROKEN
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
mytape = new starting_tape_type(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/taperecorder/Destroy()
|
||||
// QDEL_NULL(soundloop)
|
||||
QDEL_NULL(mytape)
|
||||
return ..()
|
||||
|
||||
/obj/item/taperecorder/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -193,34 +193,29 @@
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/saber
|
||||
possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER)
|
||||
unique_reskin = list("Sword" = "sword0", "Saber" = "esaber0")
|
||||
unique_reskin = list(
|
||||
"Sword" = list("icon_state" = "sword0"),
|
||||
"Saber" = list("icon_state" = "esaber0")
|
||||
)
|
||||
var/hacked = FALSE
|
||||
var/saber = FALSE
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/saber/transform_weapon(mob/living/user, supress_message_text)
|
||||
. = ..()
|
||||
if(.)
|
||||
if(active)
|
||||
if(sword_color)
|
||||
if(saber)
|
||||
icon_state = "esaber[sword_color]"
|
||||
else
|
||||
icon_state = "sword[sword_color]"
|
||||
else
|
||||
if(saber)
|
||||
icon_state = "esaber0"
|
||||
switch(current_skin)
|
||||
if("Saber")
|
||||
icon_state = "esaber[active ? sword_color : "0"]"
|
||||
// No skin
|
||||
else
|
||||
icon_state = "sword0"
|
||||
icon_state = "sword[active ? sword_color : "0"]"
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/saber/reskin_obj(mob/M)
|
||||
. = ..()
|
||||
if(icon_state == "esaber0")
|
||||
saber = TRUE
|
||||
if(active)
|
||||
if(saber)
|
||||
icon_state = "esaber[sword_color]"
|
||||
else
|
||||
icon_state = "sword[sword_color]"
|
||||
switch(current_skin)
|
||||
if("Sword")
|
||||
icon_state = "sword[active ? sword_color : "0"]"
|
||||
if("Saber")
|
||||
icon_state = "esaber[active ? sword_color : "0"]"
|
||||
|
||||
/obj/item/melee/transforming/energy/sword/saber/set_sword_color(var/color_forced)
|
||||
if(color_forced) // wow i really do not like this at fucking all holy SHIT
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
name = "advanced mop"
|
||||
mopcap = 10
|
||||
icon_state = "advmop"
|
||||
item_state = "mop"
|
||||
item_state = "advmop"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
|
||||
force = 6
|
||||
|
||||
+17
-45
@@ -28,9 +28,17 @@
|
||||
var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF
|
||||
|
||||
var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset.
|
||||
var/current_skin //the item reskin
|
||||
var/list/unique_reskin //List of options to reskin.
|
||||
|
||||
//Reskin variables
|
||||
/// The item reskin
|
||||
var/current_skin
|
||||
/// List of options to reskin.
|
||||
var/list/unique_reskin
|
||||
/// Can always be modified
|
||||
var/always_reskinnable = FALSE
|
||||
/// How to bring up the reskinning menu
|
||||
var/reskin_binding = COMSIG_CLICK_ALT
|
||||
//
|
||||
|
||||
// Access levels, used in modules\jobs\access.dm
|
||||
var/list/req_access
|
||||
@@ -76,6 +84,10 @@
|
||||
var/turf/T = loc
|
||||
T.add_blueprints_preround(src)
|
||||
|
||||
/obj/ComponentInitialize()
|
||||
. = ..()
|
||||
if(islist(unique_reskin) && length(unique_reskin))
|
||||
AddElement(/datum/element/object_reskinning)
|
||||
|
||||
/obj/Destroy(force=FALSE)
|
||||
if(!ismachinery(src))
|
||||
@@ -340,50 +352,10 @@
|
||||
. = ..()
|
||||
if(obj_flags & UNIQUE_RENAME)
|
||||
. += "<span class='notice'>Use a pen on it to rename it or change its description.</span>"
|
||||
if(unique_reskin && (!current_skin || always_reskinnable))
|
||||
. += "<span class='notice'>Alt-click it to reskin it.</span>"
|
||||
|
||||
/obj/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(unique_reskin && (!current_skin || always_reskinnable) && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
|
||||
reskin_obj(user)
|
||||
return TRUE
|
||||
|
||||
/obj/proc/reskin_obj(mob/M)
|
||||
if(!LAZYLEN(unique_reskin))
|
||||
return
|
||||
|
||||
var/list/items = list()
|
||||
for(var/reskin_option in unique_reskin)
|
||||
var/image/item_image = image(icon = src.icon, icon_state = unique_reskin[reskin_option])
|
||||
items += list("[reskin_option]" = item_image)
|
||||
sortList(items)
|
||||
|
||||
var/pick = show_radial_menu(M, src, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, M), radius = 38, require_near = TRUE)
|
||||
if(!pick)
|
||||
return
|
||||
if(!unique_reskin[pick])
|
||||
return
|
||||
current_skin = pick
|
||||
icon_state = unique_reskin[pick]
|
||||
to_chat(M, "[src] is now skinned as '[pick].'")
|
||||
|
||||
/**
|
||||
* Checks if we are allowed to interact with a radial menu for reskins
|
||||
*
|
||||
* Arguments:
|
||||
* * user The mob interacting with the menu
|
||||
*/
|
||||
/obj/proc/check_reskin_menu(mob/user)
|
||||
if(QDELETED(src))
|
||||
return FALSE
|
||||
if(current_skin)
|
||||
return FALSE
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated())
|
||||
return FALSE
|
||||
return TRUE
|
||||
/// Do you want to make overrides, of course you do! Will be called if an object was reskinned successfully
|
||||
/obj/proc/reskin_obj(mob/user)
|
||||
return
|
||||
|
||||
/obj/update_overlays()
|
||||
. = ..()
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
/obj/structure/closet/crate/freezer/Destroy()
|
||||
recursive_organ_check(src)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/closet/crate/freezer/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -15,9 +15,12 @@
|
||||
var/obj/structure/chair/C = new /obj/structure/chair(loc)
|
||||
W.play_tool_sound(src)
|
||||
C.setDir(dir)
|
||||
part.forceMove(loc)
|
||||
part.master = null
|
||||
part = null
|
||||
|
||||
if (part)
|
||||
part.forceMove(loc)
|
||||
part.master = null
|
||||
part = null
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/chair/e_chair/proc/shock()
|
||||
@@ -44,3 +47,9 @@
|
||||
to_chat(buckled_mob, "<span class='userdanger'>You feel a deep shock course through your body!</span>")
|
||||
addtimer(CALLBACK(buckled_mob, /mob/living.proc/electrocute_act, 85, src, 1), 1)
|
||||
visible_message("<span class='danger'>The electric chair went off!</span>", "<span class='italics'>You hear a deep sharp shock!</span>")
|
||||
|
||||
/obj/structure/chair/e_chair/Destroy()
|
||||
if(part)
|
||||
QDEL_NULL(part)
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
if(new_style)
|
||||
H.hair_style = new_style
|
||||
|
||||
H.update_mutant_bodyparts()
|
||||
H.update_hair()
|
||||
|
||||
/obj/structure/mirror/examine_status(mob/user)
|
||||
|
||||
@@ -137,6 +137,8 @@ GLOBAL_LIST_EMPTY(station_turfs)
|
||||
requires_activation = FALSE
|
||||
..()
|
||||
|
||||
vis_contents.Cut()
|
||||
|
||||
/turf/on_attack_hand(mob/user)
|
||||
user.Move_Pulled(src)
|
||||
|
||||
|
||||
@@ -99,10 +99,10 @@
|
||||
to_chat(src,"<span class='userdanger'>Your [G.name] cannot cum.</span>")
|
||||
return
|
||||
if(mb_time) //as long as it's not instant, give a warning
|
||||
to_chat(src,"<span class='userlove'>You feel yourself about to orgasm.</span>")
|
||||
to_chat(src, span_userlove("You feel yourself about to orgasm."))
|
||||
if(!do_after(src, mb_time, target = src) || !G.climaxable(src, TRUE))
|
||||
return
|
||||
to_chat(src,"<span class='userlove'>You climax[isturf(loc) ? " onto [loc]" : ""] with your [G.name].</span>")
|
||||
to_chat(src, span_userlove("You climax[isturf(loc) ? " onto [loc]" : ""] with your [G.name]."))
|
||||
do_climax(fluid_source, loc, G)
|
||||
|
||||
/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, mb_time = 30, obj/item/organ/genital/Lgen = null) //Used for climaxing with any living thing
|
||||
@@ -110,16 +110,16 @@
|
||||
if(!fluid_source)
|
||||
return
|
||||
if(mb_time) //Skip warning if this is an instant climax.
|
||||
to_chat(src,"<span class='userlove'>You're about to climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"]!</span>")
|
||||
to_chat(L,"<span class='userlove'>[src] is about to climax [(Lgen) ? "in your [Lgen.name]" : "with you"]!</span>")
|
||||
to_chat(src, span_userlove("You're about to climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"]!"))
|
||||
to_chat(L, span_userlove("[src] is about to climax [(Lgen) ? "in your [Lgen.name]" : "with you"]!"))
|
||||
if(!do_after(src, mb_time, target = src) || !in_range(src, L) || !G.climaxable(src, TRUE))
|
||||
return
|
||||
if(spillage)
|
||||
to_chat(src,"<span class='userlove'>You orgasm with [L], spilling out of [(Lgen) ? "[L.p_their()] [Lgen.name]" : "[L.p_them()]"], using your [G.name].</span>")
|
||||
to_chat(L,"<span class='userlove'>[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], overflowing and spilling, using [p_their()] [G.name]!</span>")
|
||||
to_chat(src, span_userlove("You orgasm with [L], spilling out of [(Lgen) ? "[L.p_their()] [Lgen.name]" : "[L.p_them()]"], using your [G.name]."))
|
||||
to_chat(L, span_userlove("[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], overflowing and spilling, using [p_their()] [G.name]!"))
|
||||
else //knots and other non-spilling orgasms
|
||||
to_chat(src,"<span class='userlove'>You climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"], your [G.name] spilling nothing.</span>")
|
||||
to_chat(L,"<span class='userlove'>[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], [p_their()] [G.name] spilling nothing!</span>")
|
||||
to_chat(src, span_userlove("You climax [(Lgen) ? "in [L]'s [Lgen.name]" : "with [L]"], your [G.name] spilling nothing."))
|
||||
to_chat(L, span_userlove("[src] climaxes [(Lgen) ? "in your [Lgen.name]" : "with you"], [p_their()] [G.name] spilling nothing!"))
|
||||
//SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) //Sandstorm edit
|
||||
do_climax(fluid_source, spillage ? loc : L, G, spillage,, Lgen)
|
||||
//L.receive_climax(src, Lgen, G, spillage)
|
||||
@@ -129,10 +129,10 @@
|
||||
if(!fluid_source)
|
||||
return
|
||||
if(mb_time)
|
||||
to_chat(src,"<span class='userlove'>You start to [G.masturbation_verb] your [G.name] over [container].</span>")
|
||||
to_chat(src, span_userlove("You start to [G.masturbation_verb] your [G.name] over [container]."))
|
||||
if(!do_after(src, mb_time, target = src) || !in_range(src, container) || !G.climaxable(src, TRUE))
|
||||
return
|
||||
to_chat(src,"<span class='userlove'>You used your [G.name] to fill [container].</span>")
|
||||
to_chat(src, span_userlove("You used your [G.name] to fill [container]."))
|
||||
message_admins("[ADMIN_LOOKUPFLW(src)] used [p_their()] [G.name] to fill [container] with [G.get_fluid_name()].")
|
||||
log_consent("[key_name(src)] used their [G.name] to fill [container].")
|
||||
do_climax(fluid_source, container, G, FALSE, cover = TRUE)
|
||||
|
||||
@@ -167,9 +167,9 @@
|
||||
var/original_state = picked_organ.aroused_state
|
||||
picked_organ.set_aroused_state(!picked_organ.aroused_state)
|
||||
if(original_state != picked_organ.aroused_state)
|
||||
to_chat(src,"<span class='userlove'>[picked_organ.aroused_state ? picked_organ.arousal_verb : picked_organ.unarousal_verb].</span>")
|
||||
to_chat(src, span_userlove("[picked_organ.aroused_state ? picked_organ.arousal_verb : picked_organ.unarousal_verb]."))
|
||||
else
|
||||
to_chat(src,"<span class='userlove'>You can't make that genital [picked_organ.aroused_state ? "unaroused" : "aroused"]!</span>")
|
||||
to_chat(src, span_userlove("You can't make that genital [picked_organ.aroused_state ? "unaroused" : "aroused"]!"))
|
||||
picked_organ.update_appearance()
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/human = src
|
||||
|
||||
@@ -27,8 +27,10 @@
|
||||
return TRUE
|
||||
|
||||
/obj/item/assembly/shock_kit/attack_self(mob/user)
|
||||
part1.attack_self(user)
|
||||
part2.attack_self(user)
|
||||
if (part1)
|
||||
part1.attack_self(user)
|
||||
if (part2)
|
||||
part2.attack_self(user)
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
|
||||
@@ -760,6 +760,8 @@
|
||||
|
||||
/datum/gas_reaction/hagedorn/react(datum/gas_mixture/air, datum/holder)
|
||||
var/initial_energy = air.thermal_energy()
|
||||
if(air.get_moles(GAS_QCD))
|
||||
return
|
||||
for(var/g in air.get_gases())
|
||||
air.set_moles(g, 0)
|
||||
var/amount = initial_energy / (air.return_temperature() * GLOB.gas_data.specific_heats[GAS_QCD])
|
||||
|
||||
@@ -238,6 +238,8 @@
|
||||
SSradio.remove_object(src, frequency)
|
||||
qdel(wires)
|
||||
wires = null
|
||||
var/area/ourarea = get_area(src)
|
||||
ourarea.atmosalert(FALSE, src)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/airalarm/examine(mob/user)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
name = "Trash Bag of Holding"
|
||||
description = "Nanotrasen would make good use of high-capacity trash bags. If you have any, please ship them."
|
||||
reward = 3000
|
||||
wanted_types = list(/obj/item/storage/backpack/holding)
|
||||
wanted_types = list(/obj/item/storage/bag/trash/bluespace)
|
||||
|
||||
/datum/bounty/item/science/bluespace_syringe
|
||||
name = "Bluespace Syringe"
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
/obj/machinery/computer/cargo/Destroy()
|
||||
QDEL_NULL(radio)
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/cargo/proc/get_export_categories()
|
||||
. = EXPORT_CARGO
|
||||
|
||||
@@ -1004,7 +1004,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<b>Belly Visibility:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=belly_visibility;task=input'>[features["belly_visibility"]]</a>"
|
||||
dat += "<b>Egg Stuffing:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=belly_stuffing'>[features["belly_stuffing"] == TRUE ? "Yes" : "No"]</a>"
|
||||
dat += "</td>"
|
||||
if(pref_species.id == SPECIES_DULLAHAN)
|
||||
if(all_quirks.Find("Dullahan"))
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
|
||||
dat += "<h3>Neckfire</h3>"
|
||||
@@ -2068,9 +2068,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
to_chat(user, "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>")
|
||||
|
||||
if("age")
|
||||
var/new_age = tgui_input_number(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference", null, AGE_MAX, AGE_MIN)
|
||||
var/new_age = tgui_input_number(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX_INPUT])", "Character Preference", null, AGE_MAX_INPUT, AGE_MIN)
|
||||
if(new_age)
|
||||
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
|
||||
age = max(min( round(text2num(new_age)), AGE_MAX_INPUT),AGE_MIN)
|
||||
|
||||
if("security_records")
|
||||
var/rec = stripped_multiline_input(usr, "Set your security record note section. This should be IC!", "Security Records", html_decode(security_records), MAX_FLAVOR_LEN, TRUE)
|
||||
|
||||
@@ -364,6 +364,18 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
if(length(old_flavor_text) && !length(features["feature_flavor_text"]))
|
||||
features["feature_flavor_text"] = old_flavor_text
|
||||
|
||||
// hey what happened to 55
|
||||
|
||||
// dullahans as a species cease to exist
|
||||
if(current_version < 56)
|
||||
var/species_id = S["species"]
|
||||
if(species_id == SPECIES_DULLAHAN)
|
||||
S["species"] = SPECIES_HUMAN
|
||||
if(islist(S["all_quirks"]))
|
||||
S["all_quirks"] += "Dullahan"
|
||||
else
|
||||
S["all_quirks"] = list("Dullahan")
|
||||
|
||||
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
|
||||
if(!ckey)
|
||||
return
|
||||
@@ -465,6 +477,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["preferred_chaos"] >> preferred_chaos
|
||||
S["auto_ooc"] >> auto_ooc
|
||||
S["no_tetris_storage"] >> no_tetris_storage
|
||||
S["recoil_screenshake"] >> recoil_screenshake
|
||||
|
||||
// Splurt
|
||||
S["be_victim"] >> be_victim
|
||||
@@ -532,6 +545,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
cit_toggles = sanitize_integer(cit_toggles, 0, 16777215, initial(cit_toggles))
|
||||
auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc))
|
||||
no_tetris_storage = sanitize_integer(no_tetris_storage, 0, 1, initial(no_tetris_storage))
|
||||
recoil_screenshake = sanitize_integer(recoil_screenshake, 0, 800, initial(recoil_screenshake))
|
||||
key_bindings = sanitize_islist(key_bindings, list())
|
||||
modless_key_bindings = sanitize_islist(modless_key_bindings, list())
|
||||
favorite_outfits = SANITIZE_LIST(favorite_outfits)
|
||||
@@ -665,6 +679,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["preferred_chaos"], preferred_chaos)
|
||||
WRITE_FILE(S["auto_ooc"], auto_ooc)
|
||||
WRITE_FILE(S["no_tetris_storage"], no_tetris_storage)
|
||||
WRITE_FILE(S["recoil_screenshake"], recoil_screenshake)
|
||||
|
||||
// Splurt
|
||||
WRITE_FILE(S["be_victim"], be_victim)
|
||||
@@ -1069,7 +1084,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
shirt_color = sanitize_hexcolor(shirt_color, 6, FALSE, initial(shirt_color))
|
||||
socks = sanitize_inlist(socks, GLOB.socks_list)
|
||||
socks_color = sanitize_hexcolor(socks_color, 6, FALSE, initial(socks_color))
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX_INPUT, initial(age))
|
||||
hair_color = sanitize_hexcolor(hair_color, 6, FALSE)
|
||||
facial_hair_color = sanitize_hexcolor(facial_hair_color, 6, FALSE)
|
||||
grad_style = sanitize_inlist(grad_style, GLOB.hair_gradients_list, "None")
|
||||
|
||||
@@ -27,6 +27,11 @@
|
||||
if(glass_colour_type && ishuman(user))
|
||||
. += "<span class='notice'>Alt-click to toggle its colors.</span>"
|
||||
|
||||
/obj/item/clothing/glasses/proc/prescribe()
|
||||
vision_correction = TRUE
|
||||
name = "prescription [name]"
|
||||
desc += " These have been fitted with a prescription overlay device, and thus correct some vision deficiencies."
|
||||
|
||||
/obj/item/clothing/glasses/visor_toggling()
|
||||
..()
|
||||
if(visor_vars_to_toggle & VISOR_VISIONFLAGS)
|
||||
@@ -128,10 +133,9 @@
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
glass_colour_type = /datum/client_colour/glass_colour/green
|
||||
|
||||
/obj/item/clothing/glasses/night/prescription
|
||||
name = "prescription night vision goggles"
|
||||
desc = "NVGs but for those with nearsightedness."
|
||||
vision_correction = 1
|
||||
/obj/item/clothing/glasses/night/prescription/Initialize(mapload)
|
||||
. = ..()
|
||||
prescribe()
|
||||
|
||||
/obj/item/clothing/glasses/night/syndicate
|
||||
name = "combat night vision goggles"
|
||||
@@ -233,6 +237,12 @@
|
||||
icon_state = "circle_glasses"
|
||||
item_state = "circle_glasses"
|
||||
|
||||
/obj/item/clothing/glasses/regular/modern
|
||||
name = "modern glasses"
|
||||
desc = "A Dork. Co. revamp and/or revision of Nerd. Co.'s classic prescription glasses, with less opaque lenses."
|
||||
icon_state = "glasses_alt"
|
||||
item_state = "glasses_alt"
|
||||
|
||||
//Here lies green glasses, so ugly they died. RIP
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
if(G.vision_correction)
|
||||
vision_correction = TRUE
|
||||
name = "prescription [name]"
|
||||
desc += " These have been made with some form of vision-correcting eyewear, thus making them innately correct some vision deficiencies."
|
||||
return
|
||||
|
||||
/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot)
|
||||
@@ -55,13 +56,9 @@
|
||||
hud_type = DATA_HUD_MEDICAL_ADVANCED
|
||||
glass_colour_type = /datum/client_colour/glass_colour/lightblue
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/prescription
|
||||
name = "prescription health scanner HUD"
|
||||
desc = "A heads-up display, made with a prescription lens, that scans the humans in view and provides accurate data about their health status."
|
||||
icon_state = "healthhud"
|
||||
hud_type = DATA_HUD_MEDICAL_ADVANCED
|
||||
vision_correction = 1
|
||||
glass_colour_type = /datum/client_colour/glass_colour/lightblue
|
||||
/obj/item/clothing/glasses/hud/health/prescription/Initialize(mapload)
|
||||
. = ..()
|
||||
prescribe()
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/night
|
||||
name = "night vision health scanner HUD"
|
||||
@@ -88,9 +85,9 @@
|
||||
tint = 1
|
||||
glass_colour_type = /datum/client_colour/glass_colour/blue
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/sunglasses/prescription
|
||||
name = "prescription medical HUDSunglasses"
|
||||
vision_correction = 1
|
||||
/obj/item/clothing/glasses/hud/health/sunglasses/prescription/Initialize(mapload)
|
||||
. = ..()
|
||||
prescribe()
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/eyepatch
|
||||
name = "eyepatch medHUD"
|
||||
@@ -117,17 +114,13 @@
|
||||
flash_protect = 1
|
||||
tint = 1
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/prescription
|
||||
name = "prescription diagnostic HUD"
|
||||
desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits. This one has a prescription lens."
|
||||
icon_state = "diagnostichud"
|
||||
hud_type = DATA_HUD_DIAGNOSTIC_BASIC
|
||||
vision_correction = 1
|
||||
glass_colour_type = /datum/client_colour/glass_colour/lightorange
|
||||
/obj/item/clothing/glasses/hud/diagnostic/prescription/Initialize(mapload)
|
||||
. = ..()
|
||||
prescribe()
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/sunglasses/prescription
|
||||
name = "prescription diagnostic HUDSunglasses"
|
||||
vision_correction = 1
|
||||
/obj/item/clothing/glasses/hud/diagnostic/sunglasses/prescription/Initialize(mapload)
|
||||
. = ..()
|
||||
prescribe()
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/night
|
||||
name = "night vision diagnostic HUD"
|
||||
@@ -155,13 +148,9 @@
|
||||
hud_type = DATA_HUD_SECURITY_ADVANCED
|
||||
glass_colour_type = /datum/client_colour/glass_colour/red
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/prescription
|
||||
name = "prescription security HUD"
|
||||
desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records. This one has a prescription lens so you can see the banana peal that slipped you."
|
||||
icon_state = "securityhud"
|
||||
hud_type = DATA_HUD_SECURITY_ADVANCED
|
||||
vision_correction = 1
|
||||
glass_colour_type = /datum/client_colour/glass_colour/red
|
||||
/obj/item/clothing/glasses/hud/security/prescription/Initialize(mapload)
|
||||
. = ..()
|
||||
prescribe()
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/chameleon
|
||||
name = "chameleon security HUD"
|
||||
@@ -200,9 +189,9 @@
|
||||
desc = "A heads-up display that connects directly to the optical nerve of the user, replacing the need for that useless eyeball."
|
||||
icon_state = "hudpatch"
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/sunglasses/prescription
|
||||
name = "prescription security HUDSunglasses"
|
||||
vision_correction = 1
|
||||
/obj/item/clothing/glasses/hud/security/sunglasses/prescription/Initialize(mapload)
|
||||
. = ..()
|
||||
prescribe()
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/night
|
||||
name = "night vision security HUD"
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
// don't you love single purpose files? i do too.
|
||||
|
||||
/obj/item/prescription_kit
|
||||
name = "prescription lens kit"
|
||||
desc = "A disposable kit containing all the needed tools and parts to develop and apply a self-modifying prescription lens overlay device to any eyewear."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "modkit"
|
||||
|
||||
/obj/item/prescription_kit/attack_obj(obj/O, mob/living/user)
|
||||
if(!istype(O, /obj/item/clothing/glasses))
|
||||
return ..()
|
||||
|
||||
if(istype(O, /obj/item/clothing/glasses))
|
||||
var/obj/item/clothing/glasses/target_glasses = O
|
||||
if(target_glasses.vision_correction)
|
||||
to_chat(user, span_notice("These are already fitted with prescription lenses or otherwise already correct vision!"))
|
||||
return
|
||||
playsound(src, 'sound/items/screwdriver.ogg', 50, 1)
|
||||
user.visible_message(span_notice("[user] fits \the [target_glasses] with a prescription overlay device."), span_notice("You fit \the [target_glasses] with a prescription overlay device."))
|
||||
target_glasses.prescribe()
|
||||
target_glasses.balloon_alert(user, "prescription fitted!")
|
||||
qdel(src)
|
||||
@@ -79,16 +79,18 @@
|
||||
to_chat(user, "<span class='warning'>With [src] off of your arms, you feel less ready to punch things.</span>")
|
||||
|
||||
/obj/item/clothing/gloves/fingerless/pugilist/crafted
|
||||
unique_reskin = list("Short" = "armwraps",
|
||||
"Extended" = "armwraps_extended"
|
||||
)
|
||||
unique_reskin = list(
|
||||
"Short" = list("icon_state" = "armwraps"),
|
||||
"Extended" = list("icon_state" = "armwraps_extended")
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/fingerless/pugilist/crafted/reskin_obj(mob/M)
|
||||
. = ..()
|
||||
if(icon_state == "armwraps_extended")
|
||||
item_state = "armwraps_extended"
|
||||
else
|
||||
return
|
||||
switch(current_skin)
|
||||
if("Short")
|
||||
item_state = "armwraps"
|
||||
if("Extended")
|
||||
item_state = "armwraps_extended"
|
||||
|
||||
/obj/item/clothing/gloves/fingerless/pugilist/chaplain
|
||||
name = "armwraps of unyielding resolve"
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
/// See: [/datum/component/tackler/var/skill_mod]
|
||||
var/skill_mod = 1
|
||||
|
||||
/obj/item/clothing/gloves/tackler/Destroy()
|
||||
tackler = null
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/gloves/tackler/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(!ishuman(user))
|
||||
@@ -34,12 +38,12 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
tackler = H.AddComponent(/datum/component/tackler, stamina_cost=tackle_stam_cost, base_knockdown = base_knockdown, range = tackle_range, speed = tackle_speed, skill_mod = skill_mod, min_distance = min_distance)
|
||||
else
|
||||
qdel(tackler) // Only wearing it!
|
||||
QDEL_NULL(tackler) // Only wearing it!
|
||||
|
||||
/obj/item/clothing/gloves/tackler/dropped(mob/user)
|
||||
. = ..()
|
||||
if(tackler)
|
||||
qdel(tackler)
|
||||
QDEL_NULL(tackler)
|
||||
|
||||
/obj/item/clothing/gloves/tackler/dolphin
|
||||
name = "dolphin gloves"
|
||||
|
||||
@@ -275,8 +275,10 @@
|
||||
pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
|
||||
actions_types = list(/datum/action/item_action/bhop)
|
||||
permeability_coefficient = 0.05
|
||||
unique_reskin = list("Explorer" = "miningjet",
|
||||
"Jackboot" = "jetboots")
|
||||
unique_reskin = list(
|
||||
"Explorer" = list("icon_state" = "miningjet"),
|
||||
"Jackboot" = list("icon_state" = "jetboots")
|
||||
)
|
||||
var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles
|
||||
var/jumpspeed = 3
|
||||
var/recharging_rate = 60 //default 6 seconds between each dash
|
||||
|
||||
@@ -80,9 +80,10 @@
|
||||
item_state = "hostrench"
|
||||
flags_inv = 0
|
||||
strip_delay = 80
|
||||
unique_reskin = list("Coat" = "hostrench",
|
||||
"Cloak" = "trenchcloak"
|
||||
)
|
||||
unique_reskin = list(
|
||||
"Coat" = list("icon_state" = "hostrench"),
|
||||
"Cloak" = list("icon_state" = "trenchcloak")
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/armor/hos/platecarrier
|
||||
name = "plate carrier"
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
/obj/item/clothing/accessory/proc/on_uniform_dropped(obj/item/clothing/under/U, user)
|
||||
return
|
||||
|
||||
/obj/item/clothing/accessory/AltClick(mob/user)
|
||||
/obj/item/clothing/accessory/CtrlClick(mob/user)
|
||||
. = ..()
|
||||
if(istype(user) && user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
if(initial(above_suit))
|
||||
@@ -123,7 +123,7 @@
|
||||
. = ..()
|
||||
. += "<span class='notice'>\The [src] can be attached to [istype(src, /obj/item/clothing/accessory/ring) ? "gloves" : "a uniform"]. Alt-click to remove it once attached.</span>"
|
||||
if(initial(above_suit))
|
||||
. += "<span class='notice'>\The [src] can be worn above or below your suit. Alt-click to toggle.</span>"
|
||||
. += "<span class='notice'>\The [src] can be worn above or below your suit. Ctrl-click to toggle.</span>"
|
||||
|
||||
//////////////
|
||||
//Waistcoats//
|
||||
@@ -603,3 +603,23 @@
|
||||
obj_flags = UNIQUE_RENAME
|
||||
custom_materials = list(/datum/material/iron=100)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
|
||||
/obj/item/clothing/accessory/pride
|
||||
name = "pride pin"
|
||||
desc = "A Nanotrasen Diversity & Inclusion Center-sponsored holographic pin to show off your pride of sexuality or gender identity, reminding the crew of their unwavering commitment to equity, diversity, and inclusion!"
|
||||
icon_state = "pride"
|
||||
above_suit = TRUE
|
||||
obj_flags = UNIQUE_RENAME
|
||||
unique_reskin = list(
|
||||
"Rainbow Pride" = list("icon_state" = "pride"),
|
||||
"Bisexual Pride" = list("icon_state" = "pride_bi"),
|
||||
"Pansexual Pride" = list("icon_state" = "pride_pan"),
|
||||
"Asexual Pride" = list("icon_state" = "pride_ace"),
|
||||
"Non-binary Pride" = list("icon_state" = "pride_enby"),
|
||||
"Transgender Pride" = list("icon_state" = "pride_trans")
|
||||
)
|
||||
|
||||
/obj/item/clothing/accessory/pride/reskin_obj(mob/M)
|
||||
. = ..()
|
||||
name = "[current_skin] pin"
|
||||
|
||||
@@ -219,23 +219,11 @@
|
||||
/mob/living/simple_animal/jacq/proc/treat(mob/living/carbon/C, gender)
|
||||
visible_message("<b>[src]</b> gives off a glowing smile, <span class='spooky'>\"What ken Ah offer ye? I can magic up an object, a potion or a plushie fer ye.\"</span>")
|
||||
jacqrunes("What ken Ah offer ye? I can magic up an object, a potion or a plushie fer ye.", C)
|
||||
var/choices_reward = list("Object - 3 candies", "Potion - 2 candies", "Jacqueline Tracker - 2 candies", "Plushie - 1 candy", "Can I get to know you instead?", "Become a pumpkinhead dullahan (perma) - 4 candies")
|
||||
var/choices_reward = list("Object - 3 candies", "Potion - 2 candies", "Jacqueline Tracker - 2 candies", "Plushie - 1 candy", "Can I get to know you instead?")
|
||||
var/choice_reward = input(usr, "Trick or Treat?", "Trick or Treat?") in choices_reward
|
||||
|
||||
//rewards
|
||||
switch(choice_reward)
|
||||
if("Become a pumpkinhead dullahan (perma) - 4 candies")
|
||||
if(!take_candies(C, 4))
|
||||
visible_message("<b>[src]</b> raises an eyebrown, <span class='spooky'>\"It's 4 candies for that [gender]! Thems the rules!\"</span>")
|
||||
jacqrunes("It's 4 candies for that [gender]! Thems the rules!", C)
|
||||
return
|
||||
visible_message("<b>[src]</b> waves their arms around, <span class='spooky'>\"Off comes your head, a pumpkin taking it's stead!\"</span>")
|
||||
jacqrunes("Off comes your head, a pumpkin taking it's stead!", C)
|
||||
C.reagents.add_reagent(/datum/reagent/mutationtoxin/pumpkinhead, 5)
|
||||
sleep(20)
|
||||
poof()
|
||||
return
|
||||
|
||||
if("Object - 3 candies")
|
||||
if(!take_candies(C, 3))
|
||||
visible_message("<b>[src]</b> raises an eyebrown, <span class='spooky'>\"It's 3 candies per trinket [gender]! Thems the rules!\"</span>")
|
||||
@@ -698,12 +686,6 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/datum/reagent/mutationtoxin/pumpkinhead
|
||||
name = "Pumpkin head mutation toxin"
|
||||
race = /datum/species/dullahan/pumpkin
|
||||
mutationtext = "<span class='spooky'>The pain subsides. You feel your head roll off your shoulders... and you smell pumpkin."
|
||||
//I couldn't get the replace head sprite with a pumpkin to work so, it is what it is.
|
||||
|
||||
/mob/living/simple_animal/jacq/proc/check_candies(mob/living/carbon/C)
|
||||
var/invs = C.get_contents()
|
||||
var/candy_count = 0
|
||||
|
||||
@@ -63,6 +63,10 @@
|
||||
if (needs_update)
|
||||
GLOB.lighting_update_lights -= src
|
||||
|
||||
top_atom = null
|
||||
source_atom = null
|
||||
source_turf = null
|
||||
pixel_turf = null
|
||||
. = ..()
|
||||
|
||||
// Yes this doesn't align correctly on anything other than 4 width tabs.
|
||||
|
||||
@@ -253,8 +253,10 @@
|
||||
sharpness = SHARP_NONE // use your survival dagger or smth
|
||||
icon_state = "crusher-hands"
|
||||
item_state = "crusher0-fist"
|
||||
unique_reskin = list("Gauntlets" = "crusher-hands",
|
||||
"Fingerless" = "crusher-hands-bare")
|
||||
unique_reskin = list(
|
||||
"Gauntlets" = list("icon_state" = "crusher-hands"),
|
||||
"Fingerless" = list("icon_state" = "crusher-hands-bare")
|
||||
)
|
||||
detonation_damage = 45 // 60 on wield, compared to normal crusher's 70
|
||||
backstab_bonus = 70 // 130 on backstab though
|
||||
var/combo_on_anything = FALSE // @admins if you're varediting this you don't get to whine at me
|
||||
|
||||
@@ -121,6 +121,7 @@
|
||||
icon_state = "furnace"
|
||||
density = TRUE
|
||||
needs_item_input = TRUE
|
||||
init_process = TRUE
|
||||
var/obj/machinery/mineral/CONSOLE = null
|
||||
var/on = FALSE
|
||||
var/datum/material/selected_material = null
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
output_dir = SOUTH
|
||||
req_access = list(ACCESS_MINERAL_STOREROOM)
|
||||
speed_process = TRUE
|
||||
init_process = TRUE
|
||||
circuit = /obj/item/circuitboard/machine/ore_redemption
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/points = 0
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
input_dir = WEST
|
||||
output_dir = EAST
|
||||
speed_process = TRUE
|
||||
init_process = TRUE
|
||||
|
||||
/obj/machinery/mineral/unloading_machine/proc/horrible_quadratic_monster(var/turf/T)
|
||||
set waitfor = FALSE
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/obj/item/card/id/inserted_id
|
||||
var/list/prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces.
|
||||
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
|
||||
new /datum/data/mining_equipment("50 Point Transfer Card", /obj/item/card/mining_point_card, 50),
|
||||
new /datum/data/mining_equipment("50 Point Transfer Card", /obj/item/card/mining_point_card/fifty, 50),
|
||||
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
|
||||
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
|
||||
new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
||||
@@ -27,7 +27,7 @@
|
||||
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
|
||||
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
|
||||
new /datum/data/mining_equipment("Larger Ore Bag", /obj/item/storage/bag/ore/large, 500),
|
||||
new /datum/data/mining_equipment("Mining Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
||||
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
||||
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
|
||||
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/kinetic_crusher, 750),
|
||||
@@ -330,6 +330,9 @@
|
||||
icon_state = "data_1"
|
||||
var/points = 500
|
||||
|
||||
/obj/item/card/mining_point_card/fifty
|
||||
points = 50
|
||||
|
||||
/obj/item/card/mining_point_card/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/card/id))
|
||||
var/obj/item/card/id/id = I
|
||||
|
||||
@@ -585,18 +585,28 @@
|
||||
for(var/job in category)
|
||||
var/datum/job/job_datum = SSjob.name_occupations[job]
|
||||
if(job_datum && IsJobUnavailable(job_datum.title, TRUE) == JOB_AVAILABLE)
|
||||
// Get currently occupied slots
|
||||
var/num_positions_current = job_datum.current_positions
|
||||
|
||||
// Get total slots that can be occupied
|
||||
var/num_positions_total = job_datum.total_positions
|
||||
|
||||
// Change to lemniscate for infinite-slot jobs
|
||||
// This variable should only used to display text!
|
||||
num_positions_total = (num_positions_total == -1 ? "∞" : num_positions_total)
|
||||
|
||||
var/command_bold = ""
|
||||
if(job in GLOB.command_positions)
|
||||
command_bold = " command"
|
||||
//SKYRAT CHANGES
|
||||
var/jobline = "[job_datum.title] ([job_datum.current_positions])"
|
||||
//Sandstorm changes
|
||||
var/jobline = "[job_datum.title]"
|
||||
if(job_datum in SSjob.prioritized_jobs)
|
||||
jobline = "<span class='priority'>[jobline]</span>"
|
||||
if(client && client.prefs && client.prefs.alt_titles_preferences[job_datum.title])
|
||||
jobline = "[jobline]<br><span style='color:#BBBBBB; font-style: italic;'>(as [client.prefs.alt_titles_preferences[job_datum.title]])</span>"
|
||||
jobline = "<a class='job[command_bold]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'>[jobline]</a>"
|
||||
jobline = "<a class='job[command_bold]' style='display:block;width:170px' href='byond://?src=[REF(src)];SelectedJob=[job_datum.title]'>[jobline] ([num_positions_current]/[num_positions_total])</a>"
|
||||
dept_dat += jobline
|
||||
//END OF SKYRAT CHANGES
|
||||
//End of Sandstorm changes
|
||||
if(!dept_dat.len)
|
||||
dept_dat += "<span class='nopositions'>No positions open.</span>"
|
||||
dat += jointext(dept_dat, "")
|
||||
|
||||
@@ -77,6 +77,8 @@
|
||||
//For soft-restricting markings to species IDs
|
||||
var/list/recommended_species
|
||||
|
||||
var/mutable_category // simply do not worry about this value
|
||||
|
||||
/datum/sprite_accessory/proc/is_not_visible(var/mob/living/carbon/human/H, var/tauric) //return if the accessory shouldn't be shown
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
icon = 'modular_citadel/icons/mob/xeno_parts_greyscale.dmi'
|
||||
mutant_part_string = "xhead"
|
||||
relevant_layers = list(BODY_ADJ_LAYER)
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
relevant_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
mutant_part_string = "mandibles"
|
||||
color_src = 0
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/arachnid_mandibles/none
|
||||
name = "None"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
color_src = HAIR
|
||||
relevant_layers = list(BODY_ADJ_LAYER)
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/caps/round
|
||||
name = "Round"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
mutant_part_string = "ears"
|
||||
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/ears/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
/datum/sprite_accessory/facial_hair
|
||||
icon = 'icons/mob/hair.dmi'
|
||||
gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P)
|
||||
mutable_category = "HEAD"
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
/datum/sprite_accessory/facial_hair/shaved //this is exempt from the alphabetical sort
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
//////////////////////
|
||||
/datum/sprite_accessory/hair
|
||||
icon = 'icons/mob/hair.dmi' // default icon for all hairs
|
||||
mutable_category = "HEAD"
|
||||
|
||||
// please make sure they're sorted alphabetically and, where needed, categorized
|
||||
// try to capitalize the names please~
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
color_src = HORNCOLOR
|
||||
relevant_layers = list(HORNS_LAYER)
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/horns/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
|
||||
@@ -6,6 +6,11 @@
|
||||
icon = 'modular_citadel/icons/mob/ipc_screens.dmi'
|
||||
color_src = null
|
||||
relevant_layers = list(BODY_ADJ_LAYER)
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/screen/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return (HD == null) // it's not visible if head is null
|
||||
|
||||
/datum/sprite_accessory/screen/blank
|
||||
name = "Blank"
|
||||
@@ -133,6 +138,7 @@
|
||||
relevant_layers = list(BODY_ADJ_LAYER)
|
||||
recommended_species = list("ipc")
|
||||
mutant_part_string = "ipc_antenna"
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/antenna/none
|
||||
name = "None"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
mutant_part_string = "snout"
|
||||
relevant_layers = list(BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/snouts/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
color_src = MUTCOLORS
|
||||
name = "Synthetic Lizard - Snout"
|
||||
icon_state = "synthliz_basic"
|
||||
mutable_category = "HEAD"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/synthliz/synthliz_under
|
||||
icon = 'modular_citadel/icons/mob/synthliz_snouts.dmi'
|
||||
|
||||
@@ -17,10 +17,6 @@ Doesn't work on other aliens/AI.*/
|
||||
action_icon_state = "spell_default"
|
||||
action_background_icon_state = "bg_alien"
|
||||
|
||||
/obj/effect/proc_holder/alien/Initialize(mapload)
|
||||
. = ..()
|
||||
action = new(src)
|
||||
|
||||
/obj/effect/proc_holder/alien/Trigger(mob/living/carbon/user, skip_cost_check = FALSE)
|
||||
if(!istype(user))
|
||||
return TRUE
|
||||
|
||||
@@ -964,9 +964,6 @@
|
||||
/mob/living/carbon/human/species/corporate
|
||||
race = /datum/species/corporate
|
||||
|
||||
/mob/living/carbon/human/species/dullahan
|
||||
race = /datum/species/dullahan
|
||||
|
||||
/mob/living/carbon/human/species/felinid
|
||||
race = /datum/species/human/felinid
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user