This commit is contained in:
Ghommie
2020-03-12 20:31:14 +01:00
958 changed files with 221881 additions and 212761 deletions
+83 -83
View File
@@ -2533,20 +2533,20 @@ ab
ab
ab
ab
ac
ac
ac
ac
ab
ab
ab
ab
ak
ak
ak
ak
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
"}
(2,1,1) = {"
aP
@@ -2565,9 +2565,9 @@ ab
ab
ab
ab
ac
ac
ac
ab
ab
ab
ak
ak
ak
@@ -2576,9 +2576,9 @@ ak
ak
ak
ak
ac
ac
ac
ab
ab
ab
"}
(3,1,1) = {"
aP
@@ -2597,8 +2597,8 @@ ab
ab
ab
ab
ac
ac
ab
ab
ak
ak
ak
@@ -2609,8 +2609,8 @@ ak
ak
ak
ak
ac
ac
ab
ab
"}
(4,1,1) = {"
aP
@@ -2629,8 +2629,8 @@ ab
ab
ab
ab
ac
ac
ab
ab
ak
ak
ak
@@ -2661,7 +2661,7 @@ ab
ab
ab
ab
ac
ab
ak
ak
ak
@@ -2693,7 +2693,7 @@ ab
ab
ab
ab
ac
ab
ak
ak
ak
@@ -2725,7 +2725,7 @@ ab
ab
ab
ab
ac
ab
ak
ak
ak
@@ -2770,7 +2770,7 @@ ak
ak
ak
ac
ac
ab
"}
(9,1,1) = {"
ab
@@ -2802,7 +2802,7 @@ ak
ak
ak
ac
ac
ab
"}
(10,1,1) = {"
ab
@@ -2834,7 +2834,7 @@ ak
ak
ak
ac
ac
ab
"}
(11,1,1) = {"
ab
@@ -2866,7 +2866,7 @@ ak
ak
ac
ac
ac
ab
"}
(12,1,1) = {"
ab
@@ -2927,7 +2927,7 @@ et
vr
eu
ac
ab
ac
ab
ab
ab
@@ -3440,7 +3440,7 @@ LK
pN
bQ
ac
ab
ac
ab
ab
"}
@@ -3472,7 +3472,7 @@ FI
jQ
bQ
ac
ab
ac
ab
ab
"}
@@ -3630,8 +3630,8 @@ ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
@@ -3660,10 +3660,10 @@ ac
ac
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
ab
@@ -3690,12 +3690,12 @@ ac
ac
ac
ac
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
ab
ab
ab
@@ -3722,12 +3722,12 @@ ac
ac
ac
ac
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
ab
ab
ab
@@ -3755,17 +3755,17 @@ ac
ac
ac
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
ab
ab
"}
(40,1,1) = {"
ac
ab
ac
ac
ak
@@ -3788,17 +3788,17 @@ ac
ac
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
ab
"}
(41,1,1) = {"
ac
ac
ab
ab
ac
ac
ak
@@ -3821,16 +3821,16 @@ ac
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
"}
(42,1,1) = {"
ac
ac
ab
ab
ac
ac
eM
@@ -3853,15 +3853,15 @@ ac
ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
ab
"}
(43,1,1) = {"
ac
ab
ac
ac
aw
@@ -3886,8 +3886,8 @@ ac
ac
ac
ac
ac
ac
ab
ab
ab
ab
ab
@@ -3919,7 +3919,7 @@ ac
ac
ac
ac
ac
ab
ab
ab
ab
@@ -3951,7 +3951,7 @@ ak
ac
ac
ac
ac
ab
ab
ab
ab
@@ -4176,7 +4176,7 @@ ak
ak
ak
ac
ab
ac
ab
ab
"}
@@ -4208,7 +4208,7 @@ ak
ak
ac
ac
ab
ac
ab
ab
"}
@@ -4240,7 +4240,7 @@ ak
ak
ak
ac
ab
ac
ab
ab
"}
@@ -4272,8 +4272,8 @@ ak
ak
ak
ak
ab
ab
ac
ac
ab
"}
(56,1,1) = {"
@@ -4304,8 +4304,8 @@ ak
ak
ak
ac
ab
ab
ac
ac
ab
"}
(57,1,1) = {"
@@ -4336,7 +4336,7 @@ ak
ak
ac
ac
ab
ac
ab
ab
"}
+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
+65 -31
View File
@@ -2,32 +2,57 @@
#define CHECK_DNA_AND_SPECIES(C) if((!(C.dna)) || (!(C.dna.species))) return
//Defines copying names of mutations in all cases, make sure to change this if you change mutation's name
#define HULK "Hulk"
#define XRAY "X Ray Vision"
#define COLDRES "Cold Resistance"
#define TK "Telekinesis"
#define NERVOUS "Nervousness"
#define EPILEPSY "Epilepsy"
#define MUTATE "Unstable DNA"
#define COUGH "Cough"
#define DWARFISM "Dwarfism"
#define CLOWNMUT "Clumsiness"
#define TOURETTES "Tourettes Syndrome"
#define DEAFMUT "Deafness"
#define BLINDMUT "Blindness"
#define RACEMUT "Monkified"
#define BADSIGHT "Near Sightness"
#define LASEREYES "Laser Eyes"
#define CHAMELEON "Chameleon"
#define WACKY "Wacky"
#define MUT_MUTE "Mute"
#define SMILE "Smile"
#define STONER "Stoner"
#define UNINTELLIGIBLE "Unintelligible"
#define SWEDISH "Swedish"
#define CHAV "Chav"
#define ELVIS "Elvis"
//Defines copying names of mutations in all cases, make sure to change this if you change mutation's type
#define HULK /datum/mutation/human/hulk
#define XRAY /datum/mutation/human/thermal/x_ray
#define SPACEMUT /datum/mutation/human/space_adaptation
#define TK /datum/mutation/human/telekinesis
#define NERVOUS /datum/mutation/human/nervousness
#define EPILEPSY /datum/mutation/human/epilepsy
#define MUTATE /datum/mutation/human/bad_dna
#define COUGH /datum/mutation/human/cough
#define DWARFISM /datum/mutation/human/dwarfism
#define GIGANTISM /datum/mutation/human/gigantism
#define CLOWNMUT /datum/mutation/human/clumsy
#define TOURETTES /datum/mutation/human/tourettes
#define DEAFMUT /datum/mutation/human/deaf
#define BLINDMUT /datum/mutation/human/blind
#define RACEMUT /datum/mutation/human/race
#define BADSIGHT /datum/mutation/human/nearsight
#define LASEREYES /datum/mutation/human/laser_eyes
#define CHAMELEON /datum/mutation/human/chameleon
#define WACKY /datum/mutation/human/wacky
#define MUT_MUTE /datum/mutation/human/mute
#define SMILE /datum/mutation/human/smile
#define STONER /datum/mutation/human/stoner
#define UNINTELLIGIBLE /datum/mutation/human/unintelligible
#define SWEDISH /datum/mutation/human/swedish
#define CHAV /datum/mutation/human/chav
#define ELVIS /datum/mutation/human/elvis
#define RADIOACTIVE /datum/mutation/human/radioactive
#define GLOWY /datum/mutation/human/glow
#define ANTIGLOWY /datum/mutation/human/glow/anti
#define TELEPATHY /datum/mutation/human/telepathy
#define FIREBREATH /datum/mutation/human/firebreath
#define VOID /datum/mutation/human/void
#define TONGUESPIKE /datum/mutation/human/tongue_spike
#define TONGUESPIKECHEM /datum/mutation/human/tongue_spike/chem
#define STRONG /datum/mutation/human/strong
#define STIMMED /datum/mutation/human/stimmed
#define FIRESWEAT /datum/mutation/human/fire
#define THERMAL /datum/mutation/human/thermal
#define ANTENNA /datum/mutation/human/antenna
#define PARANOIA /datum/mutation/human/paranoia
#define MINDREAD /datum/mutation/human/mindreader
#define INSULATED /datum/mutation/human/insulated
#define SHOCKTOUCH /datum/mutation/human/shock
#define OLFACTION /datum/mutation/human/olfaction
#define ACIDFLESH /datum/mutation/human/acidflesh
#define BADBLINK /datum/mutation/human/badblink
#define SPASTIC /datum/mutation/human/spastic
#define GELADIKINESIS /datum/mutation/human/geladikinesis
#define CRYOKINESIS /datum/mutation/human/cryokinesis
#define SPIDER_WEB /datum/mutation/human/webbing
#define UI_CHANGED "ui changed"
#define UE_CHANGED "ue changed"
@@ -39,10 +64,12 @@
//Types of usual mutations
#define POSITIVE 1
#define NEGATIVE 2
#define MINOR_NEGATIVE 3
#define MINOR_NEGATIVE 4
//Mutations that cant be taken from genetics and are not in SE
#define NON_SCANNABLE -1
//Mutation classes. Normal being on them, extra being additional mutations with instability and other being stuff you dont want people to fuck with like wizard mutate
#define MUT_NORMAL 1
#define MUT_EXTRA 2
#define MUT_OTHER 3
//DNA - Because fuck you and your magic numbers being all over the codebase.
#define DNA_BLOCK_SIZE 3
@@ -63,7 +90,8 @@
#define DNA_MUTANTMARKING_BLOCK 13
#define DNA_TAUR_BLOCK 14
#define DNA_STRUC_ENZYMES_BLOCKS 18
#define DNA_SEQUENCE_LENGTH 4
#define DNA_MUTATION_BLOCKS 8
#define DNA_UNIQUE_ENZYMES_LEN 32
//Transformation proc stuff
@@ -141,7 +169,13 @@
#define STANDARD_ORGAN_HEALING (1/(15 MINUTES / (2 SECONDS)))
#define STANDARD_ORGAN_DECAY (1/(15 MINUTES / (2 SECONDS))) //designed to fail organs when left to decay for ~15 minutes. 2 SECOND is SSmobs tickrate.
//used for the can_chromosome var on mutations
#define CHROMOSOME_NEVER 0
#define CHROMOSOME_NONE 1
#define CHROMOSOME_USED 2
#define G_MALE 1
#define G_FEMALE 2
#define G_PLURAL 3
#define G_NEUTER 4
#define G_NEUTER 4
+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
+20 -1
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
@@ -202,14 +206,25 @@
#define COMSIG_LIVING_RESIST "living_resist" //from base of mob/living/resist() (/mob/living)
#define COMSIG_LIVING_IGNITED "living_ignite" //from base of mob/living/IgniteMob() (/mob/living)
#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" //from base of mob/living/ExtinguishMob() (/mob/living)
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage)
#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" //from base of mob/living/electrocute_act(): (shock_damage, source, siemens_coeff, flags)
#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" //sent by stuff like stunbatons and tasers: ()
#define COMSIG_LIVING_REVIVE "living_revive" //from base of mob/living/revive() (full_heal, admin_revive)
#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)
// /mob/living/simple_animal/hostile signals
#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget"
@@ -233,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)
@@ -274,6 +290,9 @@
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target)
#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker)
#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" //Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted)
#define COMSIG_HUMAN_PREFS_COPIED_TO "human_prefs_copied_to" //from datum/preferences/copy_to(): (datum/preferences, icon_updates, roundstart_checks)
#define COMSIG_HUMAN_HARDSET_DNA "human_hardset_dna" //from mob/living/carbon/human/hardset_dna(): (ui, list/mutation_index, newreal_name, newblood_type, datum/species, newfeatures)
#define COMSIG_HUMAN_ON_RANDOMIZE "humman_on_randomize" //from base of proc/randomize_human()
// /datum/species signals
#define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species)
+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 -1
View File
@@ -41,7 +41,7 @@
//Individual logging panel pages
#define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK)
#define INDIVIDUAL_SAY_LOG (LOG_SAY | LOG_WHISPER | LOG_DSAY)
#define INDIVIDUAL_EMOTE_LOG (LOG_EMOTE)
#define INDIVIDUAL_EMOTE_LOG (LOG_EMOTE | LOG_SUBTLER)
#define INDIVIDUAL_COMMS_LOG (LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS)
#define INDIVIDUAL_OOC_LOG (LOG_OOC | LOG_ADMIN)
#define INDIVIDUAL_OWNERSHIP_LOG (LOG_OWNERSHIP)
+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
+13
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"
@@ -208,6 +210,17 @@
#define MAX_CHICKENS 50
///Flags used by the flags parameter of electrocute act.
///Makes it so that the shock doesn't take gloves into account.
#define SHOCK_NOGLOVES (1 << 0)
///Used when the shock is from a tesla bolt.
#define SHOCK_TESLA (1 << 1)
///Used when an illusion shocks something. Makes the shock deal stamina damage and not trigger certain secondary effects.
#define SHOCK_ILLUSION (1 << 2)
///The shock doesn't stun.
#define SHOCK_NOSTUN (1 << 3)
#define INCORPOREAL_MOVE_BASIC 1
#define INCORPOREAL_MOVE_SHADOW 2 // leaves a trail of shadows
+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
+10 -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
@@ -111,3 +118,4 @@
#define STATUS_EFFECT_RAINBOWPROTECTION /datum/status_effect/rainbow_protection //Invulnerable and pacifistic
#define STATUS_EFFECT_SLIMESKIN /datum/status_effect/slimeskin //Increased armor
#define STATUS_EFFECT_DNA_MELT /datum/status_effect/dna_melt //usually does something horrible to you when you hit 100 genetic instability
-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
+24 -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\
@@ -77,6 +83,7 @@
#define TRAIT_DISFIGURED "disfigured"
#define TRAIT_XENO_HOST "xeno_host" //Tracks whether we're gonna be a baby alien's mummy.
#define TRAIT_STUNIMMUNE "stun_immunity"
#define TRAIT_TASED_RESISTANCE "tased_resistance" //prevents you from suffering most of the effects of being tased
#define TRAIT_SLEEPIMMUNE "sleep_immunity"
#define TRAIT_PUSHIMMUNE "push_immunity"
#define TRAIT_SHOCKIMMUNE "shock_immunity"
@@ -137,6 +144,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
@@ -175,6 +195,8 @@
#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item"
#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman.
#define TRAIT_FREESPRINT "free_sprinting"
#define TRAIT_XRAY_VISION "xray_vision"
#define TRAIT_THERMAL_VISION "thermal_vision"
#define TRAIT_NO_TELEPORT "no-teleport" //you just can't
#define TRAIT_NO_INTERNALS "no-internals"
#define TRAIT_NO_ALCOHOL "alcohol_intolerance"
-32
View File
@@ -107,38 +107,6 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
if(!src.holder) return
message_admins("[key_name_admin(usr)] manually reloaded mentors")
//Flavor Text
/mob/proc/set_flavor()
set name = "Set Flavor Text"
set desc = "Sets an extended description of your character's features."
set category = "IC"
var/new_flavor = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", flavor_text, MAX_FLAVOR_LEN, TRUE)
if(!isnull(new_flavor))
flavor_text = html_decode(new_flavor)
to_chat(src, "Your flavor text has been updated.")
//Flavor Text
/mob/proc/set_flavor_2()
set name = "Set Temporary Flavor Text"
set desc = "Sets a description of your character's current appearance. Use this for emotions, poses etc."
set category = "IC"
var/new_flavor = stripped_multiline_input(usr, "Set the temporary flavor text in your 'examine' verb. This should be used only for things pertaining to the current round!", "Short-Term Flavor Text", flavor_text_2, MAX_FLAVOR_LEN, TRUE)
if(!isnull(new_flavor))
flavor_text_2 = html_decode(new_flavor)
to_chat(src, "Your temporary flavor text has been updated.")
/mob/proc/print_flavor_text(flavor,temp = FALSE)
if(!flavor)
return
// We are decoding and then encoding to not only get correct amount of characters, but also to prevent partial escaping characters being shown.
var/msg = html_decode(replacetext(flavor, "\n", " "))
if(length_char(msg) <= 40)
return "<span class='notice'>[html_encode(msg)]</span>"
else
return "<span class='notice'>[html_encode(copytext_char(msg, 1, 37))]... <a href='?src=[REF(src)];flavor[temp ? "2" : ""]_more=1'>More...</span></a>"
//LOOC toggles
/client/verb/listen_looc()
set name = "Show/Hide LOOC"
+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()
+12
View File
@@ -0,0 +1,12 @@
//////////////////////////////////////////////////////////
//A bunch of helpers to make genetics less of a headache//
//////////////////////////////////////////////////////////
#define GET_INITIALIZED_MUTATION(A) GLOB.all_mutations[A]
#define GET_GENE_STRING(A, B) (B.mutation_index[A])
#define GET_SEQUENCE(A) (GLOB.full_sequences[A])
#define GET_MUTATION_STABILIZER(A) ((A.stabilizer_coeff < 0) ? 1 : A.stabilizer_coeff)
#define GET_MUTATION_SYNCHRONIZER(A) ((A.synchronizer_coeff < 0) ? 1 : A.synchronizer_coeff)
#define GET_MUTATION_POWER(A) ((A.power_coeff < 0) ? 1 : A.power_coeff)
#define GET_MUTATION_ENERGY(A) ((A.energy_coeff < 0) ? 1 : A.energy_coeff)
+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
)
))
+5 -2
View File
@@ -21,8 +21,11 @@ GLOBAL_LIST(op_se_blocks)
GLOBAL_VAR(NULLED_SE)
GLOBAL_VAR(NULLED_UI)
GLOBAL_LIST_EMPTY(global_mutations) // list of hidden mutation things
GLOBAL_LIST_EMPTY(all_mutations)
GLOBAL_LIST_EMPTY(full_sequences)
GLOBAL_LIST_EMPTY(bad_mutations)
GLOBAL_LIST_EMPTY(good_mutations)
GLOBAL_LIST_EMPTY(not_good_mutations)
GLOBAL_LIST_EMPTY(not_good_mutations)
GLOBAL_LIST_EMPTY(mutation_recipes)
-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))
@@ -371,19 +371,18 @@
for(var/T in storyteller_cache)
var/datum/dynamic_storyteller/S = T
var/config_tag = initial(S.config_tag)
var/final_weight = initial(S.weight)
if(probabilities[config_tag]<=0)
var/probability = (config_tag in probabilities) ? probabilities[config_tag] : initial(S.weight)
if(probability <= 0)
continue
final_weight = probabilities[config_tag]
if(SSpersistence.saved_storytellers.len == 3 && repeated_mode_adjust.len == 3)
if(SSpersistence.saved_storytellers.len == repeated_mode_adjust.len)
var/name = initial(S.name)
var/recent_round = min(SSpersistence.saved_storytellers.Find(name),3)
var/adjustment = 0
while(recent_round)
adjustment += repeated_mode_adjust[recent_round]
recent_round = SSpersistence.saved_modes.Find(name,recent_round+1,0)
final_weight *= ((100-adjustment)/100)
runnable_storytellers[S] = final_weight
probability *= ((100-adjustment)/100)
runnable_storytellers[S] = probability
return runnable_storytellers
@@ -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
@@ -459,3 +459,6 @@
/datum/config_entry/number/max_bunker_days
config_entry_value = 7
min_val = 1
/datum/config_entry/flag/minimaps_enabled
config_entry_value = TRUE
+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()
+13 -10
View File
@@ -16,7 +16,7 @@ SUBSYSTEM_DEF(atoms)
/datum/controller/subsystem/atoms/Initialize(timeofday)
GLOB.fire_overlay.appearance_flags = RESET_COLOR
setupGenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation.
setupGenetics() //to set the mutations' sequence.
initialized = INITIALIZATION_INNEW_MAPLOAD
InitializeAtoms()
return ..()
@@ -108,16 +108,19 @@ SUBSYSTEM_DEF(atoms)
BadInitializeCalls = SSatoms.BadInitializeCalls
/datum/controller/subsystem/atoms/proc/setupGenetics()
var/list/avnums = new /list(DNA_STRUC_ENZYMES_BLOCKS)
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
avnums[i] = i
CHECK_TICK
for(var/A in subtypesof(/datum/mutation/human))
var/datum/mutation/human/B = new A()
if(B.dna_block == NON_SCANNABLE)
var/list/mutations = subtypesof(/datum/mutation/human)
shuffle_inplace(mutations)
for(var/A in subtypesof(/datum/generecipe))
var/datum/generecipe/GR = A
GLOB.mutation_recipes[initial(GR.required)] = initial(GR.result)
for(var/i in 1 to LAZYLEN(mutations))
var/path = mutations[i] //byond gets pissy when we do it in one line
var/datum/mutation/human/B = new path ()
B.alias = "Mutation #[i]"
GLOB.all_mutations[B.type] = B
GLOB.full_sequences[B.type] = generate_gene_sequence(B.blocks)
if(B.locked)
continue
B.dna_block = pick_n_take(avnums)
if(B.quality == POSITIVE)
GLOB.good_mutations |= B
else if(B.quality == NEGATIVE)
+1 -1
View File
@@ -20,7 +20,7 @@ SUBSYSTEM_DEF(autotransfer)
/datum/controller/subsystem/autotransfer/fire()
if(maxvotes > curvotes)
if(world.time > targettime)
SSvote.initiate_vote("transfer",null) //TODO figure out how to not use null as the user
SSvote.initiate_vote("transfer","server")
targettime = targettime + voteinterval
curvotes += 1
else
+24 -6
View File
@@ -6,7 +6,7 @@ SUBSYSTEM_DEF(garbage)
runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY
init_order = INIT_ORDER_GARBAGE
var/list/collection_timeout = list(0, 2 MINUTES, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
var/list/collection_timeout = list(15 SECONDS, 30 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
//Stat tracking
var/delslasttick = 0 // number of del()'s we've done this tick
@@ -27,6 +27,7 @@ SUBSYSTEM_DEF(garbage)
#ifdef TESTING
var/list/reference_find_on_fail = list()
var/list/reference_find_on_fail_types = list()
#endif
@@ -98,9 +99,6 @@ SUBSYSTEM_DEF(garbage)
state = SS_RUNNING
break
/datum/controller/subsystem/garbage/proc/HandleQueue(level = GC_QUEUE_CHECK)
if (level == GC_QUEUE_CHECK)
delslasttick = 0
@@ -183,6 +181,11 @@ SUBSYSTEM_DEF(garbage)
var/gctime = world.time
var/refid = "\ref[D]"
#ifdef TESTING
if(reference_find_on_fail_types[D.type])
reference_find_on_fail["\ref[D]"] = TRUE
#endif
D.gc_destroyed = gctime
var/list/queue = queues[level]
if (queue[refid])
@@ -190,6 +193,21 @@ SUBSYSTEM_DEF(garbage)
queue[refid] = gctime
#ifdef TESTING
/datum/controller/subsystem/garbage/proc/add_type_to_findref(type)
if(!ispath(type))
return "NOT A VAILD PATH"
reference_find_on_fail_types |= typecacheof(type)
/datum/controller/subsystem/garbage/proc/remove_type_from_findref(type)
if(!ispath(type))
return "NOT A VALID PATH"
reference_find_on_fail_types -= typesof(type)
/datum/controller/subsystem/garbage/proc/clear_findref_types()
reference_find_on_fail_types = list()
#endif
//this is mainly to separate things profile wise.
/datum/controller/subsystem/garbage/proc/HardDelete(datum/D)
var/time = world.timeofday
@@ -244,7 +262,7 @@ SUBSYSTEM_DEF(garbage)
#ifdef TESTING
/proc/qdel_and_find_ref_if_fail(datum/D, force = FALSE)
SSgarbage.reference_find_on_fail[REF(D)] = TRUE
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
qdel(D, force)
#endif
@@ -309,7 +327,7 @@ SUBSYSTEM_DEF(garbage)
if (QDEL_HINT_IFFAIL_FINDREFERENCE)
SSgarbage.Queue(D)
#ifdef TESTING
SSgarbage.reference_find_on_fail[REF(D)] = TRUE
SSgarbage.reference_find_on_fail["\ref[D]"] = TRUE
#endif
else
#ifdef TESTING
+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
+20
View File
@@ -0,0 +1,20 @@
SUBSYSTEM_DEF(minimaps)
name = "Minimaps"
flags = SS_NO_FIRE
var/list/station_minimaps
var/datum/minimap_group/station_minimap
/datum/controller/subsystem/minimaps/Initialize()
if(!CONFIG_GET(flag/minimaps_enabled))
to_chat(world, "<span class='boldwarning'>Minimaps disabled! Skipping init.</span>")
return ..()
build_minimaps()
return ..()
/datum/controller/subsystem/minimaps/proc/build_minimaps()
station_minimaps = list()
for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
var/datum/space_level/SL = SSmapping.get_level(z)
var/name = (SL.name == initial(SL.name))? "[z] - Station" : "[z] - [SL.name]"
station_minimaps += new /datum/minimap(z, name = name)
station_minimap = new(station_minimaps, "Station")
+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
+1
View File
@@ -701,6 +701,7 @@ SUBSYSTEM_DEF(ticker)
round_end_sound = pick(\
'sound/roundend/newroundsexy.ogg',
'sound/roundend/apcdestroyed.ogg',
'sound/roundend/seeyoulaterokay.ogg',
'sound/roundend/bangindonk.ogg',
'sound/roundend/leavingtg.ogg',
'sound/roundend/its_only_game.ogg',
+4 -17
View File
@@ -89,20 +89,6 @@ SUBSYSTEM_DEF(vote)
choices[GLOB.master_mode] += non_voters.len
if(choices[GLOB.master_mode] >= greatest_votes)
greatest_votes = choices[GLOB.master_mode]
else if(mode == "transfer") // austation begin -- Crew autotransfer vote
var/factor = 1
switch(world.time / (1 MINUTES))
if(0 to 60)
factor = 0.5
if(61 to 120)
factor = 0.8
if(121 to 240)
factor = 1
if(241 to 300)
factor = 1.2
else
factor = 1.4
choices["Initiate Crew Transfer"] += round(non_voters.len * factor) // austation end
//get all options with that many votes and return them in a list
. = list()
if(greatest_votes)
@@ -370,7 +356,7 @@ SUBSYSTEM_DEF(vote)
var/list/runnable_storytellers = config.get_runnable_storytellers()
for(var/T in runnable_storytellers)
var/datum/dynamic_storyteller/S = T
runnable_storytellers[S] *= scores[initial(S.name)]
runnable_storytellers[S] *= round(stored_gamemode_votes[initial(S.name)]*100000,1)
var/datum/dynamic_storyteller/S = pickweightAllowZero(runnable_storytellers)
GLOB.dynamic_storyteller_type = S
if("map")
@@ -499,10 +485,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")
+15 -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)
@@ -422,6 +426,7 @@
/datum/action/item_action/hands_free
check_flags = AB_CHECK_CONSCIOUS
required_mobility_flags = NONE
/datum/action/item_action/hands_free/activate
name = "Activate"
@@ -430,7 +435,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])
+3 -3
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
@@ -341,7 +341,7 @@
var/mob/living/parent
var/selfdeleting = FALSE
/obj/item/riding_offhand/dropped()
/obj/item/riding_offhand/dropped(mob/user)
selfdeleting = TRUE
. = ..()
+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)
-1
View File
@@ -287,7 +287,6 @@
G.fields["gender"] = "Other"
L.fields["blood_type"] = H.dna.blood_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.struc_enzymes
L.fields["identity"] = H.dna.uni_identity
L.fields["species"] = H.dna.species.type
L.fields["features"] = H.dna.features
+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)
+1 -1
View File
@@ -21,7 +21,7 @@
return FALSE
if(!(type in D.viable_mobtypes))
if(!D.viable_mobtypes[type])
return FALSE
return TRUE
+5 -1
View File
@@ -18,7 +18,7 @@
var/stage_prob = 4
//Other
var/list/viable_mobtypes = list() //typepaths of viable mobs
var/list/viable_mobtypes = list() //typecache of viable mobs
var/mob/living/carbon/affected_mob = null
var/list/cures = list() //list of cures if the disease has the CURABLE flag, these are reagent ids
var/infectivity = 65
@@ -34,6 +34,10 @@
var/process_dead = FALSE //if this ticks while the host is dead
var/copy_type = null //if this is null, copies will use the type of the instance being copied
/datum/disease/New(make_typecache = TRUE)
if(make_typecache && length(viable_mobtypes))
viable_mobtypes = typecacheof(viable_mobtypes)
/datum/disease/Destroy()
. = ..()
if(affected_mob)
+2 -1
View File
@@ -80,7 +80,8 @@
*/
/datum/disease/advance/New()
/datum/disease/advance/New(make_typecache = TRUE)
..()
Refresh()
/datum/disease/advance/Destroy()
+5 -5
View File
@@ -2,7 +2,7 @@
/datum/disease/advance/cold
copy_type = /datum/disease/advance
/datum/disease/advance/cold/New()
/datum/disease/advance/cold/New(make_typecache = TRUE)
name = "Cold"
symptoms = list(new/datum/symptom/sneeze)
..()
@@ -11,7 +11,7 @@
/datum/disease/advance/flu
copy_type = /datum/disease/advance
/datum/disease/advance/flu/New()
/datum/disease/advance/flu/New(make_typecache = TRUE)
name = "Flu"
symptoms = list(new/datum/symptom/cough)
..()
@@ -21,7 +21,7 @@
name = "Experimental Disease"
copy_type = /datum/disease/advance
/datum/disease/advance/random/New(max_symptoms, max_level = 8)
/datum/disease/advance/random/New(make_typecache = TRUE, max_symptoms, max_level = 8)
if(!max_symptoms)
max_symptoms = rand(1, VIRUS_SYMPTOM_LIMIT)
var/list/datum/symptom/possible_symptoms = list()
@@ -37,6 +37,6 @@
if(chosen_symptom)
var/datum/symptom/S = new chosen_symptom
symptoms += S
Refresh()
name = "Sample #[rand(1,10000)]"
name = "Sample #[rand(1,10000)]"
..()
@@ -61,12 +61,12 @@ Bonus
symptom_delay_max = 60
if(A.properties["resistance"] >= 8) //mutate twice
power = 2
possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT]
possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.all_mutations[RACEMUT]
var/mob/living/carbon/M = A.affected_mob
if(M)
if(!M.has_dna())
return
archived_dna = M.dna.struc_enzymes
archived_dna = M.dna.mutation_index
// Give them back their old DNA when cured.
/datum/symptom/genetic_mutation/End(datum/disease/advance/A)
@@ -77,5 +77,5 @@ Bonus
if(M && archived_dna)
if(!M.has_dna())
return
M.dna.struc_enzymes = archived_dna
M.dna.mutation_index = archived_dna
M.domutcheck()
@@ -257,6 +257,8 @@
/datum/symptom/heal/coma/End(datum/disease/advance/A)
if(!..())
return
if(active_coma)
uncoma()
REMOVE_TRAIT(A.affected_mob, TRAIT_NOCRITDAMAGE, DISEASE_TRAIT)
/datum/symptom/heal/coma/CanHeal(datum/disease/advance/A)
@@ -277,9 +279,9 @@
/datum/symptom/heal/coma/proc/coma(mob/living/M)
if(deathgasp)
M.emote("deathgasp")
M.fakedeath("regenerative_coma")
M.fakedeath("regenerative_coma", TRUE)
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 +290,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
@@ -13,7 +13,7 @@
stage_prob = 2
var/restcure = 0
/datum/disease/dna_retrovirus/New()
/datum/disease/dna_retrovirus/New(make_typecache = TRUE)
..()
agent = "Virus class [pick("A","B","C","D","E","F")][pick("A","B","C","D","E","F")]-[rand(50,300)]"
if(prob(40))
+247 -61
View File
@@ -2,7 +2,6 @@
/////////////////////////// DNA DATUM
/datum/dna
var/unique_enzymes
var/struc_enzymes
var/uni_identity
var/blood_type
var/datum/species/species = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man)
@@ -11,10 +10,13 @@
var/nameless = FALSE
var/custom_species //siiiiigh I guess this is important
var/list/mutations = list() //All mutations are from now on here
var/list/temporary_mutations = list() //Timers for temporary mutations
var/list/temporary_mutations = list() //Temporary changes to the UE
var/list/previous = list() //For temporary name/ui/ue/blood_type modifications
var/mob/living/holder
var/delete_species = TRUE //Set to FALSE when a body is scanned by a cloner to fix #38875
var/mutation_index[DNA_MUTATION_BLOCKS] //List of which mutations this carbon has and its assigned block
var/stability = 100
var/scrambled = FALSE //Did we take something like mutagen? In that case we cant get our genes scanned to instantly cheese all the powers.
/datum/dna/New(mob/living/new_holder)
if(istype(new_holder))
@@ -42,8 +44,8 @@
destination.dna.unique_enzymes = unique_enzymes
destination.dna.uni_identity = uni_identity
destination.dna.blood_type = blood_type
destination.dna.features = features.Copy()
destination.set_species(species.type, icon_update=0)
destination.dna.features = features.Copy()
destination.dna.real_name = real_name
destination.dna.nameless = nameless
destination.dna.custom_species = custom_species
@@ -51,13 +53,14 @@
if(ishuman(destination))
var/mob/living/carbon/human/H = destination
H.give_genitals(TRUE)//This gives the body the genitals of this DNA. Used for any transformations based on DNA
destination.flavor_text = destination.dna.features["flavor_text"] //Update the flavor_text to use new dna text
if(transfer_SE)
destination.dna.struc_enzymes = struc_enzymes
destination.dna.mutation_index = mutation_index
SEND_SIGNAL(destination, COMSIG_CARBON_IDENTITY_TRANSFERRED_TO, src, transfer_SE)
/datum/dna/proc/copy_dna(datum/dna/new_dna)
new_dna.unique_enzymes = unique_enzymes
new_dna.struc_enzymes = struc_enzymes
new_dna.mutation_index = mutation_index
new_dna.uni_identity = uni_identity
new_dna.blood_type = blood_type
new_dna.features = features.Copy()
@@ -67,26 +70,32 @@
new_dna.custom_species = custom_species
new_dna.mutations = mutations.Copy()
/datum/dna/proc/add_mutation(mutation_name)
var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name]
HM.on_acquiring(holder)
//See mutation.dm for what 'class' does. 'time' is time till it removes itself in decimals. 0 for no timer
/datum/dna/proc/add_mutation(mutation, class = MUT_OTHER, time)
var/mutation_type = mutation
if(istype(mutation, /datum/mutation/human))
var/datum/mutation/human/HM = mutation
mutation_type = HM.type
if(get_mutation(mutation_type))
return
return force_give(new mutation_type (class, time, copymut = mutation))
/datum/dna/proc/remove_mutation(mutation_name)
var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name]
HM.on_losing(holder)
/datum/dna/proc/remove_mutation(mutation_type)
return force_lose(get_mutation(mutation_type))
/datum/dna/proc/check_mutation(mutation_name)
var/datum/mutation/human/HM = GLOB.mutations_list[mutation_name]
return mutations.Find(HM)
/datum/dna/proc/check_mutation(mutation_type)
return get_mutation(mutation_type)
/datum/dna/proc/remove_all_mutations()
remove_mutation_group(mutations)
/datum/dna/proc/remove_all_mutations(list/classes = list(MUT_NORMAL, MUT_EXTRA, MUT_OTHER), mutadone = FALSE)
remove_mutation_group(mutations, classes, mutadone)
scrambled = FALSE
/datum/dna/proc/remove_mutation_group(list/group)
/datum/dna/proc/remove_mutation_group(list/group, list/classes = list(MUT_NORMAL, MUT_EXTRA, MUT_OTHER), mutadone = FALSE)
if(!group)
return
for(var/datum/mutation/human/HM in group)
HM.force_lose(holder)
if((HM.class in classes) && !(HM.mutadone_proof && mutadone))
force_lose(HM)
/datum/dna/proc/generate_uni_identity()
. = ""
@@ -136,19 +145,49 @@
. += random_string(DNA_BLOCK_SIZE,GLOB.hex_characters)
return .
/datum/dna/proc/generate_struc_enzymes()
var/list/sorting = new /list(DNA_STRUC_ENZYMES_BLOCKS)
var/result = ""
for(var/datum/mutation/human/A in GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations)
if(A.name == RACEMUT && ismonkey(holder))
sorting[A.dna_block] = num2hex(A.lowest_value + rand(0, 256 * 6), DNA_BLOCK_SIZE)
mutations |= A
else
sorting[A.dna_block] = random_string(DNA_BLOCK_SIZE, list("0","1","2","3","4","5","6"))
/datum/dna/proc/generate_dna_blocks()
var/bonus
if(species && species.inert_mutation)
bonus = GET_INITIALIZED_MUTATION(species.inert_mutation)
var/list/mutations_temp = GLOB.good_mutations + GLOB.bad_mutations + GLOB.not_good_mutations + bonus
if(!LAZYLEN(mutations_temp))
return
mutation_index.Cut()
shuffle_inplace(mutations_temp)
if(ismonkey(holder))
mutations |= new RACEMUT(MUT_NORMAL)
mutation_index[RACEMUT] = GET_SEQUENCE(RACEMUT)
else
mutation_index[RACEMUT] = create_sequence(RACEMUT, FALSE)
for(var/i in 2 to DNA_MUTATION_BLOCKS)
var/datum/mutation/human/M = mutations_temp[i]
mutation_index[M.type] = create_sequence(M.type, FALSE,M.difficulty)
shuffle_inplace(mutation_index)
for(var/B in sorting)
result += B
return result
//Used to generate original gene sequences for every mutation
/proc/generate_gene_sequence(length=4)
var/static/list/active_sequences = list("AT","TA","GC","CG")
var/sequence
for(var/i in 1 to length*DNA_SEQUENCE_LENGTH)
sequence += pick(active_sequences)
return sequence
//Used to create a chipped gene sequence
/proc/create_sequence(mutation, active, difficulty)
if(!difficulty)
var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(mutation) //leaves the possibility to change difficulty mid-round
if(!A)
return
difficulty = A.difficulty
difficulty += rand(-2,4)
var/sequence = GET_SEQUENCE(mutation)
if(active)
return sequence
while(difficulty)
var/randnum = rand(1, length(sequence))
sequence = copytext(sequence, 1, randnum) + "X" + copytext(sequence, randnum+1, length(sequence)+1)
difficulty--
return sequence
/datum/dna/proc/generate_unique_enzymes()
. = ""
@@ -201,12 +240,57 @@
if(DNA_TAUR_BLOCK)
construct_block(GLOB.taur_list.Find(features["taur"]), GLOB.taur_list.len)
//Please use add_mutation or activate_mutation instead
/datum/dna/proc/force_give(datum/mutation/human/HM)
if(holder && HM)
if(HM.class == MUT_NORMAL)
set_se(1, HM)
. = HM.on_acquiring(holder)
if(.)
qdel(HM)
update_instability()
//Use remove_mutation instead
/datum/dna/proc/force_lose(datum/mutation/human/HM)
if(holder && (HM in mutations))
set_se(0, HM)
. = HM.on_losing(holder)
update_instability(FALSE)
return
/datum/dna/proc/is_same_as(datum/dna/D)
if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless && custom_species == D.custom_species)
if(uni_identity == D.uni_identity && mutation_index == D.mutation_index && real_name == D.real_name && nameless == D.nameless && custom_species == D.custom_species)
if(species.type == D.species.type && features == D.features && blood_type == D.blood_type)
return 1
return 0
/datum/dna/proc/update_instability(alert=TRUE)
stability = 100
for(var/datum/mutation/human/M in mutations)
if(M.class == MUT_EXTRA)
stability -= M.instability * GET_MUTATION_STABILIZER(M)
if(holder)
var/message
if(alert)
switch(stability)
if(70 to 90)
message = "<span class='warning'>You shiver.</span>"
if(60 to 69)
message = "<span class='warning'>You feel cold.</span>"
if(40 to 59)
message = "<span class='warning'>You feel sick.</span>"
if(20 to 39)
message = "<span class='warning'>It feels like your skin is moving.</span>"
if(1 to 19)
message = "<span class='warning'>You can feel your cells burning.</span>"
if(-INFINITY to 0)
message = "<span class='boldwarning'>You can feel your DNA exploding, we need to do something fast!</span>"
if(stability <= 0)
holder.apply_status_effect(STATUS_EFFECT_DNA_MELT)
if(message)
to_chat(holder, message)
//used to update dna UI, UE, and dna.real_name.
/datum/dna/proc/update_dna_identity()
uni_identity = generate_uni_identity()
@@ -217,8 +301,8 @@
blood_type = newblood_type
unique_enzymes = generate_unique_enzymes()
uni_identity = generate_uni_identity()
struc_enzymes = generate_struc_enzymes()
features = random_features()
generate_dna_blocks()
features = random_features(species?.id)
/datum/dna/stored //subtype used by brain mob's stored_dna
@@ -232,10 +316,10 @@
/datum/dna/stored/check_mutation(mutation_name)
return
/datum/dna/stored/remove_all_mutations()
/datum/dna/stored/remove_all_mutations(list/classes = list(MUT_NORMAL, MUT_EXTRA, MUT_OTHER), mutadone = FALSE)
return
/datum/dna/stored/remove_mutation_group(list/group)
/datum/dna/stored/remove_mutation_group(list/group, list/classes = list(MUT_NORMAL, MUT_EXTRA, MUT_OTHER), mutadone = FALSE)
return
/////////////////////////// DNA MOB-PROCS //////////////////////
@@ -270,6 +354,7 @@
if(icon_update)
update_body()
update_hair()
update_body_parts()
update_mutations_overlay()// no lizard with human hulk overlay please.
@@ -280,11 +365,10 @@
return dna
/mob/living/carbon/human/proc/hardset_dna(ui, se, newreal_name, newblood_type, datum/species/mrace, newfeatures)
/mob/living/carbon/human/proc/hardset_dna(ui, list/mutation_index, newreal_name, newblood_type, datum/species/mrace, newfeatures)
if(newfeatures)
dna.features = newfeatures
flavor_text = dna.features["flavor_text"] //Update the flavor_text to use new dna text
if(mrace)
var/datum/species/newrace = new mrace.type
@@ -302,10 +386,12 @@
dna.uni_identity = ui
updateappearance(icon_update=0)
if(se)
dna.struc_enzymes = se
if(LAZYLEN(mutation_index))
dna.mutation_index = mutation_index.Copy()
domutcheck()
SEND_SIGNAL(src, COMSIG_HUMAN_HARDSET_DNA, ui, mutation_index, newreal_name, newblood_type, mrace, newfeatures)
if(mrace || newfeatures || ui)
update_body()
update_hair()
@@ -355,19 +441,63 @@
/mob/proc/domutcheck()
return
/mob/living/carbon/domutcheck(force_powers=0) //Set force_powers to 1 to bypass the power chance
/mob/living/carbon/domutcheck()
if(!has_dna())
return
for(var/datum/mutation/human/A in GLOB.good_mutations | GLOB.bad_mutations | GLOB.not_good_mutations)
if(ismob(A.check_block(src, force_powers)))
for(var/mutation in dna.mutation_index)
if(ismob(dna.check_block(mutation)))
return //we got monkeyized/humanized, this mob will be deleted, no need to continue.
update_mutations_overlay()
/datum/dna/proc/check_block(mutation)
var/datum/mutation/human/HM = get_mutation(mutation)
if(check_block_string(mutation))
if(!HM)
. = add_mutation(mutation, MUT_NORMAL)
return
return force_lose(HM)
//Return the active mutation of a type if there is one
/datum/dna/proc/get_mutation(A)
for(var/datum/mutation/human/HM in mutations)
if(HM.type == A)
return HM
/datum/dna/proc/check_block_string(mutation)
if((LAZYLEN(mutation_index) > DNA_MUTATION_BLOCKS) || !(mutation in mutation_index))
return 0
return is_gene_active(mutation)
/datum/dna/proc/is_gene_active(mutation)
return (mutation_index[mutation] == GET_SEQUENCE(mutation))
/datum/dna/proc/set_se(on=TRUE, datum/mutation/human/HM)
if(!HM || !(HM.type in mutation_index) || (LAZYLEN(mutation_index) < DNA_MUTATION_BLOCKS))
return
. = TRUE
if(on)
mutation_index[HM.type] = GET_SEQUENCE(HM.type)
else if(GET_SEQUENCE(HM.type) == mutation_index[HM.type])
mutation_index[HM.type] = create_sequence(HM.type, FALSE, HM.difficulty)
/datum/dna/proc/activate_mutation(mutation) //note that this returns a boolean and not a new mob
if(!mutation)
return FALSE
var/mutation_type = mutation
if(istype(mutation, /datum/mutation/human))
var/datum/mutation/human/M = mutation
mutation_type = M.type
if(!mutation_in_sequence(mutation_type)) //cant activate what we dont have, use add_mutation
return FALSE
add_mutation(mutation, MUT_NORMAL)
return TRUE
/////////////////////////// DNA HELPER-PROCS //////////////////////////////
/proc/getleftblocks(input,blocknumber,blocksize)
if(blocknumber > 1)
return copytext_char(input,1,((blocksize*blocknumber)-(blocksize-1)))
@@ -384,29 +514,47 @@
return 0
return getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize)
/datum/dna/proc/mutation_in_sequence(mutation)
if(!mutation)
return
if(istype(mutation, /datum/mutation/human))
var/datum/mutation/human/HM = mutation
if(HM.type in mutation_index)
return TRUE
else if(mutation in mutation_index)
return TRUE
/mob/living/carbon/proc/randmut(list/candidates, difficulty = 2)
if(!has_dna())
return
var/datum/mutation/human/num = pick(candidates)
. = num.force_give(src)
var/mutation = pick(candidates)
. = dna.add_mutation(mutation)
/mob/living/carbon/proc/randmutb()
/mob/living/carbon/proc/easy_randmut(quality = POSITIVE + NEGATIVE + MINOR_NEGATIVE, scrambled = TRUE, sequence = TRUE, exclude_monkey = TRUE)
if(!has_dna())
return
var/datum/mutation/human/HM = pick((GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT])
. = HM.force_give(src)
var/list/mutations = list()
if(quality & POSITIVE)
mutations += GLOB.good_mutations
if(quality & NEGATIVE)
mutations += GLOB.bad_mutations
if(quality & MINOR_NEGATIVE)
mutations += GLOB.not_good_mutations
var/list/possible = list()
for(var/datum/mutation/human/A in mutations)
if((!sequence || dna.mutation_in_sequence(A.type)) && !dna.get_mutation(A.type))
possible += A.type
if(exclude_monkey)
possible.Remove(RACEMUT)
if(LAZYLEN(possible))
var/mutation = pick(possible)
. = dna.activate_mutation(mutation)
if(scrambled)
var/datum/mutation/human/HM = dna.get_mutation(mutation)
if(HM)
HM.scrambled = TRUE
return TRUE
/mob/living/carbon/proc/randmutg()
if(!has_dna())
return
var/datum/mutation/human/HM = pick(GLOB.good_mutations)
. = HM.force_give(src)
/mob/living/carbon/proc/randmutvg()
if(!has_dna())
return
var/datum/mutation/human/HM = pick((GLOB.good_mutations) - GLOB.mutations_list[HULK] - GLOB.mutations_list[DWARFISM])
. = HM.force_give(src)
/mob/living/carbon/proc/randmuti()
if(!has_dna())
@@ -429,9 +577,9 @@
if(!M.has_dna())
return 0
if(se)
for(var/i=1, i<=DNA_STRUC_ENZYMES_BLOCKS, i++)
for(var/i=1, i<=DNA_MUTATION_BLOCKS, i++)
if(prob(probability))
M.dna.struc_enzymes = setblock(M.dna.struc_enzymes, i, random_string(DNA_BLOCK_SIZE, GLOB.hex_characters))
M.dna.generate_dna_blocks()
M.domutcheck()
if(ui)
for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++)
@@ -458,3 +606,41 @@
return value
/////////////////////////// DNA HELPER-PROCS
/mob/living/carbon/human/proc/something_horrible()
if(!has_dna()) //shouldn't ever happen anyway so it's just in really weird cases
return
if(dna.stability > 0)
return
var/instability = -dna.stability
dna.remove_all_mutations()
dna.stability = 100
if(prob(max(70-instability,0)))
switch(rand(0,3)) //not complete and utter death
if(0)
monkeyize()
if(1)
gain_trauma(/datum/brain_trauma/severe/paralysis)
if(2)
corgize()
if(3)
to_chat(src, "<span class='notice'>Oh, we actually feel quite alright!</span>")
else
switch(rand(0,3))
if(0)
gib()
if(1)
dust()
if(2)
death()
petrify(INFINITY)
if(3)
if(prob(90))
var/obj/item/bodypart/BP = get_bodypart(pick(BODY_ZONE_CHEST,BODY_ZONE_HEAD))
if(BP)
BP.dismember()
else
gib()
else
set_species(/datum/species/dullahan)
+146
View File
@@ -0,0 +1,146 @@
GLOBAL_LIST_EMPTY(mobs_with_editable_flavor_text) //et tu, hacky code
/datum/element/flavor_text
element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
id_arg_index = 3
var/flavor_name = "Flavor Text"
var/list/texts_by_atom = list()
var/addendum = "This can also be used for OOC notes and preferences!"
var/always_show = FALSE
var/max_len = MAX_FLAVOR_LEN
var/can_edit = TRUE
/datum/element/flavor_text/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE)
. = ..()
if(. == ELEMENT_INCOMPATIBLE || !isatom(target)) //no reason why this shouldn't work on atoms too.
return ELEMENT_INCOMPATIBLE
if(_max_len)
max_len = _max_len
texts_by_atom[target] = copytext(text, 1, max_len)
if(_name)
flavor_name = _name
if(!isnull(addendum))
addendum = _addendum
always_show = _always_show
can_edit = _edit
RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/show_flavor)
if(can_edit && ismob(target)) //but only mobs receive the proc/verb for the time being
var/mob/M = target
LAZYOR(GLOB.mobs_with_editable_flavor_text[M], src)
M.verbs |= /mob/proc/manage_flavor_tests
/datum/element/flavor_text/Detach(atom/A)
. = ..()
UnregisterSignal(A, COMSIG_PARENT_EXAMINE)
texts_by_atom -= A
if(can_edit && ismob(A))
var/mob/M = A
LAZYREMOVE(GLOB.mobs_with_editable_flavor_text[M], src)
if(!GLOB.mobs_with_editable_flavor_text[M])
GLOB.mobs_with_editable_flavor_text -= M
M.verbs -= /mob/proc/manage_flavor_tests
/datum/element/flavor_text/proc/show_flavor(atom/target, mob/user, list/examine_list)
if(!always_show && isliving(target))
var/mob/living/L = target
var/unknown = L.get_visible_name() == "Unknown"
if(!unknown && iscarbon(target))
var/mob/living/carbon/C = L
unknown = (C.wear_mask && (C.wear_mask.flags_inv & HIDEFACE)) || (C.head && (C.head.flags_inv & HIDEFACE))
if(unknown)
if(!("...?" in examine_list)) //can't think of anything better in case of multiple flavor texts.
examine_list += "...?"
return
var/text = texts_by_atom[target]
if(!text)
return
var/msg = replacetext(text, "\n", " ")
if(length_char(msg) <= 40)
examine_list += "<span class='notice'>[msg]</span>"
else
examine_list += "<span class='notice'>[copytext_char(msg, 1, 37)]... <a href='?src=[REF(src)];show_flavor=[REF(target)]'>More...</span></a>"
/datum/element/flavor_text/Topic(href, href_list)
. = ..()
if(.)
return
if(href_list["show_flavor"])
var/atom/target = locate(href_list["show_flavor"])
var/text = texts_by_atom[target]
if(text)
usr << browse("<HTML><HEAD><TITLE>[target.name]</TITLE></HEAD><BODY><TT>[replacetext(texts_by_atom[target], "\n", "<BR>")]</TT></BODY></HTML>", "window=[target.name];size=500x200")
onclose(usr, "[target.name]")
return TRUE
/mob/proc/manage_flavor_tests()
set name = "Manage Flavor Texts"
set desc = "Used to manage your various flavor texts."
set category = "IC"
var/list/L = GLOB.mobs_with_editable_flavor_text[src]
if(length(L) == 1)
var/datum/element/flavor_text/F = L[1]
F.set_flavor(src)
return
var/list/choices = list()
for(var/i in L)
var/datum/element/flavor_text/F = i
choices[F.flavor_name] = F
var/chosen = input(src, "Which flavor text would you like to modify?") as null|anything in choices
if(!chosen)
return
var/datum/element/flavor_text/F = choices[chosen]
F.set_flavor(src)
/datum/element/flavor_text/proc/set_flavor(mob/user)
if(!(user in texts_by_atom))
return FALSE
var/lower_name = lowertext(flavor_name)
var/new_text = stripped_multiline_input(user, "Set the [lower_name] displayed on 'examine'. [addendum]", flavor_name, texts_by_atom[usr], max_len, TRUE)
if(!isnull(new_text) && (user in texts_by_atom))
texts_by_atom[user] = html_decode(new_text)
to_chat(src, "Your [lower_name] has been updated.")
return TRUE
return FALSE
//subtypes with additional hooks for DNA and preferences.
/datum/element/flavor_text/carbon
/datum/element/flavor_text/carbon/Attach(datum/target, text = "", _name = "Flavor Text", _addendum, _max_len = MAX_FLAVOR_LEN, _always_show = FALSE, _edit = TRUE)
if(!iscarbon(target))
return ELEMENT_INCOMPATIBLE
. = ..()
if(. == ELEMENT_INCOMPATIBLE)
return
RegisterSignal(target, COMSIG_CARBON_IDENTITY_TRANSFERRED_TO, .proc/update_dna_flavor_text)
if(ishuman(target))
RegisterSignal(target, COMSIG_HUMAN_PREFS_COPIED_TO, .proc/update_prefs_flavor_text)
RegisterSignal(target, COMSIG_HUMAN_HARDSET_DNA, .proc/update_dna_flavor_text)
RegisterSignal(target, COMSIG_HUMAN_ON_RANDOMIZE, .proc/unset_flavor)
/datum/element/flavor_text/carbon/Detach(mob/living/carbon/C)
. = ..()
UnregisterSignal(C, list(COMSIG_CARBON_IDENTITY_TRANSFERRED_TO, COMSIG_HUMAN_PREFS_COPIED_TO, COMSIG_HUMAN_HARDSET_DNA, COMSIG_HUMAN_ON_RANDOMIZE))
/datum/element/flavor_text/carbon/proc/update_dna_flavor_text(mob/living/carbon/C)
texts_by_atom[C] = C.dna.features["flavor_text"]
/datum/element/flavor_text/carbon/proc/update_prefs_flavor_text(mob/living/carbon/human/H, datum/preferences/P, icon_updates = TRUE, roundstart_checks = TRUE)
texts_by_atom[H] = P.features["flavor_text"]
/datum/element/flavor_text/carbon/set_flavor(mob/living/carbon/user)
. = ..()
if(. && user.dna)
user.dna.features["flavor_text"] = texts_by_atom[user]
/datum/element/flavor_text/carbon/proc/unset_flavor(mob/living/carbon/user)
texts_by_atom[user] = ""
+1 -1
View File
@@ -138,7 +138,7 @@
destination = get_turf(loc)
AM.forceMove(destination)
/obj/item/clothing/head/mob_holder/dropped()
/obj/item/clothing/head/mob_holder/dropped(mob/user)
. = ..()
if(held_mob && isturf(loc))//don't release on soft-drops
release()
+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>")
@@ -5,23 +5,20 @@
var/id = "" //ID, used by mind/has_martialartcode\game\objects\items\granters.dm:345:error: user.mind.has_martialart: undefined proccode\game\objects\items\granters.dm:345:error: user.mind.has_martialart: undefined proccode\game\objects\items\granters.dm:345:error: user.mind.has_martialart: undefined proccode\game\objects\items\granters.dm:345:error: user.mind.has_martialart: undefined proccode\game\objects\items\granters.dm:345:error: user.mind.has_martialart: undefined proc
var/current_target
var/datum/martial_art/base // The permanent style. This will be null unless the martial art is temporary
var/deflection_chance = 0 //Chance to deflect projectiles
var/reroute_deflection = FALSE //Delete the bullet, or actually deflect it in some direction?
var/block_chance = 0 //Chance to block melee attacks using items while on throw mode.
var/dodge_chance = 0
var/restraining = 0 //used in cqc's disarm_act to check if the disarmed is being restrained and so whether they should be put in a chokehold or not
var/help_verb
var/pacifism_check = TRUE //are the martial arts combos/attacks unable to be used by pacifist.
var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts
/datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
return 0
return FALSE
/datum/martial_art/proc/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
return 0
return FALSE
/datum/martial_art/proc/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
return 0
return FALSE
/datum/martial_art/proc/can_use(mob/living/carbon/human/H)
return TRUE
@@ -38,51 +35,6 @@
current_target = new_target
streak = ""
/datum/martial_art/proc/basic_hit(mob/living/carbon/human/A,mob/living/carbon/human/D)
var/damage = rand(A.dna.species.punchdamagelow, A.dna.species.punchdamagehigh)
var/atk_verb = A.dna.species.attack_verb
if(D.lying)
atk_verb = "kick"
switch(atk_verb)
if("kick")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
if("slash")
A.do_attack_animation(D, ATTACK_EFFECT_CLAW)
if("smash")
A.do_attack_animation(D, ATTACK_EFFECT_SMASH)
else
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
if(!damage)
playsound(D.loc, A.dna.species.miss_sound, 25, 1, -1)
D.visible_message("<span class='warning'>[A] has attempted to [atk_verb] [D]!</span>", \
"<span class='userdanger'>[A] has attempted to [atk_verb] [D]!</span>", null, COMBAT_MESSAGE_RANGE)
log_combat(A, D, "attempted to [atk_verb]")
return 0
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
var/armor_block = D.run_armor_check(affecting, "melee")
playsound(D.loc, A.dna.species.attack_sound, 25, 1, -1)
D.visible_message("<span class='danger'>[A] has [atk_verb]ed [D]!</span>", \
"<span class='userdanger'>[A] has [atk_verb]ed [D]!</span>", null, COMBAT_MESSAGE_RANGE)
D.apply_damage(damage, BRUTE, affecting, armor_block)
log_combat(A, D, "punched")
if((D.stat != DEAD) && damage >= A.dna.species.punchstunthreshold)
D.visible_message("<span class='danger'>[A] has knocked [D] down!!</span>", \
"<span class='userdanger'>[A] has knocked [D] down!</span>")
D.apply_effect(40, EFFECT_KNOCKDOWN, armor_block)
D.forcesay(GLOB.hit_appends)
else if(D.lying)
D.forcesay(GLOB.hit_appends)
return 1
/datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE)
if(!istype(H) || !H.mind)
return FALSE
@@ -121,3 +73,7 @@
if(help_verb)
H.verbs -= help_verb
return
///Gets called when a projectile hits the owner. Returning anything other than BULLET_ACT_HIT will stop the projectile from hitting the mob.
/datum/martial_art/proc/on_projectile_hit(mob/living/carbon/human/A, obj/item/projectile/P, def_zone)
return BULLET_ACT_HIT
+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

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