Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into eigenstasium-nope

This commit is contained in:
Putnam
2020-03-06 22:57:12 -08:00
497 changed files with 213660 additions and 207885 deletions
+67 -84
View File
@@ -4,32 +4,32 @@
/area/template_noop)
"ab" = (
/turf/closed/mineral/random/low_chance,
/area/ruin/unpowered)
/area/ruin/space)
"ac" = (
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"ad" = (
/obj/machinery/hydroponics/soil,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"ae" = (
/turf/closed/wall/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"af" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"ag" = (
/obj/structure/shuttle/engine/propulsion/right{
dir = 4
},
/turf/closed/wall/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"ah" = (
/obj/structure/table/wood,
/obj/item/shovel,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"ai" = (
/obj/structure/lattice,
/turf/template_noop,
@@ -37,35 +37,35 @@
"aj" = (
/obj/machinery/computer/cryopod,
/turf/closed/wall/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"ak" = (
/obj/structure/fluff/empty_cryostasis_sleeper,
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"al" = (
/obj/machinery/status_display/shuttle,
/turf/closed/wall/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"am" = (
/obj/item/circuitboard/computer/rdconsole,
/obj/item/circuitboard/machine/protolathe/department/science,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"an" = (
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"ao" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"ap" = (
/obj/machinery/light{
dir = 1
},
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"aq" = (
/obj/machinery/computer{
desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages.";
@@ -73,29 +73,29 @@
name = "Broken Computer"
},
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"ar" = (
/obj/machinery/door/airlock/titanium{
name = "Escape Pod Airlock"
},
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"as" = (
/obj/machinery/light,
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"at" = (
/obj/structure/shuttle/engine/propulsion/left{
dir = 4
},
/turf/closed/wall/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"au" = (
/obj/item/seeds/tower,
/obj/item/seeds/tower,
/obj/item/seeds/tower,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"av" = (
/obj/structure/table/wood,
/obj/item/paper/crumpled{
@@ -103,7 +103,7 @@
},
/obj/item/pen,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aw" = (
/obj/item/stack/sheet/mineral/wood,
/obj/item/stack/sheet/mineral/wood,
@@ -111,55 +111,51 @@
/obj/item/stack/sheet/mineral/wood,
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"ax" = (
/obj/item/twohanded/spear,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"ay" = (
/obj/item/grown/log,
/obj/item/grown/log,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"az" = (
/obj/structure/table/wood,
/obj/item/storage/bag/plants/portaseeder,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aA" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered)
/area/ruin/space)
"aB" = (
/obj/item/seeds/banana,
/obj/item/seeds/banana,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aC" = (
/obj/effect/mob_spawn/human/clown/corpse,
/obj/structure/fans/tiny/invisible,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aD" = (
/obj/item/mining_scanner,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
"aE" = (
/obj/machinery/status_display/shuttle,
/turf/closed/wall/mineral/titanium,
/area/ruin/unpowered)
/area/ruin/space)
"aF" = (
/obj/item/pickaxe/emergency,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aG" = (
/obj/structure/sink/puddle,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aH" = (
/obj/structure/table/wood,
/obj/item/storage/firstaid/regular,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aI" = (
/obj/effect/mob_spawn/human/corpse/assistant,
/turf/template_noop,
@@ -168,17 +164,17 @@
/obj/structure/table/wood,
/obj/item/storage/bag/ore,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aK" = (
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aL" = (
/obj/structure/table/wood,
/obj/item/storage/toolbox/mechanical,
/obj/item/clothing/head/welding,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aM" = (
/mob/living/simple_animal/hostile/carp,
/turf/template_noop,
@@ -186,38 +182,38 @@
"aN" = (
/obj/structure/mineral_door/sandstone,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aO" = (
/mob/living/simple_animal/hostile/carp,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered)
/area/ruin/space)
"aP" = (
/obj/item/stack/ore/gold,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aQ" = (
/obj/item/stack/ore/gold,
/obj/item/stack/ore/gold,
/obj/item/stack/ore/gold,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aR" = (
/obj/item/stack/ore/iron,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aS" = (
/turf/closed/wall/mineral/iron,
/area/ruin/unpowered)
/area/ruin/space)
"aT" = (
/obj/item/stack/ore/iron,
/obj/item/stack/ore/iron,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aU" = (
/obj/item/flashlight/lamp,
/obj/structure/table/wood,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"aV" = (
/obj/item/clothing/suit/space/orange,
/turf/template_noop,
@@ -236,89 +232,76 @@
job_description = "Space Hermit"
},
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
"aZ" = (
/turf/closed/wall/mineral/titanium,
/area/ruin/unpowered)
"ba" = (
/obj/effect/spawner/structure/window/shuttle,
/turf/open/floor/mineral/titanium,
/area/ruin/unpowered)
"bb" = (
/obj/structure/shuttle/engine/propulsion/left{
dir = 4
},
/turf/closed/wall/mineral/titanium,
/area/ruin/unpowered)
/area/ruin/space)
"bc" = (
/obj/item/circuitboard/machine/circuit_imprinter,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bd" = (
/obj/item/grown/bananapeel,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"be" = (
/obj/effect/mob_spawn/human/corpse/cargo_tech,
/obj/structure/fans/tiny/invisible,
/obj/effect/decal/cleanable/vomit,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bf" = (
/obj/item/clothing/glasses/meson,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bg" = (
/obj/item/stock_parts/matter_bin,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bh" = (
/obj/item/circuitboard/machine/autolathe,
/turf/open/floor/mineral/titanium,
/area/ruin/powered)
/area/ruin/space)
"bi" = (
/obj/item/stock_parts/manipulator,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bj" = (
/obj/item/holosign_creator/atmos,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bk" = (
/obj/structure/holosign/barrier/atmos,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bl" = (
/obj/machinery/power/floodlight,
/obj/structure/cable{
icon_state = "0-2"
},
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bm" = (
/obj/structure/cable{
icon_state = "1-4"
},
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bn" = (
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bo" = (
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bp" = (
/obj/item/stack/ore/iron,
/obj/item/stack/ore/iron,
/obj/item/stack/ore/iron,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bq" = (
/obj/structure/cable,
/obj/machinery/power/port_gen/pacman{
@@ -327,20 +310,20 @@
sheets = 10
},
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"br" = (
/obj/item/stack/ore/iron,
/obj/item/stack/sheet/mineral/plasma,
/obj/item/stack/sheet/mineral/plasma,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bs" = (
/obj/item/flashlight/lamp/bananalamp,
/turf/open/floor/plating/asteroid,
/area/ruin/unpowered)
/area/ruin/space)
"bt" = (
/turf/closed/mineral/random/low_chance/earth_like,
/area/ruin/unpowered)
/area/ruin/space)
(1,1,1) = {"
aa
@@ -954,7 +937,7 @@ bh
an
an
ae
aZ
ae
bt
bt
bt
@@ -1006,7 +989,7 @@ ao
ao
ao
ak
ba
af
bt
bt
bt
@@ -1058,7 +1041,7 @@ ap
an
as
aj
aE
al
bt
bt
bt
@@ -1110,7 +1093,7 @@ ao
ao
ao
ak
ba
af
ac
bt
bt
@@ -1162,7 +1145,7 @@ an
an
an
ae
aZ
ae
ac
bt
bt
@@ -1214,7 +1197,7 @@ af
ar
af
at
bb
at
ac
bt
bt
@@ -0,0 +1,111 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"e" = (
/turf/template_noop,
/area/template_noop)
"m" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"q" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
(1,1,1) = {"
e
e
e
q
q
e
e
e
"}
(2,1,1) = {"
e
e
q
m
m
q
e
e
"}
(3,1,1) = {"
e
q
m
m
m
m
q
e
"}
(4,1,1) = {"
e
q
m
m
m
m
m
q
"}
(5,1,1) = {"
q
m
m
m
m
m
m
q
"}
(6,1,1) = {"
q
m
m
m
m
m
m
q
"}
(7,1,1) = {"
q
m
m
m
m
m
q
e
"}
(8,1,1) = {"
e
q
m
m
m
m
q
e
"}
(9,1,1) = {"
e
e
q
m
m
q
e
e
"}
(10,1,1) = {"
e
e
e
q
q
e
e
e
"}
@@ -0,0 +1,342 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"m" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"n" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"B" = (
/obj/item/toy/plush/borgplushie,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"J" = (
/turf/template_noop,
/area/template_noop)
"Y" = (
/obj/item/pickaxe/drill,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
(1,1,1) = {"
J
J
m
m
m
m
m
J
J
J
J
J
m
m
J
J
J
"}
(2,1,1) = {"
J
m
n
n
n
n
n
m
J
J
m
m
n
n
m
J
J
"}
(3,1,1) = {"
m
n
n
n
m
B
n
m
J
m
n
n
n
n
m
J
J
"}
(4,1,1) = {"
m
n
n
m
m
n
n
n
m
n
n
n
n
n
n
m
J
"}
(5,1,1) = {"
m
n
n
m
n
n
n
n
m
m
n
n
n
n
n
m
J
"}
(6,1,1) = {"
m
n
n
m
m
m
m
n
n
m
m
m
n
n
n
m
J
"}
(7,1,1) = {"
m
n
n
n
m
n
m
n
n
n
n
m
n
n
n
n
m
"}
(8,1,1) = {"
m
n
n
n
m
n
m
n
n
n
n
m
n
n
n
n
m
"}
(9,1,1) = {"
m
n
n
n
m
n
m
m
m
n
n
m
n
n
n
n
m
"}
(10,1,1) = {"
m
n
n
n
m
n
n
n
m
n
n
m
n
n
n
n
m
"}
(11,1,1) = {"
m
n
n
n
m
Y
n
n
m
n
n
m
m
n
n
n
m
"}
(12,1,1) = {"
m
n
n
n
n
n
n
m
m
m
m
m
n
n
n
m
J
"}
(13,1,1) = {"
J
m
n
n
n
m
n
m
n
n
n
n
n
n
m
J
J
"}
(14,1,1) = {"
J
m
n
n
n
m
m
m
n
n
n
n
n
n
m
J
J
"}
(15,1,1) = {"
J
J
m
m
n
n
n
n
n
n
n
n
n
n
m
J
J
"}
(16,1,1) = {"
J
J
J
J
m
m
n
n
n
n
n
n
m
m
J
J
J
"}
(17,1,1) = {"
J
J
J
J
J
J
m
m
m
m
m
m
J
J
J
J
J
"}
@@ -0,0 +1,277 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/effect/overlay/palmtree_l,
/turf/open/floor/holofloor/beach,
/area/ruin/space/has_grav)
"j" = (
/turf/open/floor/holofloor/beach/coast_t,
/area/ruin/space/has_grav)
"n" = (
/turf/open/floor/holofloor/beach/coast_b,
/area/ruin/space/has_grav)
"o" = (
/turf/template_noop,
/area/template_noop)
"p" = (
/turf/open/floor/holofloor/beach/water,
/area/ruin/space/has_grav)
"t" = (
/obj/effect/overlay/palmtree_r,
/turf/open/floor/holofloor/beach,
/area/ruin/space/has_grav)
"u" = (
/obj/structure/marker_beacon,
/turf/open/floor/holofloor/beach/coast_t,
/area/ruin/space/has_grav)
"A" = (
/turf/open/floor/holofloor/beach,
/area/ruin/space/has_grav)
"F" = (
/mob/living/simple_animal/crab{
desc = "This little bugger seems so happy to dance.!";
name = "raving crab"
},
/turf/open/floor/holofloor/beach/coast_t,
/area/ruin/space/has_grav)
"H" = (
/obj/structure/marker_beacon,
/turf/open/floor/holofloor/beach,
/area/ruin/space/has_grav)
"L" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"R" = (
/mob/living/simple_animal/crab{
desc = "This little bugger seems so happy to dance.!";
name = "raving crab"
},
/turf/open/floor/holofloor/beach,
/area/ruin/space/has_grav)
"T" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
(1,1,1) = {"
o
o
T
o
o
o
o
o
o
o
o
o
o
o
"}
(2,1,1) = {"
T
L
L
T
o
o
o
o
o
o
o
o
o
o
"}
(3,1,1) = {"
T
L
L
L
L
T
T
T
T
T
o
o
o
o
"}
(4,1,1) = {"
o
T
L
L
L
L
L
L
L
L
T
o
o
o
"}
(5,1,1) = {"
o
T
L
L
A
A
L
L
L
L
L
T
o
o
"}
(6,1,1) = {"
T
L
L
L
A
R
j
n
p
p
L
L
T
o
"}
(7,1,1) = {"
T
L
L
A
a
A
u
n
p
p
L
L
T
o
"}
(8,1,1) = {"
T
L
L
H
R
A
j
n
p
p
L
L
T
o
"}
(9,1,1) = {"
T
L
L
A
A
A
u
n
p
p
L
L
T
o
"}
(10,1,1) = {"
T
L
L
L
A
t
F
n
p
p
L
L
T
o
"}
(11,1,1) = {"
o
T
T
L
L
A
L
L
L
L
L
L
T
o
"}
(12,1,1) = {"
o
o
o
T
L
L
L
L
L
L
L
L
T
o
"}
(13,1,1) = {"
o
o
o
o
T
L
L
L
L
o
T
T
L
T
"}
(14,1,1) = {"
o
o
o
o
o
o
o
o
o
o
o
o
T
o
"}
@@ -0,0 +1,498 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/structure/bed,
/obj/item/bedsheet,
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"c" = (
/obj/machinery/door/airlock/silver{
name = "Bathroom"
},
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plasteel/freezer,
/area/ruin/space/has_grav/powered)
"d" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"e" = (
/obj/item/reagent_containers/glass/bottle/nutrient/ez,
/obj/item/reagent_containers/glass/bottle/nutrient/ez,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"g" = (
/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"i" = (
/obj/structure/fireplace{
dir = 8
},
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"j" = (
/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"m" = (
/obj/structure/mineral_door/woodrustic{
name = "Event Hall"
},
/obj/structure/fans/tiny,
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"n" = (
/obj/machinery/vending/boozeomat{
req_access = null
},
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"o" = (
/obj/item/reagent_containers/glass/bucket,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"p" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"q" = (
/turf/template_noop,
/area/template_noop)
"s" = (
/obj/machinery/hydroponics/soil,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"t" = (
/turf/closed/indestructible/wood,
/area/ruin/space/has_grav/powered)
"v" = (
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"w" = (
/obj/item/plant_analyzer,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"y" = (
/obj/structure/dresser,
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"A" = (
/obj/item/seeds/glowshroom,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"C" = (
/obj/structure/chair/wood/normal{
dir = 1
},
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"E" = (
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/powered)
"F" = (
/obj/item/seeds/grass,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"J" = (
/obj/machinery/light,
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/powered)
"K" = (
/obj/structure/table/wood,
/obj/machinery/light{
dir = 4
},
/obj/item/reagent_containers/food/drinks/bottle/wine,
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"L" = (
/obj/structure/mirror{
pixel_x = 28
},
/obj/effect/turf_decal/bot,
/obj/machinery/shower{
dir = 8;
pixel_y = -4
},
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/powered)
"M" = (
/obj/structure/toilet{
dir = 4
},
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/powered)
"N" = (
/obj/structure/rack,
/obj/item/stack/sheet/mineral/wood,
/obj/item/stack/sheet/mineral/wood,
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"P" = (
/obj/structure/table/wood,
/obj/item/clothing/head/festive,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"T" = (
/obj/item/shovel/spade,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"W" = (
/obj/item/cultivator,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"Y" = (
/obj/structure/table/wood,
/obj/item/phone,
/turf/open/floor/wood,
/area/ruin/space/has_grav/powered)
"Z" = (
/obj/item/seeds/tower,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
(1,1,1) = {"
q
q
q
d
d
d
d
q
q
q
q
d
d
d
q
q
q
"}
(2,1,1) = {"
q
q
d
p
p
p
p
d
d
d
d
p
p
p
d
q
q
"}
(3,1,1) = {"
q
d
p
p
p
p
p
p
p
p
p
p
p
p
p
d
q
"}
(4,1,1) = {"
d
p
p
p
p
p
p
p
p
p
t
t
t
t
p
p
d
"}
(5,1,1) = {"
d
p
p
d
d
d
e
j
p
p
t
M
J
t
p
p
d
"}
(6,1,1) = {"
d
p
p
d
d
d
F
o
p
p
t
E
L
t
p
p
d
"}
(7,1,1) = {"
q
d
d
s
s
s
s
d
t
t
t
c
t
t
t
p
d
"}
(8,1,1) = {"
q
d
d
d
A
g
W
d
t
Y
C
v
n
y
t
p
d
"}
(9,1,1) = {"
q
d
d
s
s
s
s
d
t
P
C
v
v
v
t
p
d
"}
(10,1,1) = {"
q
d
d
d
T
Z
d
d
m
v
v
v
v
v
t
p
d
"}
(11,1,1) = {"
q
d
d
s
s
s
s
d
t
v
v
v
v
v
t
p
d
"}
(12,1,1) = {"
q
d
d
d
w
A
d
d
t
t
i
N
K
a
t
p
d
"}
(13,1,1) = {"
q
d
p
s
s
s
s
d
p
t
t
t
t
t
t
p
q
"}
(14,1,1) = {"
d
p
p
p
d
d
d
p
p
p
p
p
p
p
p
d
q
"}
(15,1,1) = {"
d
p
p
p
p
p
p
p
p
p
p
p
p
d
d
q
q
"}
(16,1,1) = {"
d
p
p
p
p
p
p
p
p
p
p
p
p
d
q
q
q
"}
(17,1,1) = {"
q
d
p
p
p
p
d
d
d
d
d
d
d
q
q
q
q
"}
(18,1,1) = {"
q
q
d
d
d
d
q
q
q
q
q
q
q
q
q
q
q
"}
@@ -0,0 +1,441 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"f" = (
/obj/effect/decal/cleanable/blood/gibs/body,
/turf/open/floor/plating/airless,
/area/ruin/space)
"g" = (
/obj/structure/lattice,
/turf/closed/wall,
/area/ruin/space)
"l" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered)
"n" = (
/turf/template_noop,
/area/template_noop)
"r" = (
/turf/closed/wall,
/area/ruin/space)
"t" = (
/obj/structure/lattice,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"z" = (
/obj/item/pickaxe/silver,
/turf/open/floor/plating/airless,
/area/ruin/space)
"I" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"M" = (
/obj/structure/lattice,
/turf/template_noop,
/area/space/nearstation)
"P" = (
/turf/open/floor/plating/airless,
/area/ruin/space)
"R" = (
/obj/item/lazarus_injector,
/obj/effect/decal/cleanable/blood/gibs/human/lizard/body,
/turf/open/floor/plating/airless,
/area/ruin/space)
"Z" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
(1,1,1) = {"
n
n
n
n
n
n
n
n
n
n
n
n
n
n
I
I
n
n
n
n
"}
(2,1,1) = {"
n
n
n
n
n
I
I
I
I
I
n
n
I
I
Z
Z
I
n
n
n
"}
(3,1,1) = {"
n
n
n
I
I
Z
Z
Z
Z
Z
I
n
I
Z
Z
Z
Z
I
n
n
"}
(4,1,1) = {"
n
n
I
Z
Z
Z
Z
Z
Z
t
n
n
I
Z
Z
Z
I
n
n
n
"}
(5,1,1) = {"
n
I
Z
Z
Z
Z
Z
Z
t
M
n
n
I
Z
Z
Z
Z
l
n
n
"}
(6,1,1) = {"
n
I
Z
Z
Z
Z
I
I
n
M
n
I
Z
Z
Z
Z
Z
Z
I
n
"}
(7,1,1) = {"
I
Z
Z
Z
Z
I
n
M
M
g
r
I
Z
Z
Z
Z
Z
Z
I
n
"}
(8,1,1) = {"
I
Z
Z
Z
Z
I
n
M
z
f
r
I
Z
Z
Z
Z
Z
Z
I
n
"}
(9,1,1) = {"
I
Z
Z
Z
t
M
M
M
R
P
M
t
t
Z
Z
Z
Z
Z
I
n
"}
(10,1,1) = {"
I
Z
Z
Z
I
n
n
r
r
M
n
n
n
Z
Z
Z
Z
Z
Z
n
"}
(11,1,1) = {"
n
I
Z
I
n
n
n
n
n
M
n
n
n
n
I
Z
Z
Z
Z
I
"}
(12,1,1) = {"
n
n
I
n
n
n
I
I
I
M
n
n
n
n
I
Z
Z
Z
Z
Z
"}
(13,1,1) = {"
n
n
n
n
n
I
Z
Z
Z
t
n
n
n
n
n
I
Z
Z
Z
Z
"}
(14,1,1) = {"
n
n
n
n
n
I
Z
Z
Z
Z
I
n
n
n
n
n
I
Z
Z
Z
"}
(15,1,1) = {"
n
n
n
n
I
Z
Z
Z
Z
Z
I
n
n
n
n
n
I
Z
Z
I
"}
(16,1,1) = {"
n
n
n
n
I
Z
Z
Z
Z
I
n
n
n
n
n
n
n
I
I
n
"}
(17,1,1) = {"
n
n
n
n
I
Z
Z
I
I
n
n
n
n
n
n
n
n
n
n
n
"}
(18,1,1) = {"
n
n
n
n
n
I
I
n
n
n
n
n
n
n
n
n
n
n
n
n
"}
@@ -0,0 +1,296 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"b" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"h" = (
/obj/effect/decal/remains/human,
/turf/open/floor/plating/asteroid,
/area/ruin/space)
"t" = (
/turf/open/floor/plating/asteroid,
/area/ruin/space)
"G" = (
/obj/item/holosign_creator/atmos,
/turf/open/floor/plating/asteroid,
/area/ruin/space)
"K" = (
/turf/template_noop,
/area/template_noop)
"P" = (
/obj/structure/holosign/barrier/atmos,
/turf/open/floor/plating/asteroid,
/area/ruin/space)
"R" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"Y" = (
/obj/structure/fluff/fokoff_sign,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
(1,1,1) = {"
K
K
K
R
R
R
R
K
K
K
K
R
b
b
R
K
K
"}
(2,1,1) = {"
K
K
R
b
b
b
b
R
K
K
R
b
b
b
b
R
K
"}
(3,1,1) = {"
K
R
b
b
b
b
b
b
R
Y
b
b
b
b
b
b
R
"}
(4,1,1) = {"
R
b
b
b
b
b
b
b
b
R
b
b
b
b
b
b
R
"}
(5,1,1) = {"
R
b
b
b
b
b
b
b
b
P
b
b
b
b
b
b
R
"}
(6,1,1) = {"
K
R
b
b
b
b
b
b
t
G
t
b
b
b
b
R
K
"}
(7,1,1) = {"
K
K
R
b
b
b
R
P
t
h
t
t
b
b
b
R
K
"}
(8,1,1) = {"
K
K
K
R
Y
R
R
b
b
b
t
t
P
Y
R
K
K
"}
(9,1,1) = {"
K
K
K
R
R
b
b
b
b
b
b
b
b
R
K
K
K
"}
(10,1,1) = {"
K
K
K
R
b
b
b
b
b
b
b
b
b
b
R
K
K
"}
(11,1,1) = {"
K
K
K
R
b
b
b
b
b
b
b
b
b
R
K
K
K
"}
(12,1,1) = {"
K
K
K
K
R
b
b
b
b
R
R
R
R
K
K
K
K
"}
(13,1,1) = {"
K
K
K
K
K
R
b
b
R
K
K
K
K
K
K
K
K
"}
(14,1,1) = {"
K
K
K
K
K
K
R
R
K
K
K
K
K
K
K
K
K
"}
@@ -0,0 +1,349 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"h" = (
/turf/closed/wall/mineral/titanium,
/area/ruin/space/has_grav)
"i" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/obj/structure/spider/stickyweb,
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"k" = (
/obj/item/shard{
icon_state = "medium"
},
/obj/item/reagent_containers/food/snacks/meat/slab/spider,
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"q" = (
/obj/structure/shuttle/engine/propulsion/burst,
/turf/closed/wall/mineral/titanium,
/area/ruin/space/has_grav)
"r" = (
/obj/structure/chair/comfy/shuttle{
dir = 4
},
/obj/item/shard{
icon_state = "medium"
},
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"v" = (
/turf/template_noop,
/area/template_noop)
"x" = (
/obj/structure/spider/stickyweb,
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"C" = (
/obj/effect/decal/remains/human,
/obj/item/twohanded/spear,
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"F" = (
/obj/machinery/door/airlock/titanium{
name = "Shuttle Airlock"
},
/obj/structure/fans/tiny,
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"J" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"O" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/structure/spider/stickyweb,
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"P" = (
/obj/structure/chair/comfy/shuttle{
dir = 8
},
/obj/item/reagent_containers/food/snacks/meat/slab/spider,
/turf/open/floor/mineral/titanium/blue,
/area/ruin/space/has_grav)
"R" = (
/obj/structure/grille,
/obj/structure/window/shuttle,
/turf/open/floor/plating,
/area/ruin/space/has_grav)
"S" = (
/obj/item/shard{
icon_state = "medium"
},
/turf/open/floor/plating/airless{
icon_state = "platingdmg2"
},
/area/ruin/space/has_grav)
"U" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"W" = (
/obj/structure/spider/stickyweb,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
(1,1,1) = {"
v
v
v
v
v
v
J
J
J
v
v
v
v
v
v
"}
(2,1,1) = {"
v
v
v
v
J
J
U
U
U
J
J
J
J
v
v
"}
(3,1,1) = {"
v
v
J
J
U
U
U
U
U
U
U
U
U
J
v
"}
(4,1,1) = {"
v
J
U
U
U
U
U
U
U
U
U
U
U
U
J
"}
(5,1,1) = {"
v
J
U
U
U
U
U
U
U
U
U
U
U
U
U
"}
(6,1,1) = {"
v
J
U
U
U
U
h
R
h
q
W
U
U
J
v
"}
(7,1,1) = {"
J
U
U
U
U
U
r
i
i
q
W
W
J
J
v
"}
(8,1,1) = {"
J
U
U
U
S
x
C
k
x
F
J
J
J
J
v
"}
(9,1,1) = {"
J
U
U
U
h
h
P
O
a
q
W
W
J
J
v
"}
(10,1,1) = {"
J
U
U
U
U
h
h
R
h
q
W
U
U
U
v
"}
(11,1,1) = {"
J
U
U
U
U
U
U
U
U
U
U
U
U
U
U
"}
(12,1,1) = {"
v
J
U
U
U
U
U
U
U
U
U
U
U
U
J
"}
(13,1,1) = {"
v
J
U
U
U
U
U
U
U
U
U
U
U
U
J
"}
(14,1,1) = {"
v
v
J
J
J
J
J
J
J
J
U
U
U
U
J
"}
(15,1,1) = {"
v
v
v
v
v
v
v
v
v
v
J
J
J
J
v
"}
@@ -0,0 +1,701 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/item/stack/sheet/metal,
/turf/template_noop,
/area/template_noop)
"b" = (
/obj/structure/lattice,
/obj/structure/lattice,
/obj/item/stack/sheet/metal,
/turf/template_noop,
/area/space/nearstation)
"c" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"d" = (
/obj/item/chair,
/turf/open/floor/plating/airless{
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
"e" = (
/obj/effect/decal/cleanable/blood/gibs/down,
/turf/open/floor/plating/airless{
icon_state = "platingdmg1"
},
/area/ruin/space)
"f" = (
/obj/structure/fluff/broken_flooring{
dir = 4;
icon_state = "singular"
},
/turf/template_noop,
/area/template_noop)
"g" = (
/obj/structure/girder,
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"h" = (
/obj/item/chair/stool/bar,
/turf/open/floor/plating/airless{
icon_state = "platingdmg3"
},
/area/ruin/space)
"i" = (
/obj/structure/table/wood,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"j" = (
/obj/item/ammo_casing/shotgun/beanbag,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"k" = (
/turf/closed/wall,
/area/ruin/space)
"l" = (
/obj/structure/chair/stool/bar,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"m" = (
/obj/item/storage/box/drinkingglasses,
/obj/structure/table/wood,
/obj/machinery/light{
dir = 8;
icon_state = "tube-broken";
status = 2
},
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"n" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless{
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
"o" = (
/obj/structure/lattice,
/turf/template_noop,
/area/space/nearstation)
"p" = (
/obj/structure/fluff/broken_flooring{
dir = 4;
icon_state = "plating";
name = "broken plating"
},
/turf/template_noop,
/area/space/nearstation)
"q" = (
/obj/machinery/light{
dir = 1;
icon_state = "tube-broken";
status = 2
},
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"r" = (
/obj/machinery/door/airlock/public/glass,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"s" = (
/obj/structure/table/wood,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"t" = (
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"u" = (
/obj/structure/table/wood,
/obj/machinery/microwave,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"w" = (
/turf/open/floor/plating/airless{
icon_state = "platingdmg1"
},
/area/ruin/space)
"x" = (
/obj/structure/table/wood,
/obj/item/trash/plate,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"y" = (
/obj/structure/table_frame,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"z" = (
/obj/machinery/light{
icon_state = "tube-broken";
status = 2
},
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"A" = (
/obj/item/ammo_casing/c46x30mm,
/turf/open/floor/plating/airless{
icon_state = "platingdmg1"
},
/area/ruin/space)
"B" = (
/obj/structure/fluff/broken_flooring{
icon_state = "singular"
},
/turf/template_noop,
/area/template_noop)
"C" = (
/obj/structure/lattice,
/obj/structure/fluff/broken_flooring{
dir = 1;
icon_state = "side"
},
/turf/template_noop,
/area/space/nearstation)
"D" = (
/obj/structure/table/wood,
/obj/item/storage/firstaid/brute,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"E" = (
/obj/structure/girder,
/turf/open/floor/plating/airless{
icon_state = "platingdmg3"
},
/area/ruin/space)
"F" = (
/obj/structure/closet/secure_closet/freezer/kitchen,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"G" = (
/turf/template_noop,
/area/template_noop)
"H" = (
/obj/machinery/vending/boozeomat/all_access,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"I" = (
/obj/structure/table/wood,
/obj/item/kitchen/fork,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"K" = (
/obj/item/ammo_casing/shotgun/improvised,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"L" = (
/obj/machinery/vending/dinnerware,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"M" = (
/turf/open/floor/plating/airless{
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
"N" = (
/turf/open/floor/plating/airless{
icon_state = "platingdmg3"
},
/area/ruin/space)
"O" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless{
icon_state = "platingdmg3"
},
/area/ruin/space)
"P" = (
/obj/item/toy/plush/beeplushie,
/obj/vehicle/ridden/lavaboat,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"Q" = (
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/blood/splatter,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"R" = (
/obj/structure/fluff/broken_flooring{
dir = 1;
icon_state = "plating";
name = "broken plating"
},
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"S" = (
/obj/item/ammo_casing/c46x30mm,
/turf/open/floor/plating/airless{
icon_state = "platingdmg3"
},
/area/ruin/space)
"T" = (
/obj/structure/closet/secure_closet/freezer/fridge,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"U" = (
/obj/item/chair/stool/bar,
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"V" = (
/obj/structure/lattice,
/obj/item/stack/sheet/metal,
/turf/template_noop,
/area/space/nearstation)
"W" = (
/obj/structure/lattice,
/obj/structure/fluff/broken_flooring{
dir = 1;
icon_state = "plating";
name = "broken plating"
},
/turf/template_noop,
/area/space/nearstation)
"X" = (
/turf/open/floor/plasteel/airless,
/area/ruin/space)
"Y" = (
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/blood/old,
/obj/item/clothing/head/chefhat,
/turf/open/floor/plasteel/airless/cafeteria,
/area/ruin/space)
"Z" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
(1,1,1) = {"
G
G
G
G
G
G
G
G
G
G
c
c
c
c
c
c
G
G
G
G
"}
(2,1,1) = {"
G
G
G
G
c
c
c
G
G
c
Z
Z
Z
Z
Z
Z
c
G
G
G
"}
(3,1,1) = {"
G
G
G
c
Z
Z
Z
c
c
Z
Z
Z
Z
Z
Z
Z
Z
c
G
G
"}
(4,1,1) = {"
G
G
c
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
c
G
"}
(5,1,1) = {"
G
G
c
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
c
G
"}
(6,1,1) = {"
G
G
G
c
Z
c
R
E
k
k
k
k
k
k
k
Z
Z
Z
Z
c
"}
(7,1,1) = {"
G
G
f
G
c
o
n
X
X
z
k
H
m
L
k
Z
Z
Z
Z
c
"}
(8,1,1) = {"
G
G
G
G
G
V
C
N
N
l
I
t
j
s
k
Z
Z
Z
Z
c
"}
(9,1,1) = {"
G
G
c
c
G
o
W
A
S
h
x
j
Y
D
k
Z
Z
Z
Z
c
"}
(10,1,1) = {"
G
c
Z
Z
c
o
d
e
Q
U
y
K
t
s
k
Z
Z
Z
c
G
"}
(11,1,1) = {"
c
Z
Z
Z
c
o
M
A
S
l
i
t
j
u
k
X
Z
Z
Z
c
"}
(12,1,1) = {"
c
Z
Z
c
G
G
p
w
N
N
k
q
t
s
E
X
P
Z
Z
c
"}
(13,1,1) = {"
G
c
c
G
G
o
b
X
O
N
r
t
t
t
E
X
X
Z
Z
c
"}
(14,1,1) = {"
G
G
G
B
G
a
o
X
X
z
k
T
T
F
E
X
X
Z
Z
c
"}
(15,1,1) = {"
G
G
G
G
G
c
g
E
k
k
k
k
k
k
k
X
Z
Z
c
G
"}
(16,1,1) = {"
G
G
G
G
c
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
c
G
"}
(17,1,1) = {"
G
G
G
c
Z
Z
Z
Z
Z
Z
c
Z
Z
Z
Z
Z
c
c
G
G
"}
(18,1,1) = {"
G
G
G
c
Z
Z
Z
Z
Z
c
G
c
c
c
c
c
G
G
G
G
"}
(19,1,1) = {"
G
G
G
G
c
Z
Z
Z
Z
c
G
G
G
G
G
G
G
G
G
G
"}
(20,1,1) = {"
G
G
G
G
G
c
c
c
c
G
G
G
G
G
G
G
G
G
G
G
"}
@@ -0,0 +1,460 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/structure/flora/ausbushes/palebush,
/turf/open/floor/grass,
/area/ruin/space)
"g" = (
/obj/structure/flora/ausbushes/ywflowers,
/turf/open/floor/grass,
/area/ruin/space)
"m" = (
/obj/structure/flora/ausbushes/fernybush,
/turf/open/floor/grass,
/area/ruin/space)
"p" = (
/obj/structure/flora/ausbushes/brflowers,
/turf/open/floor/grass,
/area/ruin/space)
"q" = (
/turf/open/floor/grass,
/area/ruin/space)
"C" = (
/mob/living/simple_animal/butterfly,
/turf/open/floor/grass,
/area/ruin/space)
"D" = (
/obj/structure/toilet/secret{
dir = 4;
secret_type = /obj/item/gun/magic/wand/arcane
},
/turf/open/floor/grass,
/area/ruin/space)
"J" = (
/turf/template_noop,
/area/template_noop)
"L" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"O" = (
/obj/item/clothing/head/wizard,
/obj/item/clothing/suit/wizrobe,
/obj/effect/decal/remains/human,
/obj/effect/light_emitter/red_energy_sword,
/turf/open/floor/grass,
/area/ruin/space)
"S" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"V" = (
/obj/item/bong/coconut,
/turf/open/floor/grass,
/area/ruin/space)
"Y" = (
/obj/structure/flora/ausbushes/grassybush,
/turf/open/floor/grass,
/area/ruin/space)
"Z" = (
/obj/structure/flora/ausbushes/stalkybush,
/turf/open/floor/grass,
/area/ruin/space)
(1,1,1) = {"
J
J
L
J
J
J
J
J
J
J
J
J
J
J
J
J
J
J
"}
(2,1,1) = {"
J
L
S
L
J
J
J
J
J
J
J
J
J
J
L
L
L
J
"}
(3,1,1) = {"
L
S
S
S
L
J
J
J
J
J
J
J
L
L
S
S
S
L
"}
(4,1,1) = {"
L
S
S
S
L
J
J
J
J
J
J
L
S
S
S
S
S
L
"}
(5,1,1) = {"
J
L
S
S
L
J
J
L
L
L
L
S
S
S
S
S
S
L
"}
(6,1,1) = {"
J
J
L
L
J
J
L
S
S
S
S
S
S
S
S
S
L
J
"}
(7,1,1) = {"
J
J
J
J
J
L
S
S
S
S
D
m
S
S
S
S
L
J
"}
(8,1,1) = {"
J
J
J
J
L
S
S
S
q
q
q
q
S
S
S
L
J
J
"}
(9,1,1) = {"
J
J
J
J
L
S
S
a
C
q
p
C
S
S
S
L
J
J
"}
(10,1,1) = {"
J
J
J
J
L
S
S
q
V
O
q
q
Z
S
S
L
J
J
"}
(11,1,1) = {"
J
J
J
L
S
S
S
q
g
q
C
q
q
S
S
L
J
J
"}
(12,1,1) = {"
J
J
J
L
S
S
S
S
q
q
Y
q
S
S
S
L
J
J
"}
(13,1,1) = {"
J
J
J
S
S
S
S
S
S
S
S
S
S
S
L
L
J
J
"}
(14,1,1) = {"
J
J
L
S
S
S
S
S
S
S
S
S
S
L
L
S
L
J
"}
(15,1,1) = {"
J
L
S
S
S
S
S
S
L
L
L
L
L
L
S
S
S
L
"}
(16,1,1) = {"
L
S
S
S
S
S
S
S
L
J
J
J
J
L
S
S
S
L
"}
(17,1,1) = {"
J
L
S
S
S
S
S
L
J
J
J
J
L
S
S
S
L
J
"}
(18,1,1) = {"
J
L
S
S
S
S
L
J
J
J
J
L
S
S
S
L
J
J
"}
(19,1,1) = {"
J
J
L
S
S
S
L
J
J
J
J
L
S
S
L
J
J
J
"}
(20,1,1) = {"
J
J
J
L
L
L
J
J
J
J
J
J
L
L
J
J
J
J
"}
@@ -0,0 +1,646 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/wall/mineral/iron,
/area/ruin/space/has_grav)
"d" = (
/obj/structure/table/wood,
/obj/item/flashlight/lamp,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"e" = (
/turf/template_noop,
/area/template_noop)
"f" = (
/obj/structure/bed,
/obj/item/bedsheet,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"g" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/door/airlock/highsecurity,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"h" = (
/obj/machinery/light/small,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"k" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"l" = (
/obj/structure/dresser,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"m" = (
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"n" = (
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"o" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/beans,
/obj/item/reagent_containers/food/snacks/beans,
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"p" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 10
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"q" = (
/obj/machinery/atmospherics/components/unary/tank/air{
dir = 8
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"r" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"u" = (
/obj/structure/chair/comfy/black{
dir = 1
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"v" = (
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"w" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"x" = (
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"y" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"z" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 4
},
/obj/machinery/door/airlock/highsecurity,
/obj/structure/fans/tiny,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"A" = (
/obj/structure/table/wood,
/obj/item/export/bottle/wine,
/obj/item/reagent_containers/food/drinks/drinkingglass,
/obj/item/reagent_containers/food/drinks/drinkingglass,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"B" = (
/obj/structure/table/wood,
/obj/item/storage/box/donkpockets,
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"C" = (
/turf/closed/mineral/random/no_caves,
/area/ruin/space)
"D" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer1{
dir = 1
},
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
"E" = (
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"F" = (
/obj/structure/table,
/obj/item/storage/firstaid/regular,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"G" = (
/obj/machinery/computer/security,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"J" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 9
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"N" = (
/obj/structure/table,
/obj/item/storage/toolbox/mechanical,
/obj/item/clothing/gloves/color/yellow,
/obj/item/multitool,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"O" = (
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"P" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"Q" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{
dir = 1
},
/obj/structure/table/wood,
/obj/machinery/microwave,
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"T" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 6
},
/turf/open/floor/wood,
/area/ruin/space/has_grav)
"U" = (
/obj/machinery/sleeper,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"V" = (
/obj/machinery/computer/crew,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"W" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1,
/obj/machinery/airalarm{
dir = 1;
pixel_y = -22
},
/turf/open/floor/plasteel,
/area/ruin/space/has_grav)
"Y" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{
dir = 6
},
/turf/open/floor/plating/asteroid/airless,
/area/ruin/space)
(1,1,1) = {"
e
e
e
e
e
e
v
v
v
e
e
e
e
e
e
v
v
e
e
e
"}
(2,1,1) = {"
e
e
e
e
e
v
C
C
C
v
e
e
e
v
v
C
C
v
e
e
"}
(3,1,1) = {"
e
e
e
e
v
C
C
C
C
v
v
e
e
C
C
C
C
C
v
e
"}
(4,1,1) = {"
e
e
e
v
C
C
C
C
C
C
v
v
v
C
C
C
C
C
v
e
"}
(5,1,1) = {"
e
e
v
C
C
C
C
C
C
C
v
v
C
C
C
C
C
C
v
e
"}
(6,1,1) = {"
e
v
C
C
C
C
C
C
C
C
v
v
C
C
C
C
C
C
C
v
"}
(7,1,1) = {"
e
v
C
C
C
C
C
C
C
C
v
v
C
C
C
C
C
C
C
v
"}
(8,1,1) = {"
e
v
C
C
C
C
C
C
C
C
v
v
v
C
C
C
C
C
C
v
"}
(9,1,1) = {"
e
v
C
C
C
C
C
C
C
C
v
v
v
C
C
C
C
C
C
v
"}
(10,1,1) = {"
e
v
C
C
C
C
C
C
C
C
Y
D
C
C
C
C
C
C
C
v
"}
(11,1,1) = {"
v
C
C
C
C
C
a
a
a
a
z
a
C
C
C
C
C
C
C
v
"}
(12,1,1) = {"
v
C
C
C
C
C
a
V
O
x
k
a
a
a
a
a
C
C
v
e
"}
(13,1,1) = {"
v
C
C
C
C
C
a
G
u
O
k
a
l
f
f
a
C
C
v
e
"}
(14,1,1) = {"
v
C
C
C
C
C
a
F
O
P
W
a
d
n
h
a
C
C
v
e
"}
(15,1,1) = {"
v
C
C
C
C
C
a
a
N
w
r
a
n
T
Q
a
C
C
v
e
"}
(16,1,1) = {"
v
C
C
C
C
C
C
a
U
E
p
g
y
J
B
a
C
C
v
e
"}
(17,1,1) = {"
e
e
v
C
C
C
C
a
a
a
q
a
m
o
A
a
C
v
v
e
"}
(18,1,1) = {"
e
e
e
v
C
C
C
C
C
a
a
a
a
a
a
a
C
v
e
e
"}
(19,1,1) = {"
e
e
e
e
v
v
v
v
C
C
C
C
C
C
C
C
C
v
e
e
"}
(20,1,1) = {"
e
e
e
e
e
e
e
e
v
v
v
v
v
v
v
v
v
e
e
e
"}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+191 -199
View File
@@ -2522,7 +2522,7 @@
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat/foyer)
"aey" = (
/turf/closed/wall/rust,
/turf/closed/wall/r_wall,
/area/security/main)
"aez" = (
/turf/closed/wall,
@@ -4032,7 +4032,7 @@
/area/engine/break_room)
"agO" = (
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/rust,
/turf/closed/wall/r_wall/rust,
/area/crew_quarters/heads/hos)
"agP" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -12647,7 +12647,7 @@
/area/maintenance/starboard)
"auw" = (
/obj/structure/sign/warning/securearea,
/turf/closed/wall,
/turf/closed/wall/r_wall,
/area/bridge)
"aux" = (
/obj/effect/decal/cleanable/dirt,
@@ -16376,6 +16376,7 @@
pixel_y = -24
},
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/start/paramedic,
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
"aAs" = (
@@ -16989,7 +16990,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/cryo)
"aBr" = (
/obj/machinery/rnd/production/circuit_imprinter/department/science,
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -17001,6 +17001,7 @@
/obj/machinery/status_display/evac{
pixel_x = 32
},
/obj/machinery/rnd/production/circuit_imprinter,
/turf/open/floor/plasteel/dark,
/area/science/robotics/lab)
"aBs" = (
@@ -26734,6 +26735,9 @@
"aRe" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue,
/obj/structure/disposalpipe/segment{
dir = 4
},
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
"aRf" = (
@@ -27485,9 +27489,6 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/fore)
"aRZ" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-18"
},
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
dir = 4
@@ -27496,6 +27497,15 @@
dir = 8
},
/obj/effect/turf_decal/tile/blue,
/obj/structure/table,
/obj/item/folder/white,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/beaker,
/obj/structure/disposalpipe/segment{
dir = 10
},
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
"aSa" = (
@@ -27533,16 +27543,12 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
"aSc" = (
/obj/machinery/disposal/bin,
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/yellow,
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
/obj/effect/turf_decal/tile/yellow,
/obj/structure/disposalpipe/trunk{
dir = 1
},
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
"aSd" = (
@@ -28123,7 +28129,6 @@
/turf/open/floor/plasteel/showroomfloor,
/area/medical/storage)
"aSR" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -28133,15 +28138,14 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/item/folder/white,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/glass/beaker,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/dropper,
/obj/machinery/airalarm{
dir = 8;
pixel_x = 24
},
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/medical/medbay/central)
"aSS" = (
@@ -29776,9 +29780,6 @@
/obj/effect/decal/cleanable/blood/old,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1,
/obj/structure/cable{
icon_state = "1-4"
},
/obj/structure/cable{
icon_state = "1-2"
},
@@ -31385,6 +31386,9 @@
/obj/structure/cable{
icon_state = "1-4"
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai_upload)
"aXE" = (
@@ -31799,6 +31803,7 @@
/obj/structure/disposalpipe/segment{
dir = 9
},
/obj/effect/landmark/start/paramedic,
/turf/open/floor/plasteel/showroomfloor,
/area/medical/storage)
"aYp" = (
@@ -32001,7 +32006,7 @@
dir = 1
},
/obj/structure/disposalpipe/segment{
dir = 10
dir = 4
},
/turf/open/floor/plasteel/showroomfloor,
/area/medical/medbay/central)
@@ -32239,6 +32244,13 @@
"aZb" = (
/obj/machinery/holopad,
/obj/effect/turf_decal/bot,
/obj/machinery/power/apc/highcap/five_k{
areastring = "/area/ai_monitored/turret_protected/ai_upload";
dir = 1;
name = "Upload APC";
pixel_y = -24
},
/obj/structure/cable,
/turf/open/floor/engine,
/area/ai_monitored/turret_protected/ai_upload)
"aZc" = (
@@ -33389,6 +33401,7 @@
dir = 1
},
/obj/item/bedsheet/medical,
/obj/effect/landmark/start/paramedic,
/turf/open/floor/plasteel/dark,
/area/medical/surgery)
"baP" = (
@@ -33516,7 +33529,7 @@
/turf/closed/wall,
/area/science/storage)
"bbb" = (
/turf/closed/wall,
/turf/closed/wall/r_wall,
/area/security/checkpoint/science/research)
"bbc" = (
/turf/closed/wall/r_wall,
@@ -34233,21 +34246,10 @@
/turf/open/floor/plasteel/dark,
/area/science/lab)
"bci" = (
/obj/structure/table,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/item/clothing/gloves/color/latex{
pixel_x = 4;
pixel_y = 4
},
/obj/item/clothing/gloves/color/latex,
/obj/item/clothing/glasses/science{
pixel_x = 4;
pixel_y = 4
},
/obj/item/clothing/glasses/science,
/obj/machinery/light/small{
dir = 1
},
@@ -34259,6 +34261,7 @@
/obj/structure/extinguisher_cabinet{
pixel_y = 28
},
/obj/machinery/suit_storage_unit/rd,
/turf/open/floor/plasteel/dark,
/area/science/mixing)
"bcj" = (
@@ -34497,7 +34500,7 @@
},
/area/maintenance/port)
"bcD" = (
/turf/closed/wall/rust,
/turf/closed/wall/r_wall/rust,
/area/science/mixing)
"bcE" = (
/obj/effect/decal/cleanable/dirt,
@@ -49023,15 +49026,6 @@
/turf/open/floor/plasteel/dark,
/area/security/brig)
"byB" = (
/obj/machinery/power/apc/highcap/five_k{
areastring = "/area/ai_monitored/turret_protected/ai_upload";
dir = 1;
name = "Upload APC";
pixel_y = 26
},
/obj/structure/cable{
icon_state = "0-8"
},
/turf/open/floor/circuit/green{
luminosity = 2
},
@@ -49295,15 +49289,7 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/fitness/recreation)
"byT" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/machinery/recharge_station,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/dark,
/turf/closed/wall,
/area/ai_monitored/turret_protected/ai_upload)
"byU" = (
/obj/effect/turf_decal/tile/blue{
@@ -49516,7 +49502,6 @@
},
/area/ai_monitored/turret_protected/ai_upload)
"bzk" = (
/obj/item/twohanded/required/kirbyplants/photosynthetic,
/obj/structure/cable{
icon_state = "1-8"
},
@@ -57112,9 +57097,6 @@
/area/crew_quarters/toilet/restrooms)
"bKV" = (
/obj/effect/turf_decal/box,
/obj/structure/toilet{
dir = 8
},
/obj/structure/mirror{
pixel_x = -28
},
@@ -57140,6 +57122,10 @@
pixel_x = 24;
pixel_y = -8
},
/obj/structure/toilet{
contents = newlist(/obj/item/toy/snappop/phoenix);
dir = 8
},
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/toilet/restrooms)
"bKW" = (
@@ -69274,8 +69260,9 @@
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"cdc" = (
/turf/closed/wall,
/area/ai_monitored/turret_protected/ai_upload)
/obj/structure/sign/poster/contraband/random,
/turf/closed/wall/r_wall,
/area/maintenance/starboard)
"cdd" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -69772,11 +69759,11 @@
/turf/open/floor/plasteel/showroomfloor,
/area/security/brig)
"cdY" = (
/turf/closed/wall,
/area/ai_monitored/turret_protected/ai)
/turf/closed/wall/r_wall/rust,
/area/maintenance/central)
"cdZ" = (
/turf/closed/wall/rust,
/area/ai_monitored/turret_protected/ai)
/turf/closed/wall/r_wall,
/area/maintenance/central)
"cea" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 1
@@ -75304,7 +75291,7 @@
/turf/open/floor/plating,
/area/engine/engineering)
"cmP" = (
/turf/closed/wall,
/turf/closed/wall/r_wall,
/area/crew_quarters/heads/hos)
"cmQ" = (
/obj/machinery/door/poddoor/preopen{
@@ -81648,7 +81635,6 @@
pixel_x = 4;
pixel_y = 4
},
/obj/item/grenade/flashbang,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
/area/maintenance/port)
@@ -82297,7 +82283,6 @@
dir = 4
},
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/neck/stethoscope,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/dark,
@@ -83015,7 +83000,6 @@
/area/maintenance/fore)
"cCF" = (
/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/delivery,
/obj/item/reagent_containers/glass/bucket,
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
@@ -83052,7 +83036,6 @@
/area/maintenance/fore)
"cCM" = (
/obj/structure/janitorialcart,
/obj/effect/turf_decal/delivery,
/obj/machinery/light/small{
dir = 4
},
@@ -83085,7 +83068,6 @@
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/fore)
"cCR" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -87369,8 +87351,8 @@
/area/bridge)
"dww" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plating,
/area/engine/engineering)
/turf/open/floor/plating/asteroid/airless,
/area/space/nearstation)
"dxq" = (
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral{
@@ -87404,12 +87386,8 @@
/area/science/research)
"dQe" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light{
dir = 8;
light_color = "#e8eaff"
},
/turf/open/floor/plating,
/area/engine/engineering)
/turf/open/floor/plating/asteroid/airless,
/area/space/nearstation)
"dYu" = (
/obj/effect/spawner/lootdrop/grille_or_trash,
/obj/effect/decal/cleanable/dirt,
@@ -87530,19 +87508,11 @@
dir = 4
},
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/plating,
/area/engine/engineering)
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"fAH" = (
/obj/machinery/door/airlock/engineering/glass{
name = "Laser Room";
req_access_txt = "10"
},
/obj/structure/cable{
icon_state = "1-2"
},
/obj/effect/decal/cleanable/oil/slippery,
/turf/open/floor/plating,
/area/engine/engineering)
/turf/closed/wall/r_wall/rust,
/area/security/main)
"fXq" = (
/obj/effect/turf_decal/tile/neutral{
dir = 8
@@ -87584,8 +87554,8 @@
/area/maintenance/port/fore)
"gvR" = (
/obj/structure/sign/warning,
/turf/closed/wall/r_wall,
/area/engine/engineering)
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"gwD" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -87616,8 +87586,9 @@
/turf/open/floor/plasteel/dark,
/area/crew_quarters/locker)
"gIE" = (
/turf/open/floor/plating,
/area/engine/engineering)
/obj/effect/spawner/structure/window/plasma/reinforced,
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"gJq" = (
/obj/structure/sign/departments/evac,
/turf/closed/wall/rust,
@@ -87851,8 +87822,20 @@
/area/ai_monitored/turret_protected/ai_upload)
"jPE" = (
/obj/structure/cable,
/turf/open/floor/plating,
/area/engine/engineering)
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"jQY" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment,
/obj/item/clothing/under/maid,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
/area/maintenance/starboard/aft)
"jRw" = (
/obj/structure/sign/poster/official/high_class_martini,
/turf/closed/wall/r_wall,
@@ -88066,14 +88049,9 @@
/turf/open/floor/plasteel/dark,
/area/science/research)
"mLN" = (
/obj/machinery/camera{
c_tag = "Laser Room Starboard";
dir = 1;
name = "laser room camera";
network = list("ss13","engine")
},
/turf/open/floor/plating,
/area/engine/engineering)
/obj/effect/decal/cleanable/dirt,
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"mPm" = (
/turf/closed/wall/rust,
/area/security/checkpoint/supply)
@@ -88137,8 +88115,8 @@
/area/hallway/secondary/entry)
"pCe" = (
/obj/effect/decal/cleanable/glass,
/turf/open/floor/plating,
/area/engine/engineering)
/turf/open/floor/plating/asteroid/airless,
/area/space/nearstation)
"pFw" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -88330,6 +88308,16 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"ukP" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/simple_animal/bot/cleanbot{
name = "Madam Sweepsky";
on = 0
},
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
/area/maintenance/starboard/aft)
"umD" = (
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
@@ -88361,10 +88349,17 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
"uqy" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/clothing/under/janimaid,
/turf/open/floor/plating{
icon_state = "platingdmg1"
},
/area/maintenance/starboard/aft)
"uxQ" = (
/obj/effect/decal/cleanable/ash,
/turf/open/floor/plating,
/area/engine/engineering)
/turf/closed/mineral/random/labormineral,
/area/space/nearstation)
"uzR" = (
/turf/closed/wall/rust,
/area/storage/primary)
@@ -88446,9 +88441,6 @@
/obj/machinery/light{
dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/plating,
/area/engine/engineering)
"xTw" = (
@@ -105353,16 +105345,16 @@ bSO
bSW
bUd
bVO
agS
agS
agS
aey
agS
fAH
fAH
aey
aey
byu
agS
agS
agS
agS
aey
fAH
aey
aey
clr
cid
akj
@@ -105565,13 +105557,13 @@ aCI
aET
aHY
aIc
aPc
aPc
aPc
aOZ
aOZ
aOZ
aSo
aPc
aPc
aPc
aOZ
aOZ
aOZ
aOZ
aOZ
bMV
@@ -105610,7 +105602,7 @@ ajd
aWI
bsD
aWI
agS
aey
ahe
bYJ
ahY
@@ -105619,7 +105611,7 @@ cbT
ccM
cDr
ajR
agS
aey
cgQ
bBG
crD
@@ -105867,7 +105859,7 @@ agX
bSX
bUe
bVP
agS
aey
aMK
bYK
ahZ
@@ -106124,7 +106116,7 @@ agX
agX
agX
agX
agS
aey
aog
bYL
aia
@@ -106133,12 +106125,12 @@ aiG
cyK
cDB
cfb
agS
aey
ajx
ajx
ajd
ajd
ajd
ajx
ajx
ajx
ajx
anZ
cmt
cko
@@ -106903,7 +106895,7 @@ ajc
aiJ
amS
cKm
agS
aey
cmP
aUe
cmP
@@ -107160,7 +107152,7 @@ aiy
aiK
ajf
cKn
agS
aey
cgp
cgX
cij
@@ -107674,7 +107666,7 @@ cHA
cbV
ccN
cdT
agS
aey
cgs
akS
ckx
@@ -107931,7 +107923,7 @@ agS
agS
cIa
btJ
agS
aey
cmP
alo
anl
@@ -109949,7 +109941,7 @@ bbe
bAN
aTD
aVD
bAN
afe
agR
cuH
aUD
@@ -110206,7 +110198,7 @@ bbf
bAN
bAN
aoQ
bAN
afe
ajm
blX
afe
@@ -116825,10 +116817,10 @@ asZ
aak
aan
aaH
cdY
cdZ
asZ
aAg
cdW
cdY
asZ
cei
abS
acb
@@ -117082,7 +117074,7 @@ asZ
aLJ
aas
aaP
cdY
asZ
ced
aby
ceq
@@ -117339,10 +117331,10 @@ aAg
aal
aaw
aaU
cdZ
cdY
aAg
asZ
cfK
cdY
asZ
ces
abW
abs
@@ -118165,7 +118157,7 @@ cdg
aQh
bwp
ciX
cdc
gMU
byq
aXz
aYZ
@@ -118679,7 +118671,7 @@ avo
aQj
byj
cje
cdc
arl
byB
aXG
aZc
@@ -119977,7 +119969,7 @@ biA
bjT
atT
atT
atT
atj
beM
asx
bxx
@@ -120747,7 +120739,7 @@ apX
cCk
bka
blW
atj
atT
alj
bqB
asx
@@ -121004,8 +120996,8 @@ aox
apX
aox
aox
apX
aox
cdY
cdZ
ahy
asx
aqt
@@ -122604,10 +122596,10 @@ axW
axa
axa
axa
axW
axW
axa
axa
gIE
gIE
aeu
aeu
gvR
aeu
aeU
@@ -122860,14 +122852,14 @@ cvr
ckw
cmw
xON
fAH
jPE
gIE
gIE
dQe
axa
jPE
aeu
aeU
dQe
aeU
aeU
aeU
aaa
aaa
aaa
@@ -123118,12 +123110,12 @@ ckH
cmA
czf
axW
dww
gIE
gIE
gIE
axa
aeu
dQe
aeU
aeU
aeU
aeU
aUz
aeU
aeU
aaa
@@ -123376,12 +123368,12 @@ aAM
aAM
axW
pCe
gIE
gIE
gIE
axa
aeu
aeu
aeU
aeU
aeU
aeU
aeU
aeU
aeU
aeU
aaa
@@ -123632,11 +123624,11 @@ aAM
aAM
iBL
axa
gIE
gIE
dww
mLN
axa
aeu
aeU
dQe
aeU
aeU
aeu
aeu
aeu
@@ -123889,11 +123881,11 @@ aAM
aAM
aMW
axa
gIE
gIE
gIE
gIE
axa
aeu
aeu
aeU
coy
aeu
aeu
aeu
aeU
@@ -124147,10 +124139,10 @@ chH
aLN
axa
fyr
dww
gIE
mLN
aeu
uxQ
axa
aeu
aeu
aeU
aeU
@@ -124403,10 +124395,10 @@ aAM
aAM
aNf
axa
axa
axa
axa
axa
aeu
aeu
aeu
aeu
gvR
aeu
aeu
@@ -125687,7 +125679,7 @@ cki
axW
axa
axa
cok
axa
aeu
aeu
aeu
@@ -125916,8 +125908,8 @@ bEg
bOl
bSJ
bSI
bGH
bGr
ukP
uqy
bEg
bAT
bOC
@@ -126174,7 +126166,7 @@ bWh
bTy
cxB
ceN
chZ
jQY
cxB
cjE
bXb
@@ -129732,7 +129724,7 @@ bba
bba
biY
bba
bbc
bba
bbc
bbc
bdX
@@ -129990,7 +129982,7 @@ aSK
aUl
aVS
aYn
bbN
awi
ccs
bdY
bhH
@@ -130504,7 +130496,7 @@ aSS
aUo
baC
aYr
bbN
awi
ccu
avA
acm
@@ -130761,7 +130753,7 @@ bcb
bcQ
bbN
cbf
bbN
awi
cfi
avA
acm
@@ -131013,12 +131005,12 @@ bbi
cxQ
bbi
awi
bbN
awi
baC
baC
bcD
aYs
cbk
cdc
cna
bkd
bUG
File diff suppressed because it is too large Load Diff
+39 -11
View File
@@ -655,7 +655,7 @@
/turf/open/floor/plating,
/area/mine/laborcamp)
"ia" = (
/obj/item/reagent_containers/glass/bucket,
/obj/item/reagent_containers/glass/bucket/wood,
/obj/structure/stone_tile/block/cracked{
dir = 4
},
@@ -750,8 +750,23 @@
/obj/item/stack/sheet/mineral/wood,
/obj/item/stack/sheet/mineral/wood,
/obj/item/stack/sheet/mineral/wood,
/obj/item/seeds/tower,
/obj/item/seeds/tower,
/obj/item/seeds/ambrosia/deus{
yield = 5
potency = 50
},
/obj/item/seeds/ambrosia/deus{
yield = 5
potency = 50
},
/obj/item/seeds/tower{
yield = 5
potency = 50
},
/obj/item/seeds/tower{
yield = 5
potency = 50
},
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
/turf/open/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"iJ" = (
@@ -2179,8 +2194,15 @@
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"wm" = (
/obj/item/seeds/glowshroom,
/obj/item/seeds/glowshroom,
/obj/item/seeds/glowshroom{
yield = 5
potency = 50
},
/obj/item/seeds/glowshroom{
yield = 5
potency = 50
},
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
/obj/structure/stone_tile/block{
dir = 4
},
@@ -3327,8 +3349,15 @@
dir = 4
},
/obj/item/storage/bag/plants/portaseeder,
/obj/item/seeds/cotton,
/obj/item/seeds/cotton,
/obj/item/storage/bag/plants,
/obj/item/seeds/cotton{
yield = 5
potency = 50
},
/obj/item/seeds/cotton{
yield = 5
potency = 50
},
/turf/open/indestructible/boss,
/area/ruin/unpowered/ash_walkers)
"Vj" = (
@@ -3355,10 +3384,9 @@
/turf/open/floor/plasteel,
/area/mine/laborcamp)
"VI" = (
/obj/structure/stone_tile{
dir = 8
},
/obj/structure/reagent_dispensers/watertank,
/obj/structure/well_foundation,
/obj/item/reagent_containers/glass/bucket/wood,
/obj/item/reagent_containers/glass/bucket/wood,
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered/ash_walkers)
"VP" = (
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+15
View File
@@ -34,6 +34,21 @@
#define HIJACK_HIJACKER 1 //Needs to be present for shuttle to be hijacked
#define HIJACK_PREVENT 2 //Prevents hijacking same way as non-antags
//Syndicate Contracts
#define CONTRACT_STATUS_INACTIVE 1
#define CONTRACT_STATUS_ACTIVE 2
#define CONTRACT_STATUS_BOUNTY_CONSOLE_ACTIVE 3
#define CONTRACT_STATUS_EXTRACTING 4
#define CONTRACT_STATUS_COMPLETE 5
#define CONTRACT_STATUS_ABORTED 6
#define CONTRACT_PAYOUT_LARGE 1
#define CONTRACT_PAYOUT_MEDIUM 2
#define CONTRACT_PAYOUT_SMALL 3
#define CONTRACT_UPLINK_PAGE_CONTRACTS "CONTRACTS"
#define CONTRACT_UPLINK_PAGE_HUB "HUB"
//Overthrow time to update heads obj
#define OBJECTIVE_UPDATING_TIME 300
+3 -3
View File
@@ -39,9 +39,9 @@
#define COCK_SIZE_MIN 1
#define COCK_SIZE_MAX 20
#define COCK_GIRTH_RATIO_MAX 1.25
#define COCK_GIRTH_RATIO_DEF 0.75
#define COCK_GIRTH_RATIO_MIN 0.5
#define COCK_DIAMETER_RATIO_MAX 0.42
#define COCK_DIAMETER_RATIO_DEF 0.25
#define COCK_DIAMETER_RATIO_MIN 0.15
#define KNOT_GIRTH_RATIO_MAX 3
#define KNOT_GIRTH_RATIO_DEF 2.1
+15
View File
@@ -47,6 +47,10 @@
#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" //before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation
#define COMSIG_PARENT_QDELETING "parent_qdeleting" //just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called
/// Trait signals
#define COMPONENT_ADD_TRAIT (1<<0)
#define COMPONENT_REMOVE_TRAIT (1<<1)
// /atom signals
#define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params)
#define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called
@@ -208,6 +212,16 @@
#define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login" //sent when a mob/login() finishes: (client)
#define COMSIG_LIVING_GUN_PROCESS_FIRE "living_gun_process_fire" //from base of /obj/item/gun/proc/process_fire(): (atom/target, params, zone_override)
//ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS!
#define COMSIG_LIVING_STATUS_STUN "living_stun" //from base of mob/living/Stun() (amount, update, ignore)
#define COMSIG_LIVING_STATUS_KNOCKDOWN "living_knockdown" //from base of mob/living/Knockdown() (amount, update, ignore)
#define COMSIG_LIVING_STATUS_PARALYZE "living_paralyze" //from base of mob/living/Paralyze() (amount, update, ignore)
#define COMSIG_LIVING_STATUS_IMMOBILIZE "living_immobilize" //from base of mob/living/Immobilize() (amount, update, ignore)
#define COMSIG_LIVING_STATUS_UNCONSCIOUS "living_unconscious" //from base of mob/living/Unconscious() (amount, update, ignore)
#define COMSIG_LIVING_STATUS_SLEEP "living_sleeping" //from base of mob/living/Sleeping() (amount, update, ignore)
#define COMSIG_LIVING_STATUS_DAZE "living_daze" //from base of mob/living/Daze() (amount, update, ignore)
#define COMPONENT_NO_STUN 1 //For all of them
// /mob/living/carbon signals
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
@@ -233,6 +247,7 @@
#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params)
#define COMPONENT_NO_ATTACK 1
#define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params)
#define COMSIG_ITEM_ALT_AFTERATTACK "item_alt_afterattack" //from base of obj/item/altafterattack(): (atom/target, mob/user, proximity, params)
#define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot)
#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user)
#define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker)
+27
View File
@@ -92,3 +92,30 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
// radiation
#define RAD_PROTECT_CONTENTS (1<<0)
#define RAD_NO_CONTAMINATE (1<<1)
//Mob mobility var flags
/// any flag
#define CHECK_MOBILITY(target, flags) CHECK_BITFIELD(target.mobility_flags, flags)
#define CHECK_ALL_MOBILITY(target, flags) CHECK_MULTIPLE_BITFIELDS(target.mobility_flags, flags)
/// can move
#define MOBILITY_MOVE (1<<0)
/// can, and is, standing up.
#define MOBILITY_STAND (1<<1)
/// can pickup items
#define MOBILITY_PICKUP (1<<2)
/// can use items and interact with world objects like opening closets/etc
#define MOBILITY_USE (1<<3)
/// can use interfaces like consoles
#define MOBILITY_UI (1<<4)
/// can use storage item
#define MOBILITY_STORAGE (1<<5)
/// can pull things
#define MOBILITY_PULL (1<<6)
/// can hold non-nodropped items voluntarily
#define MOBILITY_HOLD (1<<7)
/// Can resist out of buckling, grabs, cuffs, etc, in the usual order (buckle --> cuffs --> grab)
#define MOBILITY_RESIST (1<<8)
#define MOBILITY_FLAGS_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_PICKUP | MOBILITY_USE | MOBILITY_UI | MOBILITY_STORAGE | MOBILITY_PULL | MOBILITY_RESIST)
#define MOBILITY_FLAGS_ANY_INTERACTION (MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_UI | MOBILITY_STORAGE)
+1 -4
View File
@@ -4,11 +4,8 @@
/// Hard materials, such as iron or metal
#define MAT_CATEGORY_RIGID "rigid material"
/// Gets the reference for the material type that was given
#define getmaterialref(A) (SSmaterials.materials[A] || A)
/// Flag for atoms, this flag ensures it isn't re-colored by materials. Useful for snowflake icons such as default toolboxes.
#define MATERIAL_COLOR (1<<0)
#define MATERIAL_ADD_PREFIX (1<<1)
#define MATERIAL_NO_EFFECTS (1<<2)
#define MATERIAL_AFFECT_STATISTICS (1<<3)
+9 -2
View File
@@ -37,10 +37,17 @@
/////////////
// DEBUFFS //
/////////////
/// The affected is unable to move, or to use, hold, or pickup items.
#define STATUS_EFFECT_STUN /datum/status_effect/incapacitating/stun
#define STATUS_EFFECT_STUN /datum/status_effect/incapacitating/stun //the affected is stunned
#define STATUS_EFFECT_KNOCKDOWN /datum/status_effect/incapacitating/knockdown //the affected is unable to stand up
#define STATUS_EFFECT_KNOCKDOWN /datum/status_effect/incapacitating/knockdown //the affected is knocked down
#define STATUS_EFFECT_IMMOBILIZED /datum/status_effect/incapacitating/immobilized //the affected is unable to move
#define STATUS_EFFECT_PARALYZED /datum/status_effect/incapacitating/paralyzed //the affected is unable to move, use items, or stand up.
/// The affected is unable to use or pickup items
#define STATUS_EFFECT_DAZED /datum/status_effect/incapacitating/dazed
#define STATUS_EFFECT_UNCONSCIOUS /datum/status_effect/incapacitating/unconscious //the affected is unconscious
-1
View File
@@ -56,7 +56,6 @@
#define INIT_ORDER_SERVER_MAINT 93
#define INIT_ORDER_INPUT 85
#define INIT_ORDER_VIS 80
#define INIT_ORDER_MATERIALS 76
#define INIT_ORDER_RESEARCH 75
#define INIT_ORDER_EVENTS 70
#define INIT_ORDER_JOBS 65
+21 -2
View File
@@ -1,3 +1,5 @@
#define SIGNAL_TRAIT(trait_ref) "trait [trait_ref]"
// trait accessor defines
#define ADD_TRAIT(target, trait, source) \
do { \
@@ -6,12 +8,14 @@
target.status_traits = list(); \
_L = target.status_traits; \
_L[trait] = list(source); \
SEND_SIGNAL(target, SIGNAL_TRAIT(trait), COMPONENT_ADD_TRAIT); \
} else { \
_L = target.status_traits; \
if (_L[trait]) { \
_L[trait] |= list(source); \
} else { \
_L[trait] = list(source); \
SEND_SIGNAL(target, SIGNAL_TRAIT(trait), COMPONENT_ADD_TRAIT); \
} \
} \
} while (0)
@@ -31,7 +35,8 @@
} \
};\
if (!length(_L[trait])) { \
_L -= trait \
_L -= trait; \
SEND_SIGNAL(target, SIGNAL_TRAIT(trait), COMPONENT_REMOVE_TRAIT); \
}; \
if (!length(_L)) { \
target.status_traits = null \
@@ -46,7 +51,8 @@
for (var/_T in _L) { \
_L[_T] &= _S;\
if (!length(_L[_T])) { \
_L -= _T } \
_L -= _T ; \
SEND_SIGNAL(target, SIGNAL_TRAIT(_T), COMPONENT_REMOVE_TRAIT); } \
};\
if (!length(_L)) { \
target.status_traits = null\
@@ -137,6 +143,19 @@
#define TRAIT_NOMARROW "nomarrow" // You don't make blood, with chemicals or nanites.
#define TRAIT_NOPULSE "nopulse" // Your heart doesn't beat.
#define TRAIT_EXEMPT_HEALTH_EVENTS "exempt-health-events"
// 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)
// BUT FOR NOW, THESE ARE HOOKED TO DO update_mobility() VIA COMSIG IN living_mobility.dm
// SO IF YOU ADD MORE, BESURE TO UPDATE IT THERE.
/// Disallow movement
#define TRAIT_MOBILITY_NOMOVE "mobility_nomove"
/// Disallow pickup
#define TRAIT_MOBILITY_NOPICKUP "mobility_nopickup"
/// Disallow item use
#define TRAIT_MOBILITY_NOUSE "mobility_nouse"
#define TRAIT_SWIMMING "swimming" //only applied by /datum/element/swimming, for checking
//non-mob traits
+10 -1
View File
@@ -174,6 +174,15 @@
L[T] = TRUE
return L
/proc/typecacheof_assoc_list(list/pathlist, ignore_root_path = FALSE)
. = list()
if(!istype(pathlist))
return
for(var/P in pathlist)
var/value = pathlist[P]
for(var/T in (ignore_root_path ? subtypesof(P) : typesof(P)))
.[T] = value
//Empties the list by setting the length to 0. Hopefully the elements get garbage collected
/proc/clearlist(list/list)
if(istype(list))
@@ -579,4 +588,4 @@
var/list/ret = list()
for(var/key in input)
ret += key
return ret
return ret
+5
View File
@@ -1,5 +1,10 @@
#define BP_MAX_ROOM_SIZE 300
GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/engine/engineering, \
/area/engine/supermatter, \
/area/engine/atmospherics_engine, \
/area/ai_monitored/turret_protected/ai))
//Repopulates sortedAreas list
/proc/repopulate_sorted_areas()
GLOB.sortedAreas = list()
+33
View File
@@ -549,3 +549,36 @@
var/pressure = environment.return_pressure()
if(pressure <= LAVALAND_EQUIPMENT_EFFECT_PRESSURE)
. = TRUE
/proc/ispipewire(item)
var/static/list/pipe_wire = list(
/obj/machinery/atmospherics,
/obj/structure/disposalpipe,
/obj/structure/cable
)
return (is_type_in_list(item, pipe_wire))
// Find a obstruction free turf that's within the range of the center. Can also condition on if it is of a certain area type.
/proc/find_obstruction_free_location(var/range, var/atom/center, var/area/specific_area)
var/list/turfs = RANGE_TURFS(range, center)
var/list/possible_loc = list()
for(var/turf/found_turf in turfs)
var/area/turf_area = get_area(found_turf)
if (specific_area) // We check if both the turf is a floor, and that it's actually in the area. // We also want a location that's clear of any obstructions.
if(!istype(turf_area, specific_area))
continue
if(!isspaceturf(found_turf))
if(!is_blocked_turf(found_turf))
possible_loc.Add(found_turf)
if (possible_loc.len < 1) // Need at least one free location.
return FALSE
return pick(possible_loc)
/proc/power_fail(duration_min, duration_max)
for(var/P in GLOB.apcs_list)
var/obj/machinery/power/apc/C = P
if(C.cell && SSmapping.level_trait(C.z, ZTRAIT_STATION))
var/area/A = C.area
if(GLOB.typecache_powerfailure_safe_areas[A.type])
continue
C.energy_fail(rand(duration_min,duration_max))
+7 -8
View File
@@ -165,7 +165,7 @@
"has_cock" = FALSE,
"cock_shape" = pick(GLOB.cock_shapes_list),
"cock_length" = 6,
"cock_girth_ratio" = COCK_GIRTH_RATIO_DEF,
"cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF,
"cock_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
"has_sheath" = FALSE,
"sheath_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
@@ -356,7 +356,7 @@ GLOBAL_LIST_EMPTY(species_list)
checked_health["health"] = health
return ..()
/proc/do_after(mob/user, var/delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null)
/proc/do_after(mob/user, var/delay, needhand = 1, atom/target = null, progress = 1, datum/callback/extra_checks = null, required_mobility_flags = (MOBILITY_USE|MOBILITY_MOVE))
if(!user)
return 0
var/atom/Tloc = null
@@ -384,6 +384,7 @@ GLOBAL_LIST_EMPTY(species_list)
var/endtime = world.time + delay
var/starttime = world.time
. = 1
var/mob/living/L = isliving(user) && user //evals to last thing eval'd
while (world.time < endtime)
stoplag(1)
if (progress)
@@ -393,15 +394,13 @@ GLOBAL_LIST_EMPTY(species_list)
drifting = 0
Uloc = user.loc
if(QDELETED(user) || user.stat || user.IsKnockdown() || user.IsStun() || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke()))
if(L && !CHECK_ALL_MOBILITY(L, required_mobility_flags))
. = 0
break
if(isliving(user))
var/mob/living/L = user
if(L.recoveringstam)
. = 0
break
if(QDELETED(user) || user.stat || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke()))
. = 0
break
if(!QDELETED(Tloc) && (QDELETED(target) || Tloc != target.loc))
if((Uloc != Tloc || Tloc != user) && !drifting)
+1
View File
@@ -354,6 +354,7 @@
roundend_report.set_content(content)
roundend_report.stylesheets = list()
roundend_report.add_stylesheet("roundend", 'html/browser/roundend.css')
roundend_report.add_stylesheet("font-awesome", 'html/font-awesome/css/all.min.css')
roundend_report.open(0)
/datum/controller/subsystem/ticker/proc/personal_report(client/C, popcount)
+15 -1
View File
@@ -49,7 +49,7 @@
alert("Invalid name.")
return ""
return sanitize(t)
/proc/sanitize_filename(t)
return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"=""))
@@ -798,3 +798,17 @@ GLOBAL_LIST_INIT(binary, list("0","1"))
out += prob(replaceprob)? pick(replacementchars) : char
return out.Join("")
/proc/readable_corrupted_text(text)
var/list/corruption_options = list("..", "£%", "~~\"", "!!", "*", "^", "$!", "-", "}", "?")
var/corrupted_text = ""
for(var/letter_index = 1; letter_index <= length(text); letter_index++) // Have every letter have a chance of creating corruption on either side
var/letter = text[letter_index] // Small chance of letters being removed in place of corruption - still overall readable
if(prob(15))
corrupted_text += pick(corruption_options)
if(prob(95))
corrupted_text += letter
else
corrupted_text += pick(corruption_options)
if(prob(15))
corrupted_text += pick(corruption_options)
return corrupted_text
+12 -1
View File
@@ -214,7 +214,7 @@ GLOBAL_LIST_INIT(bitfields, list(
"CAN_MASTURBATE_WITH" = CAN_MASTURBATE_WITH,
"MASTURBATE_LINKED_ORGAN" = MASTURBATE_LINKED_ORGAN,
"CAN_CLIMAX_WITH" = CAN_CLIMAX_WITH
),
"mob_biotypes" = list (
"MOB_ORGANIC" = MOB_ORGANIC,
@@ -227,5 +227,16 @@ GLOBAL_LIST_INIT(bitfields, list(
"MOB_EPIC" = MOB_EPIC,
"MOB_REPTILE" = MOB_REPTILE,
"MOB_SPIRIT" = MOB_SPIRIT
),
"mobility_flags" = list(
"MOBILITY_MOVE" = MOBILITY_MOVE,
"MOBILITY_STAND" = MOBILITY_STAND,
"MOBILITY_PICKUP" = MOBILITY_PICKUP,
"MOBILITY_USE" = MOBILITY_USE,
"MOBILITY_UI" = MOBILITY_UI,
"MOBILITY_STORAGE" = MOBILITY_STORAGE,
"MOBILITY_PULL" = MOBILITY_PULL,
"MOBILITY_HOLD" = MOBILITY_HOLD,
"MOBILITY_RESIST" = MOBILITY_RESIST
)
))
+3 -1
View File
@@ -18,6 +18,7 @@
#define POLL_IGNORE_DEMON "demon"
#define POLL_IGNORE_WIZARD "wizard"
#define POLL_IGNORE_CLONE "clone"
#define POLL_IGNORE_CONTRACTOR_SUPPORT "contractor_support"
GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_SENTIENCE_POTION = "Sentience potion",
@@ -37,7 +38,8 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list(
POLL_IGNORE_SPLITPERSONALITY = "Split Personality",
POLL_IGNORE_DEMON = "Demons",
POLL_IGNORE_WIZARD = "Wizards",
POLL_IGNORE_CLONE = "Defective/SDGF clones"
POLL_IGNORE_CLONE = "Defective/SDGF clones",
POLL_IGNORE_CONTRACTOR_SUPPORT = "Contractor Support Unit"
))
GLOBAL_LIST_INIT(poll_ignore, init_poll_ignore())
+2 -2
View File
@@ -14,7 +14,7 @@
if(check_click_intercept(params,A))
return
if(stat || lockcharge || IsKnockdown() || IsStun() || IsUnconscious())
if(stat || locked_down || IsParalyzed() || IsStun() || IsUnconscious())
return
var/list/modifiers = params2list(params)
@@ -66,7 +66,7 @@
if(C.user_unbuckle_mob(C.buckled_mobs[1],src))
return
if(!W && get_dist(src,A) <= interaction_range)
if(!W && (get_dist(src,A) <= interaction_range))
A.attack_robot(src)
return
+2 -2
View File
@@ -273,7 +273,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
if(!istype(L) || !L.can_resist())
return
L.changeNext_move(CLICK_CD_RESIST)
if(L.canmove)
if(CHECK_MOBILITY(L, MOBILITY_MOVE))
return L.resist_fire() //I just want to start a flame in your hearrrrrrtttttt.
@@ -601,7 +601,7 @@ so as to remain in compliance with the most up-to-date laws."
if(!istype(L) || !L.can_resist())
return
L.changeNext_move(CLICK_CD_RESIST)
if((L.canmove) && (L.last_special <= world.time))
if(CHECK_MOBILITY(L, MOBILITY_MOVE) && (L.last_special <= world.time))
return L.resist_restraints()
/obj/screen/alert/restrained/buckled/Click()
+1 -1
View File
@@ -113,7 +113,7 @@
var/mob/living/carbon/tempcarb = user
if(!tempcarb.combatmode)
totitemdamage *= 0.5
if(user.resting)
if(!CHECK_MOBILITY(user, MOBILITY_STAND))
totitemdamage *= 0.5
//CIT CHANGES END HERE
if(user != src && check_shields(I, totitemdamage, "the [I.name]", MELEE_ATTACK, I.armour_penetration))
@@ -335,6 +335,10 @@
config_entry_value = 16
min_val = 0
/datum/config_entry/number/station_space_budget
config_entry_value = 10
min_val = 0
/datum/config_entry/flag/allow_random_events // Enables random events mid-round when set
/datum/config_entry/number/events_min_time_mul // Multipliers for random events minimal starting time and minimal players amounts
+1 -1
View File
@@ -63,7 +63,7 @@
//Sleeping in here prevents future fires until returned.
/datum/controller/subsystem/proc/fire(resumed = 0)
flags |= SS_NO_FIRE
throw EXCEPTION("Subsystem [src]([type]) does not fire() but did not set the SS_NO_FIRE flag. Please add the SS_NO_FIRE flag to any subsystem that doesn't fire so it doesn't get added to the processing list and waste cpu.")
CRASH("Subsystem [src]([type]) does not fire() but did not set the SS_NO_FIRE flag. Please add the SS_NO_FIRE flag to any subsystem that doesn't fire so it doesn't get added to the processing list and waste cpu.")
/datum/controller/subsystem/Destroy()
dequeue()
+3 -3
View File
@@ -83,15 +83,15 @@ SUBSYSTEM_DEF(jukeboxes)
return
for(var/list/jukeinfo in activejukeboxes)
if(!jukeinfo.len)
EXCEPTION("Active jukebox without any associated metadata.")
stack_trace("Active jukebox without any associated metadata.")
continue
var/datum/track/juketrack = jukeinfo[1]
if(!istype(juketrack))
EXCEPTION("Invalid jukebox track datum.")
stack_trace("Invalid jukebox track datum.")
continue
var/obj/jukebox = jukeinfo[3]
if(!istype(jukebox))
EXCEPTION("Nonexistant or invalid object associated with jukebox.")
stack_trace("Nonexistant or invalid object associated with jukebox.")
continue
var/sound/song_played = sound(juketrack.song_path)
var/area/currentarea = get_area(jukebox)
+10
View File
@@ -14,6 +14,7 @@ SUBSYSTEM_DEF(mapping)
var/list/ruins_templates = list()
var/list/space_ruins_templates = list()
var/list/lava_ruins_templates = list()
var/list/station_ruins_templates = list()
var/datum/space_level/isolated_ruins_z //Created on demand during ruin loading.
var/list/shuttle_templates = list()
@@ -94,6 +95,11 @@ SUBSYSTEM_DEF(mapping)
var/list/space_ruins = levels_by_trait(ZTRAIT_SPACE_RUINS)
if (space_ruins.len)
seedRuins(space_ruins, CONFIG_GET(number/space_budget), /area/space, space_ruins_templates)
// Generate station space ruins
var/list/station_ruins = levels_by_trait(ZTRAIT_STATION)
if (station_ruins.len)
seedRuins(station_ruins, CONFIG_GET(number/station_space_budget), /area/space/station_ruins, station_ruins_templates)
SSmapping.seedStation()
loading_ruins = FALSE
#endif
@@ -161,6 +167,7 @@ SUBSYSTEM_DEF(mapping)
ruins_templates = SSmapping.ruins_templates
space_ruins_templates = SSmapping.space_ruins_templates
lava_ruins_templates = SSmapping.lava_ruins_templates
station_ruins_templates = SSmapping.station_ruins_templates
shuttle_templates = SSmapping.shuttle_templates
shelter_templates = SSmapping.shelter_templates
unused_turfs = SSmapping.unused_turfs
@@ -352,6 +359,7 @@ GLOBAL_LIST_EMPTY(the_station_areas)
// Still supporting bans by filename
var/list/banned = generateMapList("[global.config.directory]/lavaruinblacklist.txt")
banned += generateMapList("[global.config.directory]/spaceruinblacklist.txt")
banned += generateMapList("[global.config.directory]/stationruinblacklist.txt")
for(var/item in sortList(subtypesof(/datum/map_template/ruin), /proc/cmp_ruincost_priority))
var/datum/map_template/ruin/ruin_type = item
@@ -372,6 +380,8 @@ GLOBAL_LIST_EMPTY(the_station_areas)
space_ruins_templates[R.name] = R
else if(istype(R, /datum/map_template/ruin/station))
station_room_templates[R.name] = R
else if(istype(R, /datum/map_template/ruin/spacenearstation))
station_ruins_templates[R.name] = R
/datum/controller/subsystem/mapping/proc/preloadShuttleTemplates()
var/list/unbuyable = generateMapList("[global.config.directory]/unbuyableshuttles.txt")
+11 -9
View File
@@ -5,23 +5,25 @@ These materials call on_applied() on whatever item they are applied to, common e
SUBSYSTEM_DEF(materials)
name = "Materials"
flags = SS_NO_FIRE
init_order = INIT_ORDER_MATERIALS
flags = SS_NO_FIRE | SS_NO_INIT
///Dictionary of material.type || material ref
var/list/materials = list()
var/list/materials
///Dictionary of category || list of material refs
var/list/materials_by_category = list()
var/list/materials_by_category
///List of stackcrafting recipes for materials using rigid materials
var/list/rigid_stack_recipes = list(new/datum/stack_recipe("chair", /obj/structure/chair/greyscale, one_per_turf = TRUE, on_floor = TRUE, applies_mats = TRUE))
/datum/controller/subsystem/materials/Initialize(timeofday)
InitializeMaterials()
return ..()
///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info)
/datum/controller/subsystem/materials/proc/InitializeMaterials(timeofday)
/datum/controller/subsystem/materials/proc/InitializeMaterials()
materials = list()
materials_by_category = list()
for(var/type in subtypesof(/datum/material))
var/datum/material/ref = new type
materials[type] = ref
for(var/c in ref.categories)
materials_by_category[c] += list(ref)
/datum/controller/subsystem/materials/proc/GetMaterialRef(datum/material/fakemat)
if(!materials)
InitializeMaterials()
return materials[fakemat] || fakemat
+4 -8
View File
@@ -113,11 +113,8 @@ SUBSYSTEM_DEF(shuttle)
qdel(T, force=TRUE)
CheckAutoEvac()
//Cargo stuff start
var/fire_time_diff = max(0, world.time - last_fire) //Don't want this to be below 0, seriously.
var/point_gain = (fire_time_diff / 600) * passive_supply_points_per_minute
points += point_gain
//Cargo stuff end
if(!(times_fired % CEILING(600/wait, 1)))
points += passive_supply_points_per_minute
var/esETA = emergency?.getModeStr()
emergency_shuttle_stat_text = "[esETA? "[esETA] [emergency.getTimerStr()]" : ""]"
@@ -185,14 +182,13 @@ SUBSYSTEM_DEF(shuttle)
WARNING("requestEvac(): There is no emergency shuttle, but the \
shuttle was called. Using the backup shuttle instead.")
if(!backup_shuttle)
throw EXCEPTION("requestEvac(): There is no emergency shuttle, \
CRASH("requestEvac(): There is no emergency shuttle, \
or backup shuttle! The game will be unresolvable. This is \
possibly a mapping error, more likely a bug with the shuttle \
manipulation system, or badminry. It is possible to manually \
resolve this problem by loading an emergency shuttle template \
manually, and then calling register() on the mobile docking port. \
Good luck.")
return
emergency = backup_shuttle
var/srd = CONFIG_GET(number/shuttle_refuel_delay)
if(world.time - SSticker.round_start_time < srd)
@@ -420,7 +416,7 @@ SUBSYSTEM_DEF(shuttle)
/datum/controller/subsystem/shuttle/proc/request_transit_dock(obj/docking_port/mobile/M)
if(!istype(M))
throw EXCEPTION("[M] is not a mobile docking port")
CRASH("[M] is not a mobile docking port")
if(M.assigned_transit)
return
+14 -9
View File
@@ -8,6 +8,7 @@
var/desc = null
var/obj/target = null
var/check_flags = 0
var/required_mobility_flags = MOBILITY_USE
var/processing = FALSE
var/obj/screen/movable/action_button/button = null
var/buttontooltipstyle = ""
@@ -96,20 +97,23 @@
/datum/action/proc/IsAvailable()
if(!owner)
return 0
return FALSE
var/mob/living/L = owner
if(istype(L) && !CHECK_ALL_MOBILITY(L, required_mobility_flags))
return FALSE
if(check_flags & AB_CHECK_RESTRAINED)
if(owner.restrained())
return 0
return FALSE
if(check_flags & AB_CHECK_STUN)
if(owner.IsKnockdown() || owner.IsStun())
return 0
if(istype(L) && !CHECK_MOBILITY(L, MOBILITY_USE))
return FALSE
if(check_flags & AB_CHECK_LYING)
if(owner.lying)
return 0
if(istype(L) && !CHECK_MOBILITY(L, MOBILITY_STAND))
return FALSE
if(check_flags & AB_CHECK_CONSCIOUS)
if(owner.stat)
return 0
return 1
return FALSE
return TRUE
/datum/action/proc/UpdateButtonIcon(status_only = FALSE, force = FALSE)
if(button)
@@ -430,7 +434,8 @@
name = "Shift Nerves"
/datum/action/item_action/explosive_implant
check_flags = 0
check_flags = NONE
required_mobility_flags = NONE
name = "Activate Explosive Implant"
/datum/action/item_action/toggle_research_scanner
+1 -1
View File
@@ -136,7 +136,7 @@
fall_chance += 2
if(prob(fall_chance) && !owner.lying && !owner.buckled)
to_chat(owner, "<span class='warning'>Your leg gives out!</span>")
owner.Knockdown(35)
owner.DefaultCombatKnockdown(35)
else if(owner.get_active_held_item())
var/drop_chance = 1
+1 -1
View File
@@ -13,7 +13,7 @@
/datum/brain_trauma/special/godwoken/on_life()
..()
if(prob(4))
if(prob(33) && (owner.IsStun() || owner.IsKnockdown() || owner.IsUnconscious()))
if(prob(33) && owner.HighestImmobilityAmount())
speak("unstun", TRUE)
else if(prob(60) && owner.health <= owner.crit_threshold)
speak("heal", TRUE)
+9 -3
View File
@@ -39,12 +39,18 @@
//title_image = ntitle_image
/datum/browser/proc/add_stylesheet(name, file)
if(istype(name, /datum/asset/spritesheet))
if (istype(name, /datum/asset/spritesheet))
var/datum/asset/spritesheet/sheet = name
stylesheets["spritesheet_[sheet.name].css"] = "data/spritesheets/[sheet.name]"
else
stylesheets["[ckey(name)].css"] = file
register_asset("[ckey(name)].css", file)
var/asset_name = "[name].css"
stylesheets[asset_name] = file
if(!SSassets.cache[asset_name])
register_asset(asset_name, file)
/datum/browser/proc/add_script(name, file)
scripts["[ckey(name)].js"] = file
register_asset("[ckey(name)].js", file)
/datum/browser/proc/set_content(ncontent)
content = ncontent
+1 -1
View File
@@ -59,4 +59,4 @@
"<span class='userdanger'>You slide on [A]!</span>")
cooldown = world.time
H.Knockdown(60)
H.DefaultCombatKnockdown(60)
+2 -3
View File
@@ -100,7 +100,7 @@
AM.forceMove(T)
if(isliving(AM))
var/mob/living/L = AM
L.Knockdown(100)
L.DefaultCombatKnockdown(100)
L.adjustBruteLoss(30)
falling_atoms -= AM
@@ -110,8 +110,7 @@
if (isliving(AM))
var/mob/living/L = AM
L.notransform = TRUE
L.Stun(200)
L.resting = TRUE
L.Paralyze(200)
var/oldtransform = AM.transform
var/oldcolor = AM.color
@@ -119,18 +119,6 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/switchblade_ms
name = "Switchblade"
result = /obj/item/switchblade/crafted
reqs = list(/obj/item/weaponcrafting/stock = 1,
/obj/item/weaponcrafting/receiver = 1,
/obj/item/kitchen/knife = 1,
/obj/item/stack/cable_coil = 2)
tools = list(TOOL_WELDER)
time = 45
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
//////////////////
///BOMB CRAFTING//
//////////////////
@@ -310,19 +298,15 @@
subcategory = CAT_AMMO
/datum/crafting_recipe/ashen_arrow
name = "Bonfire-Hardened Arrow"
name = "Fire Hardened Arrow"
result = /obj/item/ammo_casing/caseless/arrow/ashen
tools = list(/obj/structure/bonfire)
tools = list(TOOL_WELDER)
time = 30
always_availible = FALSE
reqs = list(/obj/item/ammo_casing/caseless/arrow = 1)
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/ashen_arrow/welder
name = "Welder-Hardened Arrow"
tools = list(TOOL_WELDER)
/datum/crafting_recipe/smartdart
name = "Medical smartdart"
result = /obj/item/reagent_containers/syringe/dart
+1 -1
View File
@@ -18,7 +18,7 @@
var/mob/living/LM = parent
var/v = volume
var/e = e_range
if(!T.footstep || LM.buckled || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING))
if(!T.footstep || LM.buckled || !CHECK_MOBILITY(LM, MOBILITY_STAND) || LM.buckled || LM.throwing || (LM.movement_type & (VENTCRAWLING | FLYING)))
if (LM.lying && !LM.buckled && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying
playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v)
return
+1 -1
View File
@@ -54,7 +54,7 @@
msg += " and knocks [target] [target_buckled? "off of [target.buckled]" : "down"]"
if(target_buckled)
target.buckled.unbuckle_mob(target)
target.Knockdown(knockdown_time)
target.DefaultCombatKnockdown(knockdown_time)
if(length(msg))
user.visible_message("<span class='danger'>[msg]!</span>")
+7 -7
View File
@@ -42,7 +42,7 @@
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/OnExamine)
for(var/mat in mat_list) //Make the assoc list ref | amount
var/datum/material/M = getmaterialref(mat) || mat
var/datum/material/M = SSmaterials.GetMaterialRef(mat)
materials[M] = 0
/datum/component/material_container/proc/OnExamine(datum/source, mob/user, list/examine_list)
@@ -130,7 +130,7 @@
/// For inserting an amount of material
/datum/component/material_container/proc/insert_amount_mat(amt, var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
mat = SSmaterials.GetMaterialRef(mat)
if(amt > 0 && has_space(amt))
var/total_amount_saved = total_amount
if(mat)
@@ -145,7 +145,7 @@
/// Uses an amount of a specific material, effectively removing it.
/datum/component/material_container/proc/use_amount_mat(amt, var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
mat = SSmaterials.GetMaterialRef(mat)
var/amount = materials[mat]
if(mat)
if(amount >= amt)
@@ -157,7 +157,7 @@
/// Proc for transfering materials to another container.
/datum/component/material_container/proc/transer_amt_to(var/datum/component/material_container/T, amt, var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
mat = SSmaterials.GetMaterialRef(mat)
if((amt==0)||(!T)||(!mat))
return FALSE
if(amt<0)
@@ -190,7 +190,7 @@
for(var/x in mats) //Loop through all required materials
var/datum/material/req_mat = x
if(!istype(req_mat))
req_mat = getmaterialref(req_mat) //Get the ref if necesary
req_mat = SSmaterials.GetMaterialRef(req_mat) //Get the ref if necesary
if(!materials[req_mat]) //Do we have the resource?
return FALSE //Can't afford it
var/amount_required = mats[x] * multiplier
@@ -251,7 +251,7 @@
var/datum/material/req_mat = x
if(!istype(req_mat))
if(ispath(req_mat)) //Is this an actual material, or is it a category?
req_mat = getmaterialref(req_mat) //Get the ref
req_mat = SSmaterials.GetMaterialRef(req_mat) //Get the ref
else // Its a category. (For example MAT_CATEGORY_RIGID)
if(!has_enough_of_category(req_mat, mats[req_mat], multiplier)) //Do we have enough of this category?
@@ -316,5 +316,5 @@
/// Returns the amount of a specific material in this container.
/datum/component/material_container/proc/get_material_amount(var/datum/material/mat)
if(!istype(mat))
mat = getmaterialref(mat)
mat = SSmaterials.GetMaterialRef(mat)
return(materials[mat])
+2 -2
View File
@@ -240,7 +240,7 @@
/datum/component/riding/human/force_dismount(mob/living/user)
var/atom/movable/AM = parent
AM.unbuckle_mob(user)
user.Knockdown(60)
user.DefaultCombatKnockdown(60)
user.visible_message("<span class='warning'>[AM] pushes [user] off of [AM.p_them()]!</span>")
/datum/component/riding/cyborg
@@ -298,7 +298,7 @@
M.Move(targetm)
M.visible_message("<span class='warning'>[M] is thrown clear of [AM]!</span>")
M.throw_at(target, 14, 5, AM)
M.Knockdown(60)
M.DefaultCombatKnockdown(60)
/datum/component/riding/proc/equip_buckle_inhands(mob/living/carbon/human/user, amount_required = 1, mob/living/riding_target_override)
var/list/equipped
+2 -2
View File
@@ -22,7 +22,7 @@
return //undeads are unaffected by the spook-pocalypse.
if(istype(H.dna.species, /datum/species/zombie))
H.adjustStaminaLoss(25)
H.Knockdown(15) //zombies can't resist the doot
H.DefaultCombatKnockdown(15) //zombies can't resist the doot
C.Jitter(35)
C.stuttering = 20
if((!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly)))
@@ -36,7 +36,7 @@
/datum/component/spooky/proc/spectral_change(mob/living/carbon/human/H, mob/user)
if((H.getStaminaLoss() > 95) && (!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly)))
H.Knockdown(20)
H.DefaultCombatKnockdown(20)
H.set_species(/datum/species/skeleton)
H.visible_message("<span class='warning'>[H] has given up on life as a mortal.</span>")
var/T = get_turf(H)
@@ -11,7 +11,7 @@
var/turf/loccheck = get_turf(A)
if(is_reebe(loccheck.z))
user.visible_message("<span class='warning'>An unseen force knocks [user] to the ground!</span>", "<span class='big_brass'>\"I think not!\"</span>")
user.Knockdown(60)
user.DefaultCombatKnockdown(60)
return
if(istype(loccheck.loc, /area/fabric_of_reality))
to_chat(user, "<span class='danger'>You can't do that here!</span>")
@@ -25,7 +25,7 @@
for(var/mob/living/M in T)
if(M.movement_type & FLYING)
M.visible_message("<span class='danger'>The bluespace collapse crushes the air towards it, pulling [M] towards the ground...</span>")
M.Knockdown(5, TRUE, TRUE) //Overrides stun absorbs.
M.DefaultCombatKnockdown(5, TRUE, TRUE) //Overrides stun absorbs.
T.TerraformTurf(/turf/open/chasm/magic, /turf/open/chasm/magic)
for (var/obj/structure/ladder/unbreakable/binary/ladder in GLOB.ladders)
ladder.ActivateAlmonds()
+1 -1
View File
@@ -409,7 +409,7 @@
/datum/component/storage/proc/check_views()
for(var/mob/M in can_see_contents())
if(!isobserver(M) && !M.CanReach(src, view_only = TRUE))
if(!isobserver(M) && !M.CanReach(parent, view_only = TRUE))
close(M)
/datum/component/storage/proc/emp_act(datum/source, severity)
@@ -279,7 +279,7 @@
M.emote("deathgasp")
M.fakedeath("regenerative_coma")
M.update_stat()
M.update_canmove()
M.update_mobility()
addtimer(CALLBACK(src, .proc/uncoma, M), 300)
/datum/symptom/heal/coma/proc/uncoma(mob/living/M)
@@ -288,7 +288,7 @@
active_coma = FALSE
M.cure_fakedeath("regenerative_coma")
M.update_stat()
M.update_canmove()
M.update_mobility()
/datum/symptom/heal/coma/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = 4 * actual_power
+1 -1
View File
@@ -44,7 +44,7 @@
if(prob(25))
affected_mob.vomit(95)
H.emote("cough")
H.Knockdown(40)
H.DefaultCombatKnockdown(40)
H.losebreath += 4
if(prob(3))
to_chat(H, "<span class='danger'>You feel very weak and dizzy...</span>")
+18
View File
@@ -0,0 +1,18 @@
/datum/element/sword_point
element_flags = ELEMENT_DETACH
/datum/element/sword_point/Attach(datum/target)
. = ..()
if(. == ELEMENT_INCOMPATIBLE)
return
if(!istype(target))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_ITEM_ALT_AFTERATTACK, .proc/point)
/datum/element/sword_point/Detach(datum/source)
. = ..()
UnregisterSignal(source, COMSIG_ITEM_ALT_AFTERATTACK)
/datum/element/sword_point/proc/point(datum/source, atom/target, mob/user, proximity_flag, params)
if(!proximity_flag && ismob(target))
user.visible_message("<span class='notice'>[user] points the tip of [src] at [target].</span>", "<span class='notice'>You point the tip of [src] at [target].</span>")
+2 -1
View File
@@ -118,7 +118,8 @@
if(DEAD)
to_chat(user, "<span class='notice'>You cannot [key] while dead.</span>")
return FALSE
if(restraint_check && (user.IsStun() || user.IsKnockdown()))
var/mob/living/L = user
if(restraint_check && (istype(L) && !CHECK_MOBILITY(L, MOBILITY_USE)))
if(!intentional)
return FALSE
to_chat(user, "<span class='notice'>You cannot [key] while stunned.</span>")
+8 -8
View File
@@ -42,19 +42,19 @@
/datum/martial_art/cqc/proc/Slam(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
if(!D.stat || !D.IsKnockdown())
if(CHECK_MOBILITY(D, MOBILITY_STAND))
D.visible_message("<span class='warning'>[A] slams [D] into the ground!</span>", \
"<span class='userdanger'>[A] slams you into the ground!</span>")
playsound(get_turf(A), 'sound/weapons/slam.ogg', 50, 1, -1)
D.apply_damage(10, BRUTE)
D.Knockdown(120)
D.DefaultCombatKnockdown(120)
log_combat(A, D, "slammed (CQC)")
return TRUE
/datum/martial_art/cqc/proc/Kick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
if(!D.stat || !D.IsKnockdown())
if(CHECK_MOBILITY(D, MOBILITY_STAND))
D.visible_message("<span class='warning'>[A] kicks [D] back!</span>", \
"<span class='userdanger'>[A] kicks you back!</span>")
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
@@ -62,7 +62,7 @@
D.throw_at(throw_target, 1, 14, A)
D.apply_damage(10, BRUTE)
log_combat(A, D, "kicked (CQC)")
if(D.IsKnockdown() && !D.stat)
if(!CHECK_MOBILITY(D, MOBILITY_STAND) && CHECK_MOBILITY(D, MOBILITY_USE))
log_combat(A, D, "knocked out (Head kick)(CQC)")
D.visible_message("<span class='warning'>[A] kicks [D]'s head, knocking [D.p_them()] out!</span>", \
"<span class='userdanger'>[A] kicks your head, knocking you out!</span>")
@@ -136,7 +136,7 @@
A.do_attack_animation(D)
var/picked_hit_type = pick("CQC'd", "Big Bossed")
var/bonus_damage = 13
if(D.IsKnockdown() || D.resting || D.lying)
if(!CHECK_MOBILITY(D, MOBILITY_STAND))
bonus_damage += 5
picked_hit_type = "stomps on"
D.apply_damage(bonus_damage, BRUTE)
@@ -147,12 +147,12 @@
D.visible_message("<span class='danger'>[A] [picked_hit_type] [D]!</span>", \
"<span class='userdanger'>[A] [picked_hit_type] you!</span>")
log_combat(A, D, "[picked_hit_type] (CQC)")
if(A.resting && !D.stat && !D.IsKnockdown())
if(!CHECK_MOBILITY(A, MOBILITY_STAND) && !D.stat && CHECK_MOBILITY(D, MOBILITY_STAND))
D.visible_message("<span class='warning'>[A] leg sweeps [D]!", \
"<span class='userdanger'>[A] leg sweeps you!</span>")
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
D.apply_damage(10, BRUTE)
D.Knockdown(60)
D.DefaultCombatKnockdown(60)
log_combat(A, D, "sweeped (CQC)")
return TRUE
@@ -164,7 +164,7 @@
if(check_streak(A,D))
return TRUE
if(prob(65))
if(!D.stat || !D.IsKnockdown() || !restraining)
if(CHECK_MOBILITY(D, MOBILITY_MOVE) || !restraining)
I = D.get_active_held_item()
D.visible_message("<span class='warning'>[A] strikes [D]'s jaw with their hand!</span>", \
"<span class='userdanger'>[A] strikes your jaw, disorienting you!</span>")
+3 -3
View File
@@ -96,13 +96,13 @@
return 0
/datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(D.lying || D.IsKnockdown())
if(!CHECK_MOBILITY(D, MOBILITY_STAND))
return 0
D.visible_message("<span class='warning'>[A] leg sweeps [D]!</span>", \
"<span class='userdanger'>[A] leg sweeps you!</span>")
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE)
D.Knockdown(40, override_hardstun = 0.01, override_stamdmg = 25)
D.DefaultCombatKnockdown(40, override_hardstun = 0.01, override_stamdmg = 25)
log_combat(A, D, "leg sweeped")
return 1
@@ -138,7 +138,7 @@
log_combat(A, D, "punched")
var/picked_hit_type = pick("punches", "kicks")
var/bonus_damage = 10
if(D.IsKnockdown() || D.resting || D.lying)
if(CHECK_MOBILITY(D, MOBILITY_STAND))
bonus_damage += 5
picked_hit_type = "stomps on"
D.apply_damage(bonus_damage, BRUTE)
+1 -1
View File
@@ -16,7 +16,7 @@
playsound(D, 'sound/effects/meteorimpact.ogg', 25, 1, -1)
var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time.
D.Knockdown(20)
D.DefaultCombatKnockdown(20)
if(atk_verb)
log_combat(A, D, "[atk_verb] (Mushroom Punch)")
return TRUE
+2 -2
View File
@@ -49,7 +49,7 @@
if(!istype(D.head,/obj/item/clothing/head/helmet/) && !istype(D.head,/obj/item/clothing/head/hardhat))
D.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
A.Stun(rand(10,45))
D.Knockdown(rand(5,30))//CIT CHANGE - makes stuns from martial arts always use Knockdown instead of Stun for the sake of consistency
D.DefaultCombatKnockdown(rand(5,30))//CIT CHANGE - makes stuns from martial arts always use Knockdown instead of Stun for the sake of consistency
if(5,6)
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
atk_verb = pick("punches", "kicks", "hits", "slams into")
@@ -59,7 +59,7 @@
playsound(get_turf(D), 'sound/effects/meteorimpact.ogg', 25, 1, -1)
var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time.
D.Knockdown(60)
D.DefaultCombatKnockdown(60)
if(7,8)
basic_hit(A,D)
+9 -9
View File
@@ -79,7 +79,7 @@
return TRUE
/datum/martial_art/the_rising_bass/proc/sideKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.IsKnockdown() || D.lying == 0)
if(CHECK_MOBILITY(D, MOBILITY_STAND))
var/dir = A.dir & (NORTH | SOUTH) ? pick(EAST, WEST) : pick(NORTH, SOUTH)
var/oppdir = dir == NORTH ? SOUTH : dir == SOUTH ? NORTH : dir == EAST ? WEST : EAST
var/turf/H = get_step(D, dir)
@@ -89,7 +89,7 @@
"<span class='userdanger'>[A] kicks you in the side, forcing you to step away!</span>")
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE, BODY_ZONE_CHEST)
D.Knockdown(60)
D.DefaultCombatKnockdown(60)
var/L = !checkfordensity(H,D) ? (!checkfordensity(K,D) ? D.loc : K) : H
D.forceMove(L)
log_combat(A, D, "side kicked (Rising Bass)")
@@ -97,7 +97,7 @@
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/shoulderFlip(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.IsKnockdown() || !D.lying)
if(CHECK_MOBILITY(D, MOBILITY_STAND))
var/turf/H = get_step(A, get_dir(D,A))
var/L = checkfordensity(H,D) ? H : A.loc
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
@@ -108,14 +108,14 @@
D.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
D.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
D.Sleeping(60)
D.Knockdown(300)
D.DefaultCombatKnockdown(300)
D.forceMove(L)
log_combat(A, D, "shoulder flipped (Rising Bass)")
return TRUE
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/repulsePunch(mob/living/carbon/human/A, mob/living/carbon/human/D)
if((!D.IsKnockdown() || !D.lying) && repulsecool > world.time)
if(CHECK_MOBILITY(D, MOBILITY_STAND) && repulsecool < world.time)
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("<span class='warning'>[A] smashes [D] in the chest, throwing them away!</span>", \
"<span class='userdanger'>[A] smashes you in the chest, repelling you away!</span>")
@@ -123,14 +123,14 @@
var/atom/F = get_edge_target_turf(D, get_dir(A, get_step_away(D, A)))
D.throw_at(F, 10, 1)
D.apply_damage(10, BRUTE, BODY_ZONE_CHEST)
D.Knockdown(90)
D.DefaultCombatKnockdown(90)
log_combat(A, D, "repulse punched (Rising Bass)")
repulsecool = world.time + 3 SECONDS
return TRUE
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/footSmash(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.IsKnockdown() || !D.lying)
if(CHECK_MOBILITY(D, MOBILITY_STAND))
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("<span class='warning'>[A] smashes their foot down on [D]'s foot!</span>", \
"<span class='userdanger'>[A] smashes your foot!</span>")
@@ -142,7 +142,7 @@
return basic_hit(A,D)
/datum/martial_art/the_rising_bass/proc/deftSwitch(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.IsKnockdown() || !D.lying)
if(CHECK_MOBILITY(D, MOBILITY_STAND))
if (D.get_active_held_item())
var/obj/item/G = D.get_active_held_item()
if (G && !(G.item_flags & (ABSTRACT|DROPDEL)) && D.temporarilyRemoveItemFromInventory(G))
@@ -205,4 +205,4 @@
deftswitch.Remove(H)
sidekick.Remove(H)
REMOVE_TRAIT(H, TRAIT_NOGUNS, RISING_BASS_TRAIT)
REMOVE_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, RISING_BASS_TRAIT)
REMOVE_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, RISING_BASS_TRAIT)
+12 -12
View File
@@ -37,7 +37,7 @@
return FALSE
/datum/martial_art/the_sleeping_carp/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsStun() && !D.IsKnockdown())
if(CHECK_MOBILITY(D, MOBILITY_USE))
log_combat(A, D, "wrist wrenched (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("<span class='warning'>[A] grabs [D]'s wrist and wrenches it sideways!</span>", \
@@ -46,19 +46,19 @@
D.emote("scream")
D.dropItemToGround(D.get_active_held_item())
D.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
D.Knockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
D.DefaultCombatKnockdown(60)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
return TRUE
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/backKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsKnockdown())
if(CHECK_MOBILITY(D, MOBILITY_STAND))
if(A.dir == D.dir)
log_combat(A, D, "back-kicked (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("<span class='warning'>[A] kicks [D] in the back!</span>", \
"<span class='userdanger'>[A] kicks you in the back, making you stumble and fall!</span>")
step_to(D,get_step(D,D.dir),1)
D.Knockdown(80)
D.DefaultCombatKnockdown(80)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
return TRUE
else
@@ -68,20 +68,20 @@
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsKnockdown())
if(CHECK_MOBILITY(D, MOBILITY_STAND))
log_combat(A, D, "stomach kneed (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("<span class='warning'>[A] knees [D] in the stomach!</span>", \
"<span class='userdanger'>[A] winds you with a knee in the stomach!</span>")
D.audible_message("<b>[D]</b> gags!")
D.losebreath += 3
D.Knockdown(40)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
D.DefaultCombatKnockdown(40)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
return TRUE
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/headKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!D.stat && !D.IsKnockdown())
if(CHECK_MOBILITY(D, MOBILITY_STAND))
log_combat(A, D, "head kicked (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("<span class='warning'>[A] kicks [D] in the head!</span>", \
@@ -89,12 +89,12 @@
D.apply_damage(20, BRUTE, BODY_ZONE_HEAD)
D.drop_all_held_items()
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
D.Knockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
D.DefaultCombatKnockdown(80)//CIT CHANGE - makes sleepingcarp use knockdown() for its stuns instead of stun()
return TRUE
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/elbowDrop(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(D.IsKnockdown() || D.resting || D.stat)
if(!CHECK_MOBILITY(D, MOBILITY_STAND))
log_combat(A, D, "elbow dropped (Sleeping Carp)")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("<span class='warning'>[A] elbow drops [D]!</span>", \
@@ -134,7 +134,7 @@
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, 1, -1)
if(prob(D.getBruteLoss()) && !D.lying)
D.visible_message("<span class='warning'>[D] stumbles and falls!</span>", "<span class='userdanger'>The blow sends you to the ground!</span>")
D.Knockdown(80)
D.DefaultCombatKnockdown(80)
log_combat(A, D, "[atk_verb] (Sleeping Carp)")
return TRUE
@@ -192,7 +192,7 @@
add_fingerprint(user)
if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
to_chat(user, "<span class ='warning'>You club yourself over the head with [src].</span>")
user.Knockdown(60)
user.DefaultCombatKnockdown(60)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
@@ -226,7 +226,7 @@
if(prob(10))
H.visible_message("<span class='warning'>[H] collapses!</span>", \
"<span class='userdanger'>Your legs give out!</span>")
H.Knockdown(80)
H.DefaultCombatKnockdown(80)
if(H.staminaloss && !H.IsSleeping())
var/total_health = (H.health - H.staminaloss)
if(total_health <= HEALTH_THRESHOLD_CRIT && !H.stat)
+5 -5
View File
@@ -207,7 +207,7 @@
if (T && isturf(T))
if (!D.stat)
D.emote("scream")
D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/Knockdown, 20))
D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/DefaultCombatKnockdown, 20))
log_combat(A, D, "has thrown with wrestling")
return 0
@@ -303,7 +303,7 @@
playsound(A.loc, "swing_hit", 50, 1)
if (!D.stat)
D.emote("scream")
D.Knockdown(40)
D.DefaultCombatKnockdown(40)
switch(rand(1,3))
if (2)
@@ -361,7 +361,7 @@
var/turf/T = get_edge_target_turf(A, get_dir(A, get_step_away(D, A)))
if (T && isturf(T))
D.Knockdown(20)
D.DefaultCombatKnockdown(20)
D.throw_at(T, 3, 2)
log_combat(A, D, "roundhouse-kicked")
@@ -400,7 +400,7 @@
if (falling == 1)
A.visible_message("<span class = 'danger'><B>...and dives head-first into the ground, ouch!</b></span>")
A.adjustBruteLoss(rand(10,20))
A.Knockdown(60)
A.DefaultCombatKnockdown(60)
to_chat(A, "[D] is too far away!")
return 0
@@ -429,7 +429,7 @@
else
D.adjustBruteLoss(rand(20,30))
D.Knockdown(40)
D.DefaultCombatKnockdown(40)
A.pixel_y = 0
+17 -15
View File
@@ -41,20 +41,21 @@ Simple datum which is instanced once per type and is used for every object of sa
///This proc is called when the material is added to an object specifically.
/datum/material/proc/on_applied_obj(var/obj/o, amount, material_flags)
var/new_max_integrity = CEILING(o.max_integrity * integrity_modifier, 1)
o.modify_max_integrity(new_max_integrity)
o.force *= strength_modifier
o.throwforce *= strength_modifier
if(material_flags & MATERIAL_AFFECT_STATISTICS)
var/new_max_integrity = CEILING(o.max_integrity * integrity_modifier, 1)
o.modify_max_integrity(new_max_integrity)
o.force *= strength_modifier
o.throwforce *= strength_modifier
var/list/temp_armor_list = list() //Time to add armor modifiers!
var/list/temp_armor_list = list() //Time to add armor modifiers!
if(!istype(o.armor))
return
var/list/current_armor = o.armor?.getList()
if(!istype(o.armor))
return
var/list/current_armor = o.armor?.getList()
for(var/i in current_armor)
temp_armor_list[i] = current_armor[i] * armor_modifiers[i]
o.armor = getArmor(arglist(temp_armor_list))
for(var/i in current_armor)
temp_armor_list[i] = current_armor[i] * armor_modifiers[i]
o.armor = getArmor(arglist(temp_armor_list))
///This proc is called when the material is removed from an object.
/datum/material/proc/on_removed(atom/source, material_flags)
@@ -71,7 +72,8 @@ Simple datum which is instanced once per type and is used for every object of sa
///This proc is called when the material is removed from an object specifically.
/datum/material/proc/on_removed_obj(var/obj/o, amount, material_flags)
var/new_max_integrity = initial(o.max_integrity)
o.modify_max_integrity(new_max_integrity)
o.force = initial(o.force)
o.throwforce = initial(o.throwforce)
if(material_flags & MATERIAL_AFFECT_STATISTICS)
var/new_max_integrity = initial(o.max_integrity)
o.modify_max_integrity(new_max_integrity)
o.force = initial(o.force)
o.throwforce = initial(o.throwforce)
+4
View File
@@ -617,6 +617,10 @@
if(!(has_antag_datum(/datum/antagonist/traitor)))
add_antag_datum(/datum/antagonist/traitor)
/datum/mind/proc/make_Contractor_Support()
if(!(has_antag_datum(/datum/antagonist/traitor/contractor_support)))
add_antag_datum(/datum/antagonist/traitor/contractor_support)
/datum/mind/proc/make_Changeling()
var/datum/antagonist/changeling/C = has_antag_datum(/datum/antagonist/changeling)
if(!C)
+1 -1
View File
@@ -11,7 +11,7 @@
/datum/progressbar/New(mob/User, goal_number, atom/target)
. = ..()
if (!istype(target))
EXCEPTION("Invalid target given")
CRASH("Invalid target given")
if (goal_number)
goal = goal_number
bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", HUD_LAYER)
+67
View File
@@ -322,3 +322,70 @@
suffix = "advancedlab.dmm"
name = "Abductor Replication Lab"
description = "Some scientists tried and almost succeeded to recreate abductor tools. Somewhat slower and a bit less modern than their originals, these tools are the best you can get if you aren't an alien."
//Space ruins for the station z
/datum/map_template/ruin/spacenearstation
prefix = "_maps/RandomRuins/SpaceRuinsStation/"
cost = 1
allow_duplicates = FALSE
/datum/map_template/ruin/spacenearstation/roid1
id = "roid1"
suffix = "roid1.dmm"
name = "Mineable Asteroid 1"
description = "Mineral asteroid 1."
allow_duplicates = TRUE
/datum/map_template/ruin/spacenearstation/roid2
id = "roid2"
suffix = "roid2.dmm"
name = "Crab Roid"
description = "Mineral asteroid. Ft. Crabs."
/datum/map_template/ruin/spacenearstation/roid3
id = "roid3"
suffix = "roid3.dmm"
name = "Dorm Roid"
description = "Mineral asteroid. Ft. Dorm."
/datum/map_template/ruin/spacenearstation/roid4
id = "roid4"
suffix = "roid4.dmm"
name = "Mineable Asteroid 2"
description = "Mineral asteroid 2."
/datum/map_template/ruin/spacenearstation/roid5
id = "roid5"
suffix = "roid5.dmm"
name = "Mineable Asteroid 3"
description = "Mineral asteroid. Ft. Holofans."
/datum/map_template/ruin/spacenearstation/roid6
id = "roid6"
suffix = "roid6.dmm"
name = "Mineable Asteroid 4"
description = "Mineral asteroid. Ft. Crashed escape pod."
/datum/map_template/ruin/spacenearstation/roid7
id = "roid7"
suffix = "roid7.dmm"
name = "Mineable Asteroid 5"
description = "Mineral asteroid. Ft. Derelict space bar."
/datum/map_template/ruin/spacenearstation/roid8
id = "roid8"
suffix = "roid8.dmm"
name = "Dead wizard Roid"
description = "Mineral asteroid. Ft. Dead wizard and toilet paradox bag."
/datum/map_template/ruin/spacenearstation/roid9
id = "roid9"
suffix = "roid9.dmm"
name = "Monitoring Roid"
description = "Mineral asteroid. Ft. Station monitoring, syndie toolbox and erp."
/datum/map_template/ruin/spacenearstation/roid10
id = "roid10"
suffix = "roid10.dmm"
name = "Maze Roid"
description = "Mineral asteroid. Ft. Brief maze."
+3 -5
View File
@@ -73,8 +73,7 @@
owner.log_message("gained Vanguard stun immunity", LOG_ATTACK)
owner.add_stun_absorption("vanguard", INFINITY, 1, "'s yellow aura momentarily intensifies!", "Your ward absorbs the stun!", " radiating with a soft yellow light!")
owner.visible_message("<span class='warning'>[owner] begins to faintly glow!</span>", "<span class='brass'>You will absorb all stuns for the next twenty seconds.</span>")
owner.SetStun(0, FALSE)
owner.SetKnockdown(0)
owner.SetAllImmobility(0, FALSE)
owner.setStaminaLoss(0, FALSE)
progbar = new(owner, duration, owner)
progbar.bar.color = list("#FAE48C", "#FAE48C", "#FAE48C", rgb(0,0,0))
@@ -97,7 +96,7 @@
if(owner.stun_absorption[i]["end_time"] > world.time && owner.stun_absorption[i]["priority"] > vanguard["priority"])
otheractiveabsorptions = TRUE
if(!GLOB.ratvar_awakens && stuns_blocked && !otheractiveabsorptions)
owner.Knockdown(stuns_blocked)
owner.DefaultCombatKnockdown(stuns_blocked)
message_to_owner = "<span class='boldwarning'>The weight of the Vanguard's protection crashes down upon you!</span>"
if(stuns_blocked >= 300)
message_to_owner += "\n<span class='userdanger'>You faint from the exertion!</span>"
@@ -226,9 +225,8 @@
return ..()
/datum/status_effect/wish_granters_gift/on_remove()
owner.revive(full_heal = 1, admin_revive = 1)
owner.revive(full_heal = TRUE, admin_revive = TRUE)
owner.visible_message("<span class='warning'>[owner] appears to wake from the dead, having healed all wounds!</span>", "<span class='notice'>You have regenerated.</span>")
owner.update_canmove()
/obj/screen/alert/status_effect/wish_granters_gift
name = "Wish Granter's Immortality"
+17 -5
View File
@@ -12,12 +12,12 @@
. = ..()
if(.)
if(updating_canmove)
owner.update_canmove()
owner.update_mobility()
if(needs_update_stat || issilicon(owner))
owner.update_stat()
/datum/status_effect/incapacitating/on_remove()
owner.update_canmove()
owner.update_mobility()
if(needs_update_stat || issilicon(owner)) //silicons need stat updates in addition to normal canmove updates
owner.update_stat()
@@ -29,10 +29,22 @@
/datum/status_effect/incapacitating/knockdown
id = "knockdown"
/datum/status_effect/incapacitating/knockdown/tick()
//IMMOBILIZED
/datum/status_effect/incapacitating/immobilized
id = "immobilized"
//PARALYZED
/datum/status_effect/incapacitating/paralyzed
id = "paralyzed"
/datum/status_effect/incapacitating/paralyzed/tick()
if(owner.getStaminaLoss())
owner.adjustStaminaLoss(-0.3) //reduce stamina loss by 0.3 per tick, 6 per 2 seconds
//DAZED
/datum/status_effect/incapacitating/dazed
id = "dazed"
//UNCONSCIOUS
/datum/status_effect/incapacitating/unconscious
id = "unconscious"
@@ -211,7 +223,7 @@
if(iscarbon(owner) && !is_servant_of_ratvar(owner) && !owner.anti_magic_check(chargecost = 0) && number_legs)
if(force_damage || owner.m_intent != MOVE_INTENT_WALK)
if(GLOB.ratvar_awakens)
owner.Knockdown(20)
owner.DefaultCombatKnockdown(20)
if(iscultist(owner))
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, BODY_ZONE_L_LEG)
owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, BODY_ZONE_R_LEG)
@@ -558,7 +570,7 @@
var/old_oxyloss
/datum/status_effect/kindle/tick()
owner.Knockdown(15, TRUE, FALSE, 15)
owner.DefaultCombatKnockdown(15, TRUE, FALSE, 15)
if(iscarbon(owner))
var/mob/living/carbon/C = owner
C.silent = max(2, C.silent)
+4 -4
View File
@@ -17,11 +17,11 @@
to_chat(owner, "<span class='userdanger'>You become frozen in a cube!</span>")
cube = icon('icons/effects/freeze.dmi', "ice_cube")
owner.add_overlay(cube)
owner.update_canmove()
owner.update_mobility()
return ..()
/datum/status_effect/freon/tick()
owner.update_canmove()
owner.update_mobility()
if(can_melt && owner.bodytemperature >= BODYTEMP_NORMAL)
qdel(src)
@@ -31,14 +31,14 @@
if(!QDELETED(src))
to_chat(owner, "You break out of the ice cube!")
owner.remove_status_effect(/datum/status_effect/freon)
owner.update_canmove()
owner.update_mobility()
/datum/status_effect/freon/on_remove()
if(!owner.stat)
to_chat(owner, "The cube melts!")
owner.cut_overlay(cube)
owner.adjust_bodytemperature(100)
owner.update_canmove()
owner.update_mobility()
UnregisterSignal(owner, COMSIG_LIVING_RESIST)
/datum/status_effect/freon/watcher
@@ -18,7 +18,7 @@
area_type = /area
protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer,
/area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle, /area/security/prison)
/area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle, /area/security/prison, /area/ruin, /area/space/nearstation)
target_trait = ZTRAIT_STATION
immunity_type = "rad"
+2 -2
View File
@@ -22,7 +22,7 @@
status += "The law sync module is [R.lawupdate ? "on" : "off"]."
status += "The intelligence link display shows [R.connected_ai ? R.connected_ai.name : "NULL"]."
status += "The camera light is [!isnull(R.builtInCamera) && R.builtInCamera.status ? "on" : "off"]."
status += "The lockdown indicator is [R.lockcharge ? "on" : "off"]."
status += "The lockdown indicator is [R.locked_down ? "on" : "off"]."
status += "The reset module hardware light is [R.has_module() ? "on" : "off"]."
return status
@@ -54,7 +54,7 @@
R.lawsync()
R.show_laws()
if(WIRE_LOCKDOWN)
R.SetLockdown(!R.lockcharge) // Toggle
R.SetLockdown(!R.locked_down) // Toggle
if(WIRE_RESET_MODULE)
if(R.has_module())
R.visible_message("[R]'s module servos twitch.", "Your module display flickers.")
+2 -1
View File
@@ -172,7 +172,7 @@
.["security_level"] = get_security_level()
.["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0
// Amount of world's ticks in seconds, useful for calculating round duration
//Time dilation stats.
.["time_dilation_current"] = SStime_track.time_dilation_current
.["time_dilation_avg"] = SStime_track.time_dilation_avg
@@ -187,3 +187,4 @@
if(!key_valid)
GLOB.topic_status_cache = .
+2
View File
@@ -48,6 +48,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
icon_state = "space_near"
dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT
/area/space/station_ruins //Paint this area where you want station ruins to be allowed to spawn
/area/start
name = "start area"
icon_state = "start"
+2
View File
@@ -3,6 +3,8 @@
/area/ruin/space
has_gravity = FALSE
blob_allowed = FALSE //Nope, no winning in space as a blob. Gotta eat the station.
outdoors = TRUE
ambientsounds = SPACE
/area/ruin/space/has_grav
has_gravity = STANDARD_GRAVITY
+8 -8
View File
@@ -28,7 +28,6 @@
var/list/managed_overlays
var/datum/proximity_monitor/proximity_monitor
var/buckle_message_cooldown = 0
var/fingerprintslast
var/list/filter_data //For handling persistent filters
@@ -98,7 +97,7 @@
var/temp_list = list()
for(var/i in custom_materials)
temp_list[getmaterialref(i)] = custom_materials[i] //Get the proper instanced version
temp_list[SSmaterials.GetMaterialRef(i)] = custom_materials[i] //Get the proper instanced version
custom_materials = null //Null the list to prepare for applying the materials properly
set_custom_materials(temp_list)
@@ -361,11 +360,12 @@
. = list()
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_OVERLAYS, .)
/atom/proc/relaymove(mob/user)
if(buckle_message_cooldown <= world.time)
buckle_message_cooldown = world.time + 50
/atom/proc/relaymove(mob/living/user)
if(!istype(user))
return //why are you buckling nonliving mobs to atoms?
if(user.buckle_message_cooldown <= world.time)
user.buckle_message_cooldown = world.time + 50
to_chat(user, "<span class='warning'>You can't move while buckled to [src]!</span>")
return
/atom/proc/contents_explosion(severity, target)
return //For handling the effects of explosions on contents that would not normally be effected
@@ -904,7 +904,7 @@ Proc for attack log creation, because really why not
if(custom_materials) //Only runs if custom materials existed at first. Should usually be the case but check anyways
for(var/i in custom_materials)
var/datum/material/custom_material = getmaterialref(i)
var/datum/material/custom_material = SSmaterials.GetMaterialRef(i)
custom_material.on_removed(src, material_flags) //Remove the current materials
if(!length(materials))
@@ -913,7 +913,7 @@ Proc for attack log creation, because really why not
custom_materials = list() //Reset the list
for(var/x in materials)
var/datum/material/custom_material = getmaterialref(x)
var/datum/material/custom_material = SSmaterials.GetMaterialRef(x)
if(!(material_flags & MATERIAL_NO_EFFECTS))
custom_material.on_applied(src, materials[custom_material] * multiplier * material_modifier, material_flags)
+2 -304
View File
@@ -158,7 +158,7 @@
grab_state = 0
if(isliving(ex_pulled))
var/mob/living/L = ex_pulled
L.update_canmove()// mob gets up if it was lyng down in a chokehold
L.update_mobility()// mob gets up if it was lyng down in a chokehold
/atom/movable/proc/Move_Pulled(atom/A)
if(!pulling)
@@ -194,160 +194,6 @@
stop_pulling()
return
////////////////////////////////////////
// Here's where we rewrite how byond handles movement except slightly different
// To be removed on step_ conversion
// All this work to prevent a second bump
/atom/movable/Move(atom/newloc, direct=0)
. = FALSE
if(!newloc || newloc == loc)
return
if(!direct)
direct = get_dir(src, newloc)
setDir(direct)
if(!loc.Exit(src, newloc))
return
if(!newloc.Enter(src, src.loc))
return
// Past this is the point of no return
var/atom/oldloc = loc
var/area/oldarea = get_area(oldloc)
var/area/newarea = get_area(newloc)
loc = newloc
. = TRUE
oldloc.Exited(src, newloc)
if(oldarea != newarea)
oldarea.Exited(src, newloc)
for(var/i in oldloc)
if(i == src) // Multi tile objects
continue
var/atom/movable/thing = i
thing.Uncrossed(src)
newloc.Entered(src, oldloc)
if(oldarea != newarea)
newarea.Entered(src, oldloc)
for(var/i in loc)
if(i == src) // Multi tile objects
continue
var/atom/movable/thing = i
thing.Crossed(src)
//
////////////////////////////////////////
/atom/movable/Move(atom/newloc, direct)
var/atom/movable/pullee = pulling
var/turf/T = loc
if(pulling)
if(pullee && get_dist(src, pullee) > 1)
stop_pulling()
if(pullee && pullee.loc != loc && !isturf(pullee.loc) ) //to be removed once all code that changes an object's loc uses forceMove().
log_game("DEBUG:[src]'s pull on [pullee] wasn't broken despite [pullee] being in [pullee.loc]. Pull stopped manually.")
stop_pulling()
if(!loc || !newloc)
return FALSE
var/atom/oldloc = loc
if(loc != newloc)
if (!(direct & (direct - 1))) //Cardinal move
. = ..()
else //Diagonal move, split it into cardinal moves
moving_diagonally = FIRST_DIAG_STEP
var/first_step_dir
// The `&& moving_diagonally` checks are so that a forceMove taking
// place due to a Crossed, Bumped, etc. call will interrupt
// the second half of the diagonal movement, or the second attempt
// at a first half if step() fails because we hit something.
if (direct & NORTH)
if (direct & EAST)
if (step(src, NORTH) && moving_diagonally)
first_step_dir = NORTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, EAST)
else if (moving_diagonally && step(src, EAST))
first_step_dir = EAST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, NORTH)
else if (direct & WEST)
if (step(src, NORTH) && moving_diagonally)
first_step_dir = NORTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, WEST)
else if (moving_diagonally && step(src, WEST))
first_step_dir = WEST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, NORTH)
else if (direct & SOUTH)
if (direct & EAST)
if (step(src, SOUTH) && moving_diagonally)
first_step_dir = SOUTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, EAST)
else if (moving_diagonally && step(src, EAST))
first_step_dir = EAST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
else if (direct & WEST)
if (step(src, SOUTH) && moving_diagonally)
first_step_dir = SOUTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, WEST)
else if (moving_diagonally && step(src, WEST))
first_step_dir = WEST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
if(moving_diagonally == SECOND_DIAG_STEP)
if(!.)
setDir(first_step_dir)
else if (!inertia_moving)
inertia_next_move = world.time + inertia_move_delay
newtonian_move(direct)
moving_diagonally = 0
return
if(!loc || (loc == oldloc && oldloc != newloc))
last_move = 0
return
if(.)
Moved(oldloc, direct)
if(. && pulling && pulling == pullee) //we were pulling a thing and didn't lose it during our move.
if(pulling.anchored)
stop_pulling()
else
var/pull_dir = get_dir(src, pulling)
//puller and pullee more than one tile away or in diagonal position
if(get_dist(src, pulling) > 1 || (moving_diagonally != SECOND_DIAG_STEP && ((pull_dir - 1) & pull_dir)))
pulling.Move(T, get_dir(pulling, T)) //the pullee tries to reach our previous position
if(pulling && get_dist(src, pulling) > 1) //the pullee couldn't keep up
stop_pulling()
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move.
pulledby.stop_pulling()
last_move = direct
setDir(direct)
if(. && has_buckled_mobs() && !handle_buckled_mob_movement(loc,direct)) //movement failed due to buckled mob(s)
return FALSE
//Called after a successful Move(). By this point, we've already moved
/atom/movable/proc/Moved(atom/OldLoc, Dir, Forced = FALSE)
SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, OldLoc, Dir, Forced)
if (!inertia_moving)
inertia_next_move = world.time + inertia_move_delay
newtonian_move(Dir)
if (length(client_mobs_in_contents))
update_parallax_contents()
return TRUE
/atom/movable/Destroy(force)
QDEL_NULL(proximity_monitor)
QDEL_NULL(language_holder)
@@ -372,143 +218,6 @@
orbiting.end_orbit(src)
orbiting = null
// Make sure you know what you're doing if you call this, this is intended to only be called by byond directly.
// You probably want CanPass()
/atom/movable/Cross(atom/movable/AM)
. = TRUE
SEND_SIGNAL(src, COMSIG_MOVABLE_CROSS, AM)
return CanPass(AM, AM.loc, TRUE)
//oldloc = old location on atom, inserted when forceMove is called and ONLY when forceMove is called!
/atom/movable/Crossed(atom/movable/AM, oldloc)
SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM)
/atom/movable/Uncross(atom/movable/AM, atom/newloc)
. = ..()
if(SEND_SIGNAL(src, COMSIG_MOVABLE_UNCROSS, AM) & COMPONENT_MOVABLE_BLOCK_UNCROSS)
return FALSE
if(isturf(newloc) && !CheckExit(AM, newloc))
return FALSE
/atom/movable/Uncrossed(atom/movable/AM)
SEND_SIGNAL(src, COMSIG_MOVABLE_UNCROSSED, AM)
/atom/movable/Bump(atom/A)
if(!A)
CRASH("Bump was called with no argument.")
SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A)
. = ..()
if(!QDELETED(throwing))
throwing.hit_atom(A)
. = TRUE
if(QDELETED(A))
return
A.Bumped(src)
/atom/movable/proc/forceMove(atom/destination)
. = FALSE
if(destination)
. = doMove(destination)
else
CRASH("No valid destination passed into forceMove")
/atom/movable/proc/moveToNullspace()
return doMove(null)
/atom/movable/proc/doMove(atom/destination)
. = FALSE
if(destination)
if(pulledby)
pulledby.stop_pulling()
var/atom/oldloc = loc
var/same_loc = oldloc == destination
var/area/old_area = get_area(oldloc)
var/area/destarea = get_area(destination)
loc = destination
moving_diagonally = 0
if(!same_loc)
if(oldloc)
oldloc.Exited(src, destination)
if(old_area && old_area != destarea)
old_area.Exited(src, destination)
for(var/atom/movable/AM in oldloc)
AM.Uncrossed(src)
var/turf/oldturf = get_turf(oldloc)
var/turf/destturf = get_turf(destination)
var/old_z = (oldturf ? oldturf.z : null)
var/dest_z = (destturf ? destturf.z : null)
if (old_z != dest_z)
onTransitZ(old_z, dest_z)
destination.Entered(src, oldloc)
if(destarea && old_area != destarea)
destarea.Entered(src, oldloc)
for(var/atom/movable/AM in destination)
if(AM == src)
continue
AM.Crossed(src, oldloc)
Moved(oldloc, NONE, TRUE)
. = TRUE
//If no destination, move the atom into nullspace (don't do this unless you know what you're doing)
else
. = TRUE
if (loc)
var/atom/oldloc = loc
var/area/old_area = get_area(oldloc)
oldloc.Exited(src, null)
if(old_area)
old_area.Exited(src, null)
loc = null
/atom/movable/proc/onTransitZ(old_z,new_z)
SEND_SIGNAL(src, COMSIG_MOVABLE_Z_CHANGED, old_z, new_z)
for (var/item in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care.
var/atom/movable/AM = item
AM.onTransitZ(old_z,new_z)
/atom/movable/proc/setMovetype(newval)
movement_type = newval
//Called whenever an object moves and by mobs when they attempt to move themselves through space
//And when an object or action applies a force on src, see newtonian_move() below
//Return 0 to have src start/keep drifting in a no-grav area and 1 to stop/not start drifting
//Mobs should return 1 if they should be able to move of their own volition, see client/Move() in mob_movement.dm
//movement_dir == 0 when stopping or any dir when trying to move
/atom/movable/proc/Process_Spacemove(movement_dir = 0)
if(has_gravity(src))
return 1
if(pulledby)
return 1
if(throwing)
return 1
if(!isturf(loc))
return 1
if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
return 1
return 0
/atom/movable/proc/newtonian_move(direction) //Only moves the object if it's under no gravity
if(!loc || Process_Spacemove(0))
inertia_dir = 0
return 0
inertia_dir = direction
if(!direction)
return 1
inertia_last_loc = loc
SSspacedrift.processing[src] = src
return 1
/atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
set waitfor = 0
SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum)
@@ -610,17 +319,6 @@
SSthrowing.currentrun[src] = TT
TT.tick()
/atom/movable/proc/handle_buckled_mob_movement(newloc,direct)
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
if(!buckled_mob.Move(newloc, direct))
forceMove(buckled_mob.loc)
last_move = buckled_mob.last_move
inertia_dir = last_move
buckled_mob.inertia_dir = last_move
return 0
return 1
/atom/movable/proc/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction)
return FALSE
@@ -639,7 +337,7 @@
/atom/movable/CanPass(atom/movable/mover, turf/target)
if(mover in buckled_mobs)
return 1
return TRUE
return ..()
// called when this atom is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
+307
View File
@@ -0,0 +1,307 @@
// File for movement procs for atom/movable
////////////////////////////////////////
// Here's where we rewrite how byond handles movement except slightly different
// To be removed on step_ conversion
// All this work to prevent a second bump
/atom/movable/Move(atom/newloc, direct=0)
. = FALSE
if(!newloc || newloc == loc)
return
if(!direct)
direct = get_dir(src, newloc)
setDir(direct)
if(!loc.Exit(src, newloc))
return
if(!newloc.Enter(src, src.loc))
return
// Past this is the point of no return
var/atom/oldloc = loc
var/area/oldarea = get_area(oldloc)
var/area/newarea = get_area(newloc)
loc = newloc
. = TRUE
oldloc.Exited(src, newloc)
if(oldarea != newarea)
oldarea.Exited(src, newloc)
for(var/i in oldloc)
if(i == src) // Multi tile objects
continue
var/atom/movable/thing = i
thing.Uncrossed(src)
newloc.Entered(src, oldloc)
if(oldarea != newarea)
newarea.Entered(src, oldloc)
for(var/i in loc)
if(i == src) // Multi tile objects
continue
var/atom/movable/thing = i
thing.Crossed(src)
//
////////////////////////////////////////
/atom/movable/Move(atom/newloc, direct)
var/atom/movable/pullee = pulling
var/turf/T = loc
if(pulling)
if(pullee && get_dist(src, pullee) > 1)
stop_pulling()
if(pullee && pullee.loc != loc && !isturf(pullee.loc) ) //to be removed once all code that changes an object's loc uses forceMove().
log_game("DEBUG:[src]'s pull on [pullee] wasn't broken despite [pullee] being in [pullee.loc]. Pull stopped manually.")
stop_pulling()
if(!loc || !newloc)
return FALSE
var/atom/oldloc = loc
if(loc != newloc)
if (!(direct & (direct - 1))) //Cardinal move
. = ..()
else //Diagonal move, split it into cardinal moves
moving_diagonally = FIRST_DIAG_STEP
var/first_step_dir
// The `&& moving_diagonally` checks are so that a forceMove taking
// place due to a Crossed, Bumped, etc. call will interrupt
// the second half of the diagonal movement, or the second attempt
// at a first half if step() fails because we hit something.
if (direct & NORTH)
if (direct & EAST)
if (step(src, NORTH) && moving_diagonally)
first_step_dir = NORTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, EAST)
else if (moving_diagonally && step(src, EAST))
first_step_dir = EAST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, NORTH)
else if (direct & WEST)
if (step(src, NORTH) && moving_diagonally)
first_step_dir = NORTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, WEST)
else if (moving_diagonally && step(src, WEST))
first_step_dir = WEST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, NORTH)
else if (direct & SOUTH)
if (direct & EAST)
if (step(src, SOUTH) && moving_diagonally)
first_step_dir = SOUTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, EAST)
else if (moving_diagonally && step(src, EAST))
first_step_dir = EAST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
else if (direct & WEST)
if (step(src, SOUTH) && moving_diagonally)
first_step_dir = SOUTH
moving_diagonally = SECOND_DIAG_STEP
. = step(src, WEST)
else if (moving_diagonally && step(src, WEST))
first_step_dir = WEST
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
if(moving_diagonally == SECOND_DIAG_STEP)
if(!.)
setDir(first_step_dir)
else if (!inertia_moving)
inertia_next_move = world.time + inertia_move_delay
newtonian_move(direct)
moving_diagonally = 0
return
if(!loc || (loc == oldloc && oldloc != newloc))
last_move = NONE
return
if(.)
last_move = direct
setDir(direct)
if(has_buckled_mobs() && !handle_buckled_mob_movement(loc,direct)) //movement failed due to buckled mob(s)
return FALSE
if(pulling && pulling == pullee) //we were pulling a thing and didn't lose it during our move.
if(pulling.anchored)
stop_pulling()
else
var/pull_dir = get_dir(src, pulling)
//puller and pullee more than one tile away or in diagonal position
if(get_dist(src, pulling) > 1 || (moving_diagonally != SECOND_DIAG_STEP && ((pull_dir - 1) & pull_dir)))
pulling.Move(T, get_dir(pulling, T)) //the pullee tries to reach our previous position
if(pulling && get_dist(src, pulling) > 1) //the pullee couldn't keep up
stop_pulling()
if(pulledby && moving_diagonally != FIRST_DIAG_STEP && get_dist(src, pulledby) > 1)//separated from our puller and not in the middle of a diagonal move.
pulledby.stop_pulling()
Moved(oldloc, direct)
/atom/movable/proc/handle_buckled_mob_movement(newloc,direct)
for(var/m in buckled_mobs)
var/mob/living/buckled_mob = m
if(!buckled_mob.Move(newloc, direct))
forceMove(buckled_mob.loc)
last_move = buckled_mob.last_move
inertia_dir = last_move
buckled_mob.inertia_dir = last_move
return FALSE
return TRUE
//Called after a successful Move(). By this point, we've already moved
/atom/movable/proc/Moved(atom/OldLoc, Dir, Forced = FALSE)
SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, OldLoc, Dir, Forced)
if (!inertia_moving)
inertia_next_move = world.time + inertia_move_delay
newtonian_move(Dir)
if (length(client_mobs_in_contents))
update_parallax_contents()
return TRUE
// Make sure you know what you're doing if you call this, this is intended to only be called by byond directly.
// You probably want CanPass()
/atom/movable/Cross(atom/movable/AM)
. = TRUE
SEND_SIGNAL(src, COMSIG_MOVABLE_CROSS, AM)
return CanPass(AM, AM.loc, TRUE)
//oldloc = old location on atom, inserted when forceMove is called and ONLY when forceMove is called!
/atom/movable/Crossed(atom/movable/AM, oldloc)
SEND_SIGNAL(src, COMSIG_MOVABLE_CROSSED, AM)
/atom/movable/Uncross(atom/movable/AM, atom/newloc)
. = ..()
if(SEND_SIGNAL(src, COMSIG_MOVABLE_UNCROSS, AM) & COMPONENT_MOVABLE_BLOCK_UNCROSS)
return FALSE
if(isturf(newloc) && !CheckExit(AM, newloc))
return FALSE
/atom/movable/Uncrossed(atom/movable/AM)
SEND_SIGNAL(src, COMSIG_MOVABLE_UNCROSSED, AM)
/atom/movable/Bump(atom/A)
if(!A)
CRASH("Bump was called with no argument.")
SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A)
. = ..()
if(!QDELETED(throwing))
throwing.hit_atom(A)
. = TRUE
if(QDELETED(A))
return
A.Bumped(src)
/atom/movable/proc/onTransitZ(old_z,new_z)
SEND_SIGNAL(src, COMSIG_MOVABLE_Z_CHANGED, old_z, new_z)
for (var/item in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care.
var/atom/movable/AM = item
AM.onTransitZ(old_z,new_z)
/atom/movable/proc/setMovetype(newval)
movement_type = newval
///////////// FORCED MOVEMENT /////////////
/atom/movable/proc/forceMove(atom/destination)
. = FALSE
if(destination)
. = doMove(destination)
else
CRASH("No valid destination passed into forceMove")
/atom/movable/proc/moveToNullspace()
return doMove(null)
/atom/movable/proc/doMove(atom/destination)
. = FALSE
if(destination)
if(pulledby)
pulledby.stop_pulling()
var/atom/oldloc = loc
var/same_loc = oldloc == destination
var/area/old_area = get_area(oldloc)
var/area/destarea = get_area(destination)
loc = destination
moving_diagonally = 0
if(!same_loc)
if(oldloc)
oldloc.Exited(src, destination)
if(old_area && old_area != destarea)
old_area.Exited(src, destination)
for(var/atom/movable/AM in oldloc)
AM.Uncrossed(src)
var/turf/oldturf = get_turf(oldloc)
var/turf/destturf = get_turf(destination)
var/old_z = (oldturf ? oldturf.z : null)
var/dest_z = (destturf ? destturf.z : null)
if (old_z != dest_z)
onTransitZ(old_z, dest_z)
destination.Entered(src, oldloc)
if(destarea && old_area != destarea)
destarea.Entered(src, oldloc)
for(var/atom/movable/AM in destination)
if(AM == src)
continue
AM.Crossed(src, oldloc)
Moved(oldloc, NONE, TRUE)
. = TRUE
//If no destination, move the atom into nullspace (don't do this unless you know what you're doing)
else
. = TRUE
if (loc)
var/atom/oldloc = loc
var/area/old_area = get_area(oldloc)
oldloc.Exited(src, null)
if(old_area)
old_area.Exited(src, null)
loc = null
//Called whenever an object moves and by mobs when they attempt to move themselves through space
//And when an object or action applies a force on src, see newtonian_move() below
//Return 0 to have src start/keep drifting in a no-grav area and 1 to stop/not start drifting
//Mobs should return 1 if they should be able to move of their own volition, see client/Move() in mob_movement.dm
//movement_dir == 0 when stopping or any dir when trying to move
/atom/movable/proc/Process_Spacemove(movement_dir = 0)
if(has_gravity(src))
return 1
if(pulledby)
return 1
if(throwing)
return 1
if(!isturf(loc))
return 1
if(locate(/obj/structure/lattice) in range(1, get_turf(src))) //Not realistic but makes pushing things in space easier
return 1
return 0
/atom/movable/proc/newtonian_move(direction) //Only moves the object if it's under no gravity
if(!loc || Process_Spacemove(0))
inertia_dir = 0
return 0
inertia_dir = direction
if(!direction)
return 1
inertia_last_loc = loc
SSspacedrift.processing[src] = src
return 1
@@ -746,7 +746,7 @@
Mind.add_antag_datum(ninjadatum)
if(Ninja.mind != Mind) //something has gone wrong!
throw EXCEPTION("Ninja created with incorrect mind")
stack_trace("Ninja created with incorrect mind")
message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by dynamic.")
log_game("[key_name(Ninja)] was spawned as a ninja by dynamic.")
+1 -1
View File
@@ -54,6 +54,6 @@
return
var/mob/living/carbon/human/H = gangster_mind.current // we are sure the dude's human cause it's checked in attack()
H.silent = max(H.silent, 5)
H.Knockdown(100)
H.DefaultCombatKnockdown(100)
gangster_mind.add_antag_datum(/datum/antagonist/gang, gang)
return TRUE
+25 -4
View File
@@ -86,8 +86,10 @@ GLOBAL_LIST_EMPTY(objectives)
if(M)
. += M
/datum/objective/proc/find_target()
/datum/objective/proc/find_target(dupe_search_range, blacklist)
var/list/datum/mind/owners = get_owners()
if(!dupe_search_range)
dupe_search_range = get_owners()
var/list/possible_targets = list()
var/try_target_late_joiners = FALSE
for(var/I in owners)
@@ -96,7 +98,8 @@ GLOBAL_LIST_EMPTY(objectives)
try_target_late_joiners = TRUE
for(var/datum/mind/possible_target in get_crewmember_minds())
if(!(possible_target in owners) && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && is_unique_objective(possible_target))
possible_targets += possible_target
if(!(possible_target in blacklist))
possible_targets += possible_target
if(try_target_late_joiners)
var/list/all_possible_targets = possible_targets.Copy()
for(var/I in all_possible_targets)
@@ -1075,7 +1078,7 @@ GLOBAL_LIST_EMPTY(cult_contraband)
var/mob/living/carbon/human/H = owner
H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK))
hoarded_item = I
GLOBAL_LIST_EMPTY(possible_sabotages)
@@ -1092,7 +1095,7 @@ GLOBAL_LIST_EMPTY(possible_sabotages)
if(!GLOB.possible_sabotages.len)//Only need to fill the list when it's needed.
for(var/I in subtypesof(/datum/sabotage_objective))
new I
/datum/objective/sabotage/find_target()
var/list/datum/mind/owners = get_owners()
var/approved_targets = list()
@@ -1155,3 +1158,21 @@ GLOBAL_LIST_EMPTY(possible_sabotages)
/datum/objective/flavor/wizard
flavor_file = "strings/flavor_objectives/wizard.txt"
/datum/objective/contract
var/payout = 0
var/payout_bonus = 0
var/area/dropoff = null
/datum/objective/contract/proc/generate_dropoff() // Generate a random valid area on the station that the dropoff will happen.
var/found = FALSE
while(!found)
var/area/dropoff_area = pick(GLOB.sortedAreas)
if(dropoff_area && is_station_level(dropoff_area.z) && !dropoff_area.outdoors)
dropoff = dropoff_area
found = TRUE
/datum/objective/contract/proc/dropoff_check(mob/user, mob/target) // Check if both the contractor and contract target are at the dropoff point.
var/area/user_area = get_area(user)
var/area/target_area = get_area(target)
return (istype(user_area, dropoff) && istype(target_area, dropoff))
+4 -4
View File
@@ -23,18 +23,18 @@
START_PROCESSING(SSprocessing, src)
/datum/sabotage_objective/processing/proc/check_condition_processing()
return 100
return 1
/datum/sabotage_objective/processing/process()
check_condition_processing()
if(won >= 100)
if(won >= 1)
STOP_PROCESSING(SSprocessing,src)
/datum/sabotage_objective/processing/check_conditions()
return won
/datum/sabotage_objective/processing/power_sink
name = "Drain at least 1 gigajoule of power using a power sink."
name = "Drain at least 100 megajoules of power using a power sink."
sabotage_type = "powersink"
special_equipment = list(/obj/item/sbeacondrop/powersink)
var/sink_found = FALSE
@@ -47,7 +47,7 @@
for(var/datum/powernet/PN in GLOB.powernets)
for(var/obj/item/powersink/sink in PN.nodes)
sink_found_this_time = TRUE
won = max(won,sink.power_drained/1e9)
won = max(won,sink.power_drained/1e8)
sink_found = sink_found_this_time
count = 0
return FALSE
+1 -1
View File
@@ -185,7 +185,7 @@ Class Procs:
A.forceMove(T)
if(isliving(A))
var/mob/living/L = A
L.update_canmove()
L.update_mobility()
if(occupant)
SEND_SIGNAL(src, COMSIG_MACHINE_EJECT_OCCUPANT, occupant)
occupant = null
+1 -1
View File
@@ -140,7 +140,7 @@
/obj/machinery/autolathe/proc/AfterMaterialInsert(obj/item/item_inserted, id_inserted, amount_inserted)
if(istype(item_inserted, /obj/item/stack/ore/bluespace_crystal))
use_power(MINERAL_MATERIAL_AMOUNT / 10)
else if(item_inserted.custom_materials?.len && item_inserted.custom_materials[getmaterialref(/datum/material/glass)])
else if(item_inserted.custom_materials?.len && item_inserted.custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)])
flick("autolathe_r",src)//plays glass insertion animation by default otherwise
else
flick("autolathe_o",src)//plays metal insertion animation
+1 -1
View File
@@ -18,7 +18,7 @@
if(!charging)
return
. += image(charging.icon, charging.icon_state)
. += mutable_appearance(charging.icon, charging.icon_state)
. += "ccharger-on"
if(!(stat & (BROKEN|NOPOWER)))
var/newlevel = round(charging.percent() * 4 / 100)
+7 -7
View File
@@ -491,29 +491,29 @@
/obj/machinery/clonepod/update_overlays()
. = ..()
if(mess)
var/image/gib1 = image(CRYOMOBS, "gibup")
var/image/gib2 = image(CRYOMOBS, "gibdown")
var/mutable_appearance/gib1 = mutable_appearance(CRYOMOBS, "gibup")
var/mutable_appearance/gib2 = mutable_appearance(CRYOMOBS, "gibdown")
gib1.pixel_y = 27 + round(sin(world.time) * 3)
gib1.pixel_x = round(sin(world.time * 3))
gib2.pixel_y = 27 + round(cos(world.time) * 3)
gib2.pixel_x = round(cos(world.time * 3))
. += gib2
. += gib1
. += "cover-on"
else if(occupant)
var/image/occupant_overlay
var/mutable_appearance/occupant_overlay
var/completion = (flesh_number - unattached_flesh.len) / flesh_number
if(unattached_flesh.len <= 0)
occupant_overlay = image(occupant.icon, occupant.icon_state)
occupant_overlay = mutable_appearance(occupant.icon, occupant.icon_state)
occupant_overlay.copy_overlays(occupant)
. += "cover-on"
else
occupant_overlay = image(CRYOMOBS, "clone_meat")
occupant_overlay = mutable_appearance(CRYOMOBS, "clone_meat")
var/matrix/tform = matrix()
tform.Scale(completion)
tform.Turn(cos(world.time * 2) * 3)
occupant_overlay.transform = tform
occupant_overlay.appearance_flags = 0
occupant_overlay.appearance_flags = NONE
occupant_overlay.dir = SOUTH
occupant_overlay.pixel_y = 27 + round(sin(world.time) * 3)
@@ -217,7 +217,7 @@
M.vomit(10, distance = 5)
if(ORION_TRAIL_FLUX)
if(prob(75))
M.Knockdown(60)
M.DefaultCombatKnockdown(60)
say("A sudden gust of powerful wind slams [M] into the floor!")
M.take_bodypart_damage(25)
playsound(loc, 'sound/weapons/genhit.ogg', 100, 1)
+9 -10
View File
@@ -37,12 +37,11 @@
dat += "[R.name] |"
if(R.stat)
dat += " Not Responding |"
else if (!R.canmove)
else if(R.locked_down)
dat += " Locked Down |"
else
dat += " Operating Normally |"
if (!R.canmove)
else if(R.cell)
if(R.cell)
dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |"
else
dat += " No Cell Installed |"
@@ -62,7 +61,7 @@
dat += "<A href='?src=[REF(src)];magbot=[REF(R)]'>(<font color=blue><i>Hack</i></font>)</A> "
else if(IsAdminGhost(user) && !R.emagged)
dat += "<A href='?src=[REF(src)];magbot=[REF(R)]'>(<font color=blue><i>Hack</i></font>)</A> "
dat += "<A href='?src=[REF(src)];stopbot=[REF(R)]'>(<font color=green><i>[R.canmove ? "Lockdown" : "Release"]</i></font>)</A> "
dat += "<A href='?src=[REF(src)];stopbot=[REF(R)]'>(<font color=green><i>[R.locked_down? "Lockdown" : "Release"]</i></font>)</A> "
dat += "<A href='?src=[REF(src)];killbot=[REF(R)]'>(<font color=red><i>Destroy</i></font>)</A>"
dat += "<BR>"
@@ -116,14 +115,14 @@
if(src.allowed(usr))
var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) in GLOB.silicon_mobs
if(can_control(usr, R))
var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
var/choice = input("Are you certain you wish to [R.locked_down? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm" && can_control(usr, R) && !..())
message_admins("<span class='notice'>[ADMIN_LOOKUPFLW(usr)] [R.canmove ? "locked down" : "released"] [key_name(R, R.client)][ADMIN_LOOKUPFLW(R)]!</span>")
log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [key_name(R)]!")
R.SetLockdown(!R.lockcharge)
to_chat(R, "[!R.lockcharge ? "<span class='notice'>Your lockdown has been lifted!" : "<span class='alert'>You have been locked down!"]</span>")
message_admins("<span class='notice'>[ADMIN_LOOKUPFLW(usr)] [R.locked_down? "locked down" : "released"] [key_name(R, R.client)][ADMIN_LOOKUPFLW(R)]!</span>")
log_game("[key_name(usr)] [R.locked_down? "locked down" : "released"] [key_name(R)]!")
R.SetLockdown(!R.locked_down)
to_chat(R, "[!R.locked_down ? "<span class='notice'>Your lockdown has been lifted!" : "<span class='alert'>You have been locked down!"]</span>")
if(R.connected_ai)
to_chat(R.connected_ai, "[!R.lockcharge ? "<span class='notice'>NOTICE - Cyborg lockdown lifted" : "<span class='alert'>ALERT - Cyborg lockdown detected"]: <a href='?src=[REF(R.connected_ai)];track=[html_encode(R.name)]'>[R.name]</a></span><br>")
to_chat(R.connected_ai, "[!R.locked_down ? "<span class='notice'>NOTICE - Cyborg lockdown lifted" : "<span class='alert'>ALERT - Cyborg lockdown detected"]: <a href='?src=[REF(R.connected_ai)];track=[html_encode(R.name)]'>[R.name]</a></span><br>")
else
to_chat(usr, "<span class='danger'>Access Denied.</span>")
+21 -13
View File
@@ -287,6 +287,7 @@
#define CRYO_PRESERVE 1
#define CRYO_OBJECTIVE 2
#define CRYO_IGNORE 3
#define CRYO_DESTROY_LATER 4
/obj/machinery/cryopod/proc/should_preserve_item(obj/item/I)
for(var/datum/objective_item/steal/T in control_computer.theft_cache)
@@ -308,8 +309,8 @@
if(iscyborg(mob_occupant))
var/mob/living/silicon/robot/R = mob_occupant
if(R.mmi?.brain)
cryo_items[R.mmi] = CRYO_IGNORE
cryo_items[R.mmi.brain] = CRYO_IGNORE
cryo_items[R.mmi] = CRYO_DESTROY_LATER
cryo_items[R.mmi.brain] = CRYO_DESTROY_LATER
for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc
for(var/obj/item/O in I) // the things inside the tools, if anything; mainly for janiborg trash bags
cryo_items[O] = should_preserve_item(O)
@@ -318,7 +319,7 @@
//Drop all items into the pod.
for(var/obj/item/I in mob_occupant)
if(cryo_items[I] == CRYO_IGNORE)
if(cryo_items[I] == CRYO_IGNORE || cryo_items[I] ==CRYO_DESTROY_LATER)
continue
cryo_items[I] = should_preserve_item(I)
mob_occupant.transferItemToLoc(I, src, TRUE)
@@ -334,17 +335,19 @@
if(QDELETED(I)) //edge cases and DROPDEL.
continue
var/preserve = cryo_items[I]
if(preserve == CRYO_IGNORE)
if(preserve == CRYO_DESTROY_LATER)
continue
else if(preserve == CRYO_DESTROY)
qdel(I)
else if(control_computer?.allow_items)
control_computer.frozen_items += I
if(preserve == CRYO_OBJECTIVE)
control_computer.objective_items += I
I.moveToNullspace()
else
I.forceMove(loc)
if(preserve != CRYO_IGNORE)
if(preserve == CRYO_DESTROY)
qdel(I)
else if(control_computer?.allow_items)
control_computer.frozen_items += I
if(preserve == CRYO_OBJECTIVE)
control_computer.objective_items += I
I.moveToNullspace()
else
I.forceMove(loc)
cryo_items -= I
//Update any existing objectives involving this mob.
for(var/datum/objective/O in GLOB.objectives)
@@ -405,6 +408,10 @@
mob_occupant.ghostize(FALSE, penalize = TRUE)
QDEL_NULL(occupant)
for(var/I in cryo_items) //only "CRYO_DESTROY_LATER" atoms are left)
var/atom/A = I
if(!QDELETED(A))
qdel(A)
open_machine()
name = initial(name)
@@ -412,6 +419,7 @@
#undef CRYO_PRESERVE
#undef CRYO_OBJECTIVE
#undef CRYO_IGNORE
#undef CRYO_DESTROY_LATER
/obj/machinery/cryopod/MouseDrop_T(mob/living/target, mob/user)
if(!istype(target) || user.incapacitated() || !target.Adjacent(user) || !Adjacent(user) || !ismob(target) || (!ishuman(user) && !iscyborg(user)) || !istype(user.loc, /turf) || target.buckled)
+1 -1
View File
@@ -433,5 +433,5 @@
. = ..()
if(active)
for(var/mob/living/M in rangers)
if(prob(5+(allowed(M)*4)) && M.canmove)
if(prob(5+(allowed(M)*4)) && CHECK_MOBILITY(M, MOBILITY_MOVE))
dance(M)
+3 -3
View File
@@ -428,7 +428,7 @@
else
return FALSE
/obj/machinery/door/airlock/update_icon_state(state=0, override=0)
/obj/machinery/door/airlock/update_icon(state=0, override=0)
if(operating && !override)
return
switch(state)
@@ -769,7 +769,7 @@
if(!istype(H.head, /obj/item/clothing/head/helmet))
H.visible_message("<span class='danger'>[user] headbutts the airlock.</span>", \
"<span class='userdanger'>You headbutt the airlock!</span>")
H.Knockdown(100)
H.DefaultCombatKnockdown(100)
H.apply_damage(10, BRUTE, BODY_ZONE_HEAD)
else
visible_message("<span class='danger'>[user] headbutts the airlock. Good thing [user.p_theyre()] wearing a helmet.</span>")
@@ -1033,7 +1033,7 @@
if(!I.use_tool(src, user, 150, volume=50))
to_chat(user, "<span class='warning'>You slip and [charge] detonates!</span>")
charge.ex_act(EXPLODE_DEVASTATE)
user.Knockdown(60)
user.DefaultCombatKnockdown(60)
return
user.visible_message("<span class='notice'>[user] removes [charge] from [src].</span>", \
"<span class='notice'>You gently pry out [charge] from [src] and unhook its wires.</span>")
+1 -1
View File
@@ -508,7 +508,7 @@
throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src)))
SEND_SOUND(L, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50))
flash_color(L, flash_color="#960000", flash_time=20)
L.Knockdown(40)
L.DefaultCombatKnockdown(40)
L.throw_at(throwtarget, 5, 1)
return 0
+2 -2
View File
@@ -319,10 +319,10 @@
else if(ishuman(L)) //For humans
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
L.emote("scream")
L.Knockdown(100)
L.DefaultCombatKnockdown(100)
else if(ismonkey(L)) //For monkeys
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
L.Knockdown(100)
L.DefaultCombatKnockdown(100)
else //for simple_animals & borgs
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
var/turf/location = get_turf(src)
+1 -1
View File
@@ -115,7 +115,7 @@
continue
if(L.flash_act(affect_silicon = 1))
L.Knockdown(strength)
L.DefaultCombatKnockdown(strength)
flashed = TRUE
if(flashed)
+2 -1
View File
@@ -90,7 +90,8 @@ Buildable meters
set name = "Flip Pipe"
set src in view(1)
if ( usr.stat || usr.restrained() || !usr.canmove )
var/mob/living/L = usr
if(!istype(L) || !CHECK_MOBILITY(L, MOBILITY_USE))
return
do_a_flip()

Some files were not shown because too many files have changed in this diff Show More