mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 12:35:33 +01:00
[MIRROR] deathmatch (#26556)
* deathmatch (#81444) ## About The Pull Request  adds a deathmatch minigame, a port and slightly redone version of the aetherstation deathmatch (by TheChosenEvilOne) the goal is to kill everyone else with loadouts ## Why It's Good For The Game CTF sucks and this is probably better to filter out the bloodthirsty terry players anyway ## Changelog 🆑 add: deathmatch minigame /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com> * deathmatch --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,567 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"e" = (
|
||||
/obj/structure/barricade/security/ctf,
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/deathmatch)
|
||||
"l" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/deathmatch)
|
||||
"n" = (
|
||||
/turf/open/floor/pod/light,
|
||||
/area/deathmatch)
|
||||
"o" = (
|
||||
/obj/machinery/recharger,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/deathmatch)
|
||||
"t" = (
|
||||
/obj/structure/barricade/security/ctf,
|
||||
/turf/open/floor/pod/light,
|
||||
/area/deathmatch)
|
||||
"u" = (
|
||||
/turf/open/floor/pod,
|
||||
/area/deathmatch)
|
||||
"G" = (
|
||||
/obj/structure/barricade/security/ctf,
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/deathmatch)
|
||||
"H" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/pod,
|
||||
/area/deathmatch)
|
||||
"I" = (
|
||||
/turf/closed/indestructible/reinforced,
|
||||
/area/deathmatch)
|
||||
"M" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/pod,
|
||||
/area/deathmatch)
|
||||
"N" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/pod,
|
||||
/area/deathmatch)
|
||||
"O" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/deathmatch)
|
||||
"R" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/pod,
|
||||
/area/deathmatch)
|
||||
"S" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/deathmatch)
|
||||
"T" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/deathmatch)
|
||||
"W" = (
|
||||
/turf/open/floor/pod/dark,
|
||||
/area/deathmatch)
|
||||
"X" = (
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/deathmatch)
|
||||
"Y" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/turf/open/floor/mineral/plastitanium/red,
|
||||
/area/deathmatch)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
O
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
Y
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
n
|
||||
o
|
||||
n
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
e
|
||||
X
|
||||
X
|
||||
n
|
||||
n
|
||||
t
|
||||
t
|
||||
t
|
||||
n
|
||||
n
|
||||
X
|
||||
X
|
||||
e
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
e
|
||||
n
|
||||
n
|
||||
t
|
||||
n
|
||||
W
|
||||
n
|
||||
t
|
||||
n
|
||||
n
|
||||
e
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
n
|
||||
o
|
||||
n
|
||||
W
|
||||
W
|
||||
W
|
||||
W
|
||||
W
|
||||
n
|
||||
o
|
||||
n
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
n
|
||||
n
|
||||
n
|
||||
W
|
||||
W
|
||||
G
|
||||
G
|
||||
G
|
||||
W
|
||||
W
|
||||
n
|
||||
n
|
||||
n
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
n
|
||||
t
|
||||
W
|
||||
W
|
||||
W
|
||||
u
|
||||
u
|
||||
u
|
||||
W
|
||||
W
|
||||
W
|
||||
t
|
||||
n
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
I
|
||||
X
|
||||
X
|
||||
n
|
||||
t
|
||||
n
|
||||
W
|
||||
G
|
||||
u
|
||||
u
|
||||
N
|
||||
u
|
||||
u
|
||||
G
|
||||
W
|
||||
n
|
||||
t
|
||||
n
|
||||
X
|
||||
X
|
||||
I
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
I
|
||||
l
|
||||
Y
|
||||
o
|
||||
t
|
||||
W
|
||||
W
|
||||
G
|
||||
u
|
||||
M
|
||||
I
|
||||
R
|
||||
u
|
||||
G
|
||||
W
|
||||
W
|
||||
t
|
||||
o
|
||||
Y
|
||||
T
|
||||
I
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
I
|
||||
X
|
||||
X
|
||||
n
|
||||
t
|
||||
n
|
||||
W
|
||||
G
|
||||
u
|
||||
u
|
||||
H
|
||||
u
|
||||
u
|
||||
G
|
||||
W
|
||||
n
|
||||
t
|
||||
n
|
||||
X
|
||||
X
|
||||
I
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
n
|
||||
t
|
||||
W
|
||||
W
|
||||
W
|
||||
u
|
||||
u
|
||||
u
|
||||
W
|
||||
W
|
||||
W
|
||||
t
|
||||
n
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
n
|
||||
n
|
||||
n
|
||||
W
|
||||
W
|
||||
G
|
||||
G
|
||||
G
|
||||
W
|
||||
W
|
||||
n
|
||||
n
|
||||
n
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
n
|
||||
o
|
||||
n
|
||||
W
|
||||
W
|
||||
W
|
||||
W
|
||||
W
|
||||
n
|
||||
o
|
||||
n
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
e
|
||||
n
|
||||
n
|
||||
t
|
||||
n
|
||||
W
|
||||
n
|
||||
t
|
||||
n
|
||||
n
|
||||
e
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
e
|
||||
X
|
||||
X
|
||||
n
|
||||
n
|
||||
t
|
||||
t
|
||||
t
|
||||
n
|
||||
n
|
||||
X
|
||||
X
|
||||
e
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
n
|
||||
o
|
||||
n
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
Y
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
I
|
||||
X
|
||||
X
|
||||
S
|
||||
X
|
||||
X
|
||||
I
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
I
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -0,0 +1,802 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/closed/indestructible/reinforced,
|
||||
/area/deathmatch)
|
||||
"b" = (
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"c" = (
|
||||
/turf/open/floor/fake_snow,
|
||||
/area/deathmatch)
|
||||
"e" = (
|
||||
/obj/structure/statue/snow/snowman,
|
||||
/obj/item/toy/balloon/syndicate{
|
||||
pixel_y = 11;
|
||||
pixel_x = 5
|
||||
},
|
||||
/turf/open/floor/fake_snow,
|
||||
/area/deathmatch)
|
||||
"f" = (
|
||||
/obj/structure/table/reinforced/plastitaniumglass,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"g" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"i" = (
|
||||
/obj/structure/table/reinforced/plastitaniumglass,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"k" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/ammo_box/magazine/sniper_rounds/penetrator,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"n" = (
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"o" = (
|
||||
/obj/item/stack/medical/suture,
|
||||
/turf/open/floor/fake_snow,
|
||||
/area/deathmatch)
|
||||
"p" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"q" = (
|
||||
/obj/item/crowbar,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"r" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"t" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"u" = (
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"v" = (
|
||||
/obj/structure/rack,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"x" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"y" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"z" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"A" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"B" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/fakeice/slippery,
|
||||
/area/deathmatch)
|
||||
"C" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/chasm,
|
||||
/area/deathmatch)
|
||||
"D" = (
|
||||
/turf/open/floor/fakeice/slippery,
|
||||
/area/deathmatch)
|
||||
"F" = (
|
||||
/obj/structure/closet/crate/secure/science,
|
||||
/obj/item/toy/plush/lizard_plushie/green,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"H" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"J" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"K" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/fake_snow,
|
||||
/area/deathmatch)
|
||||
"L" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/fakeice/slippery,
|
||||
/area/deathmatch)
|
||||
"M" = (
|
||||
/obj/machinery/door/airlock/freezer,
|
||||
/obj/structure/barricade/wooden/crude,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/deathmatch)
|
||||
"N" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"O" = (
|
||||
/obj/machinery/door/airlock/freezer,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/deathmatch)
|
||||
"P" = (
|
||||
/obj/structure/table/reinforced/plastitaniumglass,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"Q" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/reagent_containers/hypospray/medipen/stimulants,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"R" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"U" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"V" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/ammo_box/magazine/sniper_rounds/penetrator,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"W" = (
|
||||
/obj/structure/toilet{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/iron/freezer,
|
||||
/area/deathmatch)
|
||||
"Y" = (
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
"Z" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/obj/item/ammo_casing/spent,
|
||||
/turf/open/floor/carpet/neon,
|
||||
/area/deathmatch)
|
||||
|
||||
(1,1,1) = {"
|
||||
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
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
F
|
||||
r
|
||||
Y
|
||||
p
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
z
|
||||
H
|
||||
Y
|
||||
Y
|
||||
p
|
||||
Y
|
||||
H
|
||||
Y
|
||||
z
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
H
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
z
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
p
|
||||
H
|
||||
Y
|
||||
i
|
||||
Y
|
||||
H
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
p
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
p
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
H
|
||||
Y
|
||||
Y
|
||||
J
|
||||
n
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
Y
|
||||
Y
|
||||
H
|
||||
p
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
H
|
||||
Y
|
||||
i
|
||||
H
|
||||
Y
|
||||
p
|
||||
Y
|
||||
Y
|
||||
i
|
||||
H
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
P
|
||||
P
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
i
|
||||
i
|
||||
Y
|
||||
a
|
||||
Y
|
||||
H
|
||||
Y
|
||||
p
|
||||
Y
|
||||
H
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
p
|
||||
Y
|
||||
Y
|
||||
a
|
||||
Y
|
||||
Y
|
||||
a
|
||||
n
|
||||
J
|
||||
n
|
||||
p
|
||||
n
|
||||
Y
|
||||
H
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
n
|
||||
R
|
||||
J
|
||||
a
|
||||
n
|
||||
n
|
||||
n
|
||||
N
|
||||
n
|
||||
n
|
||||
n
|
||||
p
|
||||
b
|
||||
b
|
||||
y
|
||||
b
|
||||
x
|
||||
a
|
||||
b
|
||||
b
|
||||
x
|
||||
p
|
||||
Y
|
||||
H
|
||||
Y
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
a
|
||||
p
|
||||
i
|
||||
a
|
||||
P
|
||||
P
|
||||
U
|
||||
a
|
||||
a
|
||||
P
|
||||
P
|
||||
p
|
||||
p
|
||||
P
|
||||
P
|
||||
a
|
||||
a
|
||||
P
|
||||
P
|
||||
P
|
||||
U
|
||||
a
|
||||
f
|
||||
f
|
||||
t
|
||||
a
|
||||
a
|
||||
p
|
||||
a
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
n
|
||||
J
|
||||
n
|
||||
U
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
L
|
||||
D
|
||||
D
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
D
|
||||
D
|
||||
P
|
||||
J
|
||||
Y
|
||||
H
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
a
|
||||
A
|
||||
n
|
||||
n
|
||||
P
|
||||
c
|
||||
c
|
||||
D
|
||||
D
|
||||
c
|
||||
o
|
||||
D
|
||||
D
|
||||
D
|
||||
c
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
c
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
P
|
||||
n
|
||||
Y
|
||||
v
|
||||
a
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
a
|
||||
k
|
||||
n
|
||||
n
|
||||
P
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
c
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
c
|
||||
a
|
||||
A
|
||||
H
|
||||
V
|
||||
a
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
a
|
||||
Q
|
||||
n
|
||||
J
|
||||
U
|
||||
D
|
||||
D
|
||||
c
|
||||
K
|
||||
D
|
||||
D
|
||||
c
|
||||
c
|
||||
D
|
||||
D
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
D
|
||||
D
|
||||
B
|
||||
c
|
||||
c
|
||||
c
|
||||
p
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
a
|
||||
p
|
||||
p
|
||||
a
|
||||
U
|
||||
U
|
||||
P
|
||||
P
|
||||
a
|
||||
U
|
||||
P
|
||||
P
|
||||
p
|
||||
P
|
||||
P
|
||||
P
|
||||
a
|
||||
U
|
||||
P
|
||||
P
|
||||
P
|
||||
P
|
||||
a
|
||||
p
|
||||
i
|
||||
i
|
||||
a
|
||||
a
|
||||
p
|
||||
a
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
n
|
||||
n
|
||||
R
|
||||
n
|
||||
p
|
||||
n
|
||||
n
|
||||
n
|
||||
R
|
||||
n
|
||||
n
|
||||
n
|
||||
p
|
||||
x
|
||||
n
|
||||
n
|
||||
n
|
||||
n
|
||||
a
|
||||
Z
|
||||
u
|
||||
u
|
||||
p
|
||||
Y
|
||||
Y
|
||||
H
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
a
|
||||
Y
|
||||
Y
|
||||
H
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
H
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
H
|
||||
p
|
||||
p
|
||||
i
|
||||
Y
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
q
|
||||
Y
|
||||
Y
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
p
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
H
|
||||
Y
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
M
|
||||
a
|
||||
O
|
||||
a
|
||||
Y
|
||||
Y
|
||||
H
|
||||
i
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
g
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
H
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
g
|
||||
Y
|
||||
i
|
||||
i
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
C
|
||||
a
|
||||
W
|
||||
p
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
g
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
H
|
||||
Y
|
||||
a
|
||||
Y
|
||||
Y
|
||||
i
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
H
|
||||
Y
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
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
|
||||
a
|
||||
a
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,808 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/deathmatch/fullbright)
|
||||
"c" = (
|
||||
/turf/open/floor/light/colour_cycle/dancefloor_b,
|
||||
/area/deathmatch/fullbright)
|
||||
"e" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/circuit/green,
|
||||
/area/deathmatch/fullbright)
|
||||
"q" = (
|
||||
/obj/machinery/door/airlock/titanium/glass,
|
||||
/turf/open/floor/mineral/abductor,
|
||||
/area/deathmatch/fullbright)
|
||||
"u" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"v" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/circuit/green,
|
||||
/area/deathmatch/fullbright)
|
||||
"y" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/circuit/green,
|
||||
/area/deathmatch/fullbright)
|
||||
"A" = (
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/vault/alien,
|
||||
/area/deathmatch/fullbright)
|
||||
"B" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/vault/alien,
|
||||
/area/deathmatch/fullbright)
|
||||
"C" = (
|
||||
/turf/open/floor/circuit/green,
|
||||
/area/deathmatch/fullbright)
|
||||
"D" = (
|
||||
/turf/closed/indestructible/alien,
|
||||
/area/deathmatch/fullbright)
|
||||
"E" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/vault/alien,
|
||||
/area/deathmatch/fullbright)
|
||||
"F" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/obj/machinery/light/floor,
|
||||
/turf/open/floor/vault/alien,
|
||||
/area/deathmatch/fullbright)
|
||||
"H" = (
|
||||
/turf/open/floor/vault/alien,
|
||||
/area/deathmatch/fullbright)
|
||||
"I" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/vault/alien,
|
||||
/area/deathmatch/fullbright)
|
||||
"L" = (
|
||||
/obj/machinery/light,
|
||||
/turf/open/floor/circuit/green,
|
||||
/area/deathmatch/fullbright)
|
||||
"N" = (
|
||||
/obj/machinery/door/airlock/titanium/glass,
|
||||
/turf/open/floor/plating/abductor2,
|
||||
/area/deathmatch/fullbright)
|
||||
"Y" = (
|
||||
/turf/open/floor/light/colour_cycle/dancefloor_a,
|
||||
/area/deathmatch/fullbright)
|
||||
|
||||
(1,1,1) = {"
|
||||
u
|
||||
u
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
u
|
||||
u
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
u
|
||||
D
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
N
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
N
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
D
|
||||
u
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
D
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
N
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
N
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
D
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
F
|
||||
H
|
||||
a
|
||||
a
|
||||
H
|
||||
H
|
||||
I
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
E
|
||||
H
|
||||
H
|
||||
a
|
||||
a
|
||||
H
|
||||
F
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
B
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
B
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
a
|
||||
E
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
I
|
||||
a
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
E
|
||||
H
|
||||
H
|
||||
v
|
||||
C
|
||||
C
|
||||
v
|
||||
H
|
||||
H
|
||||
I
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
B
|
||||
F
|
||||
C
|
||||
C
|
||||
a
|
||||
q
|
||||
q
|
||||
a
|
||||
C
|
||||
H
|
||||
F
|
||||
B
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
A
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
C
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
C
|
||||
C
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
A
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
D
|
||||
N
|
||||
N
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
C
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
C
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
N
|
||||
N
|
||||
D
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
D
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
H
|
||||
H
|
||||
L
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
y
|
||||
H
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
D
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
D
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
H
|
||||
C
|
||||
q
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
q
|
||||
C
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
D
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
D
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
H
|
||||
C
|
||||
q
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
q
|
||||
C
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
D
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
D
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
H
|
||||
H
|
||||
L
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
y
|
||||
H
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
D
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
D
|
||||
N
|
||||
N
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
C
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
C
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
N
|
||||
N
|
||||
D
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
B
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
C
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
C
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
B
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
A
|
||||
F
|
||||
C
|
||||
C
|
||||
a
|
||||
q
|
||||
q
|
||||
a
|
||||
C
|
||||
C
|
||||
F
|
||||
A
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
E
|
||||
H
|
||||
H
|
||||
e
|
||||
C
|
||||
C
|
||||
e
|
||||
H
|
||||
H
|
||||
I
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
a
|
||||
E
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
I
|
||||
a
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(22,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
A
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
a
|
||||
Y
|
||||
Y
|
||||
a
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
A
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(23,1,1) = {"
|
||||
D
|
||||
H
|
||||
H
|
||||
F
|
||||
H
|
||||
a
|
||||
a
|
||||
H
|
||||
H
|
||||
I
|
||||
a
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
a
|
||||
E
|
||||
H
|
||||
H
|
||||
a
|
||||
a
|
||||
H
|
||||
F
|
||||
H
|
||||
H
|
||||
D
|
||||
"}
|
||||
(24,1,1) = {"
|
||||
D
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
N
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
N
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
D
|
||||
"}
|
||||
(25,1,1) = {"
|
||||
u
|
||||
D
|
||||
D
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
N
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
N
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
H
|
||||
D
|
||||
D
|
||||
u
|
||||
"}
|
||||
(26,1,1) = {"
|
||||
u
|
||||
u
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
u
|
||||
u
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,575 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/obj/item/melee/baseball_bat,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"b" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"c" = (
|
||||
/obj/item/cardboard_cutout/adaptive{
|
||||
starting_cutout = "Private Security Officer"
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/cardboard_cutout/adaptive{
|
||||
starting_cutout = "Private Security Officer"
|
||||
},
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"d" = (
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/north,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"f" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"g" = (
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/west,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"i" = (
|
||||
/obj/effect/spawner/random/trash/mess,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"k" = (
|
||||
/obj/effect/decal/cleanable/blood/tracks{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"l" = (
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"m" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/cardboard_cutout/adaptive{
|
||||
starting_cutout = "Private Security Officer"
|
||||
},
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"o" = (
|
||||
/turf/closed/indestructible/grille,
|
||||
/area/deathmatch)
|
||||
"p" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/machinery/power/rtg/debug{
|
||||
power_gen = 50000;
|
||||
name = "dumb idiot shocker powerer";
|
||||
desc = "Dont touch the grilles idiot"
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"q" = (
|
||||
/turf/closed/indestructible/fakedoor/engineering,
|
||||
/area/deathmatch)
|
||||
"t" = (
|
||||
/obj/effect/spawner/random/trash/graffiti,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"u" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/structure/cable,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"w" = (
|
||||
/obj/effect/decal/cleanable/blood/gibs/limb,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"x" = (
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"z" = (
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/north,
|
||||
/obj/structure/window/reinforced/spawner/directional/east,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"A" = (
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/west,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"B" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/cardboard_cutout/adaptive{
|
||||
starting_cutout = "Private Security Officer"
|
||||
},
|
||||
/obj/structure/cable,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"C" = (
|
||||
/obj/effect/decal/cleanable/blood/tracks,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"D" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"G" = (
|
||||
/turf/closed/indestructible/reinforced,
|
||||
/area/deathmatch)
|
||||
"H" = (
|
||||
/turf/closed/indestructible/fakedoor/maintenance,
|
||||
/area/deathmatch)
|
||||
"I" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/spear,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"K" = (
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/obj/structure/window/reinforced/spawner/directional/east,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"L" = (
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/west,
|
||||
/obj/structure/window/reinforced/spawner/directional/north,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"M" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/flashlight/flare{
|
||||
start_on = 1;
|
||||
icon_state = "flare-on"
|
||||
},
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"N" = (
|
||||
/obj/effect/decal/cleanable/blood/gibs/down,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"P" = (
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/east,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"Q" = (
|
||||
/obj/effect/decal/cleanable/blood/tracks{
|
||||
dir = 10
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"R" = (
|
||||
/obj/effect/spawner/structure/electrified_grille,
|
||||
/obj/structure/window/reinforced/spawner/directional/south,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"S" = (
|
||||
/obj/effect/decal/cleanable/blood/gibs/torso,
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"U" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"V" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/cardboard_cutout/adaptive{
|
||||
starting_cutout = "Private Security Officer"
|
||||
},
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"X" = (
|
||||
/obj/effect/decal/cleanable/dirt/dust,
|
||||
/obj/item/storage/toolbox/mechanical/old,
|
||||
/turf/open/indestructible/plating,
|
||||
/area/deathmatch)
|
||||
"Z" = (
|
||||
/turf/cordon,
|
||||
/area/deathmatch)
|
||||
|
||||
(1,1,1) = {"
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
Z
|
||||
G
|
||||
G
|
||||
H
|
||||
G
|
||||
o
|
||||
G
|
||||
H
|
||||
G
|
||||
H
|
||||
G
|
||||
o
|
||||
G
|
||||
H
|
||||
G
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
Z
|
||||
G
|
||||
p
|
||||
u
|
||||
U
|
||||
U
|
||||
U
|
||||
D
|
||||
U
|
||||
U
|
||||
U
|
||||
I
|
||||
U
|
||||
U
|
||||
f
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
B
|
||||
V
|
||||
V
|
||||
V
|
||||
V
|
||||
V
|
||||
V
|
||||
V
|
||||
c
|
||||
V
|
||||
V
|
||||
X
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
L
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
g
|
||||
U
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
d
|
||||
U
|
||||
U
|
||||
U
|
||||
l
|
||||
C
|
||||
Q
|
||||
t
|
||||
U
|
||||
U
|
||||
x
|
||||
U
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
Z
|
||||
G
|
||||
X
|
||||
d
|
||||
U
|
||||
M
|
||||
U
|
||||
U
|
||||
b
|
||||
k
|
||||
U
|
||||
U
|
||||
U
|
||||
x
|
||||
U
|
||||
q
|
||||
Z
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
d
|
||||
U
|
||||
U
|
||||
t
|
||||
U
|
||||
U
|
||||
k
|
||||
U
|
||||
M
|
||||
U
|
||||
R
|
||||
U
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
d
|
||||
U
|
||||
U
|
||||
U
|
||||
i
|
||||
a
|
||||
U
|
||||
N
|
||||
U
|
||||
U
|
||||
R
|
||||
U
|
||||
o
|
||||
Z
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
Z
|
||||
G
|
||||
D
|
||||
d
|
||||
U
|
||||
b
|
||||
U
|
||||
a
|
||||
U
|
||||
a
|
||||
U
|
||||
b
|
||||
t
|
||||
R
|
||||
D
|
||||
o
|
||||
Z
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
d
|
||||
t
|
||||
U
|
||||
S
|
||||
U
|
||||
a
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
R
|
||||
U
|
||||
o
|
||||
Z
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
Z
|
||||
G
|
||||
I
|
||||
d
|
||||
U
|
||||
U
|
||||
U
|
||||
M
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
R
|
||||
U
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
d
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
b
|
||||
t
|
||||
U
|
||||
U
|
||||
i
|
||||
R
|
||||
I
|
||||
q
|
||||
Z
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
d
|
||||
U
|
||||
U
|
||||
w
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
M
|
||||
R
|
||||
U
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
z
|
||||
P
|
||||
P
|
||||
P
|
||||
P
|
||||
P
|
||||
P
|
||||
P
|
||||
P
|
||||
P
|
||||
K
|
||||
U
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
Z
|
||||
G
|
||||
U
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
U
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
Z
|
||||
G
|
||||
f
|
||||
U
|
||||
U
|
||||
X
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
I
|
||||
U
|
||||
U
|
||||
U
|
||||
f
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
Z
|
||||
G
|
||||
G
|
||||
H
|
||||
G
|
||||
o
|
||||
G
|
||||
H
|
||||
G
|
||||
H
|
||||
G
|
||||
o
|
||||
G
|
||||
H
|
||||
G
|
||||
G
|
||||
Z
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
Z
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,750 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/obj/machinery/light/directional/east,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"b" = (
|
||||
/obj/structure/chair/office{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/turf/open/floor/wood/large,
|
||||
/area/deathmatch)
|
||||
"c" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/spawner/structure/window,
|
||||
/turf/open/floor/wood/large,
|
||||
/area/deathmatch)
|
||||
"d" = (
|
||||
/obj/item/ammo_box/magazine/m9mm/ap,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"e" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"f" = (
|
||||
/obj/machinery/light/directional/west,
|
||||
/obj/structure/barricade/sandbags,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"g" = (
|
||||
/turf/closed/indestructible/iron,
|
||||
/area/deathmatch)
|
||||
"h" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"i" = (
|
||||
/obj/structure/extinguisher_cabinet/directional/east,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"j" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"k" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/ammo_box/magazine/m9mm/fire,
|
||||
/turf/open/floor/wood/large,
|
||||
/area/deathmatch)
|
||||
"l" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/obj/item/ammo_box/magazine/m9mm,
|
||||
/turf/open/floor/wood/large,
|
||||
/area/deathmatch)
|
||||
"m" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"n" = (
|
||||
/obj/structure/extinguisher_cabinet/directional/west,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"o" = (
|
||||
/obj/item/ammo_box/magazine/m9mm/ap,
|
||||
/obj/structure/closet/crate/secure/weapon{
|
||||
locked = 0
|
||||
},
|
||||
/obj/effect/turf_decal/siding/wood/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"p" = (
|
||||
/obj/effect/turf_decal/siding/wood/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"q" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"r" = (
|
||||
/obj/item/flashlight/flare,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"s" = (
|
||||
/obj/machinery/light/directional/south,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"t" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"u" = (
|
||||
/obj/structure/barricade/sandbags,
|
||||
/obj/structure/extinguisher_cabinet/directional/west,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"v" = (
|
||||
/obj/item/reagent_containers/hypospray/medipen,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"x" = (
|
||||
/obj/item/ammo_box/magazine/m9mm/fire,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"y" = (
|
||||
/obj/item/ammo_box/magazine/m9mm/fire,
|
||||
/obj/structure/closet/crate/secure/weapon{
|
||||
locked = 0
|
||||
},
|
||||
/obj/effect/turf_decal/siding/wood/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"z" = (
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"A" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"B" = (
|
||||
/obj/machinery/light/directional/west,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"C" = (
|
||||
/obj/structure/table/reinforced,
|
||||
/obj/item/flashlight/lamp,
|
||||
/turf/open/floor/wood/large,
|
||||
/area/deathmatch)
|
||||
"D" = (
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"E" = (
|
||||
/obj/effect/turf_decal/siding/wood/corner,
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"F" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/obj/effect/turf_decal/siding/wood,
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"I" = (
|
||||
/obj/effect/turf_decal/siding/wood,
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"K" = (
|
||||
/turf/closed/wall,
|
||||
/area/deathmatch)
|
||||
"M" = (
|
||||
/obj/structure/barricade/sandbags,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"O" = (
|
||||
/obj/structure/barricade/wooden,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"Q" = (
|
||||
/obj/item/ammo_box/magazine/m9mm/hp,
|
||||
/obj/structure/closet/crate/secure/weapon{
|
||||
locked = 0
|
||||
},
|
||||
/obj/effect/turf_decal/siding/wood{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/wood/tile,
|
||||
/area/deathmatch)
|
||||
"T" = (
|
||||
/obj/effect/landmark/deathmatch_player_spawn,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"U" = (
|
||||
/turf/open/floor/wood/large,
|
||||
/area/deathmatch)
|
||||
"W" = (
|
||||
/obj/machinery/light/directional/north,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
"X" = (
|
||||
/obj/effect/turf_decal/siding/wood,
|
||||
/turf/open/floor/wood/large,
|
||||
/area/deathmatch)
|
||||
"Y" = (
|
||||
/obj/structure/extinguisher_cabinet/directional/north,
|
||||
/turf/open/floor/wood,
|
||||
/area/deathmatch)
|
||||
|
||||
(1,1,1) = {"
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
g
|
||||
E
|
||||
j
|
||||
q
|
||||
q
|
||||
h
|
||||
q
|
||||
q
|
||||
q
|
||||
q
|
||||
q
|
||||
q
|
||||
Q
|
||||
q
|
||||
q
|
||||
q
|
||||
j
|
||||
q
|
||||
q
|
||||
q
|
||||
o
|
||||
g
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
T
|
||||
K
|
||||
z
|
||||
z
|
||||
M
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
i
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
m
|
||||
g
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
z
|
||||
K
|
||||
M
|
||||
M
|
||||
M
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
O
|
||||
K
|
||||
z
|
||||
z
|
||||
K
|
||||
O
|
||||
m
|
||||
g
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
a
|
||||
z
|
||||
K
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
e
|
||||
z
|
||||
O
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
K
|
||||
m
|
||||
g
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
g
|
||||
F
|
||||
O
|
||||
K
|
||||
z
|
||||
n
|
||||
z
|
||||
z
|
||||
z
|
||||
a
|
||||
z
|
||||
e
|
||||
z
|
||||
z
|
||||
K
|
||||
W
|
||||
e
|
||||
z
|
||||
z
|
||||
z
|
||||
t
|
||||
g
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
f
|
||||
e
|
||||
z
|
||||
r
|
||||
K
|
||||
K
|
||||
K
|
||||
O
|
||||
O
|
||||
K
|
||||
z
|
||||
K
|
||||
z
|
||||
z
|
||||
T
|
||||
z
|
||||
z
|
||||
m
|
||||
g
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
M
|
||||
M
|
||||
M
|
||||
z
|
||||
c
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
X
|
||||
z
|
||||
O
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
K
|
||||
m
|
||||
g
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
g
|
||||
I
|
||||
e
|
||||
z
|
||||
v
|
||||
z
|
||||
z
|
||||
K
|
||||
U
|
||||
l
|
||||
b
|
||||
U
|
||||
X
|
||||
z
|
||||
O
|
||||
K
|
||||
K
|
||||
K
|
||||
K
|
||||
O
|
||||
m
|
||||
g
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
K
|
||||
U
|
||||
C
|
||||
k
|
||||
U
|
||||
K
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
M
|
||||
z
|
||||
z
|
||||
m
|
||||
g
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
c
|
||||
U
|
||||
U
|
||||
U
|
||||
U
|
||||
O
|
||||
e
|
||||
v
|
||||
z
|
||||
z
|
||||
M
|
||||
x
|
||||
z
|
||||
m
|
||||
g
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
M
|
||||
M
|
||||
z
|
||||
z
|
||||
K
|
||||
O
|
||||
O
|
||||
K
|
||||
K
|
||||
K
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
M
|
||||
M
|
||||
z
|
||||
t
|
||||
g
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
e
|
||||
M
|
||||
z
|
||||
z
|
||||
B
|
||||
z
|
||||
z
|
||||
z
|
||||
u
|
||||
d
|
||||
z
|
||||
z
|
||||
r
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
m
|
||||
g
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
M
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
M
|
||||
z
|
||||
M
|
||||
z
|
||||
z
|
||||
s
|
||||
K
|
||||
K
|
||||
O
|
||||
O
|
||||
K
|
||||
m
|
||||
g
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
g
|
||||
I
|
||||
K
|
||||
O
|
||||
O
|
||||
K
|
||||
O
|
||||
z
|
||||
z
|
||||
M
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
K
|
||||
T
|
||||
z
|
||||
z
|
||||
K
|
||||
m
|
||||
g
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
O
|
||||
z
|
||||
K
|
||||
K
|
||||
z
|
||||
K
|
||||
O
|
||||
z
|
||||
z
|
||||
O
|
||||
z
|
||||
z
|
||||
s
|
||||
K
|
||||
m
|
||||
g
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
g
|
||||
I
|
||||
e
|
||||
z
|
||||
T
|
||||
s
|
||||
K
|
||||
z
|
||||
K
|
||||
z
|
||||
z
|
||||
z
|
||||
O
|
||||
z
|
||||
z
|
||||
O
|
||||
e
|
||||
z
|
||||
z
|
||||
K
|
||||
m
|
||||
g
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
K
|
||||
Y
|
||||
K
|
||||
W
|
||||
z
|
||||
z
|
||||
O
|
||||
z
|
||||
z
|
||||
K
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
m
|
||||
g
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
K
|
||||
e
|
||||
K
|
||||
z
|
||||
e
|
||||
z
|
||||
K
|
||||
z
|
||||
z
|
||||
K
|
||||
K
|
||||
K
|
||||
K
|
||||
K
|
||||
m
|
||||
g
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
g
|
||||
I
|
||||
z
|
||||
K
|
||||
K
|
||||
z
|
||||
K
|
||||
z
|
||||
K
|
||||
K
|
||||
z
|
||||
z
|
||||
K
|
||||
e
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
z
|
||||
m
|
||||
g
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
g
|
||||
y
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
A
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
D
|
||||
p
|
||||
g
|
||||
"}
|
||||
(22,1,1) = {"
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
g
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -61,6 +61,7 @@
|
||||
#define COLOR_VERY_SOFT_YELLOW "#FAE48E"
|
||||
#define COLOR_GOLD "#FFD700"
|
||||
#define COLOR_ETHIOPIA_YELLOW "#FCDD09"
|
||||
#define COLOR_LIGHT_YELLOW "#FFFEE0"
|
||||
|
||||
#define COLOR_OLIVE "#808000"
|
||||
#define COLOR_ASSISTANT_OLIVE "#828163"
|
||||
|
||||
@@ -7,3 +7,5 @@ GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report
|
||||
|
||||
/// We want reality_smash_tracker to exist only once and be accessible from anywhere.
|
||||
GLOBAL_DATUM_INIT(reality_smash_track, /datum/reality_smash_tracker, new)
|
||||
|
||||
GLOBAL_DATUM(deathmatch_game, /datum/deathmatch_controller) // Deathmatch Minigame controller
|
||||
|
||||
@@ -323,6 +323,37 @@
|
||||
return ..()
|
||||
return FALSE
|
||||
|
||||
/obj/item/clothing/gloves/the_sleeping_carp
|
||||
name = "carp gloves"
|
||||
desc = "This gloves are capable of making people use The Sleeping Carp."
|
||||
icon_state = "black"
|
||||
greyscale_colors = "#000000"
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
resistance_flags = NONE
|
||||
var/datum/martial_art/the_sleeping_carp/style
|
||||
|
||||
/obj/item/clothing/gloves/the_sleeping_carp/Initialize(mapload)
|
||||
. = ..()
|
||||
style = new()
|
||||
style.allow_temp_override = FALSE
|
||||
|
||||
/obj/item/clothing/gloves/the_sleeping_carp/Destroy()
|
||||
QDEL_NULL(style)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/gloves/the_sleeping_carp/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(slot & ITEM_SLOT_GLOVES)
|
||||
style.teach(user, TRUE)
|
||||
|
||||
/obj/item/clothing/gloves/the_sleeping_carp/dropped(mob/user)
|
||||
. = ..()
|
||||
if(!isnull(style))
|
||||
style.fully_remove(user)
|
||||
|
||||
#undef STRONG_PUNCH_COMBO
|
||||
#undef LAUNCH_KICK_COMBO
|
||||
#undef DROP_KICK_COMBO
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
ui.close()
|
||||
basketball()
|
||||
return TRUE
|
||||
if("deathmatch")
|
||||
ui.close()
|
||||
deathmatch()
|
||||
return TRUE
|
||||
|
||||
/datum/minigames_menu/proc/mafia()
|
||||
var/datum/mafia_controller/game = GLOB.mafia_game //this needs to change if you want multiple mafia games up at once.
|
||||
@@ -55,3 +59,8 @@
|
||||
if(!game)
|
||||
game = create_basketball_game()
|
||||
game.ui_interact(usr)
|
||||
|
||||
/datum/minigames_menu/proc/deathmatch()
|
||||
if(isnull(GLOB.deathmatch_game))
|
||||
GLOB.deathmatch_game = new
|
||||
GLOB.deathmatch_game.ui_interact(usr)
|
||||
|
||||
@@ -115,12 +115,28 @@
|
||||
/turf/open/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE)
|
||||
return
|
||||
|
||||
|
||||
/turf/open/indestructible/large
|
||||
icon_state = "floor_large"
|
||||
|
||||
/turf/open/indestructible/white
|
||||
icon_state = "white"
|
||||
|
||||
/turf/open/indestructible/white/smooth_large
|
||||
icon_state = "white_large"
|
||||
|
||||
/turf/open/indestructible/white/textured
|
||||
icon_state = "textured_white"
|
||||
|
||||
/turf/open/indestructible/dark
|
||||
icon_state = "darkfull"
|
||||
|
||||
/turf/open/indestructible/dark/textured
|
||||
icon_state = "textured_dark"
|
||||
|
||||
/turf/open/indestructible/dark/smooth_large
|
||||
icon_state = "dark_large"
|
||||
|
||||
/turf/open/indestructible/light
|
||||
icon_state = "light_on-1"
|
||||
|
||||
@@ -232,6 +248,9 @@
|
||||
/turf/open/indestructible/meat/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
|
||||
/turf/open/indestructible/vault
|
||||
icon_state = "rockvault"
|
||||
|
||||
/turf/open/indestructible/plating
|
||||
name = "plating"
|
||||
icon_state = "plating"
|
||||
@@ -243,6 +262,18 @@
|
||||
/turf/open/indestructible/plating/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
|
||||
/turf/open/indestructible/kitchen
|
||||
icon_state = /turf/open/floor/iron/kitchen::icon_state
|
||||
|
||||
/turf/open/indestructible/rockyground
|
||||
icon_state = /turf/open/misc/ashplanet/rocky::icon_state
|
||||
icon = /turf/open/misc/ashplanet/rocky::icon
|
||||
name = /turf/open/misc/ashplanet/rocky::name
|
||||
|
||||
/turf/open/indestructible/stone
|
||||
icon_state = /turf/open/floor/stone::icon_state
|
||||
name = /turf/open/floor/stone::name
|
||||
|
||||
/turf/open/Initalize_Atmos(time)
|
||||
excited = FALSE
|
||||
update_visuals()
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
/datum/deathmatch_controller
|
||||
/// Assoc list of all lobbies (ckey = lobby)
|
||||
var/list/datum/deathmatch_lobby/lobbies = list()
|
||||
/// All deathmatch map templates
|
||||
var/list/datum/lazy_template/deathmatch/maps = list()
|
||||
/// All loadouts
|
||||
var/list/datum/outfit/loadouts
|
||||
|
||||
/// All currently present spawnpoints, to be processed by a loading map
|
||||
var/list/spawnpoint_processing = list()
|
||||
|
||||
/datum/deathmatch_controller/New()
|
||||
. = ..()
|
||||
if (GLOB.deathmatch_game)
|
||||
qdel(src)
|
||||
CRASH("A deathmatch controller already exists.")
|
||||
GLOB.deathmatch_game = src
|
||||
|
||||
for (var/datum/lazy_template/deathmatch/template as anything in subtypesof(/datum/lazy_template/deathmatch))
|
||||
var/map_name = initial(template.name)
|
||||
maps[map_name] = new template
|
||||
loadouts = subtypesof(/datum/outfit/deathmatch_loadout)
|
||||
|
||||
/datum/deathmatch_controller/proc/create_new_lobby(mob/host)
|
||||
lobbies[host.ckey] = new /datum/deathmatch_lobby(host)
|
||||
deadchat_broadcast(" has opened a new deathmatch lobby. <a href=?src=[REF(lobbies[host.ckey])];join=1>(Join)</a>", "<B>[host]</B>")
|
||||
|
||||
/datum/deathmatch_controller/proc/remove_lobby(ckey)
|
||||
var/lobby = lobbies[ckey]
|
||||
lobbies[ckey] = null
|
||||
lobbies.Remove(ckey)
|
||||
qdel(lobby)
|
||||
|
||||
/datum/deathmatch_controller/proc/passoff_lobby(host, new_host)
|
||||
lobbies[new_host] = lobbies[host]
|
||||
lobbies[host] = null
|
||||
lobbies.Remove(host)
|
||||
|
||||
/datum/deathmatch_controller/proc/load_lazyarena(map_key)
|
||||
if(!isnull(map_key) && !isnull(maps[map_key]))
|
||||
var/datum/lazy_template/deathmatch/temp = maps[map_key]
|
||||
return temp.lazy_load() //returns rezervation
|
||||
|
||||
return FALSE
|
||||
|
||||
/datum/deathmatch_controller/ui_state(mob/user)
|
||||
return GLOB.observer_state
|
||||
|
||||
/datum/deathmatch_controller/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, null)
|
||||
if(!ui)
|
||||
ui = new(user, src, "DeathmatchPanel")
|
||||
ui.open()
|
||||
|
||||
/datum/deathmatch_controller/ui_data(mob/user)
|
||||
. = ..()
|
||||
.["lobbies"] = list()
|
||||
.["hosting"] = FALSE
|
||||
.["admin"] = check_rights_for(user.client, R_ADMIN)
|
||||
for (var/ckey in lobbies)
|
||||
var/datum/deathmatch_lobby/lobby = lobbies[ckey]
|
||||
if (user.ckey == ckey)
|
||||
.["hosting"] = TRUE
|
||||
if (user.ckey in lobby.observers+lobby.players)
|
||||
.["playing"] = ckey
|
||||
.["lobbies"] += list(list(
|
||||
name = ckey,
|
||||
players = lobby.players.len,
|
||||
max_players = initial(lobby.map.max_players),
|
||||
map = initial(lobby.map.name),
|
||||
playing = lobby.playing
|
||||
))
|
||||
|
||||
/datum/deathmatch_controller/proc/find_lobby_by_user(ckey)
|
||||
for(var/lobbykey in lobbies)
|
||||
var/datum/deathmatch_lobby/lobby = lobbies[lobbykey]
|
||||
if(ckey in lobby.players+lobby.observers)
|
||||
return lobby
|
||||
|
||||
/datum/deathmatch_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
||||
. = ..()
|
||||
if(. || !isobserver(usr))
|
||||
return
|
||||
switch (action)
|
||||
if ("host")
|
||||
if (lobbies[usr.ckey])
|
||||
return
|
||||
if(!SSticker.HasRoundStarted())
|
||||
tgui_alert(usr, "The round hasn't started yet!")
|
||||
return
|
||||
ui.close()
|
||||
create_new_lobby(usr)
|
||||
if ("join")
|
||||
if (!lobbies[params["id"]])
|
||||
return
|
||||
var/datum/deathmatch_lobby/playing_lobby = find_lobby_by_user(usr.ckey)
|
||||
var/datum/deathmatch_lobby/chosen_lobby = lobbies[params["id"]]
|
||||
if (!isnull(playing_lobby) && playing_lobby != chosen_lobby)
|
||||
playing_lobby.leave(usr.ckey)
|
||||
|
||||
if(isnull(playing_lobby))
|
||||
log_game("[usr.ckey] joined deathmatch lobby [params["id"]] as a player.")
|
||||
chosen_lobby.join(usr)
|
||||
|
||||
chosen_lobby.ui_interact(usr)
|
||||
if ("spectate")
|
||||
var/datum/deathmatch_lobby/playing_lobby = find_lobby_by_user(usr.ckey)
|
||||
if (!lobbies[params["id"]])
|
||||
return
|
||||
var/datum/deathmatch_lobby/chosen_lobby = lobbies[params["id"]]
|
||||
// if the player is in this lobby
|
||||
if(!isnull(playing_lobby) && playing_lobby != chosen_lobby)
|
||||
playing_lobby.leave(usr.ckey)
|
||||
else if(playing_lobby == chosen_lobby)
|
||||
chosen_lobby.ui_interact(usr)
|
||||
return
|
||||
// they werent in the lobby, lets add them
|
||||
if (!chosen_lobby.playing)
|
||||
chosen_lobby.add_observer(usr)
|
||||
chosen_lobby.ui_interact(usr)
|
||||
else
|
||||
chosen_lobby.spectate(usr)
|
||||
log_game("[usr.ckey] joined deathmatch lobby [params["id"]] as an observer.")
|
||||
if ("admin")
|
||||
if (!check_rights(R_ADMIN))
|
||||
message_admins("[usr.key] has attempted to use admin functions in the deathmatch panel!")
|
||||
log_admin("[key_name(usr)] tried to use the deathmatch panel admin functions without authorization.")
|
||||
return
|
||||
var/lobby = params["id"]
|
||||
switch (params["func"])
|
||||
if ("Close")
|
||||
remove_lobby(lobby)
|
||||
log_admin("[key_name(usr)] removed deathmatch lobby [lobby].")
|
||||
if ("View")
|
||||
lobbies[lobby].ui_interact(usr)
|
||||
@@ -0,0 +1,377 @@
|
||||
/datum/outfit/deathmatch_loadout //remember that fun > balance
|
||||
name = ""
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black // im not doing this on all of them
|
||||
/// Name shown in the UI
|
||||
var/display_name = ""
|
||||
/// Description shown in the UI
|
||||
var/desc = ":KILL:"
|
||||
/// If defined, using this outfit sets the targets species to it
|
||||
var/datum/species/species_override
|
||||
/// This outfit will grant these spells if applied
|
||||
var/list/granted_spells = list()
|
||||
|
||||
/datum/outfit/deathmatch_loadout/pre_equip(mob/living/carbon/human/user, visualsOnly = FALSE)
|
||||
. = ..()
|
||||
if(isdummy(user))
|
||||
return
|
||||
|
||||
if(!isnull(species_override))
|
||||
user.set_species(species_override)
|
||||
for(var/datum/action/act as anything in granted_spells)
|
||||
var/datum/action/new_ability = new act(user)
|
||||
new_ability.Grant(user)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/naked
|
||||
name = "Deathmatch: Naked"
|
||||
display_name = "Unarmed, Butt-naked"
|
||||
desc = "Naked man craves for bloodshed."
|
||||
shoes = null
|
||||
|
||||
/datum/outfit/deathmatch_loadout/assistant
|
||||
name = "Deathmatch: Assistant loadout"
|
||||
display_name = "Assistant"
|
||||
desc = "A simple assistant loadout: greyshirt and a toolbox"
|
||||
|
||||
l_hand = /obj/item/storage/toolbox/mechanical
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
back = /obj/item/storage/backpack
|
||||
box = /obj/item/storage/box/survival
|
||||
belt = /obj/item/flashlight
|
||||
|
||||
/datum/outfit/deathmatch_loadout/assistant/weaponless
|
||||
name = "Deathmatch: Assistant loadout (Weaponless)"
|
||||
display_name = "Assistant (Unarmed)"
|
||||
desc = "What is an assistant without a toolbox? nothing"
|
||||
l_hand = null
|
||||
|
||||
/datum/outfit/deathmatch_loadout/operative
|
||||
name = "Deathmatch: Operative"
|
||||
display_name = "Operative"
|
||||
desc = "A syndicate operative."
|
||||
|
||||
uniform = /obj/item/clothing/under/syndicate
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
back = /obj/item/storage/backpack
|
||||
id = /obj/item/card/id/advanced/chameleon
|
||||
|
||||
/datum/outfit/deathmatch_loadout/operative/ranged
|
||||
name = "Deathmatch: Ranged Operative"
|
||||
display_name = "Ranged Operative"
|
||||
desc = "A syndicate operative with a gun and a knife."
|
||||
|
||||
l_hand = /obj/item/gun/ballistic/automatic/pistol
|
||||
l_pocket = /obj/item/knife/combat
|
||||
backpack_contents = list(/obj/item/ammo_box/magazine/m9mm = 5)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/operative/melee
|
||||
name = "Deathmatch: Melee Operative"
|
||||
display_name = "Melee Operative"
|
||||
desc = "A syndicate operative with multiple knives."
|
||||
|
||||
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
head = /obj/item/clothing/head/helmet
|
||||
backpack_contents = list(/obj/item/knife/combat = 6)
|
||||
l_hand = /obj/item/knife/combat
|
||||
l_pocket = /obj/item/knife/combat
|
||||
|
||||
/datum/outfit/deathmatch_loadout/securing_sec
|
||||
name = "Deathmatch: Security Officer"
|
||||
display_name = "Security Officer"
|
||||
desc = "A security officer."
|
||||
|
||||
uniform = /datum/outfit/job/security::uniform
|
||||
suit = /datum/outfit/job/security::suit
|
||||
suit_store = /datum/outfit/job/security::suit_store
|
||||
belt = /datum/outfit/job/security::belt
|
||||
ears = /datum/outfit/job/security::ears //cant communicate with station i think?
|
||||
gloves = /datum/outfit/job/security::gloves
|
||||
head = /datum/outfit/job/security::head
|
||||
shoes = /datum/outfit/job/security::shoes
|
||||
l_pocket = /obj/item/flashlight/seclite
|
||||
l_hand = /obj/item/gun/energy/disabler
|
||||
r_pocket = /obj/item/knife/combat/survival
|
||||
back = /datum/outfit/job/security::backpack
|
||||
box = /datum/outfit/job/security::box
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/assistant/instagib
|
||||
name = "DM: Instagib"
|
||||
display_name = "Instagib"
|
||||
desc = "Assistant with an instakill rifle."
|
||||
|
||||
l_hand = /obj/item/gun/energy/laser/instakill
|
||||
|
||||
/datum/outfit/deathmatch_loadout/operative/sniper
|
||||
name = "Deathmatch: Sniper"
|
||||
display_name = "Sniper"
|
||||
desc = "You know what do you need to do"
|
||||
backpack_contents = list(
|
||||
/obj/item/ammo_box/magazine/sniper_rounds = 3,
|
||||
)
|
||||
glasses = /obj/item/clothing/glasses/thermal
|
||||
uniform = /obj/item/clothing/under/syndicate/sniper
|
||||
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
|
||||
l_pocket = /obj/item/knife/combat
|
||||
l_hand = /obj/item/gun/ballistic/rifle/sniper_rifle
|
||||
|
||||
/datum/outfit/deathmatch_loadout/chef
|
||||
name = "Deathmatch: Chef"
|
||||
display_name = "Chef"
|
||||
desc = "He love pizza."
|
||||
uniform = /obj/item/clothing/under/costume/buttondown/slacks/service
|
||||
suit = /obj/item/clothing/suit/toggle/chef
|
||||
head = /obj/item/clothing/head/utility/chefhat
|
||||
mask = /obj/item/clothing/mask/fakemoustache/italian
|
||||
gloves = /obj/item/clothing/gloves/the_sleeping_carp
|
||||
back = /obj/item/storage/backpack
|
||||
backpack_contents = list(
|
||||
/obj/item/sharpener,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/samurai
|
||||
name = "Deathmatch: Samurai"
|
||||
display_name = "Samurai"
|
||||
desc = "Bare-footed man craves to bloodshed."
|
||||
l_hand = /obj/item/katana
|
||||
uniform = /obj/item/clothing/under/costume/gi
|
||||
|
||||
/// battlers
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler
|
||||
name = "Deathmatch: Battler Base"
|
||||
display_name = "Battler"
|
||||
desc = "What is a battler whith out weapone?."
|
||||
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
uniform = /obj/item/clothing/under/syndicate
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
back = /obj/item/storage/backpack
|
||||
id = /obj/item/card/id/advanced/chameleon
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/soldier
|
||||
name = "Deathmatch: Soldier"
|
||||
display_name = "Soldier"
|
||||
desc = "Ready for combat."
|
||||
|
||||
l_hand = /obj/item/gun/ballistic/rifle/boltaction
|
||||
l_pocket = /obj/item/knife/combat
|
||||
uniform = /obj/item/clothing/under/syndicate/rus_army
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
head = /obj/item/clothing/head/helmet/rus_helmet
|
||||
gloves = /obj/item/clothing/gloves/tackler/combat/insulated
|
||||
|
||||
backpack_contents = list(
|
||||
/obj/item/grenade/smokebomb = 2,
|
||||
/obj/item/ammo_box/strilka310 = 2,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/druid
|
||||
name = "Deathmatch: Druid"
|
||||
display_name = "Druid"
|
||||
desc = "How can plants help you?"
|
||||
species_override = /datum/species/pod
|
||||
l_hand = /obj/item/gun/ballistic/bow
|
||||
r_hand = /obj/item/ammo_casing/arrow
|
||||
l_pocket = /obj/item/knife/shiv/carrot
|
||||
r_pocket = /obj/item/flashlight/lantern
|
||||
head = /obj/item/food/grown/ambrosia/gaia
|
||||
uniform = /obj/item/clothing/under/shorts/green
|
||||
mask = /obj/item/clothing/mask/gas/tiki_mask
|
||||
glasses = /obj/item/clothing/glasses/thermal
|
||||
gloves = /obj/item/clothing/gloves/botanic_leather
|
||||
belt = /obj/item/gun/syringe/blowgun
|
||||
back = /obj/item/storage/backpack/saddlepack
|
||||
shoes = /obj/item/clothing/shoes/sandal
|
||||
backpack_contents = list(
|
||||
/obj/item/reagent_containers/syringe/crude/mushroom = 1,
|
||||
/obj/item/reagent_containers/syringe/crude/blastoff = 1,
|
||||
/obj/item/ammo_casing/arrow = 2,
|
||||
/obj/item/food/grown/nettle/death = 2,
|
||||
/obj/item/food/grown/banana = 2,
|
||||
/obj/item/food/grown/cherry_bomb = 2,
|
||||
/obj/item/food/grown/mushroom/walkingmushroom = 2,
|
||||
/obj/item/seeds/kudzu = 1,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/northstar
|
||||
name = "Deathmatch: North Star"
|
||||
display_name = "North Star"
|
||||
desc = "flip flip flip"
|
||||
|
||||
uniform = /obj/item/clothing/under/suit/carpskin
|
||||
head = /obj/item/clothing/head/fedora/carpskin
|
||||
gloves = /obj/item/clothing/gloves/rapid
|
||||
backpack_contents = list(
|
||||
/obj/item/throwing_star = 6,
|
||||
/obj/item/restraints/legcuffs/bola/tactical = 2,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/janitor
|
||||
name = "Deathmatch: Janitor"
|
||||
display_name = "Janitor"
|
||||
desc = "Regular work"
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/civilian/janitor
|
||||
suit = /obj/item/clothing/suit/caution
|
||||
head = /obj/item/reagent_containers/cup/bucket
|
||||
shoes = /obj/item/clothing/shoes/chameleon/noslip
|
||||
l_hand = /obj/item/pushbroom
|
||||
l_pocket = /obj/item/reagent_containers/spray/waterflower/lube
|
||||
backpack_contents = list(
|
||||
/obj/item/grenade/chem_grenade/cleaner = 2,
|
||||
/obj/item/restraints/legcuffs/beartrap = 3,
|
||||
/obj/item/soap,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/surgeon
|
||||
name = "Deathmatch: Surgeon"
|
||||
display_name = "Surgeon"
|
||||
desc = "Treatment has come"
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/medical/scrubs/blue
|
||||
suit = /obj/item/clothing/suit/apron/surgical
|
||||
head = /obj/item/clothing/head/utility/surgerycap
|
||||
mask = /obj/item/clothing/mask/surgical
|
||||
glasses = /obj/item/clothing/glasses/hud/health/night
|
||||
l_pocket = /obj/item/reagent_containers/hypospray/combat
|
||||
r_pocket = /obj/item/reagent_containers/hypospray/medipen/penthrite
|
||||
l_hand = /obj/item/chainsaw
|
||||
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/medkit/tactical,
|
||||
/obj/item/reagent_containers/hypospray/medipen/stimulants,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/raider
|
||||
name = "Deathmatch: Raider"
|
||||
display_name = "Raider"
|
||||
desc = "Not from Shadow Legends"
|
||||
|
||||
l_hand = /obj/item/nullrod/claymore/chainsaw_sword
|
||||
r_pocket = /obj/item/switchblade
|
||||
uniform = /obj/item/clothing/under/costume/jabroni
|
||||
back = /obj/item/spear
|
||||
belt = /obj/item/gun/magic/hook
|
||||
head = /obj/item/clothing/head/utility/welding
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/clown
|
||||
name = "DM: Clown"
|
||||
display_name = "Clown (Man Of Honk)"
|
||||
desc = "Who called this honking clown"
|
||||
|
||||
uniform = /datum/outfit/job/clown::uniform
|
||||
belt = /datum/outfit/job/clown::belt
|
||||
shoes = /datum/outfit/job/clown::shoes
|
||||
mask = /datum/outfit/job/clown::mask
|
||||
l_pocket = /datum/outfit/job/clown::l_pocket
|
||||
back = /datum/outfit/job/clown::backpack
|
||||
box = /datum/outfit/job/clown::box
|
||||
implants = list(/obj/item/implant/sad_trombone)
|
||||
l_pocket = /obj/item/melee/energy/sword/bananium
|
||||
r_pocket = /obj/item/shield/energy/bananium
|
||||
gloves = /obj/item/clothing/gloves/tackler/rocket
|
||||
|
||||
backpack_contents = list(
|
||||
/obj/item/reagent_containers/spray/waterflower = 1,
|
||||
/obj/item/instrument/bikehorn = 1,
|
||||
/obj/item/bikehorn/airhorn = 1,
|
||||
/obj/item/food/grown/banana = 3,
|
||||
/obj/item/food/pie/cream = 2,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/tgcoder //tg doesnt stand for tgstation dont ask
|
||||
name = "Deathmatch: Coder"
|
||||
display_name = "Coder"
|
||||
desc = "What"
|
||||
|
||||
l_hand = /obj/item/toy/katana
|
||||
uniform = /obj/item/clothing/under/costume/schoolgirl
|
||||
suit = /obj/item/clothing/suit/costume/joker
|
||||
shoes = /obj/item/clothing/shoes/clown_shoes/meown_shoes
|
||||
head = /obj/item/clothing/head/costume/kitty
|
||||
backpack_contents = list(
|
||||
/obj/item/reagent_containers/cup/soda_cans/pwr_game = 10,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/enginer
|
||||
name = "Deathmatch: Engineer"
|
||||
display_name = "Engineer"
|
||||
desc = "Meet the engineer"
|
||||
|
||||
l_hand = /obj/item/storage/toolbox/emergency/turret
|
||||
uniform = /obj/item/clothing/under/rank/engineering/engineer
|
||||
shoes = /obj/item/clothing/shoes/magboots
|
||||
head = /obj/item/clothing/head/utility/hardhat
|
||||
back = /obj/item/fireaxe
|
||||
gloves = /obj/item/clothing/gloves/color/yellow
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/scientist
|
||||
name = "Deathmatch: Scientist"
|
||||
display_name = "Scientist"
|
||||
desc = "What a nerd"
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/rnd/scientist
|
||||
suit = /obj/item/clothing/suit/armor/reactive/stealth
|
||||
mask = /obj/item/clothing/mask/gas
|
||||
l_hand = /obj/item/reagent_containers/syringe/plasma
|
||||
l_pocket = /obj/item/slimecross/stabilized/sepia
|
||||
r_pocket = /obj/item/slimecross/stabilized/purple
|
||||
backpack_contents = list(
|
||||
/obj/item/reagent_containers/cup/bottle/plasma,
|
||||
/obj/item/slimecross/burning/grey,
|
||||
/obj/item/slimecross/burning/adamantine,
|
||||
/obj/item/slimecross/burning/gold,
|
||||
/obj/item/slimecross/burning/blue,
|
||||
/obj/item/slimecross/burning/sepia,
|
||||
/obj/item/slimecross/chilling/green,
|
||||
/obj/item/slimecross/chilling/grey,
|
||||
/obj/item/slimecross/industrial/oil,
|
||||
/obj/item/slimecross/charged/silver,
|
||||
/obj/item/slimecross/charged/black,
|
||||
/obj/item/slimecross/burning/rainbow,
|
||||
/obj/item/slimecross/chilling/adamantine,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/bloodminer
|
||||
name = "Deathmatch: Blood Miner"
|
||||
display_name = "Blood Miner"
|
||||
desc = "Rip and tear!!!"
|
||||
|
||||
l_hand = /obj/item/melee/cleaving_saw
|
||||
r_hand = /obj/item/gun/energy/recharge/kinetic_accelerator
|
||||
uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland
|
||||
suit = /obj/item/clothing/suit/hooded/explorer
|
||||
shoes = /obj/item/clothing/shoes/workboots/mining
|
||||
mask = /obj/item/clothing/mask/gas/explorer
|
||||
granted_spells = list(
|
||||
/datum/action/cooldown/mob_cooldown/dash,
|
||||
)
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/ripper
|
||||
name = "Deathmatch: Ripper"
|
||||
display_name = "Ripper"
|
||||
desc = "Die die die!!!"
|
||||
|
||||
l_hand = /obj/item/gun/ballistic/shotgun/hook
|
||||
r_hand = /obj/item/gun/ballistic/shotgun/hook
|
||||
uniform = /obj/item/clothing/under/costume/skeleton
|
||||
suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch
|
||||
mask = /obj/item/clothing/mask/gas/cyborg
|
||||
shoes = /obj/item/clothing/shoes/sandal
|
||||
belt = /obj/item/melee/cleric_mace
|
||||
|
||||
/datum/outfit/deathmatch_loadout/battler/cowboy
|
||||
name = "Deathmatch: Cowboy"
|
||||
display_name = "Cowboy"
|
||||
desc = "Yeehaw partner"
|
||||
|
||||
r_hand = /obj/item/clothing/mask/cigarette/cigar
|
||||
l_hand = /obj/item/melee/curator_whip
|
||||
l_pocket = /obj/item/lighter
|
||||
accessory = /obj/item/clothing/accessory/vest_sheriff
|
||||
uniform = /obj/item/clothing/under/rank/security/detective
|
||||
shoes = /obj/item/clothing/shoes/cowboy
|
||||
belt = /obj/item/storage/belt/holster/detective/full
|
||||
head = /obj/item/clothing/head/cowboy/brown
|
||||
@@ -0,0 +1,433 @@
|
||||
/datum/deathmatch_lobby
|
||||
/// Ckey of the host
|
||||
var/host
|
||||
/// Assoc list of ckey to list()
|
||||
var/list/players = list()
|
||||
/// Assoc list of ckey to list()
|
||||
var/list/observers = list()
|
||||
/// The current chosen map
|
||||
var/datum/lazy_template/deathmatch/map
|
||||
/// Our turf reservation AKA where the arena is
|
||||
var/datum/turf_reservation/location
|
||||
/// Whether players hear deadchat and people through walls
|
||||
var/global_chat = FALSE
|
||||
/// Whether the lobby is currently playing
|
||||
var/playing = FALSE
|
||||
/// Number of total ready players
|
||||
var/ready_count
|
||||
/// List of loadouts, either gotten from the deathmatch controller or the map
|
||||
var/list/loadouts
|
||||
|
||||
/datum/deathmatch_lobby/New(mob/player)
|
||||
. = ..()
|
||||
if (!player)
|
||||
stack_trace("Attempted to create a deathmatch lobby without a host.")
|
||||
return qdel(src)
|
||||
host = player.ckey
|
||||
map = GLOB.deathmatch_game.maps[pick(GLOB.deathmatch_game.maps)]
|
||||
log_game("[host] created a deathmatch lobby.")
|
||||
if (map.allowed_loadouts)
|
||||
loadouts = map.allowed_loadouts
|
||||
else
|
||||
loadouts = GLOB.deathmatch_game.loadouts
|
||||
add_player(player, loadouts[1], TRUE)
|
||||
ui_interact(player)
|
||||
|
||||
/datum/deathmatch_lobby/Destroy(force, ...)
|
||||
. = ..()
|
||||
for (var/key in players+observers)
|
||||
var/datum/tgui/ui = SStgui.get_open_ui(get_mob_by_ckey(key), src)
|
||||
if (ui) ui.close()
|
||||
remove_ckey_from_play(key)
|
||||
if(playing && !isnull(location))
|
||||
clear_reservation()
|
||||
players = null
|
||||
observers = null
|
||||
map = null
|
||||
location = null
|
||||
loadouts = null
|
||||
|
||||
/datum/deathmatch_lobby/proc/start_game()
|
||||
if (playing)
|
||||
return
|
||||
playing = TRUE
|
||||
|
||||
location = map.lazy_load()
|
||||
if (!location)
|
||||
to_chat(get_mob_by_ckey(host), span_warning("Couldn't reserve/load a map location (all locations used?), try again later, or contact a coder."))
|
||||
playing = FALSE
|
||||
return FALSE
|
||||
|
||||
if (!length(GLOB.deathmatch_game.spawnpoint_processing))
|
||||
clear_reservation()
|
||||
playing = FALSE
|
||||
return FALSE
|
||||
|
||||
var/list/spawns = GLOB.deathmatch_game.spawnpoint_processing.Copy()
|
||||
GLOB.deathmatch_game.spawnpoint_processing.Cut()
|
||||
if (!length(spawns) || length(spawns) < length(players))
|
||||
stack_trace("Failed to get spawns when loading deathmatch map [map.name] for lobby [host].")
|
||||
clear_reservation()
|
||||
playing = FALSE
|
||||
return FALSE
|
||||
|
||||
for (var/key in players)
|
||||
var/mob/dead/observer/observer = players[key]["mob"]
|
||||
if (isnull(observer) || !observer.client)
|
||||
log_game("Removed player [key] from deathmatch lobby [host], as they couldn't be found.")
|
||||
remove_ckey_from_play(key)
|
||||
continue
|
||||
|
||||
// pick spawn and remove it.
|
||||
var/picked_spawn = pick_n_take(spawns)
|
||||
spawn_observer_as_player(key, get_turf(picked_spawn))
|
||||
qdel(picked_spawn)
|
||||
|
||||
// Remove rest of spawns.
|
||||
for (var/unused_spawn in spawns)
|
||||
qdel(unused_spawn)
|
||||
|
||||
for (var/observer_key in observers)
|
||||
var/mob/observer = observers[observer_key]["mob"]
|
||||
observer.forceMove(pick(location.reserved_turfs))
|
||||
|
||||
addtimer(CALLBACK(src, PROC_REF(game_took_too_long)), initial(map.automatic_gameend_time))
|
||||
log_game("Deathmatch game [host] started.")
|
||||
announce(span_reallybig("GO!"))
|
||||
return TRUE
|
||||
|
||||
/datum/deathmatch_lobby/proc/spawn_observer_as_player(ckey, loc)
|
||||
var/mob/dead/observer/observer = players[ckey]["mob"]
|
||||
if (isnull(observer) || !observer.client)
|
||||
remove_ckey_from_play(ckey)
|
||||
return
|
||||
|
||||
// equip player
|
||||
var/datum/outfit/deathmatch_loadout/loadout = players[ckey]["loadout"]
|
||||
if (!(loadout in loadouts))
|
||||
loadout = loadouts[1]
|
||||
|
||||
observer.forceMove(loc)
|
||||
var/datum/mind/observer_mind = observer.mind
|
||||
var/mob/living/observer_current = observer.mind?.current
|
||||
var/mob/living/carbon/human/new_player = observer.change_mob_type(/mob/living/carbon/human, delete_old_mob = TRUE)
|
||||
if(!isnull(observer_mind) && observer_current)
|
||||
new_player.AddComponent( \
|
||||
/datum/component/temporary_body, \
|
||||
old_mind = observer_mind, \
|
||||
old_body = observer_current, \
|
||||
)
|
||||
new_player.equipOutfit(loadout) // Loadout
|
||||
players[ckey]["mob"] = new_player
|
||||
|
||||
// register death handling.
|
||||
RegisterSignals(new_player, list(COMSIG_LIVING_DEATH, COMSIG_MOB_GHOSTIZED, COMSIG_QDELETING), PROC_REF(player_died))
|
||||
if (global_chat)
|
||||
ADD_TRAIT(new_player, TRAIT_SIXTHSENSE, INNATE_TRAIT)
|
||||
ADD_TRAIT(new_player, TRAIT_XRAY_HEARING, INNATE_TRAIT)
|
||||
|
||||
/datum/deathmatch_lobby/proc/game_took_too_long()
|
||||
if (!location || QDELING(src))
|
||||
return
|
||||
announce(span_reallybig("The players have took too long! Game ending!"))
|
||||
end_game()
|
||||
|
||||
/datum/deathmatch_lobby/proc/end_game()
|
||||
if (!location)
|
||||
CRASH("Reservation of deathmatch game [host] deleted during game.")
|
||||
var/mob/winner
|
||||
if(players.len)
|
||||
var/list/winner_info = players[pick(players)]
|
||||
if(!isnull(winner_info["mob"]))
|
||||
winner = winner_info["mob"] //only one should remain anyway but incase of a draw
|
||||
|
||||
announce(span_reallybig("THE GAME HAS ENDED.<BR>THE WINNER IS: [winner ? winner.real_name : "no one"]."))
|
||||
|
||||
for(var/ckey in players)
|
||||
var/mob/loser = players[ckey]["mob"]
|
||||
UnregisterSignal(loser, list(COMSIG_MOB_GHOSTIZED, COMSIG_QDELETING))
|
||||
players[ckey]["mob"] = null
|
||||
loser.ghostize()
|
||||
qdel(loser)
|
||||
|
||||
clear_reservation()
|
||||
GLOB.deathmatch_game.remove_lobby(host)
|
||||
log_game("Deathmatch game [host] ended.")
|
||||
|
||||
/datum/deathmatch_lobby/proc/player_died(mob/living/player, gibbed)
|
||||
SIGNAL_HANDLER
|
||||
if(isnull(player) || QDELING(src))
|
||||
return
|
||||
|
||||
var/ckey = player.ckey
|
||||
if(!islist(players[ckey])) // potentially the player info could hold a reference to this mob so we can figure the ckey out without worrying about ghosting and suicides n such
|
||||
for(var/potential_ckey in players)
|
||||
var/list/player_info = players[potential_ckey]
|
||||
if(player_info["mob"] && player_info["mob"] == player)
|
||||
ckey = potential_ckey
|
||||
break
|
||||
|
||||
if(!islist(players[ckey])) // if we STILL didnt find a good ckey
|
||||
return
|
||||
|
||||
players -= ckey
|
||||
|
||||
var/mob/dead/observer/ghost = !player.client ? player.get_ghost() : player.ghostize() //this doesnt work on those who used the ghost verb
|
||||
if(!isnull(ghost))
|
||||
add_observer(ghost, (host == ckey))
|
||||
|
||||
announce(span_reallybig("[player.real_name] HAS DIED.<br>[players.len] REMAIN."))
|
||||
|
||||
if(!gibbed && !QDELING(player)) // for some reason dusting or deleting in chasm storage messes up tgui bad
|
||||
player.dust(TRUE, TRUE, TRUE)
|
||||
if (players.len <= 1)
|
||||
end_game()
|
||||
|
||||
/datum/deathmatch_lobby/proc/add_observer(mob/mob, host = FALSE)
|
||||
if (players[mob.ckey])
|
||||
CRASH("Tried to add [mob.ckey] as an observer while being a player.")
|
||||
observers[mob.ckey] = list("mob" = mob, "host" = host)
|
||||
|
||||
/datum/deathmatch_lobby/proc/add_player(mob/mob, loadout, host = FALSE)
|
||||
if (observers[mob.ckey])
|
||||
CRASH("Tried to add [mob.ckey] as a player while being an observer.")
|
||||
players[mob.ckey] = list("mob" = mob, "host" = host, "ready" = FALSE, "loadout" = loadout)
|
||||
|
||||
/datum/deathmatch_lobby/proc/remove_ckey_from_play(ckey)
|
||||
var/is_likely_player = (ckey in players)
|
||||
var/list/main_list = is_likely_player ? players : observers
|
||||
var/list/info = main_list[ckey]
|
||||
if(is_likely_player && islist(info))
|
||||
ready_count -= info["ready"]
|
||||
main_list -= ckey
|
||||
|
||||
/datum/deathmatch_lobby/proc/announce(message)
|
||||
for (var/key in players+observers)
|
||||
var/mob/player = get_mob_by_ckey(key)
|
||||
if (!player.client)
|
||||
remove_ckey_from_play(key)
|
||||
continue
|
||||
to_chat(player.client, message)
|
||||
|
||||
/datum/deathmatch_lobby/proc/leave(ckey)
|
||||
if (host == ckey)
|
||||
var/total_count = players.len + observers.len
|
||||
if (total_count <= 1) // <= just in case.
|
||||
GLOB.deathmatch_game.remove_lobby(host)
|
||||
return
|
||||
else
|
||||
if (players[ckey] && players.len <= 1)
|
||||
for (var/key in observers)
|
||||
if (host == key)
|
||||
continue
|
||||
host = key
|
||||
observers[key]["host"] = TRUE
|
||||
break
|
||||
else
|
||||
for (var/key in players)
|
||||
if (host == key)
|
||||
continue
|
||||
host = key
|
||||
players[key]["host"] = TRUE
|
||||
break
|
||||
GLOB.deathmatch_game.passoff_lobby(ckey, host)
|
||||
|
||||
remove_ckey_from_play(ckey)
|
||||
|
||||
/datum/deathmatch_lobby/proc/join(mob/player)
|
||||
if (playing || !player)
|
||||
return
|
||||
if(!(player.ckey in players+observers))
|
||||
if (players.len >= map.max_players)
|
||||
add_observer(player)
|
||||
else
|
||||
add_player(player, loadouts[1])
|
||||
ui_interact(player)
|
||||
|
||||
/datum/deathmatch_lobby/proc/spectate(mob/player)
|
||||
if (!playing || !location || !player)
|
||||
return
|
||||
if (!observers[player.ckey])
|
||||
add_observer(player)
|
||||
player.forceMove(pick(location.reserved_turfs))
|
||||
|
||||
/datum/deathmatch_lobby/proc/change_map(new_map)
|
||||
if (!new_map || !GLOB.deathmatch_game.maps[new_map])
|
||||
return
|
||||
map = GLOB.deathmatch_game.maps[new_map]
|
||||
var/max_players = map.max_players
|
||||
for (var/possible_unlucky_loser in players)
|
||||
max_players--
|
||||
if (max_players <= 0)
|
||||
var/loser_mob = players[possible_unlucky_loser]["mob"]
|
||||
remove_ckey_from_play(possible_unlucky_loser)
|
||||
add_observer(loser_mob)
|
||||
|
||||
loadouts = map.allowed_loadouts ? map.allowed_loadouts : GLOB.deathmatch_game.loadouts
|
||||
for (var/player_key in players)
|
||||
if (players[player_key]["loadout"] in loadouts)
|
||||
continue
|
||||
players[player_key]["loadout"] = loadouts[1]
|
||||
|
||||
/datum/deathmatch_lobby/proc/clear_reservation()
|
||||
if(isnull(location) || isnull(map))
|
||||
return
|
||||
for(var/turf/victimized_turf as anything in location.reserved_turfs) //remove this once clearing turf reservations is actually reliable
|
||||
victimized_turf.empty()
|
||||
map.reservations -= location
|
||||
qdel(location)
|
||||
|
||||
/datum/deathmatch_lobby/Topic(href, href_list) //This handles the chat Join button href, supposedly
|
||||
var/mob/dead/observer/ghost = usr
|
||||
if (!istype(ghost))
|
||||
return
|
||||
if(href_list["join"])
|
||||
join(ghost)
|
||||
|
||||
/datum/deathmatch_lobby/ui_state(mob/user)
|
||||
return GLOB.observer_state
|
||||
|
||||
/datum/deathmatch_lobby/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, null)
|
||||
if(!ui)
|
||||
ui = new(user, src, "DeathmatchLobby")
|
||||
ui.open()
|
||||
|
||||
/datum/deathmatch_lobby/ui_static_data(mob/user)
|
||||
. = list()
|
||||
.["maps"] = list()
|
||||
for (var/map_key in GLOB.deathmatch_game.maps)
|
||||
.["maps"] += map_key
|
||||
|
||||
/datum/deathmatch_lobby/ui_data(mob/user)
|
||||
. = list()
|
||||
.["self"] = user.ckey
|
||||
.["host"] = (user.ckey == host)
|
||||
.["admin"] = check_rights_for(user.client, R_ADMIN)
|
||||
.["global_chat"] = global_chat
|
||||
.["loadouts"] = list()
|
||||
for (var/datum/outfit/deathmatch_loadout/loadout as anything in loadouts)
|
||||
.["loadouts"] += initial(loadout.display_name)
|
||||
.["map"] = list()
|
||||
.["map"]["name"] = map.name
|
||||
.["map"]["desc"] = map.desc
|
||||
.["map"]["time"] = map.automatic_gameend_time
|
||||
.["map"]["min_players"] = map.min_players
|
||||
.["map"]["max_players"] = map.max_players
|
||||
if(!isnull(players[user.ckey]) && !isnull(players[user.ckey]["loadout"]))
|
||||
var/datum/outfit/deathmatch_loadout/loadout = players[user.ckey]["loadout"]
|
||||
.["loadoutdesc"] = initial(loadout.desc)
|
||||
else
|
||||
.["loadoutdesc"] = "You are an observer! As an observer, you can hear lobby announcements."
|
||||
.["players"] = list()
|
||||
for (var/player_key in players)
|
||||
var/list/player_info = players[player_key]
|
||||
var/mob/player_mob = player_info["mob"]
|
||||
if (isnull(player_mob) || !player_mob.client)
|
||||
leave(player_key)
|
||||
continue
|
||||
.["players"][player_key] = player_info.Copy()
|
||||
var/datum/outfit/deathmatch_loadout/dm_loadout = player_info["loadout"]
|
||||
.["players"][player_key]["loadout"] = initial(dm_loadout.display_name)
|
||||
.["observers"] = list()
|
||||
for (var/observer_key in observers)
|
||||
var/mob/observer = observers[observer_key]["mob"]
|
||||
if (isnull(observer) || !observer.client)
|
||||
leave(observer_key)
|
||||
continue
|
||||
.["observers"][observer_key] = observers[observer_key]
|
||||
|
||||
/datum/deathmatch_lobby/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
||||
. = ..()
|
||||
if(. || !isobserver(usr))
|
||||
return
|
||||
switch(action)
|
||||
if ("start_game")
|
||||
if (usr.ckey != host)
|
||||
return FALSE
|
||||
if (map.min_players > players.len)
|
||||
to_chat(usr, span_warning("Not enough players to start yet."))
|
||||
return FALSE
|
||||
start_game()
|
||||
return TRUE
|
||||
if ("leave_game")
|
||||
if (playing)
|
||||
return FALSE
|
||||
leave(usr.ckey)
|
||||
ui.close()
|
||||
GLOB.deathmatch_game.ui_interact(usr)
|
||||
return TRUE
|
||||
if ("change_loadout")
|
||||
if (playing)
|
||||
return FALSE
|
||||
if (params["player"] != usr.ckey && host != usr.ckey)
|
||||
return FALSE
|
||||
for (var/datum/outfit/deathmatch_loadout/possible_loadout as anything in loadouts)
|
||||
if (params["loadout"] != initial(possible_loadout.display_name))
|
||||
continue
|
||||
players[params["player"]]["loadout"] = possible_loadout
|
||||
break
|
||||
return TRUE
|
||||
if ("observe")
|
||||
if (playing)
|
||||
return FALSE
|
||||
if (players[usr.ckey])
|
||||
remove_ckey_from_play(usr.ckey)
|
||||
add_observer(usr, host == usr.ckey)
|
||||
return TRUE
|
||||
else if (observers[usr.ckey] && players.len < map.max_players)
|
||||
remove_ckey_from_play(usr.ckey)
|
||||
add_player(usr, loadouts[1], host == usr.ckey)
|
||||
return TRUE
|
||||
if ("ready")
|
||||
players[usr.ckey]["ready"] ^= 1 // Toggle.
|
||||
ready_count += (players[usr.ckey]["ready"] * 2) - 1 // scared?
|
||||
if (ready_count >= players.len && players.len >= map.min_players)
|
||||
start_game()
|
||||
return TRUE
|
||||
if ("host") // Host functions
|
||||
if (playing || (usr.ckey != host && !check_rights(R_ADMIN)))
|
||||
return FALSE
|
||||
var/uckey = params["id"]
|
||||
switch (params["func"])
|
||||
if ("Kick")
|
||||
leave(uckey)
|
||||
var/umob = get_mob_by_ckey(uckey)
|
||||
var/datum/tgui/uui = SStgui.get_open_ui(umob, src)
|
||||
uui?.close()
|
||||
GLOB.deathmatch_game.ui_interact(umob)
|
||||
return TRUE
|
||||
if ("Transfer host")
|
||||
if (host == uckey)
|
||||
return FALSE
|
||||
GLOB.deathmatch_game.passoff_lobby(host, uckey)
|
||||
host = uckey
|
||||
return TRUE
|
||||
if ("Toggle observe")
|
||||
var/umob = get_mob_by_ckey(uckey)
|
||||
if (players[uckey])
|
||||
remove_ckey_from_play(uckey)
|
||||
add_observer(umob, host == uckey)
|
||||
else if (observers[uckey] && players.len < map.max_players)
|
||||
remove_ckey_from_play(uckey)
|
||||
add_player(umob, loadouts[1], host == uckey)
|
||||
return TRUE
|
||||
if ("change_map")
|
||||
if (!(params["map"] in GLOB.deathmatch_game.maps))
|
||||
return FALSE
|
||||
change_map(params["map"])
|
||||
return TRUE
|
||||
if ("global_chat")
|
||||
global_chat = !global_chat
|
||||
return TRUE
|
||||
if ("admin") // Admin functions
|
||||
if (!check_rights(R_ADMIN))
|
||||
message_admins("[usr.key] has attempted to use admin functions in a deathmatch lobby!")
|
||||
log_admin("[key_name(usr)] tried to use the deathmatch lobby admin functions without authorization.")
|
||||
return
|
||||
switch (params["func"])
|
||||
if ("Force start")
|
||||
log_admin("[key_name(usr)] force started deathmatch lobby [host].")
|
||||
start_game()
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/area/deathmatch
|
||||
name = "Deathmatch Arena"
|
||||
requires_power = FALSE
|
||||
has_gravity = STANDARD_GRAVITY
|
||||
area_flags = UNIQUE_AREA | UNIQUE_AREA
|
||||
|
||||
/area/deathmatch/fullbright
|
||||
static_lighting = FALSE
|
||||
base_lighting_alpha = 255
|
||||
|
||||
/obj/effect/landmark/deathmatch_player_spawn
|
||||
name = "Deathmatch Player Spawner"
|
||||
|
||||
/obj/effect/landmark/deathmatch_player_spawn/Initialize(mapload)
|
||||
. = ..()
|
||||
if (isnull(GLOB.deathmatch_game))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
GLOB.deathmatch_game.spawnpoint_processing += src
|
||||
|
||||
/obj/effect/landmark/deathmatch_player_spawn/Destroy()
|
||||
. = ..()
|
||||
if(isnull(GLOB.deathmatch_game))
|
||||
return
|
||||
GLOB.deathmatch_game.spawnpoint_processing -= src
|
||||
@@ -0,0 +1,148 @@
|
||||
/datum/lazy_template/deathmatch //deathmatch maps that have any possibility of the walls being destroyed should use indestructible walls, because baseturf moment
|
||||
var/name
|
||||
map_dir = "_maps/map_files/Deathmatch"
|
||||
/// Map Description
|
||||
var/desc = ""
|
||||
var/min_players = 2
|
||||
var/max_players = 2 // TODO: make this automatic.
|
||||
/// The map will end in this time
|
||||
var/automatic_gameend_time = 8 MINUTES
|
||||
/// List of allowed loadouts for this map, otherwise defaults to all loadouts
|
||||
var/list/allowed_loadouts = list()
|
||||
|
||||
/datum/lazy_template/deathmatch/ragecage
|
||||
name = "Ragecage"
|
||||
desc = "Fun for the whole family, the classic ragecage."
|
||||
max_players = 4
|
||||
automatic_gameend_time = 4 MINUTES // its a 10x10 cage what are you guys doing in there
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant)
|
||||
map_name = "ragecage"
|
||||
key = "ragecage"
|
||||
|
||||
/datum/lazy_template/deathmatch/maintenance
|
||||
name = "Maint Mania"
|
||||
desc = "Dark maintenance tunnels, floor pills, improvised weaponry and a bloody beatdown. Welcome to assistant utopia."
|
||||
max_players = 8
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant)
|
||||
map_name = "Maint_Mania"
|
||||
key = "Maint_Mania"
|
||||
|
||||
/datum/lazy_template/deathmatch/osha_violator
|
||||
name = "OSHA Violator"
|
||||
desc = "What would Engineering be without an overly complicated engine, with conveyor belts, emitters and shield generators sprinkled about? That's right, not Engineering."
|
||||
max_players = 10
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant)
|
||||
map_name = "OSHA_Violator"
|
||||
key = "OSHA_Violator"
|
||||
|
||||
/datum/lazy_template/deathmatch/the_brig
|
||||
name = "The Brig"
|
||||
desc = "A recreation of MetaStation Brig."
|
||||
max_players = 12
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant)
|
||||
map_name = "The_Brig"
|
||||
key = "The_Brig"
|
||||
|
||||
/datum/lazy_template/deathmatch/shooting_range
|
||||
name = "Shooting Range"
|
||||
desc = "A simple room with a bunch of wooden barricades."
|
||||
max_players = 6
|
||||
allowed_loadouts = list(
|
||||
/datum/outfit/deathmatch_loadout/operative/ranged,
|
||||
/datum/outfit/deathmatch_loadout/operative/melee,
|
||||
)
|
||||
map_name = "shooting_range"
|
||||
key = "shooting_range"
|
||||
|
||||
/datum/lazy_template/deathmatch/securing
|
||||
name = "SecuRing"
|
||||
desc = "Presenting the Security Ring, ever wanted to shoot people with disablers? Well now you can."
|
||||
max_players = 4
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/securing_sec)
|
||||
map_name = "SecuRing"
|
||||
key = "SecuRing"
|
||||
|
||||
/datum/lazy_template/deathmatch/instagib
|
||||
name = "Instagib"
|
||||
desc = "EVERYONE GETS AN INSTAKILL RIFLE!"
|
||||
max_players = 8
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant/instagib)
|
||||
map_name = "instagib"
|
||||
key = "instagib"
|
||||
|
||||
/datum/lazy_template/deathmatch/mech_madness
|
||||
name = "Mech Madness"
|
||||
desc = "Do you hate mechs? Yeah? Dont care! Go fight eachother!"
|
||||
max_players = 4
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/operative)
|
||||
map_name = "mech_madness"
|
||||
key = "mech_madness"
|
||||
|
||||
/datum/lazy_template/deathmatch/sniperelite
|
||||
name = "Sniper Elite"
|
||||
desc = "Sound of gunfire and screaming people make my day"
|
||||
max_players = 8
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/operative/sniper)
|
||||
map_name = "Sniper_elite"
|
||||
key = "Sniper_elite"
|
||||
|
||||
/datum/lazy_template/deathmatch/meatower
|
||||
name = "Meat Tower"
|
||||
desc = "There can only be one chef in this kitchen"
|
||||
max_players = 8
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/chef)
|
||||
map_name = "meatower"
|
||||
key = "meatower"
|
||||
|
||||
/datum/lazy_template/deathmatch/sunrise
|
||||
name = "Sunrise"
|
||||
desc = "DEHUMANIZE YOURSELF AND FACE TO BLOODSHED DEHUMANIZE YOURSELF AND FACE TO BLOODSHED DEHUMANIZE YOURSELF AND FACE TO BLOODSHED DEHUMANIZE YOURSELF AND FACE TO BLOODSHED"
|
||||
max_players = 8
|
||||
allowed_loadouts = list(/datum/outfit/deathmatch_loadout/samurai)
|
||||
map_name = "chinatown"
|
||||
key = "chinatown"
|
||||
|
||||
/datum/lazy_template/deathmatch/starwars
|
||||
name = "Arena Station"
|
||||
desc = "Choose your battler!"
|
||||
max_players = 10
|
||||
allowed_loadouts = list(
|
||||
/datum/outfit/deathmatch_loadout/battler/bloodminer,
|
||||
/datum/outfit/deathmatch_loadout/battler/clown,
|
||||
/datum/outfit/deathmatch_loadout/battler/cowboy,
|
||||
/datum/outfit/deathmatch_loadout/battler/druid,
|
||||
/datum/outfit/deathmatch_loadout/battler/enginer,
|
||||
/datum/outfit/deathmatch_loadout/battler/janitor,
|
||||
/datum/outfit/deathmatch_loadout/battler/northstar,
|
||||
/datum/outfit/deathmatch_loadout/battler/raider,
|
||||
/datum/outfit/deathmatch_loadout/battler/ripper,
|
||||
/datum/outfit/deathmatch_loadout/battler/scientist,
|
||||
/datum/outfit/deathmatch_loadout/battler/soldier,
|
||||
/datum/outfit/deathmatch_loadout/battler/surgeon,
|
||||
/datum/outfit/deathmatch_loadout/battler/tgcoder,
|
||||
/datum/outfit/deathmatch_loadout/naked,
|
||||
)
|
||||
map_name = "starwars"
|
||||
key = "starwars"
|
||||
|
||||
/datum/lazy_template/deathmatch/arenaplatform
|
||||
name = "Underground Thunderdome"
|
||||
desc = "An illegal underground thunderdome, for larger amounts of murder."
|
||||
max_players = 15
|
||||
allowed_loadouts = list(
|
||||
/datum/outfit/deathmatch_loadout/operative,
|
||||
/datum/outfit/deathmatch_loadout/naked,
|
||||
)
|
||||
map_name = "arena"
|
||||
key = "arena"
|
||||
|
||||
/datum/lazy_template/deathmatch/raidthebase
|
||||
name = "Backalley"
|
||||
desc = "You are not built for these streets."
|
||||
max_players = 8
|
||||
allowed_loadouts = list(
|
||||
/datum/outfit/deathmatch_loadout/assistant,
|
||||
/datum/outfit/deathmatch_loadout/naked,
|
||||
)
|
||||
map_name = "raidthebase"
|
||||
key = "raidthebase"
|
||||
@@ -26,6 +26,10 @@
|
||||
set_cap = 1
|
||||
set_luminosity = 1.6
|
||||
|
||||
/obj/effect/light_emitter/fake_outdoors
|
||||
light_color = COLOR_LIGHT_YELLOW
|
||||
set_cap = 1
|
||||
|
||||
/**********************Miner Lockers**************************/
|
||||
|
||||
/obj/structure/closet/wardrobe/miner
|
||||
|
||||
@@ -413,6 +413,14 @@ no power level overlay is currently in the overlays list.
|
||||
if(fields.len)
|
||||
..()
|
||||
|
||||
/obj/machinery/field/generator/starts_on
|
||||
anchored = TRUE
|
||||
state = FG_WELDED
|
||||
|
||||
/obj/machinery/field/generator/starts_on/Initialize(mapload)
|
||||
. = ..()
|
||||
turn_on()
|
||||
|
||||
#undef FG_UNSECURED
|
||||
#undef FG_SECURED
|
||||
#undef FG_WELDED
|
||||
|
||||
@@ -352,3 +352,11 @@
|
||||
volume = 15
|
||||
amount_per_transfer_from_this = 15
|
||||
list_reagents = list(/datum/reagent/medicine/mutadone = 15)
|
||||
|
||||
/obj/item/reagent_containers/hypospray/medipen/penthrite
|
||||
name = "penthrite autoinjector"
|
||||
desc = "Experimental heart medication."
|
||||
icon_state = "atropen"
|
||||
inhand_icon_state = "atropen"
|
||||
base_icon_state = "atropen"
|
||||
list_reagents = list(/datum/reagent/medicine/c2/penthrite = 10)
|
||||
|
||||
@@ -267,6 +267,12 @@
|
||||
list_reagents = list((toxin_to_get) = 5)
|
||||
return ..()
|
||||
|
||||
/obj/item/reagent_containers/syringe/crude/mushroom
|
||||
list_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 5)
|
||||
|
||||
/obj/item/reagent_containers/syringe/crude/blastoff
|
||||
list_reagents = list(/datum/reagent/drug/blastoff = 5)
|
||||
|
||||
/obj/item/reagent_containers/syringe/spider_extract
|
||||
name = "spider extract syringe"
|
||||
desc = "Contains crikey juice - makes any gold core create the most deadly companions in the world."
|
||||
|
||||
@@ -92,6 +92,10 @@ GLOBAL_LIST_EMPTY(conveyors_by_id)
|
||||
if(.)
|
||||
set_operating(TRUE)
|
||||
|
||||
/obj/machinery/conveyor/auto/inverted
|
||||
icon_state = "conveyor_map_inverted"
|
||||
flipped = TRUE
|
||||
|
||||
// create a conveyor
|
||||
/obj/machinery/conveyor/Initialize(mapload, new_dir, new_id)
|
||||
..()
|
||||
|
||||
@@ -3900,6 +3900,11 @@
|
||||
#include "code\modules\clothing\under\jobs\Plasmaman\engineering.dm"
|
||||
#include "code\modules\clothing\under\jobs\Plasmaman\medsci.dm"
|
||||
#include "code\modules\clothing\under\jobs\Plasmaman\security.dm"
|
||||
#include "code\modules\deathmatch\deathmatch_controller.dm"
|
||||
#include "code\modules\deathmatch\deathmatch_loadouts.dm"
|
||||
#include "code\modules\deathmatch\deathmatch_lobby.dm"
|
||||
#include "code\modules\deathmatch\deathmatch_mapping.dm"
|
||||
#include "code\modules\deathmatch\deathmatch_maps.dm"
|
||||
#include "code\modules\detectivework\evidence.dm"
|
||||
#include "code\modules\detectivework\scanner.dm"
|
||||
#include "code\modules\discord\accountlink.dm"
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
import { BooleanLike } from 'common/react';
|
||||
|
||||
import { useBackend } from '../backend';
|
||||
import {
|
||||
Box,
|
||||
Button,
|
||||
Divider,
|
||||
Dropdown,
|
||||
Flex,
|
||||
Icon,
|
||||
Section,
|
||||
Table,
|
||||
} from '../components';
|
||||
import { ButtonCheckbox } from '../components/Button';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
type PlayerLike = {
|
||||
[key: string]: {
|
||||
host: number;
|
||||
ready: BooleanLike;
|
||||
};
|
||||
};
|
||||
|
||||
type Data = {
|
||||
self: string;
|
||||
host: BooleanLike;
|
||||
admin: BooleanLike;
|
||||
global_chat: BooleanLike;
|
||||
loadouts: string[];
|
||||
maps: string[];
|
||||
map: {
|
||||
name: string;
|
||||
desc: string;
|
||||
time: number;
|
||||
min_players: number;
|
||||
max_players: number;
|
||||
};
|
||||
loadoutdesc: string;
|
||||
players: PlayerLike[];
|
||||
observers: PlayerLike[];
|
||||
};
|
||||
|
||||
export const DeathmatchLobby = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
return (
|
||||
<Window title="Deathmatch Lobby" width={560} height={400}>
|
||||
<Window.Content>
|
||||
<Flex height="94%">
|
||||
<Flex.Item width="350px">
|
||||
<Section height="99%">
|
||||
<Table>
|
||||
<Table.Row>
|
||||
<Table.Cell collapsing />
|
||||
<Table.Cell>Name</Table.Cell>
|
||||
<Table.Cell grow>Loadout</Table.Cell>
|
||||
<Table.Cell collapsing>Ready</Table.Cell>
|
||||
</Table.Row>
|
||||
{Object.keys(data.players).map((player) => (
|
||||
<Table.Row className="candystripe" key={player}>
|
||||
<Table.Cell collapsing>
|
||||
{!!data.players[player].host && <Icon name="star" />}
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
{(!(
|
||||
(data.host && !data.players[player].host) ||
|
||||
data.admin
|
||||
) && <b>{player}</b>) || (
|
||||
<Dropdown
|
||||
displayText={player}
|
||||
options={['Kick', 'Transfer host', 'Toggle observe']}
|
||||
onSelected={(value) =>
|
||||
act('host', {
|
||||
id: player,
|
||||
func: value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
)}
|
||||
</Table.Cell>
|
||||
<Table.Cell grow>
|
||||
<Dropdown
|
||||
displayText={data.players[player].loadout}
|
||||
disabled={!(data.host || player === data.self)}
|
||||
options={data.loadouts}
|
||||
onSelected={(value) =>
|
||||
act('change_loadout', {
|
||||
player: player,
|
||||
loadout: value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</Table.Cell>
|
||||
<Table.Cell collapsing>
|
||||
<ButtonCheckbox
|
||||
disabled={player !== data.self}
|
||||
checked={data.players[player].ready}
|
||||
onClick={() => act('ready')}
|
||||
/>
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
))}
|
||||
{Object.keys(data.observers).map((observer) => (
|
||||
<Table.Row key={observer}>
|
||||
<Table.Cell collapsing>
|
||||
{(!!data.observers[observer].host && (
|
||||
<Icon name="star" />
|
||||
)) || <Icon name="eye" />}
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
{(!(
|
||||
(data.host && !data.observers[observer].host) ||
|
||||
data.admin
|
||||
) && <b>{observer}</b>) || (
|
||||
<Dropdown
|
||||
displayText={observer}
|
||||
options={['Kick', 'Transfer host', 'Toggle observe']}
|
||||
onSelected={(value) =>
|
||||
act('host', {
|
||||
id: observer,
|
||||
func: value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
)}
|
||||
</Table.Cell>
|
||||
<Table.Cell grow>Observing</Table.Cell>
|
||||
</Table.Row>
|
||||
))}
|
||||
</Table>
|
||||
</Section>
|
||||
</Flex.Item>
|
||||
<Flex.Item width="210px">
|
||||
<Section>
|
||||
<Box textAlign="center">
|
||||
{(!!data.host && (
|
||||
<Dropdown
|
||||
displayText={data.map.name}
|
||||
options={data.maps}
|
||||
onSelected={(value) =>
|
||||
act('host', {
|
||||
func: 'change_map',
|
||||
map: value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
)) || <b>{data.map.name}</b>}
|
||||
</Box>
|
||||
<Divider />
|
||||
{data.map.desc}
|
||||
<Box textAlign="center">
|
||||
Maximum Play Time: <b>{`${data.map.time / 600}min`}</b>
|
||||
<br />
|
||||
Min players: <b>{data.map.min_players}</b>
|
||||
<br />
|
||||
Max players: <b>{data.map.max_players}</b>
|
||||
<br />
|
||||
Current players: <b>{Object.keys(data.players).length}</b>
|
||||
</Box>
|
||||
<Button.Checkbox
|
||||
checked={data.global_chat}
|
||||
disabled={!(data.host || data.admin)}
|
||||
content="Heightened Hearing"
|
||||
tooltip="Players can hear ghosts and hear through walls."
|
||||
onClick={() =>
|
||||
act('host', {
|
||||
func: 'global_chat',
|
||||
})
|
||||
}
|
||||
/>
|
||||
<Divider />
|
||||
<Box textAlign="center">Loadout Description</Box>
|
||||
<Divider />
|
||||
<Box textAlign="center">{data.loadoutdesc}</Box>
|
||||
</Section>
|
||||
</Flex.Item>
|
||||
</Flex>
|
||||
<Button
|
||||
color="good"
|
||||
content="Start Game"
|
||||
onClick={() => act('start_game')}
|
||||
/>
|
||||
<Button
|
||||
color="bad"
|
||||
content="Leave Game"
|
||||
onClick={() => act('leave_game')}
|
||||
/>
|
||||
<Button
|
||||
color="caution"
|
||||
content={data.observers[data.self] ? 'Join' : 'Observe'}
|
||||
onClick={() => act('observe')}
|
||||
/>
|
||||
{!!data.admin && (
|
||||
<Button
|
||||
icon="exclamation"
|
||||
color="caution"
|
||||
content="Force Start"
|
||||
onClick={() => act('admin', { func: 'Force start' })}
|
||||
/>
|
||||
)}
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,95 @@
|
||||
import { useBackend } from '../backend';
|
||||
import {
|
||||
Button,
|
||||
Dropdown,
|
||||
Flex,
|
||||
NoticeBox,
|
||||
Section,
|
||||
Stack,
|
||||
Table,
|
||||
} from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const DeathmatchPanel = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const playing = data.playing || '';
|
||||
return (
|
||||
<Window title="Deathmatch Lobbies" width={360} height={400}>
|
||||
<Window.Content>
|
||||
<NoticeBox danger>
|
||||
If you play, you can still possibly be returned to your body (No
|
||||
Guarantees)!
|
||||
</NoticeBox>
|
||||
<Section height="80%">
|
||||
<Table>
|
||||
<Table.Row>
|
||||
<Table.Cell bold>Host</Table.Cell>
|
||||
<Table.Cell bold>Map</Table.Cell>
|
||||
<Table.Cell bold>Players</Table.Cell>
|
||||
</Table.Row>
|
||||
{data.lobbies.map((lobby) => (
|
||||
<Table.Row key={lobby.name}>
|
||||
<Table.Cell>
|
||||
{(!data.admin && lobby.name) || (
|
||||
<Dropdown
|
||||
width="100%"
|
||||
nochevron
|
||||
displayText={lobby.name}
|
||||
options={['Close', 'View']}
|
||||
onSelected={(value) =>
|
||||
act('admin', {
|
||||
id: lobby.name,
|
||||
func: value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
)}
|
||||
</Table.Cell>
|
||||
<Table.Cell>{lobby.map}</Table.Cell>
|
||||
<Table.Cell>
|
||||
{lobby.players}/{lobby.max_players}
|
||||
</Table.Cell>
|
||||
<Table.Cell>
|
||||
{(!lobby.playing && (
|
||||
<>
|
||||
<Button
|
||||
disabled={
|
||||
(data.hosting || playing) && playing !== lobby.name
|
||||
}
|
||||
color="good"
|
||||
content={playing === lobby.name ? 'View' : 'Join'}
|
||||
onClick={() => act('join', { id: lobby.name })}
|
||||
/>
|
||||
<Button
|
||||
color="caution"
|
||||
icon="eye"
|
||||
onClick={() => act('spectate', { id: lobby.name })}
|
||||
/>
|
||||
</>
|
||||
)) || (
|
||||
<Button
|
||||
disabled={
|
||||
(data.hosting || playing) && playing !== lobby.name
|
||||
}
|
||||
color="good"
|
||||
content="Spectate"
|
||||
onClick={() => act('spectate', { id: lobby.name })}
|
||||
/>
|
||||
)}
|
||||
</Table.Cell>
|
||||
</Table.Row>
|
||||
))}
|
||||
</Table>
|
||||
</Section>
|
||||
<Button
|
||||
disabled={data.hosting}
|
||||
fluid
|
||||
textAlign="center"
|
||||
color="good"
|
||||
content="Create Lobby"
|
||||
onClick={() => act('host')}
|
||||
/>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
@@ -1,14 +1,14 @@
|
||||
import { useBackend } from '../backend';
|
||||
import { Button, Section, Stack } from '../components';
|
||||
import { Button, Divider, Section, Stack } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const MinigamesMenu = (props) => {
|
||||
const { act } = useBackend();
|
||||
|
||||
return (
|
||||
<Window title="Minigames Menu" width={700} height={200}>
|
||||
<Window title="Minigames Menu" width={530} height={320}>
|
||||
<Window.Content>
|
||||
<Section title="Select Minigame" textAlign="center">
|
||||
<Section title="Select Minigame" textAlign="center" fill>
|
||||
<Stack>
|
||||
<Stack.Item grow>
|
||||
<Button
|
||||
@@ -30,6 +30,9 @@ export const MinigamesMenu = (props) => {
|
||||
onClick={() => act('mafia')}
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
<Divider />
|
||||
<Stack>
|
||||
<Stack.Item grow>
|
||||
<Button
|
||||
content="Basketball"
|
||||
@@ -40,6 +43,16 @@ export const MinigamesMenu = (props) => {
|
||||
onClick={() => act('basketball')}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Button
|
||||
content="Deathmatch"
|
||||
fluid
|
||||
fontSize={3}
|
||||
textAlign="center"
|
||||
lineHeight="3"
|
||||
onClick={() => act('deathmatch')}
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Section>
|
||||
</Window.Content>
|
||||
|
||||
Reference in New Issue
Block a user