Port over remaining Lavaland ruins

This commit is contained in:
Mark van Alphen
2019-06-07 01:19:55 +02:00
parent 10ef2311ab
commit ba3f65049d
89 changed files with 10091 additions and 275 deletions
@@ -151,10 +151,6 @@
/obj/structure/stone_tile/cracked,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"z" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
@@ -291,7 +287,7 @@ f
j
c
r
z
c
o
c
c
@@ -121,16 +121,6 @@
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"u" = (
/obj/structure/stone_tile{
dir = 8
},
/obj/structure/stone_tile{
dir = 1
},
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"v" = (
/obj/structure/stone_tile/block/cracked,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
@@ -261,7 +251,7 @@ f
f
o
r
u
q
w
f
f
@@ -57,16 +57,6 @@
/obj/structure/stone_tile/cracked,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"j" = (
/obj/structure/stone_tile/block{
dir = 8
},
/obj/structure/stone_tile/block/cracked{
dir = 4
},
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"k" = (
/obj/structure/stone_tile,
/obj/structure/stone_tile{
@@ -274,7 +264,7 @@ d
f
d
f
j
e
d
w
f
@@ -0,0 +1,980 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
"b" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/obj/effect/decal/remains/human,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/turf/unsimulated/wall,
/area/lavaland/surface/outdoors)
"e" = (
/obj/machinery/wish_granter,
/obj/effect/mapping_helpers/no_lava,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
b
a
b
b
b
b
b
b
a
a
a
a
a
a
a
b
a
"}
(2,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
b
a
b
b
c
b
b
b
b
a
a
a
a
a
a
a
a
"}
(3,1,1) = {"
a
b
a
a
a
a
b
a
a
a
a
a
a
a
b
a
b
b
b
a
a
b
b
a
a
b
b
a
a
a
"}
(4,1,1) = {"
a
a
a
a
b
b
b
a
a
a
a
a
a
a
b
b
b
a
a
b
b
b
b
b
b
b
b
a
b
b
"}
(5,1,1) = {"
a
a
b
b
b
b
b
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
b
a
a
b
"}
(6,1,1) = {"
b
a
a
a
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
b
"}
(7,1,1) = {"
b
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
c
b
b
c
b
b
b
c
b
b
b
b
a
"}
(8,1,1) = {"
a
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
"}
(9,1,1) = {"
a
a
b
a
a
a
a
a
a
a
b
b
b
b
c
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
"}
(10,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
b
b
b
b
b
c
b
b
b
b
b
b
b
b
c
b
b
b
"}
(11,1,1) = {"
a
a
a
b
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
c
b
b
b
b
b
b
"}
(12,1,1) = {"
a
a
b
a
a
a
b
b
a
a
c
b
b
b
b
b
c
b
c
b
b
b
b
b
b
b
b
b
b
b
"}
(13,1,1) = {"
a
a
b
b
b
b
b
b
b
b
b
b
c
c
b
c
c
b
b
b
b
b
b
b
b
b
b
b
c
b
"}
(14,1,1) = {"
a
a
b
c
b
b
b
b
c
b
c
d
d
d
d
d
b
b
b
b
b
b
c
b
b
b
b
b
b
b
"}
(15,1,1) = {"
a
a
b
b
b
b
c
b
b
b
b
d
d
d
d
d
b
c
b
b
c
b
a
b
b
b
b
b
b
b
"}
(16,1,1) = {"
a
a
b
b
b
b
b
b
b
c
b
d
d
e
d
d
b
b
a
a
b
b
a
a
b
b
b
b
b
b
"}
(17,1,1) = {"
a
a
b
b
b
b
b
c
b
b
c
d
d
d
d
d
c
c
a
a
a
a
a
a
a
b
b
a
b
b
"}
(18,1,1) = {"
a
a
b
a
a
a
b
b
b
b
b
d
d
d
d
d
b
c
b
a
a
a
a
a
b
b
b
c
a
a
"}
(19,1,1) = {"
a
a
b
a
a
a
b
b
b
b
b
c
b
c
c
b
c
b
b
a
a
a
a
a
b
a
b
b
a
a
"}
(20,1,1) = {"
a
a
b
b
b
b
b
b
c
b
b
b
c
b
b
b
b
b
a
a
a
a
a
a
a
a
a
a
a
a
"}
(21,1,1) = {"
a
a
b
b
b
b
b
b
b
b
b
b
b
c
b
b
b
b
b
a
a
a
a
a
a
a
a
a
a
a
"}
(22,1,1) = {"
a
a
b
b
b
b
a
b
b
b
a
b
b
b
b
b
b
b
b
b
a
a
a
a
a
a
a
a
a
a
"}
(23,1,1) = {"
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
c
b
b
a
a
a
a
a
a
a
a
a
a
a
"}
(24,1,1) = {"
a
a
a
a
a
a
c
b
b
b
b
b
b
b
c
b
b
b
b
a
a
a
a
a
a
a
a
a
a
a
"}
(25,1,1) = {"
a
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(26,1,1) = {"
b
b
b
b
b
b
b
b
b
b
c
b
b
b
b
b
a
a
a
a
a
b
a
a
a
a
a
a
a
a
"}
(27,1,1) = {"
b
b
b
a
a
a
a
a
a
a
a
b
c
b
b
a
b
b
b
b
b
b
a
a
a
a
a
a
a
a
"}
(28,1,1) = {"
b
b
b
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
b
b
c
b
b
b
b
b
b
b
"}
(29,1,1) = {"
b
a
a
a
a
a
a
a
a
a
a
b
b
b
b
b
b
b
b
b
a
a
a
a
b
a
b
b
b
b
"}
(30,1,1) = {"
b
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
@@ -0,0 +1,367 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"c" = (
/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
/area/ruin/unpowered)
"d" = (
/turf/simulated/wall/cult,
/area/ruin/unpowered)
"e" = (
/obj/effect/decal/remains/human,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered)
"f" = (
/obj/structure/cult/pylon,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered)
"g" = (
/obj/effect/decal/cleanable/blood/old,
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"h" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/wall/cult,
/area/ruin/unpowered)
"i" = (
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/blood/old,
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"k" = (
/obj/effect/decal/remains/human,
/obj/item/melee/cultblade,
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"l" = (
/obj/effect/decal/remains/human,
/obj/item/clothing/shoes/cult,
/obj/item/clothing/suit/hooded/cultrobes,
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"m" = (
/obj/effect/decal/remains/human,
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"o" = (
/obj/effect/rune/narsie{
color = "#ff0000";
used = 1
},
/obj/item/cult_shift,
/obj/effect/decal/remains/human,
/obj/item/melee/cultblade/dagger,
/obj/effect/step_trigger/sound_effect{
happens_once = 1;
name = "a grave mistake";
sound = 'sound/hallucinations/i_see_you1.ogg';
triggerer_only = 1
},
/obj/effect/step_trigger/message{
message = "<span class='cult italic'><b><span class='big'>You've made a grave mistake, haven't you?</span></b></span>";
name = "ohfuck"
},
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"q" = (
/obj/effect/decal/remains/human,
/obj/item/clothing/shoes/cult,
/obj/item/clothing/suit/hooded/cultrobes,
/obj/effect/decal/cleanable/blood/old,
/turf/simulated/floor/engine/cult{
oxygen = 24;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"s" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/ruin/unpowered)
(1,1,1) = {"
a
a
a
a
a
a
b
c
b
a
a
a
a
a
a
"}
(2,1,1) = {"
a
d
e
c
s
c
b
b
b
c
s
c
s
d
a
"}
(3,1,1) = {"
a
e
f
s
d
c
c
g
c
c
d
e
f
s
a
"}
(4,1,1) = {"
a
c
s
c
c
c
c
b
c
c
c
c
e
c
a
"}
(5,1,1) = {"
a
s
d
c
c
b
b
b
b
b
c
c
d
s
a
"}
(6,1,1) = {"
a
c
c
c
b
b
l
d
k
b
b
c
c
c
a
"}
(7,1,1) = {"
b
b
c
c
g
i
b
b
b
l
b
c
c
b
b
"}
(8,1,1) = {"
c
b
g
b
b
d
b
o
b
d
b
b
g
b
c
"}
(9,1,1) = {"
b
b
c
c
b
k
b
b
b
m
b
c
c
b
b
"}
(10,1,1) = {"
a
c
c
c
g
b
m
h
q
b
b
c
c
c
a
"}
(11,1,1) = {"
a
s
d
c
c
b
b
b
b
b
c
c
d
s
a
"}
(12,1,1) = {"
a
c
s
c
c
c
c
b
c
c
c
c
e
c
a
"}
(13,1,1) = {"
a
e
f
s
d
c
c
g
c
c
d
e
f
s
a
"}
(14,1,1) = {"
a
d
e
c
s
c
b
b
b
c
s
c
s
d
a
"}
(15,1,1) = {"
a
a
a
a
a
a
b
c
b
a
a
a
a
a
a
"}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,328 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"b" = (
/turf/simulated/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/turf/simulated/wall/rust,
/area/ruin/unpowered)
"e" = (
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
pixel_x = -28;
broken = 1
},
/obj/item/clothing/suit/bloated_human,
/obj/effect/decal/cleanable/blood,
/obj/item/clothing/head/human_head,
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"f" = (
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
pixel_x = 28;
broken = 1
},
/turf/simulated/floor/plating/burnt,
/area/ruin/unpowered)
"g" = (
/obj/effect/decal/cleanable/blood/tracks,
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
pixel_x = -28;
broken = 1
},
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"h" = (
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"i" = (
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"j" = (
/obj/effect/decal/cleanable/blood/splatter,
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"k" = (
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
pixel_y = 28;
broken = 1
},
/obj/item/kitchen/knife/envy,
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"l" = (
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
pixel_x = 28;
broken = 1
},
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"m" = (
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
pixel_x = -28;
broken = 1
},
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"n" = (
/turf/simulated/floor/plating/damaged,
/area/ruin/unpowered)
"o" = (
/obj/structure/mirror{
desc = "This mirror has been shattered. It looks like the bad luck energies spilling from it are taking immediate effect on your surroundings!";
icon_state = "mirror_broke";
pixel_x = -28;
broken = 1
},
/turf/simulated/floor/plating/damaged,
/area/ruin/unpowered)
"p" = (
/obj/machinery/door/airlock/hatch,
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"q" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/plating,
/area/ruin/unpowered)
"A" = (
/obj/effect/mapping_helpers/no_lava,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
a
"}
(3,1,1) = {"
b
c
c
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
c
a
"}
(4,1,1) = {"
c
c
d
d
d
e
g
g
g
m
m
m
m
m
o
m
j
d
c
a
"}
(5,1,1) = {"
c
d
d
d
d
d
h
h
i
i
i
i
i
h
i
i
i
d
A
a
"}
(6,1,1) = {"
c
d
d
d
d
d
d
k
i
i
i
q
i
i
i
i
i
p
A
a
"}
(7,1,1) = {"
c
d
d
d
d
d
i
i
i
j
i
n
i
i
i
i
i
d
c
a
"}
(8,1,1) = {"
c
c
d
d
d
f
j
l
l
l
l
l
l
l
l
l
j
d
c
a
"}
(9,1,1) = {"
b
c
c
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
c
a
"}
(10,1,1) = {"
b
b
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
a
"}
@@ -0,0 +1,161 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/simulated/wall/cult,
/area/ruin/unpowered)
"c" = (
/obj/structure/healingfountain,
/turf/simulated/floor/engine/cult,
/area/ruin/unpowered)
"d" = (
/obj/structure/fluff/divine/conduit,
/turf/simulated/floor/engine/cult,
/area/ruin/unpowered)
"e" = (
/obj/structure/sacrificealtar,
/turf/simulated/floor/engine/cult,
/area/ruin/unpowered)
"f" = (
/turf/simulated/floor/engine/cult,
/area/ruin/unpowered)
"g" = (
/mob/living/simple_animal/butterfly,
/turf/simulated/floor/engine/cult,
/area/ruin/unpowered)
"h" = (
/obj/structure/fans/tiny/invisible,
/turf/simulated/floor/engine/cult,
/area/ruin/unpowered)
"i" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/engine/cult,
/area/ruin/unpowered)
(1,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
"}
(2,1,1) = {"
a
b
d
f
f
d
f
f
d
f
f
d
f
f
d
b
"}
(3,1,1) = {"
b
b
e
g
f
f
g
f
f
f
f
g
f
g
f
b
"}
(4,1,1) = {"
b
c
f
f
f
f
f
f
i
f
f
f
f
f
f
h
"}
(5,1,1) = {"
b
b
e
f
f
f
f
g
f
f
f
f
f
f
f
b
"}
(6,1,1) = {"
a
b
d
g
f
d
f
f
d
f
f
d
f
g
d
b
"}
(7,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
b
"}
@@ -0,0 +1,539 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
"b" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"e" = (
/turf/simulated/floor/plating/lava/smooth,
/area/ruin/powered/gluttony)
"f" = (
/obj/item/reagent_containers/syringe/gluttony,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"g" = (
/obj/effect/gluttony,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"h" = (
/obj/item/veilrender/vealrender,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"i" = (
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"j" = (
/obj/item/trash/plate,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"l" = (
/obj/item/trash/candy,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"m" = (
/obj/item/trash/raisins,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"n" = (
/obj/item/trash/pistachios,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"o" = (
/obj/item/trash/popcorn,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"p" = (
/obj/item/trash/semki,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"q" = (
/obj/item/trash/syndi_cakes,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"r" = (
/obj/effect/gluttony,
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"t" = (
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"v" = (
/obj/machinery/light/small,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"z" = (
/obj/item/trash/plate,
/obj/machinery/light/small{
dir = 8
},
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"A" = (
/obj/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
"R" = (
/turf/simulated/wall/indestructible/uranium,
/area/ruin/powered/gluttony)
"S" = (
/obj/machinery/door/airlock/uranium,
/obj/structure/fans/tiny/invisible,
/turf/simulated/floor/plasteel/freezer,
/area/ruin/powered/gluttony)
(1,1,1) = {"
a
a
a
b
b
a
a
b
a
b
b
b
b
b
b
b
a
a
a
a
"}
(2,1,1) = {"
a
a
a
b
b
b
b
b
b
b
b
b
b
b
b
b
a
a
a
a
"}
(3,1,1) = {"
b
a
a
a
b
b
b
c
c
c
b
c
c
c
b
b
a
a
a
a
"}
(4,1,1) = {"
b
a
a
a
b
b
b
c
R
R
S
R
R
c
b
a
a
a
a
a
"}
(5,1,1) = {"
b
b
a
a
a
b
b
c
R
h
i
o
R
c
b
a
a
a
a
a
"}
(6,1,1) = {"
a
a
a
a
a
b
b
c
R
i
i
v
R
c
b
b
b
b
b
a
"}
(7,1,1) = {"
a
b
b
b
b
b
b
c
R
i
l
i
R
c
b
b
b
b
b
a
"}
(8,1,1) = {"
a
b
c
c
c
c
c
c
R
t
i
m
R
c
c
c
c
c
c
b
"}
(9,1,1) = {"
b
b
c
R
R
R
R
R
R
g
m
v
R
R
R
R
R
R
c
b
"}
(10,1,1) = {"
a
b
c
R
e
R
r
g
g
g
g
i
p
i
z
l
i
R
c
b
"}
(11,1,1) = {"
a
b
c
R
f
g
g
g
g
g
n
d
i
i
i
i
i
S
b
b
"}
(12,1,1) = {"
a
b
c
R
e
R
r
g
g
g
i
g
i
l
A
i
q
R
c
b
"}
(13,1,1) = {"
a
b
c
R
R
R
R
R
R
g
i
v
R
R
R
R
R
R
c
b
"}
(14,1,1) = {"
a
b
c
c
c
c
c
c
R
r
i
i
R
c
c
c
c
c
c
b
"}
(15,1,1) = {"
a
b
b
b
b
b
b
c
R
i
g
i
R
c
b
b
b
b
b
b
"}
(16,1,1) = {"
b
b
b
a
b
b
b
c
R
j
i
v
R
c
b
b
b
a
a
a
"}
(17,1,1) = {"
b
b
b
a
b
b
b
c
R
i
n
i
R
c
b
b
b
a
a
a
"}
(18,1,1) = {"
a
a
a
a
b
b
b
c
R
R
S
R
R
c
b
b
b
a
a
a
"}
(19,1,1) = {"
a
a
a
a
a
a
a
c
c
c
b
c
c
c
b
b
a
a
a
a
"}
(20,1,1) = {"
a
a
a
a
a
a
a
b
b
b
b
b
b
b
a
a
b
a
a
a
"}
@@ -0,0 +1,577 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"b" = (
/turf/simulated/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"e" = (
/obj/structure/table/wood/poker,
/obj/item/gun/projectile/revolver/russian/soul,
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/carpet{
icon_state = "carpetsymbol"
},
/area/ruin/powered/greed)
"f" = (
/obj/structure/cursed_slot_machine,
/turf/simulated/floor/carpet{
icon_state = "carpetsymbol"
},
/area/ruin/powered/greed)
"g" = (
/obj/structure/table/wood/poker,
/obj/item/coin/mythril,
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/carpet{
icon_state = "carpetsymbol"
},
/area/ruin/powered/greed)
"h" = (
/obj/structure/table/wood/poker,
/obj/item/coin/diamond,
/turf/simulated/floor/carpet{
icon_state = "carpetsymbol"
},
/area/ruin/powered/greed)
"i" = (
/turf/simulated/floor/carpet{
icon_state = "carpetsymbol"
},
/area/ruin/powered/greed)
"j" = (
/obj/structure/table/wood/poker,
/obj/item/coin/adamantine,
/turf/simulated/floor/carpet{
icon_state = "carpetsymbol"
},
/area/ruin/powered/greed)
"k" = (
/obj/machinery/computer/arcade/battle{
emagged = 1
},
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"l" = (
/obj/item/coin/gold,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"m" = (
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"n" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c1000,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"o" = (
/obj/item/storage/bag/money,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"p" = (
/obj/structure/table/wood/poker,
/obj/item/stack/ore/gold,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"q" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c20,
/obj/item/stack/spacecash/c50,
/obj/machinery/light/small{
brightness_range = 3;
dir = 8
},
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"r" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c500,
/obj/item/stack/spacecash/c100,
/obj/item/stack/spacecash/c1000,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"s" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c200,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"u" = (
/obj/structure/table/wood/poker,
/obj/item/stack/spacecash/c500,
/obj/item/stack/spacecash/c100,
/obj/item/stack/spacecash/c1000,
/obj/machinery/light/small{
dir = 4
},
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"v" = (
/obj/item/coin/gold,
/obj/machinery/light/small,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"w" = (
/obj/item/storage/bag/money,
/obj/machinery/light/small,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"J" = (
/obj/machinery/door/airlock/gold,
/obj/structure/fans/tiny/invisible,
/turf/simulated/floor/engine/cult,
/area/ruin/powered/greed)
"W" = (
/turf/simulated/wall/cult,
/area/ruin/powered/greed)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
b
b
a
a
a
a
a
a
a
a
b
"}
(2,1,1) = {"
a
b
b
a
a
a
a
a
a
b
b
b
a
a
a
a
a
b
b
b
"}
(3,1,1) = {"
a
b
b
b
b
b
a
a
a
b
a
a
a
a
a
a
b
b
b
b
"}
(4,1,1) = {"
a
a
b
b
b
a
a
a
a
a
a
a
a
a
a
a
b
b
b
b
"}
(5,1,1) = {"
a
a
a
b
b
a
a
c
c
c
c
c
c
c
a
a
a
a
b
a
"}
(6,1,1) = {"
b
a
a
a
a
a
c
c
W
W
W
W
W
c
a
a
a
a
b
a
"}
(7,1,1) = {"
b
a
a
a
c
c
c
W
W
n
q
s
W
c
c
c
c
a
a
a
"}
(8,1,1) = {"
a
a
a
a
c
W
W
W
k
o
l
m
W
W
W
W
c
a
a
a
"}
(9,1,1) = {"
a
a
b
a
c
W
e
h
l
m
m
m
l
m
v
W
W
a
a
a
"}
(10,1,1) = {"
b
b
b
a
c
W
f
i
m
l
d
o
m
m
m
m
J
a
a
a
"}
(11,1,1) = {"
a
a
b
a
c
W
g
j
l
m
m
l
m
l
w
W
W
a
a
a
"}
(12,1,1) = {"
a
a
a
a
c
W
W
W
k
o
m
l
W
W
W
W
c
a
a
a
"}
(13,1,1) = {"
a
a
a
a
c
c
c
W
W
p
u
r
W
c
c
c
c
a
a
a
"}
(14,1,1) = {"
b
b
a
a
a
a
c
c
W
W
W
W
W
c
a
a
a
a
a
a
"}
(15,1,1) = {"
b
b
a
a
a
a
a
c
c
c
c
c
c
c
a
a
a
a
a
a
"}
(16,1,1) = {"
b
b
b
b
a
a
a
a
a
a
a
a
a
a
a
a
a
a
b
b
"}
(17,1,1) = {"
a
a
b
b
a
a
a
a
a
a
a
a
a
a
a
a
a
a
b
b
"}
(18,1,1) = {"
a
a
a
b
b
b
b
b
b
b
b
b
b
a
a
b
b
b
b
b
"}
(19,1,1) = {"
a
a
a
b
b
b
b
a
a
a
b
b
b
b
a
b
b
b
b
b
"}
(20,1,1) = {"
a
a
a
a
b
b
a
a
a
a
a
a
b
b
b
b
b
b
b
b
"}
@@ -0,0 +1,731 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/obj/structure/lattice,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/turf/simulated/wall,
/area/ruin/unpowered)
"e" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"f" = (
/obj/structure/table/wood,
/obj/item/storage/box/cups,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"g" = (
/obj/structure/reagent_dispensers/water_cooler{
name = "punch cooler";
reagent_id = /datum/reagent/consumable/ethanol/bacchus_blessing
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"h" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"i" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"j" = (
/obj/item/reagent_containers/food/snacks/mushroompizzaslice,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"k" = (
/obj/structure/table/wood,
/obj/effect/spawner/lootdrop/pizzaparty,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"l" = (
/obj/machinery/light{
dir = 4
},
/obj/structure/table/wood,
/obj/effect/spawner/lootdrop/pizzaparty,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/cobweb2,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"m" = (
/obj/item/chair/wood/wings,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"n" = (
/obj/structure/glowshroom/single,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"o" = (
/obj/item/trash/plate,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"p" = (
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"q" = (
/obj/item/chair/wood/wings,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"r" = (
/obj/structure/chair/wood/wings,
/obj/effect/decal/remains/human,
/obj/item/clothing/head/festive{
desc = "A festive party hat with the name 'timmy' scribbled on the front.";
name = "party hat"
},
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"s" = (
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"t" = (
/obj/structure/chair/wood/wings,
/obj/effect/decal/remains/human,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"u" = (
/obj/structure/glowshroom/single,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"v" = (
/obj/structure/lattice,
/obj/item/chair/wood/wings,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"w" = (
/obj/item/kitchen/utensil/fork,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"x" = (
/obj/structure/table/wood,
/obj/effect/spawner/lootdrop/pizzaparty,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"y" = (
/obj/structure/table/wood,
/obj/item/trash/plate,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"z" = (
/obj/structure/table/wood,
/obj/structure/glowshroom/single,
/obj/item/a_gift,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"A" = (
/obj/structure/table/wood,
/obj/item/trash/plate,
/obj/item/kitchen/utensil/fork,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"B" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"C" = (
/obj/structure/chair/wood/wings{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"D" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/margheritaslice,
/obj/item/trash/plate,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"E" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/meatpizzaslice,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"F" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"G" = (
/obj/structure/table/wood,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"H" = (
/obj/item/chair/wood/wings,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"I" = (
/obj/item/kitchen/utensil/fork,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"J" = (
/obj/structure/glowshroom/single,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"K" = (
/obj/structure/chair/wood/wings{
dir = 1
},
/obj/effect/decal/remains/human,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"L" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"M" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/a_gift,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"N" = (
/obj/structure/lattice,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"O" = (
/obj/item/kitchen/knife,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"P" = (
/obj/machinery/light{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
"Q" = (
/turf/simulated/floor/plating{
oxygen = 14;
nitrogen = 23;
temperature = 300
},
/area/ruin/unpowered)
(1,1,1) = {"
a
a
b
b
a
a
b
b
b
b
b
b
b
b
a
a
a
a
"}
(2,1,1) = {"
b
b
b
b
b
b
b
b
b
b
c
c
b
b
b
b
a
a
"}
(3,1,1) = {"
b
b
b
b
b
b
b
b
c
c
e
e
c
c
b
b
b
a
"}
(4,1,1) = {"
b
b
b
b
d
b
c
c
e
h
h
e
Q
e
d
b
b
a
"}
(5,1,1) = {"
a
b
b
b
d
b
m
e
w
h
w
h
h
e
d
b
b
b
"}
(6,1,1) = {"
a
b
b
b
d
f
n
h
h
c
e
M
e
c
b
b
b
b
"}
(7,1,1) = {"
b
b
b
b
d
g
o
h
h
C
J
h
d
b
b
b
b
b
"}
(8,1,1) = {"
b
b
b
b
e
h
p
q
x
D
K
M
d
b
b
b
b
b
"}
(9,1,1) = {"
b
b
b
c
e
i
h
r
y
E
h
h
c
b
b
b
b
b
"}
(10,1,1) = {"
b
b
b
c
e
j
h
s
z
F
q
N
c
b
b
b
b
b
"}
(11,1,1) = {"
b
b
b
b
e
e
h
t
A
G
q
h
c
b
b
b
b
b
"}
(12,1,1) = {"
b
b
b
b
d
k
h
s
B
H
h
O
d
b
b
b
b
b
"}
(13,1,1) = {"
b
b
b
b
d
k
h
u
s
s
o
n
d
b
b
b
b
a
"}
(14,1,1) = {"
b
b
b
b
d
l
i
h
e
I
L
P
d
b
b
b
b
a
"}
(15,1,1) = {"
b
b
b
b
d
d
e
e
N
e
e
d
d
b
b
b
b
a
"}
(16,1,1) = {"
a
b
b
b
b
b
c
v
b
c
b
b
b
b
b
b
b
a
"}
(17,1,1) = {"
a
b
b
b
b
b
b
b
b
b
b
b
b
b
b
a
a
a
"}
(18,1,1) = {"
a
a
a
a
b
b
b
b
b
b
b
b
a
a
a
a
a
a
"}
@@ -0,0 +1,304 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"b" = (
/turf/simulated/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"e" = (
/obj/structure/mirror{
pixel_x = -32
},
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"f" = (
/obj/structure/mirror{
pixel_x = 32
},
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"g" = (
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"j" = (
/obj/structure/mirror{
pixel_x = -32
},
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"k" = (
/obj/structure/mirror{
pixel_x = 32
},
/obj/machinery/light/small{
dir = 1
},
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"l" = (
/obj/structure/mirror{
pixel_x = -32
},
/obj/machinery/light/small{
brightness_range = 3;
dir = 8
},
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"m" = (
/obj/structure/mirror{
pixel_x = 32
},
/obj/machinery/light/small{
dir = 4
},
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"r" = (
/obj/machinery/light/small,
/turf/simulated/floor/mineral/silver,
/area/ruin/powered/pride)
"G" = (
/turf/simulated/wall/mineral/diamond,
/area/ruin/powered/pride)
"O" = (
/obj/structure/mirror/magic/pride,
/turf/simulated/wall/mineral/diamond,
/area/ruin/powered/pride)
"Y" = (
/obj/machinery/door/airlock/diamond,
/turf/simulated/floor/mineral/silver{
blocks_air = 1
},
/area/ruin/powered/pride)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
a
"}
(3,1,1) = {"
b
c
c
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
c
a
"}
(4,1,1) = {"
c
c
G
G
G
j
e
e
l
e
e
l
e
e
l
e
e
G
c
a
"}
(5,1,1) = {"
c
G
G
G
G
G
g
g
g
g
g
g
g
g
g
g
r
G
a
a
"}
(6,1,1) = {"
c
G
G
G
G
G
O
g
g
g
d
g
g
g
g
g
g
Y
a
a
"}
(7,1,1) = {"
c
G
G
G
G
G
g
g
g
g
g
g
g
g
g
g
r
G
c
a
"}
(8,1,1) = {"
c
c
G
G
G
k
f
f
m
f
f
m
f
f
m
f
f
G
c
a
"}
(9,1,1) = {"
b
c
c
G
G
G
G
G
G
G
G
G
G
G
G
G
G
G
c
a
"}
(10,1,1) = {"
b
b
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
a
"}
@@ -0,0 +1,47 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/lavaland/surface/outdoors)
"b" = (
/obj/effect/sliding_puzzle/lavaland,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
a
a
a
a
"}
(2,1,1) = {"
a
c
c
c
a
"}
(3,1,1) = {"
a
c
b
c
a
"}
(4,1,1) = {"
a
c
c
c
a
"}
(5,1,1) = {"
a
a
a
a
a
"}
@@ -0,0 +1,58 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/lavaland/surface/outdoors)
"b" = (
/turf/simulated/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/obj/mecha/working/ripley/mining{
ruin_mecha = 1
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"e" = (
/obj/item/clothing/shoes/workboots/mining,
/obj/item/clothing/under/rank/miner/lavaland,
/obj/effect/decal/remains/human,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
b
b
b
a
"}
(2,1,1) = {"
b
c
b
c
b
"}
(3,1,1) = {"
b
c
d
e
b
"}
(4,1,1) = {"
b
c
c
b
b
"}
(5,1,1) = {"
b
b
b
b
a
"}
@@ -0,0 +1,651 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/unsimulated/wall,
/area/ruin/unpowered)
"b" = (
/turf/simulated/floor/plating/lava/smooth/lava_land_surface,
/area/ruin/unpowered)
"c" = (
/obj/item/paper/fluff/stations/lavaland/sloth/note,
/turf/simulated/floor/sepia{
blocks_air = 0;
slowdown = 10
},
/area/ruin/unpowered)
"d" = (
/turf/simulated/floor/sepia{
blocks_air = 0;
slowdown = 10
},
/area/ruin/unpowered)
"e" = (
/obj/machinery/door/airlock/wood,
/turf/simulated/floor/sepia{
blocks_air = 0;
slowdown = 10
},
/area/ruin/unpowered)
"f" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/grown/citrus/orange,
/turf/simulated/floor/sepia{
blocks_air = 0;
slowdown = 10
},
/area/ruin/unpowered)
"g" = (
/obj/structure/bed,
/obj/item/bedsheet/brown,
/turf/simulated/floor/sepia{
blocks_air = 0;
slowdown = 10
},
/area/ruin/unpowered)
"h" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/sepia{
blocks_air = 0;
slowdown = 10
},
/area/ruin/unpowered)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
b
b
b
b
b
b
b
b
a
"}
(3,1,1) = {"
a
b
a
a
a
a
a
a
b
a
"}
(4,1,1) = {"
a
b
a
c
d
d
f
a
b
a
"}
(5,1,1) = {"
a
b
a
d
d
d
g
a
b
a
"}
(6,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(7,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(8,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(9,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(10,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(11,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(12,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(13,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(14,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(15,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(16,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(17,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(18,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(19,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(20,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(21,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(22,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(23,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(24,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(25,1,1) = {"
a
b
a
d
h
d
d
a
b
a
"}
(26,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(27,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(28,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(29,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(30,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(31,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(32,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(33,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(34,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(35,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(36,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(37,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(38,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(39,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(40,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(41,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(42,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(43,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(44,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(45,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(46,1,1) = {"
a
b
a
d
a
a
a
a
b
a
"}
(47,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(48,1,1) = {"
a
b
a
a
a
a
d
a
b
a
"}
(49,1,1) = {"
a
b
a
d
d
d
d
a
b
a
"}
(50,1,1) = {"
a
a
a
a
e
e
a
a
a
a
"}
@@ -0,0 +1,261 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/obj/structure/sign/mining/survival{
pixel_y = -32
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"d" = (
/turf/simulated/wall/mineral/titanium/survival/pod,
/area/ruin/powered)
"e" = (
/obj/structure/sign/mining/survival{
dir = 4;
pixel_x = 32
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"f" = (
/obj/structure/fans,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"g" = (
/obj/machinery/smartfridge/survival_pod/empty,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"h" = (
/obj/item/gps/computer,
/obj/structure/tubes,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"i" = (
/obj/structure/sign/mining/survival{
dir = 8;
pixel_x = -32
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"j" = (
/obj/effect/decal/cleanable/blood/drip,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"k" = (
/obj/machinery/sleeper/survival_pod,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"l" = (
/obj/item/pickaxe,
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"m" = (
/obj/structure/bed/pod,
/obj/item/bedsheet/black,
/obj/structure/tubes,
/obj/machinery/light/small{
dir = 4
},
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"n" = (
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"o" = (
/obj/effect/decal/cleanable/blood,
/mob/living/simple_animal/hostile/asteroid/goliath/beast{
health = 0
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"p" = (
/obj/structure/table/survival_pod,
/obj/item/kitchen/knife/combat/survival,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"q" = (
/obj/effect/mob_spawn/human/miner/explorer{
brute_damage = 150;
oxy_damage = 50
},
/obj/effect/decal/cleanable/blood,
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood/tracks,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"r" = (
/obj/structure/tubes,
/obj/item/crowbar,
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/baseturf_helper/lava_land/surface,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"s" = (
/obj/effect/decal/cleanable/blood/tracks,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"t" = (
/obj/machinery/door/airlock/survival_pod/glass,
/obj/effect/decal/cleanable/blood/tracks,
/turf/simulated/floor/pod/dark,
/area/ruin/powered)
"v" = (
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"w" = (
/obj/structure/sign/mining/survival{
pixel_y = 32
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"x" = (
/obj/structure/sign/mining{
pixel_y = 32
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"y" = (
/obj/effect/decal/cleanable/blood/tracks{
dir = 4
},
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
(1,1,1) = {"
a
a
a
b
b
b
b
b
a
a
a
"}
(2,1,1) = {"
a
a
b
b
e
b
e
b
b
a
a
"}
(3,1,1) = {"
a
a
b
d
d
d
d
d
b
a
a
"}
(4,1,1) = {"
a
b
c
d
f
k
p
d
w
b
b
"}
(5,1,1) = {"
a
b
b
d
g
l
q
t
v
b
b
"}
(6,1,1) = {"
b
b
c
d
h
m
r
d
x
b
b
"}
(7,1,1) = {"
a
b
b
d
d
d
d
d
y
j
j
"}
(8,1,1) = {"
a
a
b
b
i
b
i
j
j
b
b
"}
(9,1,1) = {"
a
a
b
b
j
n
s
b
a
a
a
"}
(10,1,1) = {"
a
a
a
a
a
o
j
b
a
a
a
"}
@@ -0,0 +1,431 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/mineral/volcanic/lava_land_surface,
/area/lavaland/surface/outdoors)
"b" = (
/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface,
/area/lavaland/surface/outdoors)
"c" = (
/obj/machinery/abductor/experiment,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"d" = (
/turf/simulated/wall/mineral/abductor,
/area/ruin/unpowered)
"e" = (
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"g" = (
/obj/machinery/abductor/pad,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"h" = (
/obj/item/hemostat/alien,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"i" = (
/obj/effect/mob_spawn/human/abductor,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"j" = (
/obj/structure/closet/abductor,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"k" = (
/obj/effect/baseturf_helper/lava_land/surface,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"l" = (
/obj/machinery/optable/abductor,
/obj/item/cautery/alien,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"m" = (
/obj/structure/table/abductor,
/obj/item/storage/box/alienhandcuffs,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"n" = (
/obj/item/scalpel/alien,
/obj/item/surgical_drapes,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"o" = (
/obj/item/retractor/alien,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"p" = (
/obj/machinery/abductor/gland_dispenser,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"q" = (
/obj/structure/table/abductor,
/obj/item/surgicaldrill/alien,
/obj/item/circular_saw/alien,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
"r" = (
/obj/structure/bed/abductor,
/turf/unsimulated/floor/abductor,
/area/ruin/unpowered)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
a
a
a
a
a
"}
(3,1,1) = {"
a
a
a
d
a
a
a
a
a
a
"}
(4,1,1) = {"
a
a
d
d
a
a
a
a
a
a
"}
(5,1,1) = {"
a
a
d
c
e
k
a
p
d
a
"}
(6,1,1) = {"
a
a
d
e
h
l
n
q
d
a
"}
(7,1,1) = {"
a
a
d
g
i
e
o
r
d
a
"}
(8,1,1) = {"
a
a
d
d
j
m
j
d
d
a
"}
(9,1,1) = {"
a
a
b
d
d
d
d
d
b
a
"}
(10,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(11,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(12,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(13,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(14,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(15,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(16,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(17,1,1) = {"
a
b
b
b
b
b
b
b
a
a
"}
(18,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(19,1,1) = {"
a
a
b
b
b
b
b
b
b
a
"}
(20,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(21,1,1) = {"
a
b
b
b
b
b
b
b
a
a
"}
(22,1,1) = {"
a
b
b
b
b
b
b
b
a
a
"}
(23,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(24,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(25,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(26,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(27,1,1) = {"
a
a
b
b
b
b
b
b
a
a
"}
(28,1,1) = {"
a
b
b
b
b
b
b
b
a
a
"}
(29,1,1) = {"
a
b
b
b
b
b
b
b
a
a
"}
(30,1,1) = {"
a
b
b
b
b
b
b
b
b
a
"}
File diff suppressed because it is too large Load Diff
@@ -1270,7 +1270,9 @@
/turf/simulated/floor/plating,
/area/awaymission/spacebattle/cruiser)
"dJ" = (
/obj/mecha/working/ripley/firefighter,
/obj/mecha/working/ripley/firefighter{
ruin_mecha = 1
},
/turf/simulated/floor/plating,
/area/awaymission/spacebattle/cruiser)
"dK" = (
+16 -1
View File
@@ -24,12 +24,27 @@
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk1.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk2.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_blooddrunk3.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_cube.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_cultaltar.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_dead_ratvar.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_envy.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_fountain_hell.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_gluttony.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_greed.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_hermit.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_hierophant.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_pizza_party.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_pride.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_puzzle.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_random_ripley.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_seed_vault.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_sloth.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_survivalpod.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_swarmer_crash.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_syndicate_base1.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_ufo_crash.dmm"
#include "map_files\RandomRuins\LavaRuins\lavaland_surface_xeno_nest.dmm"
// Space Ruins
#include "map_files\RandomRuins\SpaceRuins\abandonedzoo.dmm"
+5 -1
View File
@@ -404,4 +404,8 @@
#define SENSOR_COORDS 3
// Cult summon possibilities
#define SUMMON_POSSIBILITIES 3
#define SUMMON_POSSIBILITIES 3
#define DICE_NOT_RIGGED 1
#define DICE_BASICALLY_RIGGED 2
#define DICE_TOTALLY_RIGGED 3
+112 -1
View File
@@ -12,6 +12,14 @@
Comes with a rustic wooden bar and suicidal bartender."
suffix = "lavaland_biodome_beach.dmm"
/datum/map_template/ruin/lavaland/cube
name = "The Wishgranter Cube"
id = "wishgranter-cube"
description = "Nothing good can come from this. Learn from their mistakes and turn around."
suffix = "lavaland_surface_cube.dmm"
cost = 10
allow_duplicates = FALSE
/datum/map_template/ruin/lavaland/seed_vault
name = "Seed Vault"
id = "seed-vault"
@@ -46,6 +54,49 @@ datum/map_template/ruin/lavaland/ash_walker
suffix = "lavaland_surface_animal_hospital.dmm"
allow_duplicates = FALSE
/datum/map_template/ruin/lavaland/sin
cost = 10
allow_duplicates = FALSE
/datum/map_template/ruin/lavaland/sin/envy
name = "Ruin of Envy"
id = "envy"
description = "When you get what they have, then you'll finally be happy."
suffix = "lavaland_surface_envy.dmm"
/datum/map_template/ruin/lavaland/sin/gluttony
name = "Ruin of Gluttony"
id = "gluttony"
description = "If you eat enough, then eating will be all that you do."
suffix = "lavaland_surface_gluttony.dmm"
/datum/map_template/ruin/lavaland/sin/greed
name = "Ruin of Greed"
id = "greed"
description = "Sure you don't need magical powers, but you WANT them, and that's what's important."
suffix = "lavaland_surface_greed.dmm"
/datum/map_template/ruin/lavaland/sin/pride
name = "Ruin of Pride"
id = "pride"
description = "Wormhole lifebelts are for LOSERS, who you are better than."
suffix = "lavaland_surface_pride.dmm"
/datum/map_template/ruin/lavaland/sin/sloth
name = "Ruin of Sloth"
id = "sloth"
description = "..."
suffix = "lavaland_surface_sloth.dmm"
cost = 0
/datum/map_template/ruin/lavaland/ratvar
name = "Dead God"
id = "ratvar"
description = "Ratvars final resting place."
suffix = "lavaland_surface_dead_ratvar.dmm"
cost = 0
allow_duplicates = FALSE
/datum/map_template/ruin/lavaland/hierophant
name = "Hierophant's Arena"
id = "hierophant"
@@ -70,6 +121,51 @@ datum/map_template/ruin/lavaland/ash_walker
name = "Blood-Drunk Miner (Hunter)"
suffix = "lavaland_surface_blooddrunk3.dmm"
/datum/map_template/ruin/lavaland/ufo_crash
name = "UFO Crash"
id = "ufo-crash"
description = "Turns out that keeping your abductees unconscious is really important. Who knew?"
suffix = "lavaland_surface_ufo_crash.dmm"
cost = 5
/datum/map_template/ruin/lavaland/xeno_nest
name = "Xenomorph Nest"
id = "xeno-nest"
description = "These xenomorphs got bored of horrifically slaughtering people on space stations, and have settled down on a nice lava filled hellscape to focus on what's really important in life. \
Quality memes."
suffix = "lavaland_surface_xeno_nest.dmm"
cost = 20
/datum/map_template/ruin/lavaland/fountain
name = "Fountain Hall"
id = "fountain"
description = "The fountain has a warning on the side. DANGER: May have undeclared side effects that only become obvious when implemented."
suffix = "lavaland_surface_fountain_hall.dmm"
cost = 5
/datum/map_template/ruin/lavaland/survivalcapsule
name = "Survival Capsule Ruins"
id = "survivalcapsule"
description = "What was once sanctuary to the common miner, is now their tomb."
suffix = "lavaland_surface_survivalpod.dmm"
cost = 5
/datum/map_template/ruin/lavaland/pizza
name = "Ruined Pizza Party"
id = "pizza"
description = "Little Timmy's birthday pizza-bash took a turn for the worse when a bluespace anomaly passed by."
suffix = "lavaland_surface_pizzaparty.dmm"
allow_duplicates = FALSE
cost = 5
/datum/map_template/ruin/lavaland/cultaltar
name = "Summoning Ritual"
id = "cultaltar"
description = "A place of vile worship, the scrawling of blood in the middle glowing eerily. A demonic laugh echoes throughout the caverns"
suffix = "lavaland_surface_cultaltar.dmm"
allow_duplicates = FALSE
cost = 10
/datum/map_template/ruin/lavaland/hermit
name = "Makeshift Shelter"
id = "hermitcave"
@@ -84,4 +180,19 @@ datum/map_template/ruin/lavaland/ash_walker
description = "A Syndicate shuttle had an unfortunate stowaway..."
suffix = "lavaland_surface_swarmer_crash.dmm"
allow_duplicates = FALSE
cost = 20
cost = 20
/datum/map_template/ruin/lavaland/miningripley
name = "Ripley"
id = "ripley"
description = "A heavily-damaged mining ripley, property of a very unfortunate miner. You might have to do a bit of work to fix this thing up."
suffix = "lavaland_surface_random_ripley.dmm"
allow_duplicates = FALSE
cost = 5
/datum/map_template/ruin/lavaland/puzzle
name = "Ancient Puzzle"
id = "puzzle"
description = "Mystery to be solved."
suffix = "lavaland_surface_puzzle.dmm"
cost = 5
+15 -1
View File
@@ -437,4 +437,18 @@ var/global/list/bad_blocks[0]
var/datum/species/S = data["species"]
species = new S
b_type = data["b_type"]
real_name = data["real_name"]
real_name = data["real_name"]
/datum/dna/proc/transfer_identity(mob/living/carbon/human/destination)
if(!istype(destination))
return
// We manually set the species to ensure all proper species change procs are called.
destination.set_species(species.type, retain_damage = TRUE)
var/datum/dna/new_dna = Clone()
new_dna.species = destination.dna.species
destination.dna = new_dna
destination.dna.species.handle_dna(destination) // Handle DNA has to be re-called as the DNA was changed.
destination.UpdateAppearance()
domutcheck(destination, null, MUTCHK_FORCED)
+1 -2
View File
@@ -494,10 +494,9 @@ var/list/teleport_runes = list()
/obj/effect/rune/narsie/New()
..()
cultist_name = "Summon [SSticker.cultdat.entity_name]"
cultist_name = "Summon [SSticker.cultdat ? SSticker.cultdat.entity_name : "your god"]"
cultist_desc = "tears apart dimensional barriers, calling forth [SSticker.cultdat.entity_title3]. Requires 9 invokers."
/obj/effect/rune/narsie/check_icon()
return
+10
View File
@@ -906,3 +906,13 @@
spellname = "sacred flame"
icon_state ="booksacredflame"
desc = "Become one with the flames that burn within... and invite others to do so as well."
/obj/item/spellbook/oneuse/random
icon_state = "random_book"
/obj/item/spellbook/oneuse/random/initialize()
. = ..()
var/static/banned_spells = list(/obj/item/spellbook/oneuse/mime, /obj/item/spellbook/oneuse/mime/fingergun, /obj/item/spellbook/oneuse/mime/fingergun/fake, /obj/item/spellbook/oneuse/mime/greaterwall)
var/real_type = pick(subtypesof(/obj/item/spellbook/oneuse) - banned_spells)
new real_type(loc)
return INITIALIZE_HINT_QDEL
+31
View File
@@ -193,7 +193,38 @@
backpack = /obj/item/storage/backpack/explorer
satchel = /obj/item/storage/backpack/explorer
/datum/outfit/job/mining/equipped
name = "Shaft Miner"
suit = /obj/item/clothing/suit/hooded/explorer
mask = /obj/item/clothing/mask/gas/explorer
glasses = /obj/item/clothing/glasses/meson
suit_store = /obj/item/tank/emergency_oxygen
internals_slot = slot_s_store
backpack_contents = list(
/obj/item/flashlight/seclite=1,\
/obj/item/kitchen/knife/combat/survival=1,
/obj/item/mining_voucher=1,
/obj/item/t_scanner/adv_mining_scanner/lesser=1,
/obj/item/gun/energy/kinetic_accelerator=1,\
/obj/item/stack/marker_beacon/ten=1
)
backpack = /obj/item/storage/backpack/explorer
satchel = /obj/item/storage/backpack/explorer
/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
if(istype(H.wear_suit, /obj/item/clothing/suit/hooded))
var/obj/item/clothing/suit/hooded/S = H.wear_suit
S.ToggleHood()
/datum/outfit/job/miner/equipped/hardsuit
name = "Shaft Miner (Equipment + Hardsuit)"
suit = /obj/item/clothing/suit/space/hardsuit/mining
mask = /obj/item/clothing/mask/breath
//Griff //BS12 EDIT
+45 -37
View File
@@ -13,26 +13,28 @@
/obj/machinery/wish_granter/attack_hand(mob/living/carbon/user)
. = ..()
if(.)
return
return ..()
if(charges <= 0)
to_chat(user, "The Wish Granter lies silent.")
return
to_chat(user, "<span class='warning'>The Wish Granter lies silent.</span>")
return TRUE
else if(!ishuman(user))
to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.")
to_chat(user, "<span class='warning'>You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's..</span>")
return
else if(is_special_character(user))
to_chat(user, "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.")
to_chat(user, "<span class='warning'>Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away.</span>")
else if(!insisting)
to_chat(user, "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?")
to_chat(user, "<span class='warning'>Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?</span>")
insisting = TRUE
else
to_chat(user, "You speak. [pick("I want the station to disappear", "Humanity is corrupt, mankind must be destroyed", "I want to be rich", "I want to rule the world", "I want immortality.")]. The Wish Granter answers.")
to_chat(user, "Your head pounds for a moment, before your vision clears. You are the avatar of the Wish Granter, and your power is LIMITLESS! And it's all yours. You need to make sure no one can take it from you. No one can know, first.")
to_chat(user, "<span class='notice'>You speak. [pick("I want the station to disappear", "Humanity is corrupt, mankind must be destroyed", "I want to be rich", "I want to rule the world", "I want immortality.")]. The Wish Granter answers.</span>")
to_chat(user, "<span class='notice'>Your head pounds for a moment, before your vision clears. You are the avatar of the Wish Granter, and your power is LIMITLESS! And it's all yours. You need to make sure no one can take it from you. No one can know, first.</span>")
charges--
insisting = FALSE
@@ -46,37 +48,43 @@
var/list/types = list()
/obj/machinery/wish_granter/super/attack_hand(mob/living/carbon/user)
. = ..()
if(.)
return ..()
if(!ishuman(user))
to_chat(user, "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.")
return
else if(is_special_character(user) || jobban_isbanned(user, ROLE_TRAITOR) || jobban_isbanned(user, "Syndicate"))
to_chat(user, "Something instinctual makes you pull away.")
return
to_chat(user, "<span class='warning'>You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's.</warning>")
return TRUE
if(is_special_character(user) || jobban_isbanned(user, ROLE_TRAITOR) || jobban_isbanned(user, "Syndicate"))
to_chat(user, "<span class='warning'>Something instinctual makes you pull away.</span>")
return TRUE
to_chat(user, "<span class='notice'>Your touch makes the Wish Granter stir. Are you really sure you want to do this?</span>")
for(var/supname in GLOB.all_superheroes)
types += supname
var/wish
if(types.len == 1)
wish = pick(types)
else
to_chat(user, "Your touch makes the Wish Granter stir. Are you really sure you want to do this?")
for(var/supname in GLOB.all_superheroes)
types += supname
var/wish
if(types.len == 1)
wish = pick(types)
else
wish = input("You want to become...","Wish") as null|anything in types
wish = input("You want to become...", "Wish") as null|anything in types
if(!src || !wish || user.stat == DEAD || (get_dist(src, user) > 4)) //another check after the input to check if someone already used it, closed it, or if they're dead, or if they ran off
return
if(!wish || user.stat == DEAD || (get_dist(src, user) > 4)) // Another check after the input to check if someone already used it, closed it, or if they're dead, or if they ran off.
return
var/datum/superheroes/S = GLOB.all_superheroes[wish]
if(S.activated)
to_chat(user,"<span class='warning'>There can only be one! Pick something else!</span>")
return
var/datum/superheroes/S = GLOB.all_superheroes[wish]
if(S.activated)
to_chat(user,"<span class='warning'>There can only be one! Pick something else!</span>")
return
S.create(user)
S.activated = TRUE //sets this superhero as taken so we don't have duplicates
playsound(src.loc, 'sound/effects/bamf.ogg', 50, 1)
visible_message("<span class='notice'>The wishgranter fades into mist..</span>")
add_attack_logs(null, user, "Became [GLOB.all_superheroes[wish]]")
notify_ghosts("[GLOB.all_superheroes[wish]] has appeared in [get_area(user)].", source = user)
qdel(src)
S.create(user)
S.activated = TRUE //sets this superhero as taken so we don't have duplicates
playsound(src.loc, 'sound/effects/bamf.ogg', 50, 1)
visible_message("<span class='notice'>The wishgranter fades into mist..</span>")
add_attack_logs(null, user, "Became [GLOB.all_superheroes[wish]]")
notify_ghosts("[GLOB.all_superheroes[wish]] has appeared in [get_area(user)].", source = user)
qdel(src)
+1
View File
@@ -23,6 +23,7 @@
infra_luminosity = 15 //byond implementation is bugged.
force = 5
armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming.
var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items)
var/can_move = 0 // time of next allowed movement
var/mob/living/carbon/occupant = null
+2 -1
View File
@@ -3,4 +3,5 @@
/obj/mecha/working/New()
..()
trackers += new /obj/item/mecha_parts/mecha_tracking(src)
if(!ruin_mecha)
trackers += new /obj/item/mecha_parts/mecha_tracking(src)
@@ -207,4 +207,10 @@
return 1
/datum/effect_system/smoke_spread/sleeping
effect_type = /obj/effect/particle_effect/smoke/sleeping
effect_type = /obj/effect/particle_effect/smoke/sleeping
/proc/do_smoke(range=0, location=null, smoke_type = /obj/effect/particle_effect/smoke)
var/datum/effect_system/smoke_spread/smoke = new
smoke.effect_type = smoke_type
smoke.set_up(range, location)
smoke.start()
+139 -58
View File
@@ -1,23 +1,43 @@
/* Simple object type, calls a proc when "stepped" on by something */
/obj/effect/step_trigger
var/affect_ghosts = 0
var/stopper = 1 // stops throwers
invisibility = 101 // nope cant see this shit
anchored = 1
var/affect_ghosts = FALSE
var/stopper = TRUE // stops throwers
var/mobs_only = FALSE
invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit
anchored = TRUE
/obj/effect/step_trigger/proc/Trigger(var/atom/movable/A)
return 0
return FALSE
/obj/effect/step_trigger/Crossed(H as mob|obj)
..()
/obj/effect/step_trigger/Crossed(var/H)
. = ..()
if(!H)
return
if(istype(H, /mob/dead/observer) && !affect_ghosts)
if(isobserver(H) && !affect_ghosts)
return
if(!ismob(H) && mobs_only)
return
Trigger(H)
/obj/effect/step_trigger/singularity_act()
return
/obj/effect/step_trigger/singularity_pull()
return
/* Sends a message to mob when triggered*/
/obj/effect/step_trigger/message
var/message //the message to give to the mob
var/once = 1
mobs_only = TRUE
/obj/effect/step_trigger/message/Trigger(mob/M)
if(M.client)
to_chat(M, "<span class='info'>[message]</span>")
if(once)
qdel(src)
/* Tosses things in a certain direction */
@@ -30,57 +50,57 @@
var/nostop = 0 // if 1: will only be stopped by teleporters
var/list/affecting = list()
Trigger(var/atom/A)
if(!A || !istype(A, /atom/movable))
/obj/effect/step_trigger/thrower/Trigger(atom/A)
if(!A || !ismovableatom(A))
return
var/atom/movable/AM = A
var/curtiles = 0
var/stopthrow = 0
for(var/obj/effect/step_trigger/thrower/T in orange(2, src))
if(AM in T.affecting)
return
var/atom/movable/AM = A
var/curtiles = 0
var/stopthrow = 0
for(var/obj/effect/step_trigger/thrower/T in orange(2, src))
if(AM in T.affecting)
return
if(ismob(AM))
var/mob/M = AM
if(immobilize)
M.canmove = 0
if(isliving(AM))
var/mob/living/M = AM
if(immobilize)
M.canmove = FALSE
affecting.Add(AM)
while(AM && !stopthrow)
if(tiles)
if(curtiles >= tiles)
break
if(AM.z != src.z)
affecting.Add(AM)
while(AM && !stopthrow)
if(tiles)
if(curtiles >= tiles)
break
if(AM.z != src.z)
break
curtiles++
curtiles++
sleep(speed)
sleep(speed)
// Calculate if we should stop the process
if(!nostop)
for(var/obj/effect/step_trigger/T in get_step(AM, direction))
if(T.stopper && T != src)
stopthrow = 1
else
for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction))
if(T.stopper)
stopthrow = 1
// Calculate if we should stop the process
if(!nostop)
for(var/obj/effect/step_trigger/T in get_step(AM, direction))
if(T.stopper && T != src)
stopthrow = 1
else
for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, direction))
if(T.stopper)
stopthrow = 1
if(AM)
var/predir = AM.dir
step(AM, direction)
if(!facedir)
AM.dir = predir
if(AM)
var/predir = AM.dir
step(AM, direction)
if(!facedir)
AM.setDir(predir)
affecting.Remove(AM)
affecting.Remove(AM)
if(ismob(AM))
var/mob/M = AM
if(immobilize)
M.canmove = 1
if(isliving(AM))
var/mob/living/M = AM
if(immobilize)
M.canmove = TRUE
/* Stops things thrown by a thrower, doesn't do anything */
@@ -93,12 +113,11 @@
var/teleport_y = 0
var/teleport_z = 0
Trigger(var/atom/movable/A)
if(teleport_x && teleport_y && teleport_z)
/obj/effect/step_trigger/teleporter/Trigger(atom/movable/A)
if(teleport_x && teleport_y && teleport_z)
A.x = teleport_x
A.y = teleport_y
A.z = teleport_z
var/turf/T = locate(teleport_x, teleport_y, teleport_z)
A.forceMove(T)
/* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */
@@ -107,11 +126,73 @@
var/teleport_y_offset = 0
var/teleport_z_offset = 0
Trigger(var/atom/movable/A)
if(teleport_x && teleport_y && teleport_z)
if(teleport_x_offset && teleport_y_offset && teleport_z_offset)
/obj/effect/step_trigger/teleporter/random/Trigger(atom/movable/A)
if(teleport_x && teleport_y && teleport_z)
if(teleport_x_offset && teleport_y_offset && teleport_z_offset)
A.x = rand(teleport_x, teleport_x_offset)
A.y = rand(teleport_y, teleport_y_offset)
A.z = rand(teleport_z, teleport_z_offset)
var/turf/T = locate(rand(teleport_x, teleport_x_offset), rand(teleport_y, teleport_y_offset), rand(teleport_z, teleport_z_offset))
if (T)
A.forceMove(T)
/* Fancy teleporter, creates sparks and smokes when used */
/obj/effect/step_trigger/teleport_fancy
var/locationx
var/locationy
var/uses = 1 //0 for infinite uses
var/entersparks = 0
var/exitsparks = 0
var/entersmoke = 0
var/exitsmoke = 0
/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M)
var/dest = locate(locationx, locationy, z)
M.Move(dest)
if(entersparks)
var/datum/effect_system/spark_spread/s = new
s.set_up(4, 1, src)
s.start()
if(exitsparks)
var/datum/effect_system/spark_spread/s = new
s.set_up(4, 1, dest)
s.start()
if(entersmoke)
var/datum/effect_system/smoke_spread/s = new
s.set_up(4, 1, src, 0)
s.start()
if(exitsmoke)
var/datum/effect_system/smoke_spread/s = new
s.set_up(4, 1, dest, 0)
s.start()
uses--
if(uses == 0)
qdel(src)
/* Simple sound player, Mapper friendly! */
/obj/effect/step_trigger/sound_effect
var/sound //eg. path to the sound, inside '' eg: 'growl.ogg'
var/volume = 100
var/freq_vary = 1 //Should the frequency of the sound vary?
var/extra_range = 0 // eg World.view = 7, extra_range = 1, 7+1 = 8, 8 turfs radius
var/happens_once = 0
var/triggerer_only = 0 //Whether the triggerer is the only person who hears this
/obj/effect/step_trigger/sound_effect/Trigger(atom/movable/A)
var/turf/T = get_turf(A)
if(!T)
return
if(triggerer_only && ismob(A))
var/mob/B = A
B.playsound_local(T, sound, volume, freq_vary)
else
playsound(T, sound, volume, freq_vary, extra_range)
if(happens_once)
qdel(src)
@@ -6,6 +6,10 @@
randomdir = 0
layer = ABOVE_NORMAL_TURF_LAYER
/obj/effect/temp_visual/ratvar/door
icon_state = "ratvardoorglow"
layer = CLOSED_DOOR_LAYER //above closed doors
/obj/effect/temp_visual/ratvar/door/window
icon_state = "ratvarwindoorglow"
layer = ABOVE_WINDOW_LAYER
@@ -16,9 +20,27 @@
/obj/effect/temp_visual/ratvar/beam/grille
layer = BELOW_OBJ_LAYER
/obj/effect/temp_visual/ratvar/beam/itemconsume
layer = HIGH_OBJ_LAYER
/obj/effect/temp_visual/ratvar/beam/falsewall
layer = OBJ_LAYER
/obj/effect/temp_visual/ratvar/beam/catwalk
layer = LATTICE_LAYER
/obj/effect/temp_visual/ratvar/wall
icon_state = "ratvarwallglow"
/obj/effect/temp_visual/ratvar/wall/false
layer = OBJ_LAYER
/obj/effect/temp_visual/ratvar/floor
icon_state = "ratvarfloorglow"
/obj/effect/temp_visual/ratvar/floor/catwalk
layer = LATTICE_LAYER
/obj/effect/temp_visual/ratvar/window
icon_state = "ratvarwindowglow"
layer = ABOVE_OBJ_LAYER
@@ -26,6 +48,10 @@
/obj/effect/temp_visual/ratvar/window/single
icon_state = "ratvarwindowglow_s"
/obj/effect/temp_visual/ratvar/gear
icon_state = "ratvargearglow"
layer = BELOW_OBJ_LAYER
/obj/effect/temp_visual/ratvar/grille
icon_state = "ratvargrilleglow"
layer = BELOW_OBJ_LAYER
@@ -333,10 +333,13 @@ var/global/list/datum/stack_recipe/cult = list ( \
* Brass
*/
var/global/list/datum/stack_recipe/brass_recipes = list (\
new/datum/stack_recipe("wall gear", /obj/structure/clockwork/wall_gear, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
null,
new/datum/stack_recipe/window("brass windoor", /obj/machinery/door/window/clockwork, 2, time = 30, on_floor = TRUE, window_checks = TRUE), \
null,
new/datum/stack_recipe/window("directional brass window", /obj/structure/window/reinforced/clockwork, time = 0, on_floor = TRUE, window_checks = TRUE), \
new/datum/stack_recipe/window("fulltile brass window", /obj/structure/window/reinforced/clockwork/fulltile, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
new/datum/stack_recipe("brass chair", /obj/structure/chair/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \
)
+33 -9
View File
@@ -25,20 +25,34 @@
if(special_die == "100")
new /obj/item/dice/d100(src)
/obj/item/storage/pill_bottle/dice/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (OXYLOSS)
/obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6
name = "die"
desc = "A die with six sides. Basic and servicable."
icon = 'icons/obj/dice.dmi'
icon_state = "d6"
w_class = WEIGHT_CLASS_TINY
var/sides = 6
var/result = null
var/list/special_faces = list() //entries should match up to sides var if used
/obj/item/dice/New()
result = rand(1, sides)
var/rigged = DICE_NOT_RIGGED
var/rigged_value
/obj/item/dice/Initialize(mapload)
. = ..()
if(!result)
result = roll(sides)
update_icon()
/obj/item/dice/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (OXYLOSS)
/obj/item/dice/d1
name = "d1"
desc = "A die with one side. Deterministic!"
@@ -117,11 +131,19 @@
. = ..()
/obj/item/dice/proc/diceroll(mob/user)
result = rand(1, sides)
var/fake_result = rand(1, sides)//Daredevil isn't as good as he used to be
result = roll(sides)
if(rigged != DICE_NOT_RIGGED && result != rigged_value)
if(rigged == DICE_BASICALLY_RIGGED && prob(Clamp(1/(sides - 1) * 100, 25, 80)))
result = rigged_value
else if(rigged == DICE_TOTALLY_RIGGED)
result = rigged_value
. = result
var/fake_result = roll(sides)//Daredevil isn't as good as he used to be
var/comment = ""
if(sides == 20 && result == 20)
comment = "Nat 20!"
comment = "NAT 20!"
else if(sides == 20 && result == 1)
comment = "Ouch, bad luck."
update_icon()
@@ -130,16 +152,18 @@
if(special_faces.len == sides)
result = special_faces[result]
if(user != null) //Dice was rolled in someone's hand
user.visible_message("<span class='notice'>[user] has thrown [src]. It lands on [result]. [comment]</span>", \
user.visible_message("[user] has thrown [src]. It lands on [result]. [comment]", \
"<span class='notice'>You throw [src]. It lands on [result]. [comment]</span>", \
"<span class='italics'>You hear [src] rolling, it sounds like a [fake_result].</span>")
else if(!throwing) //Dice was thrown and is coming to rest
else if(!src.throwing) //Dice was thrown and is coming to rest
visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
/obj/item/dice/d20/e20/diceroll(mob/user as mob, thrown)
if(triggered)
return
..()
. = ..()
if(result == 1)
to_chat(user, "<span class='danger'>Rocks fall, you die.</span>")
user.gib()
@@ -166,7 +190,7 @@
/obj/item/dice/update_icon()
overlays.Cut()
overlays += "[src.icon_state][src.result]"
overlays += "[icon_state][result]"
/obj/item/storage/box/dice
name = "Box of dice"
+10 -2
View File
@@ -235,14 +235,22 @@
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
layer = MOB_LAYER
/obj/structure/alien/egg/grown
status = GROWN
icon_state = "egg"
/obj/structure/alien/egg/burst
status = BURST
icon_state = "egg_hatched"
/obj/structure/alien/egg/New()
new /obj/item/clothing/mask/facehugger(src)
..()
spawn(rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME))
Grow()
if(status == BURST)
obj_integrity = integrity_failure
else if(status != GROWN)
spawn(rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME))
Grow()
/obj/structure/alien/egg/attack_alien(mob/living/carbon/alien/user)
return attack_hand(user)
+71 -45
View File
@@ -9,19 +9,26 @@
/obj/structure/falsewall
name = "wall"
desc = "A huge chunk of metal used to seperate rooms."
anchored = 1
anchored = TRUE
icon = 'icons/turf/walls/wall.dmi'
icon_state = "wall"
var/mineral = "metal"
var/walltype = "metal"
var/opening = 0
density = 1
opacity = 1
var/mineral = /obj/item/stack/sheet/metal
var/mineral_amount = 2
var/walltype = /turf/simulated/wall
var/girder_type = /obj/structure/girder/displaced
var/opening = FALSE
density = TRUE
opacity = TRUE
can_deconstruct = TRUE
canSmoothWith = list(
/turf/simulated/wall,
/turf/simulated/wall/r_wall,
/obj/structure/falsewall,
/obj/structure/falsewall/brass,
/obj/structure/falsewall/reinforced, // WHY DO WE SMOOTH WITH FALSE R-WALLS WHEN WE DON'T SMOOTH WITH REAL R-WALLS. //because we do smooth with real r-walls now
/turf/simulated/wall/rust,
/turf/simulated/wall/r_wall/rust)
@@ -31,6 +38,10 @@
..()
air_update_turf(1)
/obj/structure/falsewall/ratvar_act()
new /obj/structure/falsewall/brass(loc)
qdel(src)
/obj/structure/falsewall/Destroy()
density = 0
air_update_turf(1)
@@ -124,18 +135,11 @@
/obj/structure/falsewall/proc/dismantle(mob/user)
user.visible_message("<span class='notice'>[user] dismantles the false wall.</span>", "<span class='warning'>You dismantle the false wall.</span>")
new /obj/structure/girder/displaced(loc)
if(mineral == "metal")
if(istype(src, /obj/structure/falsewall/reinforced))
new /obj/item/stack/sheet/plasteel(loc, 2)
else
new /obj/item/stack/sheet/metal(loc, 2)
else if(mineral == "wood")
new/obj/item/stack/sheet/wood(loc, 2)
else
var/P = text2path("/obj/item/stack/sheet/mineral/[mineral]")
new P(loc)
new P(loc)
if(can_deconstruct)
new girder_type(loc)
if(mineral_amount)
for(var/i in 1 to mineral_amount)
new mineral(loc)
playsound(src, 'sound/items/welder.ogg', 100, 1)
qdel(src)
@@ -148,7 +152,8 @@
desc = "A huge chunk of reinforced metal used to seperate rooms."
icon = 'icons/turf/walls/reinforced_wall.dmi'
icon_state = "r_wall"
walltype = "rwall"
walltype = /turf/simulated/wall/r_wall
mineral = /obj/item/stack/sheet/plasteel
/obj/structure/falsewall/reinforced/ChangeToWall(delete = 1)
var/turf/T = get_turf(src)
@@ -166,8 +171,8 @@
desc = "A wall with uranium plating. This is probably a bad idea."
icon = 'icons/turf/walls/uranium_wall.dmi'
icon_state = "uranium"
mineral = "uranium"
walltype = "uranium"
mineral = /obj/item/stack/sheet/mineral/uranium
walltype = /turf/simulated/wall/mineral/uranium
var/active = null
var/last_event = 0
canSmoothWith = list(/obj/structure/falsewall/uranium, /turf/simulated/wall/mineral/uranium)
@@ -201,8 +206,8 @@
desc = "A wall with gold plating. Swag!"
icon = 'icons/turf/walls/gold_wall.dmi'
icon_state = "gold"
mineral = "gold"
walltype = "gold"
mineral = /obj/item/stack/sheet/mineral/gold
walltype = /turf/simulated/wall/mineral/gold
canSmoothWith = list(/obj/structure/falsewall/gold, /turf/simulated/wall/mineral/gold)
/obj/structure/falsewall/silver
@@ -210,8 +215,8 @@
desc = "A wall with silver plating. Shiny."
icon = 'icons/turf/walls/silver_wall.dmi'
icon_state = "silver"
mineral = "silver"
walltype = "silver"
mineral = /obj/item/stack/sheet/mineral/silver
walltype = /turf/simulated/wall/mineral/silver
canSmoothWith = list(/obj/structure/falsewall/silver, /turf/simulated/wall/mineral/silver)
/obj/structure/falsewall/diamond
@@ -219,8 +224,8 @@
desc = "A wall with diamond plating. You monster."
icon = 'icons/turf/walls/diamond_wall.dmi'
icon_state = "diamond"
mineral = "diamond"
walltype = "diamond"
mineral = /obj/item/stack/sheet/mineral/diamond
walltype = /turf/simulated/wall/mineral/diamond
canSmoothWith = list(/obj/structure/falsewall/diamond, /turf/simulated/wall/mineral/diamond)
@@ -229,18 +234,18 @@
desc = "A wall with plasma plating. This is definately a bad idea."
icon = 'icons/turf/walls/plasma_wall.dmi'
icon_state = "plasma"
mineral = "plasma"
walltype = "plasma"
mineral = /obj/item/stack/sheet/mineral/plasma
walltype = /turf/simulated/wall/mineral/plasma
canSmoothWith = list(/obj/structure/falsewall/plasma, /turf/simulated/wall/mineral/plasma, /turf/simulated/wall/mineral/alien)
/obj/structure/falsewall/plasma/attackby(obj/item/W, mob/user, params)
if(is_hot(W) > 300)
message_admins("Plasma falsewall ignited by [key_name_admin(user)] in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
log_game("Plasma falsewall ignited by [key_name(user)] in ([x],[y],[z])")
message_admins("Plasma falsewall ignited by [key_name_admin(user)] in [ADMIN_VERBOSEJMP(T)]")
log_game("Plasma falsewall ignited by [key_name(user)] in [AREACOORD(T)]")
investigate_log("was <font color='red'><b>ignited</b></font> by [key_name(user)]","atmos")
burnbabyburn()
return
..()
else
return ..()
/obj/structure/falsewall/plasma/proc/burnbabyburn(user)
playsound(src, 'sound/items/welder.ogg', 100, 1)
@@ -258,8 +263,8 @@
desc = "A strange-looking alien wall."
icon = 'icons/turf/walls/plasma_wall.dmi'
icon_state = "plasma"
mineral = "alien"
walltype = "alien"
mineral = /obj/item/stack/sheet/mineral/abductor
walltype = /turf/simulated/wall/mineral/abductor
canSmoothWith = list(/obj/structure/falsewall/alien, /turf/simulated/wall/mineral/alien)
@@ -268,16 +273,16 @@
desc = "A wall with bananium plating. Honk!"
icon = 'icons/turf/walls/bananium_wall.dmi'
icon_state = "bananium"
mineral = "clown"
walltype = "clown"
mineral = /obj/item/stack/sheet/mineral/bananium
walltype = /turf/simulated/wall/mineral/bananium
canSmoothWith = list(/obj/structure/falsewall/bananium, /turf/simulated/wall/mineral/bananium)
/obj/structure/falsewall/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating."
icon_state = "sandstone"
mineral = "sandstone"
walltype = "sandstone"
mineral = /obj/item/stack/sheet/mineral/sandstone
walltype = /turf/simulated/wall/mineral/sandstone
canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/simulated/wall/mineral/sandstone)
/obj/structure/falsewall/wood
@@ -285,8 +290,8 @@
desc = "A wall with wooden plating. Stiff."
icon = 'icons/turf/walls/wood_wall.dmi'
icon_state = "wood"
mineral = "wood"
walltype = "wood"
mineral = /obj/item/stack/sheet/wood
walltype = /turf/simulated/wall/mineral/wood
canSmoothWith = list(/obj/structure/falsewall/wood, /turf/simulated/wall/mineral/wood)
/obj/structure/falsewall/iron
@@ -294,8 +299,9 @@
desc = "A wall with rough metal plating."
icon = 'icons/turf/walls/iron_wall.dmi'
icon_state = "iron"
mineral = "metal"
walltype = "iron"
mineral = /obj/item/stack/rods
mineral_amount = 5
walltype = /turf/simulated/wall/mineral/iron
canSmoothWith = list(/obj/structure/falsewall/iron, /turf/simulated/wall/mineral/iron)
/obj/structure/falsewall/abductor
@@ -303,8 +309,8 @@
desc = "A wall with alien alloy plating."
icon = 'icons/turf/walls/abductor_wall.dmi'
icon_state = "abductor"
mineral = "abductor"
walltype = "abductor"
mineral = /obj/item/stack/sheet/mineral/abductor
walltype = /turf/simulated/wall/mineral/abductor
canSmoothWith = list(/obj/structure/falsewall/abductor, /turf/simulated/wall/mineral/abductor)
/obj/structure/falsewall/titanium
@@ -324,3 +330,23 @@
walltype = /turf/simulated/wall/mineral/plastitanium
smooth = SMOOTH_MORE
canSmoothWith = list(/turf/simulated/wall/mineral/plastitanium, /obj/machinery/door/airlock/shuttle, /obj/machinery/door/airlock, /obj/structure/window/full/shuttle, /obj/structure/shuttle/engine/heater)
/obj/structure/falsewall/brass
name = "clockwork wall"
desc = "A huge chunk of warm metal. The clanging of machinery emanates from within."
icon = 'icons/turf/walls/clockwork_wall.dmi'
icon_state = "clockwork_wall"
resistance_flags = FIRE_PROOF
unacidable = TRUE
mineral_amount = 1
canSmoothWith = list(/obj/effect/clockwork/overlay/wall, /obj/structure/falsewall/brass)
girder_type = /obj/structure/clockwork/wall_gear/displaced
walltype = /turf/simulated/wall/clockwork
mineral = /obj/item/stack/tile/brass
/obj/structure/falsewall/brass/New(loc)
..()
var/turf/T = get_turf(src)
new /obj/effect/temp_visual/ratvar/wall/false(T)
new /obj/effect/temp_visual/ratvar/beam/falsewall(T)
+16
View File
@@ -63,3 +63,19 @@
/obj/structure/fluff/drake_statue/falling //A variety of statue in disrepair; parts are broken off and a gemstone is missing
desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off."
icon_state = "drake_statue_falling"
/obj/structure/fluff/divine
name = "Miracle"
icon = 'icons/obj/hand_of_god_structures.dmi'
anchored = TRUE
density = TRUE
/obj/structure/fluff/divine/nexus
name = "nexus"
desc = "It anchors a deity to this world. It radiates an unusual aura. It looks well protected from explosive shock."
icon_state = "nexus"
/obj/structure/fluff/divine/conduit
name = "conduit"
desc = "It allows a deity to extend their reach. Their powers are just as potent near a conduit as a nexus."
icon_state = "conduit"
+47
View File
@@ -59,6 +59,26 @@
if(current_size >= STAGE_FOUR)
qdel(src)
/obj/structure/lattice/clockwork
name = "cog lattice"
desc = "A lightweight support lattice. These hold the Justicar's station together."
icon = 'icons/obj/smooth_structures/lattice_clockwork.dmi'
/obj/structure/lattice/clockwork/Initialize(mapload)
. = ..()
ratvar_act()
/obj/structure/lattice/clockwork/ratvar_act()
if((x + y) % 2 != 0)
icon = 'icons/obj/smooth_structures/lattice_clockwork_large.dmi'
pixel_x = -9
pixel_y = -9
else
icon = 'icons/obj/smooth_structures/lattice_clockwork.dmi'
pixel_x = 0
pixel_y = 0
return TRUE
/obj/structure/lattice/catwalk
name = "catwalk"
desc = "A catwalk for easier EVA maneuvering and cable placement."
@@ -82,3 +102,30 @@
for(var/obj/structure/cable/C in T)
C.deconstruct()
..()
/obj/structure/lattice/catwalk/clockwork
name = "clockwork catwalk"
icon = 'icons/obj/smooth_structures/catwalk_clockwork.dmi'
canSmoothWith = list(/obj/structure/lattice,
/turf/simulated/floor,
/turf/simulated/wall,
/obj/structure/falsewall)
smooth = SMOOTH_MORE
/obj/structure/lattice/catwalk/clockwork/Initialize(mapload)
. = ..()
ratvar_act()
if(!mapload)
new /obj/effect/temp_visual/ratvar/floor/catwalk(loc)
new /obj/effect/temp_visual/ratvar/beam/catwalk(loc)
/obj/structure/lattice/catwalk/clockwork/ratvar_act()
if((x + y) % 2 != 0)
icon = 'icons/obj/smooth_structures/catwalk_clockwork_large.dmi'
pixel_x = -9
pixel_y = -9
else
icon = 'icons/obj/smooth_structures/catwalk_clockwork.dmi'
pixel_x = 0
pixel_y = 0
return TRUE
+24 -12
View File
@@ -6,7 +6,6 @@
icon_state = "mirror"
density = 0
anchored = 1
var/shattered = 0
var/list/ui_users = list()
/obj/structure/mirror/New(turf/T, newdir = SOUTH, building = FALSE)
@@ -23,7 +22,7 @@
pixel_x = 32
/obj/structure/mirror/attack_hand(mob/user)
if(shattered)
if(broken)
return
if(ishuman(user))
@@ -36,9 +35,9 @@
AC.ui_interact(user)
/obj/structure/mirror/proc/shatter()
if(shattered)
if(broken)
return
shattered = 1
broken = TRUE
icon_state = "mirror_broke"
playsound(src, "shatter", 70, 1)
desc = "Oh no, seven years of bad luck!"
@@ -46,7 +45,7 @@
/obj/structure/mirror/bullet_act(obj/item/projectile/Proj)
if(prob(Proj.damage * 2))
if(!shattered)
if(!broken)
shatter()
else
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
@@ -58,7 +57,7 @@
if(isscrewdriver(I))
user.visible_message("<span class='notice'>[user] begins to unfasten [src].</span>", "<span class='notice'>You begin to unfasten [src].</span>")
if(do_after(user, 30 * I.toolspeed, target = src))
if(shattered)
if(broken)
user.visible_message("<span class='notice'>[user] drops the broken shards to the floor.</span>", "<span class='notice'>You drop the broken shards on the floor.</span>")
new /obj/item/shard(get_turf(user))
else
@@ -68,7 +67,7 @@
return
user.do_attack_animation(src)
if(shattered)
if(broken)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
@@ -85,7 +84,7 @@
if(islarva(user))
return
user.do_attack_animation(src)
if(shattered)
if(broken)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
user.visible_message("<span class='danger'>[user] smashes [src]!</span>")
@@ -100,7 +99,7 @@
if(M.melee_damage_upper <= 0)
return
M.do_attack_animation(src)
if(shattered)
if(broken)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
user.visible_message("<span class='danger'>[user] smashes [src]!</span>")
@@ -113,7 +112,7 @@
if(!S.is_adult)
return
user.do_attack_animation(src)
if(shattered)
if(broken)
playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1)
return
user.visible_message("<span class='danger'>[user] smashes [src]!</span>")
@@ -136,7 +135,7 @@
icon_state = "magic_mirror"
/obj/structure/mirror/magic/attack_hand(mob/user)
if(!ishuman(user))
if(!ishuman(user) || broken)
return
var/mob/living/carbon/human/H = user
@@ -154,6 +153,9 @@
H.dna.real_name = newname
if(H.mind)
H.mind.name = newname
if(newname)
curse(user)
if("Body")
var/list/race_list = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin")
@@ -172,6 +174,7 @@
AC.whitelist = race_list
ui_users[user] = AC
AC.ui_interact(user)
if("Voice")
var/voice_choice = input(user, "Perhaps...", "Voice effects") as null|anything in list("Comic Sans", "Wingdings", "Swedish", "Chav")
var/voice_mutation
@@ -192,8 +195,17 @@
H.dna.SetSEState(voice_mutation, TRUE)
genemutcheck(H, voice_mutation, null, MUTCHK_FORCED)
if(voice_choice)
curse(user)
/obj/structure/mirror/magic/on_ui_close(mob/user)
curse(user)
/obj/structure/mirror/magic/attackby(obj/item/I, mob/living/user, params)
return
/obj/structure/mirror/magic/shatter()
return //can't be broken. it's magic, i ain't gotta explain shit
return //can't be broken. it's magic, i ain't gotta explain shit
/obj/structure/mirror/magic/proc/curse(mob/living/user)
return
@@ -28,6 +28,11 @@
W.setDir(dir)
qdel(src)
/obj/structure/chair/ratvar_act()
var/obj/structure/chair/brass/B = new(get_turf(src))
B.setDir(dir)
qdel(src)
/obj/structure/chair/Move(atom/newloc, direct)
..()
handle_rotation()
@@ -416,3 +421,41 @@
desc = "You sit in this. Either by will or force. Looks REALLY uncomfortable."
icon_state = "chairold"
item_chair = null
// Brass chair
/obj/structure/chair/brass
name = "brass chair"
desc = "A spinny chair made of brass. It looks uncomfortable."
icon_state = "brass_chair"
max_integrity = 150
buildstacktype = /obj/item/stack/tile/brass
buildstackamount = 1
item_chair = null
var/turns = 0
/obj/structure/chair/brass/Destroy()
STOP_PROCESSING(SSfastprocess, src)
. = ..()
/obj/structure/chair/brass/process()
setDir(turn(dir,-90))
playsound(src, 'sound/effects/servostep.ogg', 50, FALSE)
turns++
if(turns >= 8)
STOP_PROCESSING(SSfastprocess, src)
/obj/structure/chair/brass/ratvar_act()
return
/obj/structure/chair/brass/AltClick(mob/living/user)
turns = 0
if(!istype(user) || user.incapacitated() || !in_range(src, user))
return
if(!isprocessing)
user.visible_message("<span class='notice'>[user] spins [src] around, and Ratvarian technology keeps it spinning FOREVER.</span>", \
"<span class='notice'>Automated spinny chairs. The pinnacle of Ratvarian technology.</span>")
START_PROCESSING(SSfastprocess, src)
else
user.visible_message("<span class='notice'>[user] stops [src]'s uncontrollable spinning.</span>", \
"<span class='notice'>You grab [src] and stop its wild spinning.</span>")
STOP_PROCESSING(SSfastprocess, src)
+37 -7
View File
@@ -111,18 +111,35 @@
/turf/simulated/floor/clockwork
name = "clockwork floor"
desc = "Tightly-pressed brass tiles. They emit minute vibration."
icon_state = "clockwork_floor"
icon_state = "plating"
baseturf = /turf/simulated/floor/clockwork
var/dropped_brass
var/uses_overlay = TRUE
var/obj/effect/clockwork/overlay/floor/realappearence
/turf/simulated/floor/clockwork/New()
..()
new /obj/effect/temp_visual/ratvar/floor(src)
new /obj/effect/temp_visual/ratvar/beam(src)
/turf/simulated/floor/clockwork/Initialize(mapload)
. = ..()
if(uses_overlay)
new /obj/effect/temp_visual/ratvar/floor(src)
new /obj/effect/temp_visual/ratvar/beam(src)
realappearence = new /obj/effect/clockwork/overlay/floor(src)
realappearence.linked = src
/turf/simulated/floor/clockwork/Destroy()
if(uses_overlay && realappearence)
QDEL_NULL(realappearence)
return ..()
/turf/simulated/floor/clockwork/ReplaceWithLattice()
. = ..()
for(var/obj/structure/lattice/L in src)
L.ratvar_act()
/turf/simulated/floor/clockwork/attackby(obj/item/I, mob/living/user, params)
if(iscrowbar(I))
user.visible_message("<span class='notice'>[user] begins slowly prying up [src]...</span>", "<span class='notice'>You begin painstakingly prying up [src]...</span>")
playsound(src, I.usesound, 20, 1)
if(!do_after(user, 70*I.toolspeed, target = src))
if(!do_after(user, 70 * I.toolspeed, target = src))
return 0
user.visible_message("<span class='notice'>[user] pries up [src]!</span>", "<span class='notice'>You pry up [src]!</span>")
playsound(src, I.usesound, 80, 1)
@@ -131,7 +148,11 @@
return ..()
/turf/simulated/floor/clockwork/make_plating()
new /obj/item/stack/tile/brass(src)
if(!dropped_brass)
new /obj/item/stack/tile/brass(src)
dropped_brass = TRUE
if(baseturf == type)
return
return ..()
/turf/simulated/floor/clockwork/narsie_act()
@@ -140,3 +161,12 @@
var/previouscolor = color
color = "#960000"
animate(src, color = previouscolor, time = 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/turf/simulated/floor/clockwork/reebe
name = "cogplate"
desc = "Warm brass plating. You can feel it gently vibrating, as if machinery is on the other side."
icon_state = "reebe"
baseturf = /turf/simulated/floor/clockwork/reebe
uses_overlay = FALSE
planetary_atmos = TRUE
@@ -17,6 +17,16 @@
icon_plating = icon_state
update_icon()
/turf/simulated/floor/plating/damaged/New()
..()
icon_state = icon_plating
break_tile()
/turf/simulated/floor/plating/burnt/New()
..()
icon_state = icon_plating
burn_tile()
/turf/simulated/floor/plating/update_icon()
if(!..())
return
+2 -1
View File
@@ -22,6 +22,7 @@
heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall
var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through.
var/slicing_duration = 100
var/engraving //engraving on the wall
var/engraving_quality
@@ -340,7 +341,7 @@
to_chat(user, "<span class='notice'>You begin slicing through the outer plating.</span>")
playsound(src, WT.usesound, 100, 1)
if(do_after(user, 100 * WT.toolspeed, target = src) && WT && WT.isOn())
if(do_after(user, slicing_duration * WT.toolspeed, target = src) && WT && WT.isOn())
to_chat(user, "<span class='notice'>You remove the outer plating.</span>")
dismantle_wall()
else
@@ -69,4 +69,8 @@
desc = "A wall made out of smooth, cold stone."
icon = 'icons/turf/walls/hierophant_wall.dmi'
icon_state = "hierophant"
smooth = SMOOTH_TRUE
smooth = SMOOTH_TRUE
/turf/simulated/wall/indestructible/uranium
icon = 'icons/turf/walls/uranium_wall.dmi'
icon_state = "uranium"
+97
View File
@@ -50,3 +50,100 @@
desc = "A huge chunk of reinforced metal used to seperate rooms. It seems to have additional plating to protect against heat."
icon = 'icons/turf/walls/coated_reinforced_wall.dmi'
max_temperature = INFINITY
//Clockwork walls
/turf/simulated/wall/clockwork
name = "clockwork wall"
desc = "A huge chunk of warm metal. The clanging of machinery emanates from within."
explosion_block = 2
hardness = 10
slicing_duration = 80
sheet_type = /obj/item/stack/tile/brass
sheet_amount = 1
girder_type = /obj/structure/clockwork/wall_gear
baseturf = /turf/simulated/floor/clockwork/reebe
var/heated
var/obj/effect/clockwork/overlay/wall/realappearance
/turf/simulated/wall/clockwork/Initialize()
. = ..()
new /obj/effect/temp_visual/ratvar/wall(src)
new /obj/effect/temp_visual/ratvar/beam(src)
realappearance = new /obj/effect/clockwork/overlay/wall(src)
realappearance.linked = src
/turf/simulated/wall/clockwork/Destroy()
if(realappearance)
qdel(realappearance)
realappearance = null
return ..()
/turf/simulated/wall/clockwork/ReplaceWithLattice()
..()
for(var/obj/structure/lattice/L in src)
L.ratvar_act()
/turf/simulated/wall/clockwork/narsie_act()
..()
if(istype(src, /turf/simulated/wall/clockwork)) //if we haven't changed type
var/previouscolor = color
color = "#960000"
animate(src, color = previouscolor, time = 8)
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
/turf/simulated/wall/clockwork/dismantle_wall(devastated=0, explode=0)
if(devastated)
devastate_wall()
ChangeTurf(baseturf)
else
playsound(src, 'sound/items/welder.ogg', 100, 1)
var/newgirder = break_wall()
if(newgirder) //maybe we want a gear!
transfer_fingerprints_to(newgirder)
ChangeTurf(baseturf)
for(var/obj/O in src) //Eject contents!
if(istype(O, /obj/structure/sign/poster))
var/obj/structure/sign/poster/P = O
P.roll_and_drop(src)
else
O.forceMove(src)
/turf/simulated/wall/clockwork/devastate_wall()
for(var/i in 1 to 2)
new/obj/item/clockwork/alloy_shards/large(src)
for(var/i in 1 to 2)
new/obj/item/clockwork/alloy_shards/medium(src)
for(var/i in 1 to 3)
new/obj/item/clockwork/alloy_shards/small(src)
/turf/simulated/wall/clockwork/attack_hulk(mob/living/user, does_attack_animation = 0)
..()
if(heated)
to_chat(user, "<span class='userdanger'>The wall is searing hot to the touch!</span>")
user.adjustFireLoss(5)
playsound(src, 'sound/machines/fryer/deep_fryer_emerge.ogg', 50, TRUE)
/turf/simulated/wall/clockwork/mech_melee_attack(obj/mecha/M)
..()
if(heated)
to_chat(M.occupant, "<span class='userdanger'>The wall's intense heat completely reflects your [M.name]'s attack!</span>")
M.take_damage(20, BURN)
/turf/simulated/wall/clockwork/proc/turn_up_the_heat()
if(!heated)
name = "superheated [name]"
visible_message("<span class='warning'>[src] sizzles with heat!</span>")
playsound(src, 'sound/machines/fryer/deep_fryer_emerge.ogg', 50, TRUE)
heated = TRUE
hardness = -100 //Lower numbers are tougher, so this makes the wall essentially impervious to smashing
slicing_duration = 150
animate(realappearance, color = "#FFC3C3", time = 5)
else
name = initial(name)
visible_message("<span class='notice'>[src] cools down.</span>")
heated = FALSE
hardness = initial(hardness)
slicing_duration = initial(slicing_duration)
animate(realappearance, color = initial(realappearance.color), time = 25)
+2
View File
@@ -432,6 +432,8 @@
l_pocket = /obj/item/reagent_containers/food/pill/patch/styptic
r_pocket = /obj/item/flashlight/seclite
/obj/effect/mob_spawn/human/miner/explorer
outfit = /datum/outfit/job/mining/equipped
/obj/effect/mob_spawn/human/bartender
name = "Space Bartender"
@@ -36,9 +36,220 @@
if(prob(1))
mezzer()
/obj/item/clothing/glasses/meson/truesight
name = "The Lens of Truesight"
desc = "I can see forever!"
icon_state = "monocle"
item_state = "headset"
item_state = "headset"
// Die of Fate
/obj/item/dice/d20/fate
name = "\improper Die of Fate"
desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky."
icon_state = "d20"
var/reusable = TRUE
var/used = FALSE
/obj/item/dice/d20/fate/stealth
name = "d20"
desc = "A die with twenty sides. The preferred die to throw at the GM."
/obj/item/dice/d20/fate/one_use
reusable = FALSE
/obj/item/dice/d20/fate/one_use/stealth
name = "d20"
desc = "A die with twenty sides. The preferred die to throw at the GM."
/obj/item/dice/d20/fate/cursed
name = "cursed Die of Fate"
desc = "A die with twenty sides. You feel that rolling this is a REALLY bad idea."
color = "#00BB00"
rigged = DICE_TOTALLY_RIGGED
rigged_value = 1
/obj/item/dice/d20/fate/diceroll(mob/user)
. = ..()
if(!used)
if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards))
to_chat(user, "<span class='warning'>You feel the magic of the dice is restricted to ordinary humans!</span>")
return
if(!reusable)
used = TRUE
var/turf/T = get_turf(src)
T.visible_message("<span class='userdanger'>[src] flares briefly.</span>")
addtimer(CALLBACK(src, .proc/effect, user, .), 1 SECONDS)
/obj/item/dice/d20/fate/equipped(mob/user, slot)
if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards))
to_chat(user, "<span class='warning'>You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.</span>")
forceMove(get_turf(user))
/obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user, roll)
var/turf/T = get_turf(src)
switch(roll)
if(1)
//Dust
T.visible_message("<span class='userdanger'>[user] turns to dust!</span>")
user.dust()
if(2)
//Death
T.visible_message("<span class='userdanger'>[user] suddenly dies!</span>")
user.death()
if(3)
//Swarm of creatures
T.visible_message("<span class='userdanger'>A swarm of creatures surround [user]!</span>")
for(var/direction in alldirs)
new /mob/living/simple_animal/hostile/netherworld(get_step(get_turf(user),direction))
if(4)
//Destroy Equipment
T.visible_message("<span class='userdanger'>Everything [user] is holding and wearing disappears!</span>")
for(var/obj/item/I in user)
if(istype(I, /obj/item/implant))
continue
qdel(I)
if(5)
//Monkeying
T.visible_message("<span class='userdanger'>[user] transforms into a monkey!</span>")
user.monkeyize()
if(6)
//Cut speed
T.visible_message("<span class='userdanger'>[user] starts moving slower!</span>")
var/datum/species/S = user.dna.species
S.slowdown += 1
if(7)
//Throw
T.visible_message("<span class='userdanger'>Unseen forces throw [user]!</span>")
user.Stun(60)
user.adjustBruteLoss(50)
var/throw_dir = cardinal
var/atom/throw_target = get_edge_target_turf(user, throw_dir)
user.throw_at(throw_target, 200, 4)
if(8)
//Fueltank Explosion
T.visible_message("<span class='userdanger'>An explosion bursts into existence around [user]!</span>")
explosion(get_turf(user),-1,0,2, flame_range = 2)
if(9)
//Cold
var/datum/disease/D = new /datum/disease/cold()
T.visible_message("<span class='userdanger'>[user] looks a little under the weather!</span>")
user.ForceContractDisease(D)
if(10)
//Nothing
T.visible_message("<span class='userdanger'>Nothing seems to happen.</span>")
if(11)
//Cookie
T.visible_message("<span class='userdanger'>A cookie appears out of thin air!</span>")
var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location())
do_smoke(0, drop_location())
C.name = "Cookie of Fate"
if(12)
//Healing
T.visible_message("<span class='userdanger'>[user] looks very healthy!</span>")
user.revive(full_heal = 1, admin_revive = 1)
if(13)
//Mad Dosh
T.visible_message("<span class='userdanger'>Mad dosh shoots out of [src]!</span>")
var/turf/Start = get_turf(src)
for(var/direction in alldirs)
var/turf/dirturf = get_step(Start,direction)
if(rand(0,1))
new /obj/item/stack/spacecash/c1000(dirturf)
else
var/obj/item/storage/bag/money/M = new(dirturf)
for(var/i in 1 to rand(5,50))
new /obj/item/coin/gold(M)
if(14)
//Free Gun
T.visible_message("<span class='userdanger'>An impressive gun appears!</span>")
do_smoke(0, drop_location())
new /obj/item/gun/projectile/revolver/mateba(drop_location())
if(15)
//Random One-use spellbook
T.visible_message("<span class='userdanger'>A magical looking book drops to the floor!</span>")
do_smoke(0, drop_location())
new /obj/item/spellbook/oneuse/random(drop_location())
if(16)
//Servant & Servant Summon
T.visible_message("<span class='userdanger'>A Dice Servant appears in a cloud of smoke!</span>")
var/mob/living/carbon/human/H = new(drop_location())
do_smoke(0, drop_location())
H.equipOutfit(/datum/outfit/butler)
var/datum/mind/servant_mind = new /datum/mind()
var/datum/objective/O = new
O.owner = servant_mind
O.target = H.mind
O.explanation_text = "Serve [user.real_name]."
servant_mind.objectives += O
servant_mind.transfer_to(H)
var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as the servant of [user.real_name]?", ROLE_WIZARD, poll_time = 50)
if(LAZYLEN(candidates))
var/mob/dead/observer/C = pick(candidates)
message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant")
H.key = C.key
var/obj/effect/proc_holder/spell/targeted/summonmob/S = new
S.target_mob = H
user.mind.AddSpell(S)
if(17)
//Tator Kit
T.visible_message("<span class='userdanger'>A suspicious box appears!</span>")
new /obj/item/storage/box/syndicate(drop_location())
do_smoke(0, drop_location())
if(18)
//Captain ID
T.visible_message("<span class='userdanger'>A golden identification card appears!</span>")
new /obj/item/card/id/captains_spare(drop_location())
do_smoke(0, drop_location())
if(19)
//Instrinct Resistance
T.visible_message("<span class='userdanger'>[user] looks very robust!</span>")
var/datum/species/S = user.dna.species
S.brute_mod *= 0.5
S.burn_mod *= 0.5
if(20)
//Free wizard!
T.visible_message("<span class='userdanger'>Magic flows out of [src] and into [user]!</span>")
user.mind.make_Wizard()
// Butler outfit
/datum/outfit/butler
name = "Butler"
uniform = /obj/item/clothing/under/suit_jacket/really_black
shoes = /obj/item/clothing/shoes/laceup
head = /obj/item/clothing/head/bowlerhat
glasses = /obj/item/clothing/glasses/monocle
gloves = /obj/item/clothing/gloves/color/white
/obj/effect/proc_holder/spell/targeted/summonmob
name = "Summon Servant"
desc = "This spell can be used to call your servant, whenever you need it."
charge_max = 100
clothes_req = 0
invocation = "JE VES"
invocation_type = "whisper"
range = -1
level_max = 0 //cannot be improved
cooldown_min = 100
include_user = 1
var/mob/living/target_mob
action_icon_state = "summons"
/obj/effect/proc_holder/spell/targeted/summonmob/cast(list/targets, mob/user = usr)
if(!target_mob)
return
var/turf/Start = get_turf(user)
for(var/direction in alldirs)
var/turf/T = get_step(Start,direction)
if(!T.density)
target_mob.Move(T)
-40
View File
@@ -1,40 +0,0 @@
/obj/effect/step_trigger/message
var/message //the message to give to the mob
var/once = 1
/obj/effect/step_trigger/message/Trigger(mob/M as mob)
if(M.client)
to_chat(M, "<span class='info'>[message]</span>")
if(once)
qdel(src)
/obj/effect/step_trigger/teleport_fancy
var/locationx
var/locationy
var/uses = 1 //0 for infinite uses
var/entersparks = 0
var/exitsparks = 0
var/entersmoke = 0
var/exitsmoke = 0
/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob)
var/dest = locate(locationx, locationy, z)
M.Move(dest)
if(entersparks)
do_sparks(4, 1, src)
if(exitsparks)
do_sparks(4, 1, dest)
if(entersmoke)
var/datum/effect_system/smoke_spread/s = new
s.set_up(4, 1, src, 0)
s.start()
if(exitsmoke)
var/datum/effect_system/smoke_spread/s = new
s.set_up(4, 1, dest, 0)
s.start()
uses--
if(uses == 0)
qdel(src)
@@ -12,8 +12,12 @@
/obj/structure/closet/crate/necropolis/tendril
desc = "It's watching you suspiciously."
/obj/structure/closet/crate/necropolis/tendril/New()
/obj/structure/closet/crate/necropolis/tendril/New(add_loot = TRUE)
..()
if(!add_loot)
return
var/loot = rand(1,24)
switch(loot)
if(1)
@@ -68,4 +72,19 @@
new /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor(src)
new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor(src)
if(24)
new /obj/item/spellbook/oneuse/summonitem(src)
new /obj/item/spellbook/oneuse/summonitem(src)
/obj/structure/closet/crate/necropolis/puzzle
name = "puzzling chest"
/obj/structure/closet/crate/necropolis/puzzle/New()
..(FALSE)
var/loot = rand(1,3)
switch(loot)
if(1)
new /obj/item/soulstone/anybody(src)
if(2)
new /obj/item/wisp_lantern(src)
if(3)
new /obj/item/prisoncube(src)
@@ -4,7 +4,7 @@
icon = 'icons/mob/alien.dmi'
icon_state = "alienh_running"
icon_living = "alienh_running"
icon_dead = "alien_l"
icon_dead = "alienh_dead"
icon_gib = "syndicate_gib"
response_help = "pokes the"
response_disarm = "shoves the"
@@ -40,7 +40,7 @@
name = "alien drone"
icon_state = "aliend_running"
icon_living = "aliend_running"
icon_dead = "aliend_l"
icon_dead = "aliend_dead"
health = 60
maxHealth = 60
melee_damage_lower = 15
@@ -61,7 +61,7 @@
name = "alien sentinel"
icon_state = "aliens_running"
icon_living = "aliens_running"
icon_dead = "aliens_l"
icon_dead = "aliens_dead"
health = 120
maxHealth = 120
melee_damage_lower = 15
@@ -77,7 +77,7 @@
name = "alien queen"
icon_state = "alienq_running"
icon_living = "alienq_running"
icon_dead = "alienq_l"
icon_dead = "alienq_d"
health = 250
maxHealth = 250
melee_damage_lower = 15
@@ -1,7 +1,6 @@
/mob/living/simple_animal/hostile/creature
name = "creature"
desc = "A sanity-destroying otherthing."
icon = 'icons/mob/critter.dmi'
speak_emote = list("gibbers")
icon_state = "otherthing"
icon_living = "otherthing"
@@ -12,7 +12,7 @@
maxHealth = 250
max_mobs = 3
spawn_time = 300 //30 seconds default
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril)
spawn_text = "emerges from"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
@@ -73,7 +73,7 @@
qdel(src)
/mob/living/simple_animal/hostile/spawner/lavaland/goliath
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril)
/mob/living/simple_animal/hostile/spawner/lavaland/legion
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril
mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril)
@@ -0,0 +1,111 @@
/mob/living/simple_animal/hostile/netherworld
name = "creature"
desc = "A sanity-destroying otherthing from the netherworld."
icon_state = "otherthing"
icon_living = "otherthing"
icon_dead = "otherthing-dead"
health = 80
maxHealth = 80
obj_damage = 100
melee_damage_lower = 25
melee_damage_upper = 50
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
faction = list("creature")
speak_emote = list("screams")
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
faction = list("nether")
/mob/living/simple_animal/hostile/netherworld/migo
name = "mi-go"
desc = "A pinkish, fungoid crustacean-like creature with numerous pairs of clawed appendages and a head covered with waving antennae."
speak_emote = list("screams", "clicks", "chitters", "barks", "moans", "growls", "meows", "reverberates", "roars", "squeaks", "rattles", "exclaims", "yells", "remarks", "mumbles", "jabbers", "stutters", "seethes")
icon_state = "mi-go"
icon_living = "mi-go"
icon_dead = "mi-go-dead"
attacktext = "lacerates"
speed = -0.5
var/static/list/migo_sounds
deathmessage = "wails as its form turns into a pulpy mush."
death_sound = 'sound/voice/hiss6.ogg'
/mob/living/simple_animal/hostile/netherworld/migo/Initialize()
. = ..()
migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heartbeat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/goonstation/effects/screech.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/goonstation/misc/airraid_loop.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/chainsaw.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshots/gunshot_silenced.ogg', 'sound/weapons/gunshots/gunshot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg') //hahahaha fuck you code divers
/mob/living/simple_animal/hostile/netherworld/migo/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null)
..()
if(stat)
return
var/chosen_sound = pick(migo_sounds)
playsound(src, chosen_sound, 50, TRUE)
/mob/living/simple_animal/hostile/netherworld/migo/Life()
..()
if(stat)
return
if(prob(10))
var/chosen_sound = pick(migo_sounds)
playsound(src, chosen_sound, 50, TRUE)
/mob/living/simple_animal/hostile/netherworld/blankbody
name = "blank body"
desc = "This looks human enough, but its flesh has an ashy texture, and it's face is featureless save an eerie smile."
icon_state = "blank-body"
icon_living = "blank-body"
icon_dead = "blank-dead"
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
health = 100
maxHealth = 100
melee_damage_lower = 5
melee_damage_upper = 10
attacktext = "punches"
deathmessage = "falls apart into a fine dust."
/mob/living/simple_animal/hostile/spawner
name = "netherworld link"
desc = null //see examine()
icon_state = "nether"
health = 50
spawn_time = 600 //1 minute
max_mobs = 15
icon = 'icons/mob/nest.dmi'
spawn_text = "crawls through"
mob_types = list(/mob/living/simple_animal/hostile/netherworld/migo, /mob/living/simple_animal/hostile/netherworld, /mob/living/simple_animal/hostile/netherworld/blankbody)
faction = list("nether")
/obj/structure/spawner/nether/Initialize()
.=..()
START_PROCESSING(SSprocessing, src)
/obj/structure/spawner/nether/examine(mob/user)
..()
if(isskeleton(user))
to_chat(user, "A direct link to another dimension full of creatures very happy to see you. <span class='nicegreen'>You can see your house from here!</span>")
else
to_chat(user, "A direct link to another dimension full of creatures not very happy to see you. <span class='warning'>Entering the link would be a very bad idea.</span>")
/obj/structure/spawner/nether/attack_hand(mob/user)
. = ..()
if(isskeleton(user))
to_chat(user, "<span class='notice'>You don't feel like going home yet...</span>")
else
user.visible_message("<span class='warning'>[user] is violently pulled into the link!</span>", \
"<span class='userdanger'>Touching the portal, you are quickly pulled through into a world of unimaginable horror!</span>")
contents.Add(user)
/obj/structure/spawner/nether/process()
for(var/mob/living/M in contents)
if(M)
playsound(src, 'sound/magic/demon_consume.ogg', 50, 1)
M.adjustBruteLoss(60)
new /obj/effect/gibspawner/generic(get_turf(M), M)
if(M.stat == DEAD)
var/mob/living/simple_animal/hostile/netherworld/blankbody/blank
blank = new(loc)
blank.name = "[M]"
blank.desc = "It's [M], but [M.p_their()] flesh has an ashy texture, and [M.p_their()] face is featureless save an eerie smile."
visible_message("<span class='warning'>[M] reemerges from the link!</span>")
qdel(M)
@@ -7,7 +7,7 @@
var/max_mobs = 5
var/spawn_delay = 0
var/spawn_time = 300 //30 seconds default
var/mob_type = /mob/living/simple_animal/hostile/carp
var/mob_types = list(/mob/living/simple_animal/hostile/carp)
var/spawn_text = "emerges from"
status_flags = 0
move_resist = MOVE_FORCE_VERY_STRONG
@@ -39,7 +39,8 @@
if(spawn_delay > world.time)
return 0
spawn_delay = world.time + spawn_time
var/mob/living/simple_animal/L = new mob_type(src.loc)
var/chosen_type = pick(mob_types)
var/mob/living/simple_animal/L = new chosen_type(loc)
L.admin_spawned = admin_spawned //If we were admin spawned, lets have our children count as that as well.
spawned_mobs += L
L.nest = src
@@ -51,7 +52,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "syndbeacon"
spawn_text = "warps in from"
mob_type = /mob/living/simple_animal/hostile/syndicate/ranged
mob_types = list(/mob/living/simple_animal/hostile/syndicate/ranged)
faction = list("syndicate")
/mob/living/simple_animal/hostile/spawner/mining
@@ -64,21 +65,21 @@
max_mobs = 3
icon = 'icons/mob/nest.dmi'
spawn_text = "crawls out of"
mob_type = /mob/living/simple_animal/hostile/asteroid/goldgrub
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goldgrub)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
faction = list("mining")
/mob/living/simple_animal/hostile/spawner/mining/goliath
name = "goliath den"
desc = "A den housing a nest of goliaths, oh god why?"
mob_type = /mob/living/simple_animal/hostile/asteroid/goliath
mob_types = list(/mob/living/simple_animal/hostile/asteroid/goliath)
/mob/living/simple_animal/hostile/spawner/mining/hivelord
name = "hivelord den"
desc = "A den housing a nest of hivelords."
mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord
mob_types = list(/mob/living/simple_animal/hostile/asteroid/hivelord)
/mob/living/simple_animal/hostile/spawner/mining/basilisk
name = "basilisk den"
desc = "A den housing a nest of basilisks, bring a coat."
mob_type = /mob/living/simple_animal/hostile/asteroid/basilisk
mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk)
+8
View File
@@ -40,6 +40,14 @@
/datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = default_state)
return
/**
* The UI-close proc is called when the UI is closed.
*
* @param user /mob The mob who was interacting with this UI.
*/
/datum/proc/on_ui_close(mob/user)
return
/**
* The ui_data proc is used to get data for the interface
*
+2
View File
@@ -444,6 +444,8 @@ nanoui is used to open and update nano browser uis
for(var/datum/nanoui/child in children)
child.close()
src_object.on_ui_close(user)
/**
* Set the UI window to call the nanoclose verb when the window is closed
* This allows Nano to handle closed windows
@@ -299,6 +299,18 @@
user.apply_damage(300, BRUTE, affecting)
user.visible_message("<span class='danger'>[user.name] fires [src] at [user.p_their()] head!</span>", "<span class='userdanger'>You fire [src] at your head!</span>", "<span class='italics'>You hear a gunshot!</span>")
/obj/item/gun/projectile/revolver/russian/soul
name = "cursed Russian revolver"
desc = "To play with this revolver requires wagering your very soul."
/obj/item/gun/projectile/revolver/russian/soul/shoot_self(mob/living/user)
..()
var/obj/item/soulstone/anybody/SS = new /obj/item/soulstone/anybody(get_turf(src))
if(!SS.transfer_soul("FORCE", user)) //Something went wrong
qdel(SS)
return
user.visible_message("<span class='danger'>[user.name]'s soul is captured by \the [src]!</span>", "<span class='userdanger'>You've lost the gamble! Your soul is forfeit!</span>")
/obj/item/gun/projectile/revolver/capgun
name = "cap gun"
desc = "Looks almost like the real thing! Ages 8 and up."
@@ -115,6 +115,24 @@
update_flags |= M.adjustToxLoss(1, FALSE)
return list(0, update_flags)
/datum/reagent/consumable/ethanol/hooch
name = "Hooch"
id = "hooch"
description = "Either someone's failure at cocktail making or attempt in alcohol production. In any case, do you really want to drink that?"
color = "#664300" // rgb: 102, 67, 0
dizzy_adj = 7
alcohol_perc = 1
drink_icon = "glass_brown2"
drink_name = "Hooch"
drink_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
taste_message = "pure resignation"
/datum/reagent/consumable/ethanol/hooch/on_mob_life(mob/living/carbon/M)
if(M.mind && M.mind.assigned_role == "Assistant")
M.heal_organ_damage(1, 1)
. = 1
return ..() || .
/datum/reagent/consumable/ethanol/rum
name = "Rum"
id = "rum"
@@ -1361,3 +1379,15 @@
taste_message = flavor
if(holder.my_atom)
holder.my_atom.on_reagent_change()
/datum/reagent/consumable/ethanol/bacchus_blessing //An EXTREMELY powerful drink. Smashed in seconds, dead in minutes.
name = "Bacchus' Blessing"
id = "bacchus_blessing"
description = "Unidentifiable mixture. Unmeasurably high alcohol content."
color = rgb(51, 19, 3) //Sickly brown
dizzy_adj = 21
alcohol_perc = 3 //I warned you
drink_icon = "glass_brown2"
drink_name = "Bacchus' Blessing"
drink_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?"
taste_message = "a wall of bricks"
@@ -290,6 +290,11 @@
addiction_chance = 5
taste_message = "health"
/datum/reagent/medicine/omnizine/godblood
name = "Godblood"
description = "Slowly heals all damage types. Has a rather high overdose threshold. Glows with mysterious power."
overdose_threshold = 150
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/M)
var/update_flags = STATUS_UPDATE_NONE
update_flags |= M.adjustToxLoss(-1*REAGENTS_EFFECT_MULTIPLIER, FALSE)
@@ -1174,3 +1174,14 @@
M.electrocute_act(rand(5, 20), "Teslium in their body", 1, TRUE) //Override because it's caused from INSIDE of you
playsound(M, "sparks", 50, 1)
return ..()
/datum/reagent/gluttonytoxin
name = "Gluttony's Blessing"
id = "gluttonytoxin"
description = "An advanced corruptive toxin produced by something terrible."
reagent_state = LIQUID
color = "#5EFF3B" //RGB: 94, 255, 59
taste_message = "decay"
/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
L.ForceContractDisease(new /datum/disease/transformation/morph())
@@ -851,4 +851,20 @@
required_reagents = list("rum" = 5, "cream" = 5, "egg" = 5)
result_amount = 15
mix_message = "The eggs nog together. Pretend that \"nog\" is a verb."
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
/datum/chemical_reaction/hooch
name = "Hooch"
id = "hooch"
result = "hooch"
required_reagents = list("ethanol" = 2, "fuel" = 1)
result_amount = 3
required_catalysts = list("enzyme" = 1)
/datum/chemical_reaction/bacchus_blessing
name = "Bacchus' Blessing"
id = "bacchus_blessing"
result = "bacchus_blessing"
required_reagents = list("hooch" = 1, "absinthe" = 1, "manlydorf" = 1, "syndicatebomb" = 1)
result_amount = 4
mix_message = "<span class='warning'>The mixture turns to a sickening froth.</span>"
@@ -289,12 +289,6 @@
icon_state = "[rounded_vol]"
item_state = "syringe_[rounded_vol]"
////////////////////////////////////////////////////////////////////////////////
/// Syringes. END
////////////////////////////////////////////////////////////////////////////////
/obj/item/reagent_containers/syringe/antiviral
name = "Syringe (spaceacillin)"
desc = "Contains antiviral agents."
@@ -327,3 +321,10 @@
name = "bioterror syringe"
desc = "Contains several paralyzing reagents."
list_reagents = list("neurotoxin" = 5, "capulettium_plus" = 5, "sodium_thiopental" = 5)
/obj/item/reagent_containers/syringe/gluttony
name = "Gluttony's Blessing"
desc = "A syringe recovered from a dread place. It probably isn't wise to use."
amount_per_transfer_from_this = 1
volume = 1
list_reagents = list("gluttonytoxin" = 1)
@@ -0,0 +1,244 @@
// Dead Ratvar
/obj/structure/dead_ratvar
name = "hulking wreck"
desc = "The remains of a monstrous war machine."
icon = 'icons/obj/lavaland/dead_ratvar.dmi'
icon_state = "dead_ratvar"
flags = ON_BORDER
appearance_flags = 0
layer = FLY_LAYER
anchored = TRUE
density = TRUE
bound_width = 416
bound_height = 64
pixel_y = -10
unacidable = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
// An "overlay" used by clockwork walls and floors to appear normal to mesons.
/obj/effect/clockwork/overlay
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
var/atom/linked
/obj/effect/clockwork/overlay/examine(mob/user)
if(linked)
linked.examine(user)
/obj/effect/clockwork/overlay/ex_act()
return FALSE
/obj/effect/clockwork/overlay/singularity_act()
return
/obj/effect/clockwork/overlay/singularity_pull()
return
/obj/effect/clockwork/overlay/singularity_pull(S, current_size)
return
/obj/effect/clockwork/overlay/Destroy()
if(linked)
linked = null
. = ..()
/obj/effect/clockwork/overlay/wall
name = "clockwork wall"
icon = 'icons/turf/walls/clockwork_wall.dmi'
icon_state = "clockwork_wall"
canSmoothWith = list(/obj/effect/clockwork/overlay/wall, /obj/structure/falsewall/brass)
smooth = SMOOTH_TRUE
layer = CLOSED_TURF_LAYER
/obj/effect/clockwork/overlay/wall/Initialize(mapload)
. = ..()
queue_smooth_neighbors(src)
addtimer(CALLBACK(GLOBAL_PROC, .proc/queue_smooth, src), 1)
/obj/effect/clockwork/overlay/wall/Destroy()
queue_smooth_neighbors(src)
return ..()
/obj/effect/clockwork/overlay/floor
icon = 'icons/turf/floors.dmi'
icon_state = "clockwork_floor"
layer = TURF_LAYER
plane = FLOOR_PLANE
/obj/effect/clockwork/overlay/floor/bloodcult //this is used by BLOOD CULT, it shouldn't use such a path...
icon_state = "cult"
// Wall gears
//A massive gear, effectively a girder for clocks.
/obj/structure/clockwork/wall_gear
name = "massive gear"
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "wall_gear"
climbable = TRUE
max_integrity = 100
can_deconstruct = TRUE
desc = "A massive brass gear. You could probably secure or unsecure it with a wrench, or just climb over it."
/obj/structure/clockwork/wall_gear/displaced
anchored = FALSE
/obj/structure/clockwork/wall_gear/Initialize()
. = ..()
new /obj/effect/temp_visual/ratvar/gear(get_turf(src))
/obj/structure/clockwork/wall_gear/emp_act(severity)
return
/obj/structure/clockwork/wall_gear/attackby(obj/item/I, mob/user, params)
if(iswrench(I))
default_unfasten_wrench(user, I, 10)
return 1
else if(isscrewdriver(I))
if(anchored)
to_chat(user, "<span class='warning'>[src] needs to be unsecured to disassemble it!</span>")
else
var/obj/item/screwdriver/S = I
user.visible_message("<span class='warning'>[user] starts to disassemble [src].</span>", "<span class='notice'>You start to disassemble [src]...</span>")
if(do_after(user, 30 * S.toolspeed, target = src) && !anchored)
playsound(loc, S.usesound, 50, 1)
to_chat(user, "<span class='notice'>You disassemble [src].</span>")
deconstruct(TRUE)
return 1
else if(istype(I, /obj/item/stack/tile/brass))
var/obj/item/stack/tile/brass/W = I
if(W.get_amount() < 1)
to_chat(user, "<span class='warning'>You need one brass sheet to do this!</span>")
return
var/turf/T = get_turf(src)
if(iswallturf(T))
to_chat(user, "<span class='warning'>There is already a wall present!</span>")
return
if(!isfloorturf(T))
to_chat(user, "<span class='warning'>A floor must be present to build a [anchored ? "false ":""]wall!</span>")
return
if(locate(/obj/structure/falsewall) in T.contents)
to_chat(user, "<span class='warning'>There is already a false wall present!</span>")
return
to_chat(user, "<span class='notice'>You start adding [W] to [src]...</span>")
if(do_after(user, 20, target = src))
var/brass_floor = FALSE
if(istype(T, /turf/simulated/floor/clockwork)) //if the floor is already brass, costs less to make(conservation of masssssss)
brass_floor = TRUE
if(W.use(2 - brass_floor))
if(anchored)
T.ChangeTurf(/turf/simulated/wall/clockwork)
else
T.ChangeTurf(/turf/simulated/floor/clockwork)
new /obj/structure/falsewall/brass(T)
qdel(src)
else
to_chat(user, "<span class='warning'>You need more brass to make a [anchored ? "false ":""]wall!</span>")
return 1
return ..()
/obj/structure/clockwork/wall_gear/deconstruct(disassembled = TRUE)
if(can_deconstruct && disassembled)
new /obj/item/stack/tile/brass(loc, 3)
return ..()
//Shards of Alloy, suitable only as a source of power for a replica fabricator.
/obj/item/clockwork/alloy_shards
name = "replicant alloy shards"
desc = "Broken shards of some oddly malleable metal. They occasionally move and seem to glow."
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "alloy_shards"
resistance_flags = LAVA_PROOF | FIRE_PROOF
unacidable = TRUE
var/randomsinglesprite = FALSE
var/randomspritemax = 2
var/sprite_shift = 9
/obj/item/clockwork/alloy_shards/Initialize()
. = ..()
if(randomsinglesprite)
replace_name_desc()
icon_state = "[icon_state][rand(1, randomspritemax)]"
pixel_x = rand(-sprite_shift, sprite_shift)
pixel_y = rand(-sprite_shift, sprite_shift)
/obj/item/clockwork/alloy_shards/proc/replace_name_desc()
name = "replicant alloy shard"
desc = "A broken shard of some oddly malleable metal. It occasionally moves and seems to glow."
/obj/item/clockwork/alloy_shards/clockgolem_remains
name = "clockwork golem scrap"
desc = "A pile of scrap metal. It seems damaged beyond repair."
icon_state = "clockgolem_dead"
sprite_shift = 0
/obj/item/clockwork/alloy_shards/large
w_class = WEIGHT_CLASS_TINY
randomsinglesprite = TRUE
icon_state = "shard_large"
sprite_shift = 9
/obj/item/clockwork/alloy_shards/medium
w_class = WEIGHT_CLASS_TINY
randomsinglesprite = TRUE
icon_state = "shard_medium"
sprite_shift = 10
/obj/item/clockwork/alloy_shards/medium/gear_bit
randomspritemax = 4
icon_state = "gear_bit"
sprite_shift = 12
/obj/item/clockwork/alloy_shards/medium/gear_bit/replace_name_desc()
name = "gear bit"
desc = "A broken chunk of a gear. You want it."
/obj/item/clockwork/alloy_shards/medium/gear_bit/large //gives more power
/obj/item/clockwork/alloy_shards/medium/gear_bit/large/replace_name_desc()
..()
name = "complex gear bit"
/obj/item/clockwork/alloy_shards/small
w_class = WEIGHT_CLASS_TINY
randomsinglesprite = TRUE
randomspritemax = 3
icon_state = "shard_small"
sprite_shift = 12
/obj/item/clockwork/alloy_shards/pinion_lock
name = "pinion lock"
desc = "A dented and scratched gear. It's very heavy."
icon_state = "pinion_lock"
/obj/item/clockwork/component/belligerent_eye
name = "belligerent eye"
desc = "A brass construct with a rotating red center. It's as though it's looking for something to hurt."
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "belligerent_eye"
/obj/item/clockwork/component/belligerent_eye/blind_eye
name = "blind eye"
desc = "A heavy brass eye, its red iris fallen dark."
icon_state = "blind_eye"
w_class = WEIGHT_CLASS_NORMAL
/obj/item/clockwork/component/geis_capacitor/fallen_armor
name = "fallen armor"
desc = "Lifeless chunks of armor. They're designed in a strange way and won't fit on you."
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "fallen_armor"
w_class = WEIGHT_CLASS_NORMAL
//Ratvarian spear: A relatively fragile spear from the Celestial Derelict. Deals extreme damage to silicons and enemy cultists, but doesn't last long when summoned.
/obj/item/clockwork/weapon/ratvarian_spear
name = "ratvarian spear"
desc = "A razor-sharp spear made of brass. It thrums with barely-contained energy."
icon = 'icons/obj/clockwork_objects.dmi'
icon_state = "ratvarian_spear"
item_state = "ratvarian_spear"
force = 15 //Extra damage is dealt to targets in attack()
throwforce = 25
armour_penetration = 10
sharp = TRUE
attack_verb = list("stabbed", "poked", "slashed")
hitsound = 'sound/weapons/bladeslice.ogg'
w_class = WEIGHT_CLASS_BULKY
var/bonus_burn = 5
@@ -0,0 +1,49 @@
/obj/structure/sacrificealtar
name = "sacrificial altar"
desc = "An altar designed to perform blood sacrifice for a deity."
icon = 'icons/obj/hand_of_god_structures.dmi'
icon_state = "sacrificealtar"
anchored = TRUE
density = FALSE
can_buckle = TRUE
/obj/structure/sacrificealtar/attack_hand(mob/living/user)
if(user.incapacitated())
return
if(!has_buckled_mobs())
return
var/mob/living/L = buckled_mob
if(!L)
return
to_chat(user, "<span class='notice'>You attempt to sacrifice [L] by invoking the sacrificial ritual.</span>")
L.gib()
message_admins("[ADMIN_LOOKUPFLW(user)] has sacrificed [key_name_admin(L)] on the sacrificial altar at [AREACOORD(src)].")
/obj/structure/healingfountain
name = "healing fountain"
desc = "A fountain containing the waters of life."
icon = 'icons/obj/hand_of_god_structures.dmi'
icon_state = "fountain"
anchored = TRUE
density = TRUE
var/time_between_uses = 1800
var/last_process = 0
/obj/structure/healingfountain/attack_hand(mob/living/user)
. = ..()
if(.)
return
if(last_process + time_between_uses > world.time)
to_chat(user, "<span class='notice'>The fountain appears to be empty.</span>")
return
last_process = world.time
to_chat(user, "<span class='notice'>The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.</span>")
user.reagents.add_reagent(/datum/reagent/medicine/omnizine/godblood, 20)
update_icon()
addtimer(CALLBACK(src, .proc/update_icon), time_between_uses)
/obj/structure/healingfountain/update_icon()
if(last_process + time_between_uses > world.time)
icon_state = "fountain"
else
icon_state = "fountain-red"
@@ -0,0 +1,7 @@
/obj/effect/spawner/lootdrop/pizzaparty
name = "pizza bomb spawner"
loot = list(/obj/item/pizzabox/margherita = 3,
/obj/item/pizzabox/meat = 3,
/obj/item/pizzabox/mushroom = 3,
/obj/item/pizza_bomb = 1)
lootdoubles = FALSE
@@ -0,0 +1,351 @@
/obj/effect/sliding_puzzle
name = "Sliding puzzle generator"
icon = 'icons/obj/items.dmi' //mapping
icon_state = "syndballoon"
invisibility = INVISIBILITY_ABSTRACT
anchored = TRUE
var/list/elements
var/floor_type = /turf/simulated/floor/vault
var/finished = FALSE
var/reward_type = /obj/item/reagent_containers/food/snacks/cookie
var/element_type = /obj/structure/puzzle_element
var/auto_setup = TRUE
var/empty_tile_id
//Gets the turf where the tile with given id should be
/obj/effect/sliding_puzzle/proc/get_turf_for_id(id)
var/turf/center = get_turf(src)
switch(id)
if(1)
return get_step(center,NORTHWEST)
if(2)
return get_step(center,NORTH)
if(3)
return get_step(center,NORTHEAST)
if(4)
return get_step(center,WEST)
if(5)
return center
if(6)
return get_step(center,EAST)
if(7)
return get_step(center,SOUTHWEST)
if(8)
return get_step(center,SOUTH)
if(9)
return get_step(center,SOUTHEAST)
/obj/effect/sliding_puzzle/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
/obj/effect/sliding_puzzle/LateInitialize()
if(auto_setup)
setup()
/obj/effect/sliding_puzzle/proc/check_setup_location()
for(var/id in 1 to 9)
var/turf/T = get_turf_for_id(id)
if(!T)
return FALSE
if(istype(T, /turf/simulated/wall/indestructible) || istype(T, /turf/simulated/floor/indestructible))
return FALSE
return TRUE
/obj/effect/sliding_puzzle/proc/validate()
if(finished)
return
if(elements.len < 8) //Someone broke it
qdel(src)
//Check if everything is in place
for(var/id in 1 to 9)
var/target_turf = get_turf_for_id(id)
var/obj/structure/puzzle_element/E = locate() in target_turf
if(id == empty_tile_id && !E) // This location should be empty.
continue
if(!E || E.id != id) //wrong tile or no tile at all
return
//Ding ding
finish()
/obj/effect/sliding_puzzle/Destroy()
if(LAZYLEN(elements))
for(var/obj/structure/puzzle_element/E in elements)
E.source = null
elements.Cut()
return ..()
#define COLLAPSE_DURATION 7
/obj/effect/sliding_puzzle/proc/finish()
finished = TRUE
for(var/mob/M in range(7,src))
shake_camera(M, COLLAPSE_DURATION , 1)
for(var/obj/structure/puzzle_element/E in elements)
E.collapse()
dispense_reward()
/obj/effect/sliding_puzzle/proc/dispense_reward()
new reward_type(get_turf(src))
/obj/effect/sliding_puzzle/proc/is_solvable()
var/list/current_ordering = list()
for(var/obj/structure/puzzle_element/E in elements_in_order())
current_ordering += E.id
var/swap_tally = 0
for(var/i in 1 to current_ordering.len)
var/checked_value = current_ordering[i]
for(var/j in i to current_ordering.len)
if(current_ordering[j] < checked_value)
swap_tally++
return swap_tally % 2 == 0
//swap two tiles in same row
/obj/effect/sliding_puzzle/proc/make_solvable()
var/first_tile_id = 1
var/other_tile_id = 2
if(empty_tile_id == 1 || empty_tile_id == 2) //Can't swap with empty one so just grab some in second row
first_tile_id = 4
other_tile_id = 5
var/turf/T1 = get_turf_for_id(first_tile_id)
var/turf/T2 = get_turf_for_id(other_tile_id)
var/obj/structure/puzzle_element/E1 = locate() in T1
var/obj/structure/puzzle_element/E2 = locate() in T2
E1.forceMove(T2)
E2.forceMove(T1)
/proc/cmp_xy_desc(atom/movable/A, atom/movable/B)
if(A.y > B.y)
return -1
if(A.y < B.y)
return 1
if(A.x > B.x)
return 1
if(A.x < B.x)
return -1
return 0
/obj/effect/sliding_puzzle/proc/elements_in_order()
return sortTim(elements,cmp=/proc/cmp_xy_desc)
/obj/effect/sliding_puzzle/proc/get_base_icon()
var/icon/I = new('icons/obj/puzzle.dmi')
var/list/puzzles = icon_states(I)
var/puzzle_state = pick(puzzles)
var/icon/P = new('icons/obj/puzzle.dmi',puzzle_state)
return P
/obj/effect/sliding_puzzle/proc/setup()
//First we slice the 96x96 icon into 32x32 pieces
var/list/puzzle_pieces = list() //id -> icon list
var/width = 3
var/height = 3
var/list/left_ids = list()
var/tile_count = width * height
//Generate per tile icons
for(var/id in 1 to tile_count)
var/y = width - round((id - 1) / width)
var/x = ((id - 1) % width) + 1
var/x_start = 1 + (x - 1) * world.icon_size
var/x_end = x_start + world.icon_size - 1
var/y_start = 1 + ((y - 1) * world.icon_size)
var/y_end = y_start + world.icon_size - 1
var/icon/T = get_base_icon()
T.Crop(x_start,y_start,x_end,y_end)
puzzle_pieces["[id]"] = T
left_ids += id
//Setup random empty tile
empty_tile_id = pick_n_take(left_ids)
var/turf/empty_tile_turf = get_turf_for_id(empty_tile_id)
empty_tile_turf.ChangeTurf(floor_type, keep_icon = FALSE, ignore_air = FALSE)
var/mutable_appearance/MA = new(puzzle_pieces["[empty_tile_id]"])
MA.layer = empty_tile_turf.layer + 0.1
empty_tile_turf.add_overlay(MA)
elements = list()
var/list/empty_spots = left_ids.Copy()
for(var/spot_id in empty_spots)
var/turf/T = get_turf_for_id(spot_id)
T = T.ChangeTurf(floor_type, keep_icon = FALSE, ignore_air = FALSE)
var/obj/structure/puzzle_element/E = new element_type(T)
elements += E
var/chosen_id = pick_n_take(left_ids)
E.puzzle_icon = puzzle_pieces["[chosen_id]"]
E.source = src
E.id = chosen_id
E.set_puzzle_icon()
if(!is_solvable())
make_solvable()
/obj/structure/puzzle_element
name = "mysterious pillar"
desc = "puzzling..."
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "puzzle_pillar"
anchored = FALSE
density = TRUE
var/id = 0
var/obj/effect/sliding_puzzle/source
var/icon/puzzle_icon
/obj/structure/puzzle_element/Move(nloc, dir)
if(!isturf(nloc) || moving_diagonally || get_dist(get_step(src,dir),get_turf(source)) > 1)
return 0
else
return ..()
/obj/structure/puzzle_element/proc/set_puzzle_icon()
cut_overlays()
if(puzzle_icon)
//Need to scale it down a bit to fit the static border
var/icon/C = new(puzzle_icon)
C.Scale(19,19)
var/mutable_appearance/puzzle_small = new(C)
puzzle_small.layer = layer + 0.1
puzzle_small.pixel_x = 7
puzzle_small.pixel_y = 7
add_overlay(puzzle_small)
/obj/structure/puzzle_element/Destroy()
if(source)
source.elements -= src
source.validate()
return ..()
//Set the full image on the turf and delete yourself
/obj/structure/puzzle_element/proc/collapse()
var/turf/T = get_turf(src)
var/mutable_appearance/MA = new(puzzle_icon)
MA.layer = T.layer + 0.1
T.add_overlay(MA)
//Some basic shaking animation
for(var/i in 1 to COLLAPSE_DURATION)
animate(src, pixel_x=rand(-5,5), pixel_y=rand(-2,2), time=1)
QDEL_IN(src,COLLAPSE_DURATION)
/obj/structure/puzzle_element/Moved()
. = ..()
source.validate()
//Admin abuse version so you can pick the icon before it sets up
/obj/effect/sliding_puzzle/admin
auto_setup = FALSE
var/icon/puzzle_icon
var/puzzle_state
/obj/effect/sliding_puzzle/admin/get_base_icon()
var/icon/I = new(puzzle_icon,puzzle_state)
return I
//Ruin version
/obj/effect/sliding_puzzle/lavaland
reward_type = /obj/structure/closet/crate/necropolis/puzzle
/obj/effect/sliding_puzzle/lavaland/dispense_reward()
if(prob(25))
//If it's not roaming somewhere else already.
var/mob/living/simple_animal/hostile/megafauna/bubblegum/B = locate() in GLOB.mob_list
if(!B)
reward_type = /mob/living/simple_animal/hostile/megafauna/bubblegum
return ..()
//Prison cube version
/obj/effect/sliding_puzzle/prison
auto_setup = FALSE //This will be done by cube proc
var/mob/living/prisoner
element_type = /obj/structure/puzzle_element/prison
/obj/effect/sliding_puzzle/prison/get_base_icon()
if(!prisoner)
CRASH("Prison cube without prisoner")
prisoner.setDir(SOUTH)
var/icon/I = getFlatIcon(prisoner)
I.Scale(96,96)
return I
/obj/effect/sliding_puzzle/prison/Destroy()
if(prisoner)
to_chat(prisoner,"<span class='userdanger'>With the cube broken by force, you can feel your body falling apart.</span>")
prisoner.death()
qdel(prisoner)
. = ..()
/obj/effect/sliding_puzzle/prison/dispense_reward()
prisoner.forceMove(get_turf(src))
prisoner.notransform = FALSE
prisoner = null
//Some armor so it's harder to kill someone by mistake.
/obj/structure/puzzle_element/prison
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50)
/obj/structure/puzzle_element/prison/relaymove(mob/user)
return
/obj/item/prisoncube
name = "Prison Cube"
desc = "Dusty cube with humanoid imprint on it."
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "prison_cube"
/obj/item/prisoncube/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!proximity_flag || !isliving(target))
return
var/mob/living/victim = target
var/mob/living/carbon/carbon_victim = victim
//Handcuffed or unconcious
if(istype(carbon_victim) && carbon_victim.handcuffed || victim.stat != CONSCIOUS)
if(!puzzle_imprison(target))
to_chat(user,"<span class='warning'>[src] does nothing.</span>")
return
to_chat(user,"<span class='warning'>You trap [victim] in the prison cube!</span>")
qdel(src)
else
to_chat(user,"<span class='notice'>[src] only accepts restrained or unconcious prisoners.</span>")
/proc/puzzle_imprison(mob/living/prisoner)
var/turf/T = get_turf(prisoner)
var/obj/effect/sliding_puzzle/prison/cube = new(T)
if(!cube.check_setup_location())
qdel(cube)
return FALSE
//First grab the prisoner and move them temporarily into the generator so they won't get thrown around.
prisoner.notransform = TRUE
prisoner.forceMove(cube)
to_chat(prisoner,"<span class='userdanger'>You're trapped by the prison cube! You will remain trapped until someone solves it.</span>")
//Clear the area from objects (and cube user)
var/list/things_to_throw = list()
for(var/atom/movable/AM in range(1,T))
if(!AM.anchored)
things_to_throw += AM
for(var/atom/movable/AM in things_to_throw)
var/throwtarget = get_edge_target_turf(T, get_dir(T, get_step_away(AM, T)))
AM.throw_at(throwtarget, 2, 3)
//Create puzzle itself
cube.prisoner = prisoner
cube.setup()
//Move them into random block
var/obj/structure/puzzle_element/E = pick(cube.elements)
prisoner.forceMove(E)
return TRUE
@@ -0,0 +1,156 @@
//These objects are used in the cardinal sin-themed ruins (i.e. Gluttony, Pride...)
// Greed
/obj/structure/cursed_slot_machine //Greed's slot machine: Used in the Greed ruin. Deals clone damage on each use, with a successful use giving a d20 of fate.
name = "greed's slot machine"
desc = "High stakes, high rewards."
icon = 'icons/obj/economy.dmi'
icon_state = "slots-off"
anchored = TRUE
density = TRUE
var/win_prob = 5
/obj/structure/cursed_slot_machine/attack_hand(mob/user)
interact(user)
/obj/structure/cursed_slot_machine/interact(mob/living/carbon/human/user)
if(!istype(user))
return
if(in_use)
return
in_use = TRUE
user.adjustCloneLoss(20)
if(user.stat)
to_chat(user, "<span class='userdanger'>No... just one more try...</span>")
user.gib()
else
user.visible_message("<span class='warning'>[user] pulls [src]'s lever with a glint in [user.p_their()] eyes!</span>", "<span class='warning'>You feel a draining as you pull the lever, but you \
know it'll be worth it.</span>")
icon_state = "slots-on"
playsound(src, 'sound/lavaland/cursed_slot_machine.ogg', 50, 0)
addtimer(CALLBACK(src, .proc/determine_victor, user), 50)
/obj/structure/cursed_slot_machine/proc/determine_victor(mob/living/user)
icon_state = "slots-off"
in_use = FALSE
if(prob(win_prob))
playsound(src, 'sound/lavaland/cursed_slot_machine_jackpot.ogg', 50, 0)
new/obj/structure/cursed_money(get_turf(src))
if(user)
to_chat(user, "<span class='boldwarning'>You've hit jackpot. Laughter echoes around you as your reward appears in the machine's place.</span>")
qdel(src)
else
if(user)
to_chat(user, "<span class='boldwarning'>Fucking machine! Must be rigged. Still... one more try couldn't hurt, right?</span>")
/obj/structure/cursed_money
name = "bag of money"
desc = "RICH! YES! YOU KNEW IT WAS WORTH IT! YOU'RE RICH! RICH! RICH!"
icon = 'icons/obj/storage.dmi'
icon_state = "moneybag"
anchored = FALSE
density = TRUE
/obj/structure/cursed_money/Initialize()
. = ..()
addtimer(CALLBACK(src, .proc/collapse), 600)
/obj/structure/cursed_money/proc/collapse()
visible_message("<span class='warning'>[src] falls in on itself, \
canvas rotting away and contents vanishing.</span>")
qdel(src)
/obj/structure/cursed_money/attack_hand(mob/living/user)
. = ..()
if(.)
return .
user.visible_message("<span class='warning'>[user] opens the bag and \
and removes a die. The bag then vanishes.</span>",
"<span class='boldwarning'>You open the bag...!</span>\n\
<span class='danger'>And see a bag full of dice. Confused, \
you take one... and the bag vanishes.</span>")
var/turf/T = get_turf(user)
var/obj/item/dice/d20/fate/one_use/critical_fail = new(T)
user.put_in_hands(critical_fail)
qdel(src)
// Gluttony
/obj/effect/gluttony //Gluttony's wall: Used in the Gluttony ruin. Only lets the overweight through.
name = "gluttony's wall"
desc = "Only those who truly indulge may pass."
anchored = TRUE
density = TRUE
icon_state = "blob"
icon = 'icons/mob/blob.dmi'
color = rgb(145, 150, 0)
/obj/effect/gluttony/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff.
if(ishuman(mover))
var/mob/living/carbon/human/H = mover
if(H.nutrition >= NUTRITION_LEVEL_FAT || (FAT in H.mutations))
H.visible_message("<span class='warning'>[H] pushes through [src]!</span>", "<span class='notice'>You've seen and eaten worse than this.</span>")
return TRUE
else
to_chat(H, "<span class='warning'>You're repulsed by even looking at [src]. Only a pig could force themselves to go through it.</span>")
if(istype(mover, /mob/living/simple_animal/hostile/morph))
return TRUE
else
return FALSE
// Pride
/obj/structure/mirror/magic/pride //Pride's mirror: Used in the Pride ruin.
name = "pride's mirror"
desc = "Pride cometh before the..."
icon_state = "magic_mirror"
/obj/structure/mirror/magic/pride/curse(mob/user)
user.visible_message("<span class='danger'><B>The ground splits beneath [user] as [user.p_their()] hand leaves the mirror!</B></span>", \
"<span class='notice'>Perfect. Much better! Now <i>nobody</i> will be able to resist yo-</span>")
var/turf/T = get_turf(user)
var/list/levels = space_manager.z_list.Copy()
for(var/level in levels)
if(!is_teleport_allowed(level))
levels -= level
T.ChangeTurf(/turf/simulated/floor/chasm)
var/turf/simulated/floor/chasm/C = T
C.drop_x = T.x
C.drop_y = T.y
C.drop_z = pick(levels)
C.drop(user)
// Envy
/obj/item/kitchen/knife/envy //Envy's knife: Found in the Envy ruin. Attackers take on the appearance of whoever they strike.
name = "envy's knife"
desc = "Their success will be yours."
icon = 'icons/obj/wizard.dmi'
icon_state = "render"
item_state = "knife"
force = 18
throwforce = 10
w_class = WEIGHT_CLASS_NORMAL
hitsound = 'sound/weapons/bladeslice.ogg'
/obj/item/kitchen/knife/envy/afterattack(atom/movable/AM, mob/living/carbon/human/user, proximity)
. = ..()
if(!proximity)
return
if(!istype(user))
return
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
if(user.real_name != H.dna.real_name)
user.real_name = H.dna.real_name
H.dna.transfer_identity(user)
user.visible_message("<span class='warning'>[user]'s appearance shifts into [H]'s!</span>", \
"<span class='boldannounce'>[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] <i>sooo</i> much better than you. Not anymore, [H.p_they()] won't.</span>")
// Sloth
/obj/item/paper/fluff/stations/lavaland/sloth/note
name = "note from sloth"
icon_state = "paper_words"
info = "have not gotten around to finishing my cursed item yet sorry - sloth"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

After

Width:  |  Height:  |  Size: 315 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 KiB

After

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

+6 -1
View File
@@ -1255,7 +1255,6 @@
#include "code\modules\awaymissions\loot.dm"
#include "code\modules\awaymissions\map_rng.dm"
#include "code\modules\awaymissions\pamphlet.dm"
#include "code\modules\awaymissions\trigger.dm"
#include "code\modules\awaymissions\zlevel.dm"
#include "code\modules\awaymissions\zvis.dm"
#include "code\modules\awaymissions\maploader\dmm_suite.dm"
@@ -1911,6 +1910,7 @@
#include "code\modules\mob\living\simple_animal\hostile\killertomato.dm"
#include "code\modules\mob\living\simple_animal\hostile\mimic.dm"
#include "code\modules\mob\living\simple_animal\hostile\mushroom.dm"
#include "code\modules\mob\living\simple_animal\hostile\netherworld.dm"
#include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
#include "code\modules\mob\living\simple_animal\hostile\russian.dm"
#include "code\modules\mob\living\simple_animal\hostile\spaceworms.dm"
@@ -2293,8 +2293,13 @@
#include "code\modules\ruins\ruin_areas.dm"
#include "code\modules\ruins\lavalandruin_code\animal_hospital.dm"
#include "code\modules\ruins\lavalandruin_code\ash_walker_den.dm"
#include "code\modules\ruins\lavalandruin_code\dead_ratvar.dm"
#include "code\modules\ruins\lavalandruin_code\fountain_hall.dm"
#include "code\modules\ruins\lavalandruin_code\hermit.dm"
#include "code\modules\ruins\lavalandruin_code\pizzaparty.dm"
#include "code\modules\ruins\lavalandruin_code\puzzle.dm"
#include "code\modules\ruins\lavalandruin_code\seed_vault.dm"
#include "code\modules\ruins\lavalandruin_code\sin_ruins.dm"
#include "code\modules\ruins\lavalandruin_code\syndicate_base.dm"
#include "code\modules\ruins\objects_and_mobs\gym.dm"
#include "code\modules\ruins\objects_and_mobs\necropolis_gate.dm"
Binary file not shown.
Binary file not shown.
Binary file not shown.