This commit is contained in:
Ghommie
2020-03-09 21:53:22 +01:00
608 changed files with 216396 additions and 210422 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
"}
@@ -1545,21 +1545,6 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"RK" = (
/obj/machinery/portable_atmospherics/canister/toxins,
/obj/effect/turf_decal/delivery,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/engine/engineering)
"RQ" = (
/obj/machinery/atmospherics/components/binary/pump{
dir = 1
@@ -2237,7 +2222,7 @@ yf
"}
(12,1,1) = {"
cS
RK
QS
uy
PK
iZ
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
File diff suppressed because it is too large Load Diff
+20
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
@@ -57,3 +72,8 @@
#define CAT_STRUCTURE "Structures"
#define MARTIALART_HUNTER "hunter-fu"
//Blob
/// blob gets a free reroll every X time
#define BLOB_REROLL_TIME 2400
#define BLOB_REFLECTOR_COST 15
+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))
#define COMSIG_CARBON_IDENTITY_TRANSFERRED_TO "carbon_id_transferred_to" //from datum/dna/transfer_identity(): (datum/dna, transfer_SE)
@@ -234,6 +248,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)
+1
View File
@@ -407,6 +407,7 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
#define DUMMY_HUMAN_SLOT_ADMIN "admintools"
#define DUMMY_HUMAN_SLOT_MANIFEST "dummy_manifest_generation"
#define DUMMY_HUMAN_SLOT_HALLUCINATION "dummy_hallucination"
#define DUMMY_HUMAN_SLOT_EXAMINER "dummy_examiner"
#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round
//This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored
+2
View File
@@ -58,8 +58,10 @@
#define BODYPART_DISABLED_DAMAGE 1
#define BODYPART_DISABLED_PARALYSIS 2
#define DEFAULT_BODYPART_ICON 'icons/mob/human_parts.dmi'
#define DEFAULT_BODYPART_ICON_ORGANIC 'icons/mob/human_parts_greyscale.dmi'
#define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.dmi'
#define DEFAULT_BODYPART_ICON_CITADEL 'modular_citadel/icons/mob/mutant_bodyparts.dmi'
#define MONKEY_BODYPART "monkey"
#define ALIEN_BODYPART "alien"
+13 -5
View File
@@ -17,6 +17,9 @@
//ids
#define MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED "MOB_WALK_RUN"
#define MOVESPEED_ID_MOB_GRAB_STATE "MOB_GRAB_STATE"
#define MOVESPEED_ID_MOB_EQUIPMENT "MOB_EQUIPMENT"
#define MOVESPEED_ID_MOB_GRAVITY "MOB_GRAVITY"
#define MOVESPEED_ID_CONFIG_SPEEDMOD "MOB_CONFIG_MODIFIER"
#define MOVESPEED_ID_SLIME_REAGENTMOD "SLIME_REAGENT_MODIFIER"
@@ -28,6 +31,7 @@
#define MOVESPEED_ID_TARANTULA_WEB "TARANTULA_WEB"
#define MOVESPEED_ID_LIVING_TURF_SPEEDMOD "LIVING_TURF_SPEEDMOD"
#define MOVESPEED_ID_LIVING_LIMBLESS "LIVING_LIMBLESS"
#define MOVESPEED_ID_CARBON_SOFTCRIT "CARBON_SOFTCRIT"
#define MOVESPEED_ID_CARBON_OLDSPEED "CARBON_DEPRECATED_SPEED"
@@ -59,15 +63,19 @@
#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY"
#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER"
#define MOVESPEED_ID_TASED_STATUS "TASED"
#define MOVESPEED_ID_SLAUGHTER "SLAUGHTER"
#define MOVESPEED_ID_CYBER_THRUSTER "CYBER_IMPLANT_THRUSTER"
#define MOVESPEED_ID_JETPACK "JETPACK"
#define MOVESPEED_ID_SHOVE "SHOVE"
#define MOVESPEED_ID_MKULTRA "MKULTRA"
#define MOVESPEED_ID_ELECTROSTAFF "ELECTROSTAFF"
#define MOVESPEED_ID_TASED_STATUS "TASED"
#define MOVESPEED_ID_ELECTROSTAFF "ELECTROSTAFF"
#define MOVESPEED_ID_SHOVE "SHOVE"
#define MOVESPEED_ID_FAT "FAT"
#define MOVESPEED_ID_COLD "COLD"
#define MOVESPEED_ID_HUNGRY "HUNGRY"
#define MOVESPEED_ID_DAMAGE_SLOWDOWN "DAMAGE"
#define MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING "FLYING"
+4
View File
@@ -23,6 +23,10 @@ Ask ninjanomnom if they're around
#define RAD_MOB_MUTATE 1250 // How much stored radiation to check for mutation
#define RAD_MONKEY_GORILLIZE 1650 // How much stored radiation to check for Harambe time.
#define RAD_MOB_GORILLIZE_FACTOR 100
#define RAD_MONKEY_GORILLIZE_EXPONENT 0.5
#define RAD_MOB_VOMIT 2000 // The amount of radiation to check for vomitting
#define RAD_MOB_VOMIT_PROB 1 // Chance per tick of vomitting
+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))
+30 -14
View File
@@ -47,7 +47,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list)
return pick(GLOB.socks_list)
/proc/random_features()
/proc/random_features(intendedspecies)
if(!GLOB.tails_list_human.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human)
if(!GLOB.tails_list_lizard.len)
@@ -105,6 +105,8 @@
var/datum/sprite_accessory/mam_tails/instance = GLOB.mam_tails_list[mtpath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed)
snowflake_mam_tails_list[S.name] = mtpath
var/list/snowflake_markings_list = list()
@@ -112,6 +114,8 @@
var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[mmpath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed)
snowflake_markings_list[S.name] = mmpath
var/list/snowflake_ears_list = list()
@@ -119,6 +123,8 @@
var/datum/sprite_accessory/mam_ears/instance = GLOB.mam_ears_list[mepath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed)
snowflake_ears_list[S.name] = mepath
var/list/snowflake_mam_snouts_list = list()
@@ -126,8 +132,19 @@
var/datum/sprite_accessory/mam_snouts/instance = GLOB.mam_snouts_list[mspath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed)
snowflake_mam_snouts_list[S.name] = mspath
var/list/snowflake_ipc_antenna_list = list()
for(var/mspath in GLOB.ipc_antennas_list)
var/datum/sprite_accessory/mam_snouts/instance = GLOB.ipc_antennas_list[mspath]
if(istype(instance, /datum/sprite_accessory))
var/datum/sprite_accessory/S = instance
if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies))
continue
if(!S.ckeys_allowed)
snowflake_ipc_antenna_list[S.name] = mspath
var/color1 = random_short_color()
var/color2 = random_short_color()
var/color3 = random_short_color()
@@ -153,10 +170,10 @@
"insect_fluff" = "None",
"insect_markings" = pick(GLOB.insect_markings_list),
"taur" = "None",
"mam_body_markings" = pick(snowflake_markings_list),
"mam_ears" = pick(snowflake_ears_list),
"mam_snouts" = pick(snowflake_mam_snouts_list),
"mam_tail" = pick(snowflake_mam_tails_list),
"mam_body_markings" = snowflake_markings_list.len ? pick(snowflake_markings_list) : "None",
"mam_ears" = snowflake_ears_list ? pick(snowflake_ears_list) : "None",
"mam_snouts" = snowflake_mam_snouts_list ? pick(snowflake_mam_snouts_list) : "None",
"mam_tail" = snowflake_mam_tails_list ? pick(snowflake_mam_tails_list) : "None",
"mam_tail_animated" = "None",
"xenodorsal" = "Standard",
"xenohead" = "Standard",
@@ -165,7 +182,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"),
@@ -204,7 +221,7 @@
"womb_cum_rate" = CUM_RATE,
"womb_cum_mult" = CUM_RATE_MULT,
"womb_efficiency" = CUM_EFFICIENCY,
"ipc_screen" = "Sunburst",
"ipc_screen" = snowflake_ipc_antenna_list ? pick(snowflake_ipc_antenna_list) : "None",
"ipc_antenna" = "None",
"flavor_text" = "",
"meat_type" = "Mammalian"
@@ -356,7 +373,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 +401,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 +411,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
-111
View File
@@ -1,111 +0,0 @@
/*
// Contains VOREStation based vore description type2type functions
// list2text - takes delimiter and returns text
// text2list - takes delimiter, and creates list
//
*/
// Concatenates a list of strings into a single string. A seperator may optionally be provided.
/proc/list2text(list/ls, sep)
if (ls.len <= 1) // Early-out code for empty or singleton lists.
return ls.len ? ls[1] : ""
var/l = ls.len // Made local for sanic speed.
var/i = 0 // Incremented every time a list index is accessed.
if (sep <> null)
// Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc...
#define S1 sep, ls[++i]
#define S4 S1, S1, S1, S1
#define S16 S4, S4, S4, S4
#define S64 S16, S16, S16, S16
. = "[ls[++i]]" // Make sure the initial element is converted to text.
// Having the small concatenations come before the large ones boosted speed by an average of at least 5%.
if (l-1 & 0x01) // 'i' will always be 1 here.
. = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2.
if (l-i & 0x02)
. = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
if (l-i & 0x04)
. = text("[][][][][][][][][]", ., S4) // And so on....
if (l-i & 0x08)
. = text("[][][][][][][][][][][][][][][][][]", ., S4, S4)
if (l-i & 0x10)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16)
if (l-i & 0x20)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
if (l-i & 0x40)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
#undef S64
#undef S16
#undef S4
#undef S1
else
// Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc...
#define S1 ls[++i]
#define S4 S1, S1, S1, S1
#define S16 S4, S4, S4, S4
#define S64 S16, S16, S16, S16
. = "[ls[++i]]" // Make sure the initial element is converted to text.
if (l-1 & 0x01) // 'i' will always be 1 here.
. += S1 // Append 1 element if the remaining elements are not a multiple of 2.
if (l-i & 0x02)
. = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4.
if (l-i & 0x04)
. = text("[][][][][]", ., S4) // And so on...
if (l-i & 0x08)
. = text("[][][][][][][][][]", ., S4, S4)
if (l-i & 0x10)
. = text("[][][][][][][][][][][][][][][][][]", ., S16)
if (l-i & 0x20)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16)
if (l-i & 0x40)
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64)
while (l > i) // Chomp through the rest of the list, 128 elements at a time.
. = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64)
#undef S64
#undef S16
#undef S4
#undef S1
// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator)
/proc/text2list(text, delimiter="\n")
var/delim_len = length(delimiter)
if (delim_len < 1)
return list(text)
. = list()
var/last_found = 1
var/found
do
found = findtext(text, delimiter, last_found, 0)
. += copytext(text, last_found, found)
last_found = found + delim_len
while (found)
// Returns true if val is from min to max, inclusive.
/proc/IsInRange(val, min, max)
return (val >= min) && (val <= max)
-39
View File
@@ -1,39 +0,0 @@
/datum/projectile_data
var/src_x
var/src_y
var/time
var/distance
var/power_x
var/power_y
var/dest_x
var/dest_y
/datum/projectile_data/New(var/src_x, var/src_y, var/time, var/distance, \
var/power_x, var/power_y, var/dest_x, var/dest_y)
src.src_x = src_x
src.src_y = src_y
src.time = time
src.distance = distance
src.power_x = power_x
src.power_y = power_y
src.dest_x = dest_x
src.dest_y = dest_y
/proc/projectile_trajectory(src_x, src_y, rotation, angle, power)
// returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle],
// rotated at [rotation] and with the power of [power]
// Thanks to VistaPOWA for this function
var/power_x = power * cos(angle)
var/power_y = power * sin(angle)
var/time = 2* power_y / 10 //10 = g
var/distance = time * power_x
var/dest_x = src_x + distance*sin(rotation);
var/dest_y = src_y + distance*cos(rotation);
return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y)
+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
)
))
-1
View File
@@ -29,7 +29,6 @@ GLOBAL_LIST_EMPTY(available_ai_shells)
GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list(),list())) // One for each AI_* status define
GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs
GLOBAL_LIST_EMPTY(bots_list)
GLOBAL_LIST_EMPTY(living_cameras)
GLOBAL_LIST_EMPTY(aiEyes)
GLOBAL_LIST_EMPTY(language_datum_instances)
+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()
+11 -11
View File
@@ -48,7 +48,7 @@
if(isovermind(usr))
var/mob/camera/blob/B = usr
if(!B.placed)
B.place_blob_core(B.base_point_rate, 0)
B.place_blob_core(0)
B.transport_core()
/obj/screen/blob/Blobbernaut
@@ -91,26 +91,26 @@
var/mob/camera/blob/B = usr
B.create_factory()
/obj/screen/blob/ReadaptChemical
/obj/screen/blob/ReadaptStrain
icon_state = "ui_chemswap"
name = "Readapt Chemical (40)"
desc = "Randomly rerolls your chemical for 40 resources."
name = "Readapt Strain (40)"
desc = "Allows you to choose a new strain from 4 random choices for 40 resources."
/obj/screen/blob/ReadaptChemical/MouseEntered(location,control,params)
/obj/screen/blob/ReadaptStrain/MouseEntered(location,control,params)
if(hud && hud.mymob && isovermind(hud.mymob))
var/mob/camera/blob/B = hud.mymob
if(B.free_chem_rerolls)
name = "Readapt Chemical (FREE)"
desc = "Randomly rerolls your chemical for free."
if(B.free_strain_rerolls)
name = "Readapt Strain (FREE)"
desc = "Randomly rerolls your strain for free."
else
name = initial(name)
desc = initial(desc)
..()
/obj/screen/blob/ReadaptChemical/Click()
/obj/screen/blob/ReadaptStrain/Click()
if(isovermind(usr))
var/mob/camera/blob/B = usr
B.chemical_reroll()
B.strain_reroll()
/obj/screen/blob/RelocateCore
icon_state = "ui_swap"
@@ -175,7 +175,7 @@
using.hud = src
static_inventory += using
using = new /obj/screen/blob/ReadaptChemical()
using = new /obj/screen/blob/ReadaptStrain()
using.screen_loc = ui_storage1
using.hud = src
static_inventory += using
+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 -6
View File
@@ -26,18 +26,16 @@ SUBSYSTEM_DEF(mobs)
var/seconds = wait * 0.1
if (!resumed)
src.currentrun = GLOB.mob_living_list.Copy()
if (GLOB.living_cameras.len)
src.currentrun += GLOB.living_cameras
//cache for sanic speed (lists are references anyways)
var/list/currentrun = src.currentrun
var/times_fired = src.times_fired
while(currentrun.len)
var/mob/M = currentrun[currentrun.len]
var/mob/living/L = currentrun[currentrun.len]
currentrun.len--
if(M)
M.Life(seconds, times_fired)
if(L)
L.Life(seconds, times_fired)
else
GLOB.mob_living_list.Remove(M)
GLOB.mob_living_list.Remove(L)
if (MC_TICK_CHECK)
return
+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
+3 -2
View File
@@ -499,10 +499,11 @@ SUBSYSTEM_DEF(vote)
modes_to_add -= "traitor" // makes it so that traitor is always available
choices.Add(modes_to_add)
if("dynamic")
var/list/probabilities = CONFIG_GET(keyed_list/storyteller_weight)
for(var/T in config.storyteller_cache)
var/datum/dynamic_storyteller/S = T
var/list/probabilities = CONFIG_GET(keyed_list/storyteller_weight)
if(probabilities[initial(S.config_tag)] > 0)
var/probability = ((initial(S.config_tag) in probabilities) ? probabilities[initial(S.config_tag)] : initial(S.weight))
if(probability > 0)
choices.Add(initial(S.name))
choice_descs.Add(initial(S.desc))
if("custom")
+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
@@ -33,11 +33,17 @@
/obj/item/organ/ears/cat = 1)
category = CAT_CLOTHING
////////
//Huds//
////////
/datum/crafting_recipe/hudsunsec
name = "Security HUDsunglasses"
result = /obj/item/clothing/glasses/hud/security/sunglasses
time = 20
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
parts = list(/obj/item/clothing/glasses/hud/security = 1,
/obj/item/clothing/glasses/sunglasses = 1)
reqs = list(/obj/item/clothing/glasses/hud/security = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
@@ -56,9 +62,11 @@
result = /obj/item/clothing/glasses/hud/health/sunglasses
time = 20
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
parts = list(/obj/item/clothing/glasses/hud/health = 1,
/obj/item/clothing/glasses/sunglasses = 1)
reqs = list(/obj/item/clothing/glasses/hud/health = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
category = CAT_CLOTHING
/datum/crafting_recipe/hudsunmedremoval
@@ -86,6 +94,27 @@
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1)
category = CAT_CLOTHING
/datum/crafting_recipe/diagnostic_sunglasses
name = "Diagnostic HUDsunglasses"
result = /obj/item/clothing/glasses/hud/diagnostic/sunglasses
time = 20
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
parts = list(/obj/item/clothing/glasses/hud/diagnostic = 1,
/obj/item/clothing/glasses/sunglasses = 1)
reqs = list(/obj/item/clothing/glasses/hud/diagnostic = 1,
/obj/item/clothing/glasses/sunglasses = 1,
/obj/item/stack/cable_coil = 5)
category = CAT_CLOTHING
/datum/crafting_recipe/diagnostic_singlasses_removal
name = "Diagnostic HUDsunglasses removal"
result = /obj/item/clothing/glasses/sunglasses
time = 20
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
reqs = list(/obj/item/clothing/glasses/hud/diagnostic/sunglasses = 1)
category = CAT_CLOTHING
/* //Kevinz doesn't want it as a recipe for now, leaving it in if anything ever changes to let it in
/datum/crafting_recipe/stunglasses
name = "Stunglasses"
@@ -130,7 +159,6 @@
reqs = list(/obj/item/stack/sheet/durathread = 7,
/obj/item/stack/sheet/leather = 3)
time = 70
always_availible = TRUE
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_toolbelt
@@ -139,7 +167,6 @@
reqs = list(/obj/item/stack/sheet/durathread = 5,
/obj/item/stack/sheet/leather = 2)
time = 30
always_availible = TRUE
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_bandolier
@@ -148,7 +175,6 @@
reqs = list(/obj/item/stack/sheet/durathread = 6,
/obj/item/stack/sheet/leather = 2)
time = 50
always_availible = TRUE
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_helmet
@@ -157,7 +183,6 @@
reqs = list(/obj/item/stack/sheet/durathread = 4,
/obj/item/stack/sheet/leather = 2)
time = 30
always_availible = TRUE
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_vest
@@ -166,7 +191,6 @@
reqs = list(/obj/item/stack/sheet/durathread = 6,
/obj/item/stack/sheet/leather = 3)
time = 50
always_availible = TRUE
category = CAT_CLOTHING
/datum/crafting_recipe/durathread_wintercoat
@@ -183,5 +207,4 @@
reqs = list(/obj/item/clothing/suit/hooded/wintercoat = 1,
/obj/item/bedsheet/cosmos = 1)
time = 60
always_availible = TRUE
category = CAT_CLOTHING
@@ -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)
+14 -16
View File
@@ -26,10 +26,10 @@
/datum/proc/vv_get_dropdown()
. = list()
. += "---"
.["Call Proc"] = "?_src_=vars;[HrefToken()];proc_call=[REF(src)]"
.["Mark Object"] = "?_src_=vars;[HrefToken()];mark_object=[REF(src)]"
.["Delete"] = "?_src_=vars;[HrefToken()];delete=[REF(src)]"
.["Show VV To Player"] = "?_src_=vars;[HrefToken(TRUE)];expose=[REF(src)]"
.["Call Proc"] = "?_src_=vars;[HrefToken()];proc_call=\ref[src]"
.["Mark Object"] = "?_src_=vars;[HrefToken()];mark_object=\ref[src]"
.["Delete"] = "?_src_=vars;[HrefToken()];delete=\ref[src]"
.["Show VV To Player"] = "?_src_=vars;[HrefToken(TRUE)];expose=\ref[src]"
/datum/proc/on_reagent_change(changetype)
@@ -54,7 +54,7 @@
return
var/title = ""
var/refid = REF(D)
var/refid = "\ref[D]"
var/icon/sprite
var/hash
@@ -62,8 +62,6 @@
if (!islist)
type = D.type
if(istype(D, /atom))
var/atom/AT = D
if(AT.icon && AT.icon_state)
@@ -410,7 +408,7 @@
/client/proc/vv_update_display(datum/D, span, content)
src << output("[span]:[content]", "variables[REF(D)].browser:replace_span")
src << output("[span]:[content]", "variables\ref[D].browser:replace_span")
#define VV_HTML_ENCODE(thing) ( sanitize ? html_encode(thing) : thing )
@@ -423,9 +421,9 @@
name = DA[name] //name is really the index until this line
else
value = DA[name]
header = "<li style='backgroundColor:white'>(<a href='?_src_=vars;[HrefToken()];listedit=[REF(DA)];index=[index]'>E</a>) (<a href='?_src_=vars;[HrefToken()];listchange=[REF(DA)];index=[index]'>C</a>) (<a href='?_src_=vars;[HrefToken()];listremove=[REF(DA)];index=[index]'>-</a>) "
header = "<li style='backgroundColor:white'>(<a href='?_src_=vars;[HrefToken()];listedit=\ref[DA];index=[index]'>E</a>) (<a href='?_src_=vars;[HrefToken()];listchange=\ref[DA];index=[index]'>C</a>) (<a href='?_src_=vars;[HrefToken()];listremove=\ref[DA];index=[index]'>-</a>) "
else
header = "<li style='backgroundColor:white'>(<a href='?_src_=vars;[HrefToken()];datumedit=[REF(DA)];varnameedit=[name]'>E</a>) (<a href='?_src_=vars;[HrefToken()];datumchange=[REF(DA)];varnamechange=[name]'>C</a>) (<a href='?_src_=vars;[HrefToken()];datummass=[REF(DA)];varnamemass=[name]'>M</a>) "
header = "<li style='backgroundColor:white'>(<a href='?_src_=vars;[HrefToken()];datumedit=\ref[DA];varnameedit=[name]'>E</a>) (<a href='?_src_=vars;[HrefToken()];datumchange=\ref[DA];varnamechange=[name]'>C</a>) (<a href='?_src_=vars;[HrefToken()];datummass=\ref[DA];varnamemass=[name]'>M</a>) "
else
header = "<li>"
@@ -440,7 +438,7 @@
#ifdef VARSICON
var/icon/I = new/icon(value)
var/rnd = rand(1,10000)
var/rname = "tmp[REF(I)][rnd].png"
var/rname = "tmp\ref[I][rnd].png"
usr << browse_rsc(I, rname)
item = "[VV_HTML_ENCODE(name)] = (<span class='value'>[value]</span>) <img class=icon src=\"[rname]\">"
#else
@@ -453,9 +451,9 @@
else if (istype(value, /datum))
var/datum/D = value
if ("[D]" != "[D.type]") //if the thing as a name var, lets use it.
item = "<a href='?_src_=vars;[HrefToken()];Vars=[REF(value)]'>[VV_HTML_ENCODE(name)] [REF(value)]</a> = [D] [D.type]"
item = "<a href='?_src_=vars;[HrefToken()];Vars=\ref[value]'>[VV_HTML_ENCODE(name)] [REF(value)]</a> = [D] [D.type]"
else
item = "<a href='?_src_=vars;[HrefToken()];Vars=[REF(value)]'>[VV_HTML_ENCODE(name)] [REF(value)]</a> = [D.type]"
item = "<a href='?_src_=vars;[HrefToken()];Vars=\ref[value]'>[VV_HTML_ENCODE(name)] [REF(value)]</a> = [D.type]"
else if (islist(value))
var/list/L = value
@@ -473,9 +471,9 @@
items += debug_variable(key, val, level + 1, sanitize = sanitize)
item = "<a href='?_src_=vars;[HrefToken()];Vars=[REF(value)]'>[VV_HTML_ENCODE(name)] = /list ([L.len])</a><ul>[items.Join()]</ul>"
item = "<a href='?_src_=vars;[HrefToken()];Vars=\ref[value]'>[VV_HTML_ENCODE(name)] = /list ([L.len])</a><ul>[items.Join()]</ul>"
else
item = "<a href='?_src_=vars;[HrefToken()];Vars=[REF(value)]'>[VV_HTML_ENCODE(name)] = /list ([L.len])</a>"
item = "<a href='?_src_=vars;[HrefToken()];Vars=\ref[value]'>[VV_HTML_ENCODE(name)] = /list ([L.len])</a>"
else if (name in GLOB.bitfields)
var/list/flags = list()
@@ -587,7 +585,7 @@
var/prompt = alert("Do you want to grant [C] access to view this VV window? (they will not be able to edit or change anything nor open nested vv windows unless they themselves are an admin)", "Confirm", "Yes", "No")
if (prompt != "Yes" || !usr.client)
return
message_admins("[key_name_admin(usr)] Showed [key_name_admin(C)] a <a href='?_src_=vars;[HrefToken(TRUE)];datumrefresh=[REF(thing)]'>VV window</a>")
message_admins("[key_name_admin(usr)] Showed [key_name_admin(C)] a <a href='?_src_=vars;[HrefToken(TRUE)];datumrefresh=\ref[thing]'>VV window</a>")
log_admin("Admin [key_name(usr)] Showed [key_name(C)] a VV window of a [thing]")
to_chat(C, "[usr.client.holder.fakekey ? "an Administrator" : "[usr.client.key]"] has granted you access to view a View Variables window")
C.debug_variables(thing)
@@ -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>")
+1 -1
View File
@@ -219,7 +219,7 @@
unique_enzymes = generate_unique_enzymes()
uni_identity = generate_uni_identity()
struc_enzymes = generate_struc_enzymes()
features = random_features()
features = random_features(species?.id)
/datum/dna/stored //subtype used by brain mob's stored_dna
+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>")
+10 -10
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>")
@@ -119,7 +119,7 @@
D.grabbedby(A, 1)
if(old_grab_state == GRAB_PASSIVE)
D.drop_all_held_items()
A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent
A.setGrabState(GRAB_AGGRESSIVE) //Instant agressive grab if on grab intent
log_combat(A, D, "grabbed", addition="aggressively")
D.visible_message("<span class='warning'>[A] violently grabs [D]!</span>", \
"<span class='userdanger'>[A] violently grabs you!</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>")
@@ -185,7 +185,7 @@
D.SetSleeping(400)
restraining = FALSE
if(A.grab_state < GRAB_NECK)
A.grab_state = GRAB_NECK
A.setGrabState(GRAB_NECK)
else
restraining = FALSE
return FALSE
+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
+4 -4
View File
@@ -34,10 +34,10 @@
log_combat(A, D, "grabbed", addition="aggressively")
D.visible_message("<span class='warning'>[A] violently grabs [D]!</span>", \
"<span class='userdanger'>[A] violently grabs you!</span>")
A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab
A.setGrabState(GRAB_AGGRESSIVE) //Instant aggressive grab
else
log_combat(A, D, "grabbed", addition="passively")
A.grab_state = GRAB_PASSIVE
A.setGrabState(GRAB_PASSIVE)
if(4)
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
atk_verb = "headbutts"
@@ -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)
+13 -13
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>", \
@@ -115,7 +115,7 @@
D.grabbedby(A, 1)
if(old_grab_state == GRAB_PASSIVE)
D.drop_all_held_items()
A.grab_state = GRAB_AGGRESSIVE //Instant agressive grab if on grab intent
A.setGrabState(GRAB_AGGRESSIVE) //Instant agressive grab if on grab intent
log_combat(A, D, "grabbed", addition="aggressively")
D.visible_message("<span class='warning'>[A] violently grabs [D]!</span>", \
"<span class='userdanger'>[A] violently grabs you!</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
+3 -3
View File
@@ -106,9 +106,9 @@
/datum/quirk/musician/on_spawn()
var/mob/living/carbon/human/H = quirk_holder
var/obj/item/instrument/guitar/guitar = new(get_turf(H))
H.put_in_hands(guitar)
H.equip_to_slot(guitar, SLOT_IN_BACKPACK)
var/obj/item/choice_beacon/music/B = new(get_turf(H))
H.put_in_hands(B)
H.equip_to_slot(B, SLOT_IN_BACKPACK)
var/obj/item/musicaltuner/musicaltuner = new(get_turf(H))
H.put_in_hands(musicaltuner)
H.equip_to_slot(musicaltuner, SLOT_IN_BACKPACK)
@@ -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"
-33
View File
@@ -514,39 +514,6 @@ GLOBAL_LIST_EMPTY(teleportlocs)
/client/proc/ResetAmbiencePlayed()
played = FALSE
/atom/proc/has_gravity(turf/T)
if(!T || !isturf(T))
T = get_turf(src)
if(!T)
return 0
var/list/forced_gravity = list()
SEND_SIGNAL(src, COMSIG_ATOM_HAS_GRAVITY, T, forced_gravity)
if(!forced_gravity.len)
SEND_SIGNAL(T, COMSIG_TURF_HAS_GRAVITY, src, forced_gravity)
if(forced_gravity.len)
var/max_grav
for(var/i in forced_gravity)
max_grav = max(max_grav, i)
if(max_grav)
return max_grav
if(isspaceturf(T)) // Turf never has gravity
return 0
var/area/A = get_area(T)
if(A.has_gravity) // Areas which always has gravity
return A.has_gravity
else
// There's a gravity generator on our z level
if(GLOB.gravity_generators["[T.z]"])
var/max_grav = 0
for(var/obj/machinery/gravity_generator/main/G in GLOB.gravity_generators["[T.z]"])
max_grav = max(G.setting,max_grav)
return max_grav
return SSmapping.level_trait(T.z, ZTRAIT_GRAVITY)
/area/proc/setup(a_name)
name = a_name
power_equip = FALSE
+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
+54 -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,8 +913,54 @@ 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)
custom_materials[custom_material] += materials[x] * multiplier
/**
* Returns true if this atom has gravity for the passed in turf
*
* Sends signals COMSIG_ATOM_HAS_GRAVITY and COMSIG_TURF_HAS_GRAVITY, both can force gravity with
* the forced gravity var
*
* Gravity situations:
* * No gravity if you're not in a turf
* * No gravity if this atom is in is a space turf
* * Gravity if the area it's in always has gravity
* * Gravity if there's a gravity generator on the z level
* * Gravity if the Z level has an SSMappingTrait for ZTRAIT_GRAVITY
* * otherwise no gravity
*/
/atom/proc/has_gravity(turf/T)
if(!T || !isturf(T))
T = get_turf(src)
if(!T)
return 0
var/list/forced_gravity = list()
SEND_SIGNAL(src, COMSIG_ATOM_HAS_GRAVITY, T, forced_gravity)
if(!forced_gravity.len)
SEND_SIGNAL(T, COMSIG_TURF_HAS_GRAVITY, src, forced_gravity)
if(forced_gravity.len)
var/max_grav
for(var/i in forced_gravity)
max_grav = max(max_grav, i)
return max_grav
if(isspaceturf(T)) // Turf never has gravity
return 0
var/area/A = get_area(T)
if(A.has_gravity) // Areas which always has gravity
return A.has_gravity
else
// There's a gravity generator on our z level
if(GLOB.gravity_generators["[T.z]"])
var/max_grav = 0
for(var/obj/machinery/gravity_generator/main/G in GLOB.gravity_generators["[T.z]"])
max_grav = max(G.setting,max_grav)
return max_grav
return SSmapping.level_trait(T.z, ZTRAIT_GRAVITY)
+10 -307
View File
@@ -131,7 +131,7 @@
return FALSE
// Are we trying to pull something we are already pulling? Then enter grab cycle and end.
if(AM == pulling)
grab_state = state
setGrabState(state)
if(istype(AM,/mob/living))
var/mob/living/AMob = AM
AMob.grabbedby(src)
@@ -142,7 +142,7 @@
AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once.
pulling = AM
AM.pulledby = src
grab_state = state
setGrabState(state)
if(ismob(AM))
var/mob/M = AM
log_combat(src, M, "grabbed", addition="passive grab")
@@ -155,10 +155,10 @@
pulling.pulledby = null
var/mob/living/ex_pulled = pulling
pulling = null
grab_state = 0
setGrabState(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.
@@ -865,6 +563,11 @@
return FALSE
return TRUE
/// Updates the grab state of the movable
/// This exists to act as a hook for behaviour
/atom/movable/proc/setGrabState(newstate)
grab_state = newstate
/obj/item/proc/do_pickup_animation(atom/target)
set waitfor = FALSE
if(!istype(loc, /turf))
+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

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