mirror of
https://github.com/quotefox/Hyper-Station-13.git
synced 2026-08-26 06:06:17 +01:00
Merge remote-tracking branch 'upstream/master' into spook
This commit is contained in:
@@ -0,0 +1,658 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/obj/effect/mapping_helpers/no_lava,
|
||||
/turf/open/chasm/lavaland,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/template_noop)
|
||||
"c" = (
|
||||
/turf/closed/wall/mineral/plastitanium,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"d" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"e" = (
|
||||
/turf/closed/wall/mineral/titanium,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"f" = (
|
||||
/turf/closed/wall/mineral/titanium/nodiagonal,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"g" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"h" = (
|
||||
/obj/machinery/door/airlock/public/glass,
|
||||
/obj/machinery/door/poddoor/shutters/radiation,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"i" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"j" = (
|
||||
/obj/structure/fluff/destroyed_nuclear_reactor,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"k" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"l" = (
|
||||
/obj/effect/decal/nuclear_waste,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/template_noop)
|
||||
"m" = (
|
||||
/obj/structure/alien/weeds/node,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"n" = (
|
||||
/obj/machinery/door/airlock/public/glass,
|
||||
/obj/structure/alien/weeds,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"o" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/alien/resin/wall,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"p" = (
|
||||
/obj/structure/alien/gelpod,
|
||||
/obj/structure/alien/weeds,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"q" = (
|
||||
/obj/structure/alien/resin/membrane,
|
||||
/obj/machinery/door/poddoor/shutters/radiation,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"r" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/alien/resin/wall,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"s" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/alien/gelpod,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"t" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/alien/egg/grown,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"u" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/structure/alien/egg/burst,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"v" = (
|
||||
/obj/effect/mob_spawn/human/corpse/charredskeleton,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/template_noop)
|
||||
"w" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/mob/living/simple_animal/hostile/alien/drone,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"x" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/mob/living/simple_animal/hostile/alien/sentinel,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"y" = (
|
||||
/obj/effect/decal/nuclear_waste,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"z" = (
|
||||
/obj/effect/decal/nuclear_waste,
|
||||
/turf/open/floor/plating,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"A" = (
|
||||
/turf/closed/mineral/volcanic/lava_land_surface,
|
||||
/area/template_noop)
|
||||
"B" = (
|
||||
/turf/open/chasm/lavaland,
|
||||
/area/ruin/unpowered/reactor)
|
||||
"C" = (
|
||||
/obj/effect/mob_spawn/human/corpse/charredskeleton,
|
||||
/turf/open/floor/plating,
|
||||
/area/template_noop)
|
||||
"D" = (
|
||||
/obj/effect/gibspawner/robot,
|
||||
/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
|
||||
/area/template_noop)
|
||||
"F" = (
|
||||
/obj/structure/alien/weeds,
|
||||
/obj/effect/gibspawner/robot,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/ruin/unpowered/reactor)
|
||||
|
||||
(1,1,1) = {"
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
A
|
||||
l
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
l
|
||||
D
|
||||
v
|
||||
A
|
||||
l
|
||||
A
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
A
|
||||
l
|
||||
l
|
||||
l
|
||||
A
|
||||
A
|
||||
l
|
||||
b
|
||||
b
|
||||
l
|
||||
l
|
||||
A
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
A
|
||||
A
|
||||
l
|
||||
A
|
||||
A
|
||||
l
|
||||
l
|
||||
b
|
||||
A
|
||||
l
|
||||
A
|
||||
A
|
||||
e
|
||||
c
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
A
|
||||
A
|
||||
D
|
||||
A
|
||||
A
|
||||
l
|
||||
b
|
||||
A
|
||||
A
|
||||
l
|
||||
l
|
||||
A
|
||||
f
|
||||
e
|
||||
f
|
||||
u
|
||||
s
|
||||
e
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
A
|
||||
A
|
||||
b
|
||||
A
|
||||
A
|
||||
l
|
||||
b
|
||||
A
|
||||
A
|
||||
l
|
||||
d
|
||||
C
|
||||
h
|
||||
o
|
||||
s
|
||||
m
|
||||
u
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
A
|
||||
v
|
||||
b
|
||||
b
|
||||
l
|
||||
l
|
||||
b
|
||||
b
|
||||
l
|
||||
l
|
||||
k
|
||||
k
|
||||
f
|
||||
o
|
||||
t
|
||||
g
|
||||
f
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
A
|
||||
l
|
||||
l
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
A
|
||||
B
|
||||
B
|
||||
z
|
||||
z
|
||||
f
|
||||
p
|
||||
g
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
A
|
||||
A
|
||||
l
|
||||
A
|
||||
b
|
||||
v
|
||||
A
|
||||
A
|
||||
A
|
||||
B
|
||||
B
|
||||
B
|
||||
z
|
||||
z
|
||||
f
|
||||
n
|
||||
f
|
||||
e
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
A
|
||||
l
|
||||
l
|
||||
l
|
||||
b
|
||||
b
|
||||
y
|
||||
z
|
||||
B
|
||||
i
|
||||
i
|
||||
i
|
||||
B
|
||||
B
|
||||
q
|
||||
g
|
||||
r
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
A
|
||||
l
|
||||
A
|
||||
l
|
||||
b
|
||||
b
|
||||
k
|
||||
z
|
||||
B
|
||||
i
|
||||
j
|
||||
i
|
||||
B
|
||||
B
|
||||
q
|
||||
F
|
||||
r
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
d
|
||||
k
|
||||
B
|
||||
B
|
||||
i
|
||||
i
|
||||
i
|
||||
B
|
||||
z
|
||||
q
|
||||
g
|
||||
r
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
A
|
||||
c
|
||||
c
|
||||
e
|
||||
f
|
||||
h
|
||||
f
|
||||
z
|
||||
z
|
||||
B
|
||||
B
|
||||
B
|
||||
z
|
||||
z
|
||||
f
|
||||
n
|
||||
f
|
||||
e
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
e
|
||||
g
|
||||
o
|
||||
f
|
||||
z
|
||||
z
|
||||
B
|
||||
B
|
||||
z
|
||||
f
|
||||
s
|
||||
x
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
c
|
||||
c
|
||||
c
|
||||
e
|
||||
f
|
||||
w
|
||||
u
|
||||
o
|
||||
f
|
||||
q
|
||||
q
|
||||
q
|
||||
f
|
||||
s
|
||||
o
|
||||
g
|
||||
f
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
c
|
||||
c
|
||||
c
|
||||
e
|
||||
u
|
||||
m
|
||||
g
|
||||
g
|
||||
n
|
||||
g
|
||||
F
|
||||
g
|
||||
n
|
||||
g
|
||||
g
|
||||
m
|
||||
u
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
c
|
||||
c
|
||||
e
|
||||
o
|
||||
u
|
||||
f
|
||||
e
|
||||
f
|
||||
r
|
||||
r
|
||||
r
|
||||
f
|
||||
e
|
||||
f
|
||||
s
|
||||
o
|
||||
e
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
a
|
||||
c
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
c
|
||||
e
|
||||
c
|
||||
c
|
||||
c
|
||||
e
|
||||
c
|
||||
e
|
||||
e
|
||||
e
|
||||
e
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
c
|
||||
a
|
||||
a
|
||||
c
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(22,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
@@ -5,6 +5,7 @@
|
||||
#ifndef LOWMEMORYMODE
|
||||
#ifdef ALL_MAPS
|
||||
#include "map_files\Mining\Lavaland.dmm"
|
||||
#include "map_files\debug\multiz.dmm"
|
||||
#include "map_files\debug\runtimestation.dmm"
|
||||
#include "map_files\Deltastation\DeltaStation2.dmm"
|
||||
#include "map_files\MetaStation\MetaStation.dmm"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -102,7 +102,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/gravity_generator)
|
||||
"au" = (
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/space)
|
||||
"av" = (
|
||||
/obj/structure/stairs{
|
||||
@@ -1409,7 +1409,7 @@
|
||||
},
|
||||
/area/hallway/secondary/service)
|
||||
"eC" = (
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/maintenance/department/bridge)
|
||||
"eD" = (
|
||||
/obj/effect/turf_decal/stripes/asteroid/line{
|
||||
@@ -1544,7 +1544,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/space)
|
||||
"iu" = (
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/hallway/secondary/service)
|
||||
"iK" = (
|
||||
/turf/open/floor/plasteel{
|
||||
@@ -1595,7 +1595,7 @@
|
||||
},
|
||||
/area/hallway/secondary/service)
|
||||
"nx" = (
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/space/nearstation)
|
||||
"nz" = (
|
||||
/obj/machinery/light{
|
||||
@@ -1635,7 +1635,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/department/bridge)
|
||||
"qo" = (
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/engine/storage)
|
||||
"qR" = (
|
||||
/obj/effect/turf_decal/stripes/white/line{
|
||||
@@ -1648,7 +1648,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/engine/storage)
|
||||
"sh" = (
|
||||
/turf/open/floor/plasteel{
|
||||
@@ -1748,7 +1748,7 @@
|
||||
/area/construction)
|
||||
"Bk" = (
|
||||
/obj/structure/grille,
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/space/nearstation)
|
||||
"Bm" = (
|
||||
/obj/machinery/light{
|
||||
@@ -1878,7 +1878,7 @@
|
||||
"Ob" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/structure/grille,
|
||||
/turf/open/openspace,
|
||||
/turf/open/transparent/openspace,
|
||||
/area/space/nearstation)
|
||||
"Og" = (
|
||||
/obj/machinery/airalarm/directional/north,
|
||||
|
||||
+89196
-86920
File diff suppressed because it is too large
Load Diff
@@ -2,5 +2,5 @@
|
||||
"map_name": "MultiZ Debug",
|
||||
"map_path": "map_files/debug",
|
||||
"map_file": "multiz.dmm",
|
||||
"traits": [{"Up": 1}, {"Up": 1, "Down": -1}, {"Down": -1}]
|
||||
"traits": [{"Up" : 1, "Linkage" : "Cross"}, {"Up" : 1, "Down" : -1, "Baseturf" : "/turf/open/transparent/openspace", "Linkage" : "Cross"}, {"Down" : -1, "Baseturf" : "/turf/open/transparent/openspace", "Linkage" : "Cross"}]
|
||||
}
|
||||
|
||||
@@ -31,18 +31,21 @@
|
||||
/area/survivalpod)
|
||||
"f" = (
|
||||
/obj/machinery/chem_dispenser/drinks/beer{
|
||||
density = 0;
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"g" = (
|
||||
/obj/machinery/chem_dispenser/drinks{
|
||||
density = 0;
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/open/floor/carpet/black,
|
||||
/area/survivalpod)
|
||||
"h" = (
|
||||
/obj/machinery/vending/boozeomat/all_access{
|
||||
density = 0;
|
||||
pixel_y = 32
|
||||
},
|
||||
/turf/open/floor/carpet/black,
|
||||
|
||||
@@ -132,7 +132,22 @@
|
||||
#define EATING_NOISES (1<<1)
|
||||
#define DIGESTION_NOISES (1<<2)
|
||||
|
||||
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES)
|
||||
#define BREAST_ENLARGEMENT (1<<3)
|
||||
#define PENIS_ENLARGEMENT (1<<4)
|
||||
#define ASS_ENLARGEMENT (1<<5)
|
||||
#define FORCED_FEM (1<<6)
|
||||
#define FORCED_MASC (1<<7)
|
||||
#define HYPNO (1<<8)
|
||||
#define NEVER_HYPNO (1<<9)
|
||||
#define NO_APHRO (1<<10)
|
||||
#define NO_ASS_SLAP (1<<11)
|
||||
#define NO_AUTO_WAG (1<<12)
|
||||
#define GENITAL_EXAMINE (1<<13)
|
||||
#define VORE_EXAMINE (1<<14)
|
||||
#define TRASH_FORCEFEED (1<<15)
|
||||
#define NO_UWU (1<<16)
|
||||
|
||||
#define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES|BREAST_ENLARGEMENT|PENIS_ENLARGEMENT)
|
||||
|
||||
//component stuff
|
||||
#define COMSIG_COMBAT_TOGGLED "combatmode_toggled" //called by combat mode toggle on all equipped items. args: (mob/user, combatmode)
|
||||
@@ -141,3 +156,7 @@
|
||||
|
||||
//belly sound pref things
|
||||
#define NORMIE_HEARCHECK 4
|
||||
|
||||
#define BORGBELLY_NONE 0
|
||||
#define BORGBELLY_RED 1
|
||||
#define BORGBELLY_GREEN 2
|
||||
@@ -10,6 +10,7 @@
|
||||
#define CLONE "clone"
|
||||
#define STAMINA "stamina"
|
||||
#define BRAIN "brain"
|
||||
#define PAIN "pain"
|
||||
|
||||
//bitflag damage defines used for suicide_act
|
||||
#define BRUTELOSS (1<<0)
|
||||
|
||||
@@ -736,6 +736,9 @@
|
||||
///from datum/action/cyborg_small_sprite and sends when a cyborg changes modules
|
||||
#define COMSIG_CYBORG_MODULE_CHANGE "cyborg_module_change"
|
||||
|
||||
// /datum/element/ventcrawling signals
|
||||
#define COMSIG_HANDLE_VENTCRAWL "handle_ventcrawl" //when atom with ventcrawling element attempts to ventcrawl
|
||||
#define COMSIG_CHECK_VENTCRAWL "check_ventcrawl" //to check an atom's ventcrawling element tier (if applicable)
|
||||
|
||||
/* Attack signals. They should share the returned flags, to standardize the attack chain. */
|
||||
/// tool_act -> pre_attack -> target.attackby (item.attack) -> afterattack
|
||||
|
||||
@@ -24,7 +24,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
/turf/open/chasm,
|
||||
/turf/open/lava,
|
||||
/turf/open/water,
|
||||
/turf/open/openspace
|
||||
/turf/open/transparent/openspace
|
||||
)))
|
||||
|
||||
#define isgroundlessturf(A) (is_type_in_typecache(A, GLOB.turfs_without_ground))
|
||||
@@ -53,6 +53,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
|
||||
#define isplatingturf(A) (istype(A, /turf/open/floor/plating))
|
||||
|
||||
#define istransparentturf(A) (istype(A, /turf/open/transparent))
|
||||
|
||||
//Mobs
|
||||
#define isliving(A) (istype(A, /mob/living))
|
||||
|
||||
|
||||
@@ -285,3 +285,7 @@
|
||||
#define HUMAN_CARRY_SLOWDOWN 0
|
||||
|
||||
#define TYPING_INDICATOR_TIMEOUT 10 MINUTES
|
||||
|
||||
//Gremlins
|
||||
#define NPC_TAMPER_ACT_FORGET 1 //Don't try to tamper with this again
|
||||
#define NPC_TAMPER_ACT_NOMSG 2 //Don't produce a visible message
|
||||
|
||||
@@ -36,6 +36,7 @@ Ask ninjanomnom if they're around
|
||||
#define RAD_MEDIUM_INSULATION 0.7 // What common walls have
|
||||
#define RAD_HEAVY_INSULATION 0.6 // What reinforced walls have
|
||||
#define RAD_EXTREME_INSULATION 0.5 // What rad collectors have
|
||||
#define RAD_NEAR_FULL_INSULATION 0.2 // What radiation shutters and specialised walls for the RBMK use.
|
||||
#define RAD_FULL_INSULATION 0 // Unused
|
||||
|
||||
// WARNING: The deines below could have disastrous consequences if tweaked incorrectly. See: The great SM purge of Oct.6.2017
|
||||
|
||||
@@ -170,14 +170,14 @@
|
||||
#define TRAIT_TAGGER "tagger"
|
||||
#define TRAIT_PHOTOGRAPHER "photographer"
|
||||
#define TRAIT_MUSICIAN "musician"
|
||||
#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
|
||||
//#define TRAIT_CROCRIN_IMMUNE "crocin_immune" replaced with pref
|
||||
#define TRAIT_NYMPHO "nymphomania"
|
||||
#define TRAIT_DISTANT "headpat_hater"
|
||||
//#define TRAIT_FLUID_LEAK "leaky_fluids" removed because milk snail trails are not okay
|
||||
#define TRAIT_MASO "masochism"
|
||||
#define TRAIT_CHOKE_SLUT "choke_slut"
|
||||
#define TRAIT_HIGH_BLOOD "high_blood"
|
||||
#define TRAIT_PHARMA "hepatic_pharmacokinesis"
|
||||
//#define TRAIT_PHARMA "hepatic_pharmacokinesis" replaced with pref
|
||||
#define TRAIT_PARA "paraplegic"
|
||||
#define TRAIT_EMPATH "empath"
|
||||
#define TRAIT_FRIENDLY "friendly"
|
||||
@@ -188,8 +188,8 @@
|
||||
#define TRAIT_CUM_PLUS "cum_plus"
|
||||
#define TRAIT_NEVER_CLONE "donotclone"
|
||||
#define TRAIT_COLDBLOODED "coldblooded" // Your body is literal room temperature. Does not make you immune to the temp.
|
||||
#define TRAIT_FLIMSY "flimsy" //you have 20% less maxhealth
|
||||
|
||||
#define TRAIT_FLIMSY "flimsy" //you have 20% less maxhealth
|
||||
#define TRAIT_TRASHCAN "trashcan"
|
||||
|
||||
//Hyper
|
||||
#define TRAIT_VIRILE "virile" //you have 20% more chance of impreg
|
||||
@@ -206,6 +206,8 @@
|
||||
|
||||
#define TRAIT_ZAOCORP_NOGUNS "zao_no_guns"
|
||||
|
||||
#define INNATE_TRAIT "innate"
|
||||
|
||||
// common trait sources
|
||||
#define TRAIT_GENERIC "generic"
|
||||
#define EYE_DAMAGE "eye_damage"
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
#define MAXIMUM_MARKOV_LENGTH 25000
|
||||
|
||||
/proc/markov_chain(var/text, var/order = 4, var/length = 250)
|
||||
if(!text || order < 0 || order > 20 || length < 1 || length > MAXIMUM_MARKOV_LENGTH)
|
||||
return
|
||||
|
||||
var/table = markov_table(text, order)
|
||||
var/markov = markov_text(length, table, order)
|
||||
return markov
|
||||
|
||||
/proc/markov_table(var/text, var/look_forward = 4)
|
||||
if(!text)
|
||||
return
|
||||
var/list/table = list()
|
||||
|
||||
for(var/i = 1, i <= length(text), i++)
|
||||
var/char = copytext(text, i, look_forward+i)
|
||||
if(!table[char])
|
||||
table[char] = list()
|
||||
|
||||
for(var/i = 1, i <= (length(text) - look_forward), i++)
|
||||
var/char_index = copytext(text, i, look_forward+i)
|
||||
var/char_count = copytext(text, i+look_forward, (look_forward*2)+i)
|
||||
|
||||
if(table[char_index][char_count])
|
||||
table[char_index][char_count]++
|
||||
else
|
||||
table[char_index][char_count] = 1
|
||||
|
||||
return table
|
||||
|
||||
/proc/markov_text(var/length = 250, var/table, var/look_forward = 4)
|
||||
if(!table)
|
||||
return
|
||||
var/char = pick(table)
|
||||
var/o = char
|
||||
|
||||
for(var/i = 0, i <= (length / look_forward), i++)
|
||||
var/newchar = markov_weighted_char(table[char])
|
||||
|
||||
if(newchar)
|
||||
char = newchar
|
||||
o += "[newchar]"
|
||||
else
|
||||
char = pick(table)
|
||||
|
||||
return o
|
||||
|
||||
/proc/markov_weighted_char(var/list/array)
|
||||
if(!array || !array.len)
|
||||
return
|
||||
|
||||
var/total = 0
|
||||
for(var/i in array)
|
||||
total += array[i]
|
||||
var/r = rand(1, total)
|
||||
for(var/i in array)
|
||||
var/weight = array[i]
|
||||
if(r <= weight)
|
||||
return i
|
||||
r -= weight
|
||||
@@ -0,0 +1,44 @@
|
||||
// Unique Datum Identifiers
|
||||
|
||||
// Basically, a replacement for plain \refs that ensure the reference still
|
||||
// points to the exact same datum/client, but doesn't prevent GC like tags do.
|
||||
|
||||
// An unintended side effect of the way UIDs are formatted is that the locate()
|
||||
// proc will ignore the number and attempt to locate the reference. I consider
|
||||
// this a feature, since it means they're conveniently backwards compatible.
|
||||
|
||||
// Turns this:
|
||||
// var/myref = "\ref[mydatum]"
|
||||
// var/datum/D = locate(myref)
|
||||
// into this:
|
||||
// var/myUID = mydatum.UID()
|
||||
// var/datum/D = locateUID(myUID)
|
||||
|
||||
GLOBAL_VAR_INIT(next_unique_datum_id, 1)
|
||||
|
||||
// /client/var/tmp/unique_datum_id = null
|
||||
|
||||
/datum/proc/UID()
|
||||
if(!unique_datum_id)
|
||||
var/tag_backup = tag
|
||||
tag = null // Grab the raw ref, not the tag
|
||||
unique_datum_id = "\ref[src]_[GLOB.next_unique_datum_id++]"
|
||||
tag = tag_backup
|
||||
return unique_datum_id
|
||||
|
||||
/proc/locateUID(uid)
|
||||
if(!istext(uid))
|
||||
return null
|
||||
|
||||
var/splitat = findlasttext(uid, "_")
|
||||
|
||||
if(!splitat)
|
||||
return null
|
||||
|
||||
var/datum/D = locate(copytext(uid, 1, splitat))
|
||||
|
||||
// We might locate a client instead of a datum, but just using : is easier
|
||||
// than actually checking and typecasting
|
||||
if(D && D:unique_datum_id == uid)
|
||||
return D
|
||||
return null
|
||||
@@ -120,7 +120,8 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/autosurgeon/breasts = 1,
|
||||
/obj/item/autosurgeon/womb = 1,
|
||||
/obj/item/toy/plush/random = 1,
|
||||
/obj/item/grenade/spawnergrenade/clustaur = 1
|
||||
/obj/item/grenade/spawnergrenade/clustaur = 1,
|
||||
/obj/effect/spawner/lootdrop/trash = 5
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(ratking_trash, list(//Garbage: used by the regal rat mob when spawning garbage.
|
||||
|
||||
@@ -177,6 +177,21 @@
|
||||
desc = "You're severely dehydrated."
|
||||
icon_state = "dehydrated"
|
||||
|
||||
/obj/screen/alert/pain
|
||||
name = "Pain"
|
||||
desc = "You're in pain!"
|
||||
icon_state = "pain"
|
||||
|
||||
/obj/screen/alert/painmajor
|
||||
name = "Major Pain"
|
||||
desc = "You're in major pain!"
|
||||
icon_state = "pain_major"
|
||||
|
||||
/obj/screen/alert/painshock
|
||||
name = "Neurogenic Shock"
|
||||
desc = "You are in so much pain, you risk going into shock!"
|
||||
icon_state = "pain_shock"
|
||||
|
||||
/obj/screen/alert/gross
|
||||
name = "Grossed out."
|
||||
desc = "That was kind of gross..."
|
||||
|
||||
@@ -85,6 +85,21 @@ SUBSYSTEM_DEF(mapping)
|
||||
for (var/lava_z in lava_ruins)
|
||||
spawn_rivers(lava_z)
|
||||
|
||||
/* We don't have the icemoon framework yet.
|
||||
var/list/ice_ruins = levels_by_trait(ZTRAIT_ICE_RUINS)
|
||||
if (ice_ruins.len)
|
||||
// needs to be whitelisted for underground too so place_below ruins work
|
||||
seedRuins(ice_ruins, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/surface/outdoors/unexplored, /area/icemoon/underground/unexplored), ice_ruins_templates)
|
||||
for (var/ice_z in ice_ruins)
|
||||
spawn_rivers(ice_z, 4, /turf/open/transparent/openspace/icemoon, /area/icemoon/surface/outdoors/unexplored/rivers)
|
||||
|
||||
var/list/ice_ruins_underground = levels_by_trait(ZTRAIT_ICE_RUINS_UNDERGROUND)
|
||||
if (ice_ruins_underground.len)
|
||||
seedRuins(ice_ruins_underground, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/underground/unexplored), ice_ruins_underground_templates)
|
||||
for (var/ice_z in ice_ruins_underground)
|
||||
spawn_rivers(ice_z, 4, level_trait(ice_z, ZTRAIT_BASETURF), /area/icemoon/underground/unexplored/rivers)
|
||||
*/
|
||||
|
||||
// Generate deep space ruins
|
||||
var/list/space_ruins = levels_by_trait(ZTRAIT_SPACE_RUINS)
|
||||
if (space_ruins.len)
|
||||
|
||||
@@ -35,7 +35,7 @@ SUBSYSTEM_DEF(nightshift)
|
||||
if(!emergency)
|
||||
announce("Restoring night lighting configuration to normal operation.")
|
||||
else
|
||||
announce("Disabling night lighting: Station is in a state of emergency.")
|
||||
announce("Disabling night lighting: Station is in a state of emergency.")
|
||||
if(emergency)
|
||||
night_time = FALSE
|
||||
if(nightshift_active != night_time)
|
||||
@@ -45,9 +45,9 @@ SUBSYSTEM_DEF(nightshift)
|
||||
nightshift_active = active
|
||||
if(announce)
|
||||
if (active)
|
||||
announce("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.")
|
||||
priority_announce("Good evening, crew. To reduce power consumption and stimulate the circadian rhythms of some species, all of the lights aboard the station have been dimmed for the night.", sound='sound/AI/night.ogg', sender_override="Automated Lighting System Announcement")
|
||||
else
|
||||
announce("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.")
|
||||
priority_announce("Good morning, crew. As it is now day time, all of the lights aboard the station have been restored to their former brightness.", sound='sound/AI/night2.ogg', sender_override="Automated Lighting System Announcement")
|
||||
for(var/A in GLOB.apcs_list)
|
||||
var/obj/machinery/power/apc/APC = A
|
||||
if (APC.area && (APC.area.type in GLOB.the_station_areas))
|
||||
|
||||
@@ -39,24 +39,19 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
|
||||
quirks[initial(T.name)] = T
|
||||
quirk_points[initial(T.name)] = initial(T.value)
|
||||
quirk_names_by_path[T] = initial(T.name)
|
||||
if(initial(T.category) != CATEGORY_UNCATEGORIZED) //Hyperstation Edit: Categorized quirks
|
||||
if(initial(T.category)) //Hyperstation Edit: Categorized quirks
|
||||
quirk_categories[initial(T.category)] = 1
|
||||
SortQuirks()
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/SortQuirks() //Hyperstation edit: Categorized quirks
|
||||
quirks_sorted = list()
|
||||
quirk_categories = sortList(quirk_categories)
|
||||
var/list/uncategorized = list()
|
||||
for(var/C in quirk_categories)
|
||||
quirks_sorted[C] = list()
|
||||
for(var/V in quirks) //These are already sorted by name and cost
|
||||
var/datum/quirk/Q = quirks[V]
|
||||
if(initial(Q.category) == C)
|
||||
quirks_sorted[C] += initial(Q.name)
|
||||
else if (initial(Q.category) == CATEGORY_UNCATEGORIZED)
|
||||
uncategorized += initial(Q.name)
|
||||
for(var/C in uncategorized)
|
||||
quirks_sorted[CATEGORY_UNCATEGORIZED] += C
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target)
|
||||
var/badquirk = FALSE
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
/**
|
||||
* tgui subsystem
|
||||
*
|
||||
* Contains all tgui state and subsystem code.
|
||||
**/
|
||||
|
||||
|
||||
SUBSYSTEM_DEF(tgui)
|
||||
name = "tgui"
|
||||
wait = 9
|
||||
flags = SS_NO_INIT
|
||||
priority = FIRE_PRIORITY_TGUI
|
||||
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
|
||||
|
||||
var/list/currentrun = list()
|
||||
@@ -11,14 +17,13 @@ SUBSYSTEM_DEF(tgui)
|
||||
var/basehtml // The HTML base used for all UIs.
|
||||
|
||||
/datum/controller/subsystem/tgui/PreInit()
|
||||
basehtml = file2text('tgui-next/packages/tgui/public/tgui-main.html')
|
||||
basehtml = file2text('tgui/packages/tgui/public/tgui.html')
|
||||
|
||||
/datum/controller/subsystem/tgui/Shutdown()
|
||||
close_all_uis()
|
||||
|
||||
/datum/controller/subsystem/tgui/stat_entry(msg)
|
||||
msg = "P:[length(open_uis)]"
|
||||
return ..()
|
||||
/datum/controller/subsystem/tgui/stat_entry()
|
||||
..("P:[processing_uis.len]")
|
||||
|
||||
/datum/controller/subsystem/tgui/fire(resumed = 0)
|
||||
if (!resumed)
|
||||
@@ -34,5 +39,4 @@ SUBSYSTEM_DEF(tgui)
|
||||
else
|
||||
processing_uis.Remove(ui)
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
return
|
||||
@@ -44,7 +44,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
var/start_at
|
||||
|
||||
var/gametime_offset = 432000 //Deciseconds to add to world.time for station time.
|
||||
var/station_time_rate_multiplier = 12 //factor of station time progressal vs real time.
|
||||
var/station_time_rate_multiplier = 20 //factor of station time progressal vs real time.
|
||||
|
||||
var/totalPlayers = 0 //used for pregame stats on statpanel
|
||||
var/totalPlayersReady = 0 //used for pregame stats on statpanel
|
||||
@@ -677,10 +677,16 @@ SUBSYSTEM_DEF(ticker)
|
||||
update_everything_flag_in_db()
|
||||
if(!round_end_sound)
|
||||
round_end_sound = pick(\
|
||||
'sound/roundend/iwishtherewassomethingmore.ogg',
|
||||
'sound/roundend/likeisaid.ogg',
|
||||
'sound/roundend/whatarottenwaytodie.ogg',
|
||||
'sound/roundend/whatashame.ogg',
|
||||
'hyperstation/sound/roundend/dotheballsgo.ogg',
|
||||
'hyperstation/sound/roundend/filledwith.ogg',
|
||||
'hyperstation/sound/roundend/iknowwhat.ogg',
|
||||
'hyperstation/sound/roundend/lottawords.ogg',
|
||||
'hyperstation/sound/roundend/pissesonme.ogg',
|
||||
'hyperstation/sound/roundend/theballsgothard.ogg',
|
||||
'hyperstation/sound/roundend/iwishtherewassomethingmore.ogg',
|
||||
'hyperstation/sound/roundend/likeisaid.ogg',
|
||||
'hyperstation/sound/roundend/whatarottenwaytodie.ogg',
|
||||
'hyperstation/sound/roundend/whatashame.ogg',
|
||||
'sound/roundend/newroundsexy.ogg',
|
||||
'sound/roundend/apcdestroyed.ogg',
|
||||
'sound/roundend/bangindonk.ogg',
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
if(user == parent)
|
||||
ui_interact(user)
|
||||
|
||||
/datum/component/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_turf_state)
|
||||
/datum/component/personal_crafting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_not_incapacitated_turf_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
cur_category = categories[1]
|
||||
@@ -318,7 +318,7 @@
|
||||
cur_subcategory = subcats[1]
|
||||
else
|
||||
cur_subcategory = CAT_NONE
|
||||
ui = new(user, src, ui_key, "personal_crafting", "Crafting Menu", 700, 800, master_ui, state)
|
||||
ui = new(user, src, ui_key, "PersonalCrafting", "Crafting Menu", 700, 800, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
requested_amount = input(user, "How much do you want to insert?", "Inserting [S.singular_name]s") as num|null
|
||||
if(isnull(requested_amount) || (requested_amount <= 0))
|
||||
return
|
||||
if(QDELETED(I) || QDELETED(user) || QDELETED(src) || parent != current_parent || user.physical_can_use_topic(current_parent) < UI_INTERACTIVE || user.get_active_held_item() != active_held)
|
||||
if(QDELETED(I) || QDELETED(user) || QDELETED(src) || parent != current_parent || user.physical_can_use_tgui_topic(current_parent) < UI_INTERACTIVE || user.get_active_held_item() != active_held)
|
||||
return
|
||||
if(!user.temporarilyRemoveItemFromInventory(I))
|
||||
to_chat(user, "<span class='warning'>[I] is stuck to you and cannot be placed into [parent].</span>")
|
||||
|
||||
@@ -24,11 +24,11 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
var/unlock_note
|
||||
var/unlock_code
|
||||
var/failsafe_code
|
||||
var/datum/ui_state/checkstate
|
||||
var/datum/tgui_state/checkstate
|
||||
var/compact_mode = FALSE
|
||||
var/debug = FALSE
|
||||
|
||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/ui_state/_checkstate)
|
||||
/datum/component/uplink/Initialize(_owner, _lockable = TRUE, _enabled = FALSE, datum/game_mode/_gamemode, starting_tc = 20, datum/tgui_state/_checkstate)
|
||||
if(!isitem(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
@@ -118,14 +118,14 @@ GLOBAL_LIST_EMPTY(uplinks)
|
||||
return COMPONENT_NO_INTERACT
|
||||
|
||||
/datum/component/uplink/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_inventory_state)
|
||||
state = checkstate ? checkstate : state
|
||||
active = TRUE
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "uplink", name, 620, 580, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Uplink", name, 620, 580, master_ui, state)
|
||||
ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input.
|
||||
ui.set_style("syndicate")
|
||||
// ui.set_style("syndicate")
|
||||
ui.open()
|
||||
|
||||
/datum/component/uplink/ui_host(mob/user)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
var/signal_enabled = FALSE
|
||||
var/datum_flags = NONE
|
||||
var/datum/weakref/weak_reference
|
||||
var/tmp/unique_datum_id = null
|
||||
|
||||
#ifdef TESTING
|
||||
var/running_find_references
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/datum/element/trash
|
||||
element_flags = ELEMENT_DETACH
|
||||
|
||||
/datum/element/trash/Attach(datum/target)
|
||||
. = ..()
|
||||
RegisterSignal(target, COMSIG_ITEM_ATTACK, .proc/UseFromHand)
|
||||
|
||||
/datum/element/trash/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user)
|
||||
if((M == user || M.client?.prefs.cit_toggles & TRASH_FORCEFEED) && ishuman(user))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(HAS_TRAIT(H, TRAIT_TRASHCAN))
|
||||
playsound(H.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
|
||||
if(H.vore_selected)
|
||||
if(M != user)
|
||||
H.visible_message("<span class='warning'>[user] forces the [source] into [H]'s [H.vore_selected]</span>",
|
||||
"<span class='warning'>[user] forces the [source] into your [H.vore_selected]</span>")
|
||||
else
|
||||
H.visible_message("<span class='notice'>[H] [H.vore_selected.vore_verb]s the [source] into their [H.vore_selected]</span>",
|
||||
"<span class='notice'>You [H.vore_selected.vore_verb] the [source] into your [H.vore_selected]</span>")
|
||||
source.forceMove(H.vore_selected)
|
||||
else
|
||||
H.visible_message("<span class='notice'>[H] consumes the [source].")
|
||||
qdel(source)
|
||||
@@ -0,0 +1,36 @@
|
||||
/datum/element/ventcrawling
|
||||
element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
|
||||
id_arg_index = 2
|
||||
var/tier
|
||||
|
||||
/datum/element/ventcrawling/Attach(datum/target, duration = 0, given_tier = VENTCRAWLER_NUDE)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/person = target
|
||||
if(!istype(person))
|
||||
return FALSE
|
||||
|
||||
src.tier = given_tier
|
||||
|
||||
RegisterSignal(target, COMSIG_HANDLE_VENTCRAWL, .proc/handle_ventcrawl)
|
||||
RegisterSignal(target, COMSIG_CHECK_VENTCRAWL, .proc/check_ventcrawl)
|
||||
to_chat(target, "<span class='notice'>You can ventcrawl! Use alt+click on vents to quickly travel about the station.</span>")
|
||||
|
||||
if(duration!=0)
|
||||
addtimer(CALLBACK(src, .proc/Detach, target), duration)
|
||||
|
||||
/datum/element/ventcrawling/Detach(datum/target)
|
||||
UnregisterSignal(target, list(COMSIG_HANDLE_VENTCRAWL, COMSIG_CHECK_VENTCRAWL))
|
||||
to_chat(target, "<span class='notice'>You can no longer ventcrawl.</span>")
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/element/ventcrawling/proc/handle_ventcrawl(datum/target,atom/A)
|
||||
var/mob/living/person = target
|
||||
if(!istype(person))
|
||||
return FALSE
|
||||
|
||||
person.handle_ventcrawl(A,tier)
|
||||
|
||||
/datum/element/ventcrawling/proc/check_ventcrawl()
|
||||
return tier
|
||||
@@ -255,3 +255,11 @@
|
||||
suffix = "lavaland_surface_cozy_cabin.dmm"
|
||||
allow_duplicates = FALSE
|
||||
cost = 0
|
||||
|
||||
/datum/map_template/ruin/lavaland/jettisoned_reactor
|
||||
name = "Jettisoned Reactor"
|
||||
id = "jettreactor"
|
||||
description = "An incredibly dangerous ruin, filled with radiation and unknown lifeforms."
|
||||
suffix = "lavaland_surface_jettisoned_reactor.dmm"
|
||||
allow_duplicates = FALSE
|
||||
cost = 15//Not too important, if you disregard the rads and facehugger.
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
qdel(src)
|
||||
owner = new_owner
|
||||
|
||||
/datum/spawners_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state)
|
||||
/datum/spawners_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_observer_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "spawners_menu", "Spawners Menu", 700, 600, master_ui, state)
|
||||
ui = new(user, src, ui_key, "SpawnersMenu", "Spawners Menu", 700, 600, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/datum/spawners_menu/ui_data(mob/user)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/name = "Test Quirk"
|
||||
var/desc = "This is a test quirk."
|
||||
var/value = 0
|
||||
var/category = "Uncategorized" //Hyper change: Sort quirks into categories
|
||||
var/category = CATEGORY_UNCATEGORIZED //Hyper change: Sort quirks into categories
|
||||
var/human_only = TRUE
|
||||
var/gain_text
|
||||
var/lose_text
|
||||
|
||||
@@ -117,16 +117,6 @@
|
||||
if(quirk_holder)
|
||||
quirk_holder.remove_client_colour(/datum/client_colour/monochrome)
|
||||
|
||||
/datum/quirk/crocrin_immunity
|
||||
name = "Crocin Immunity"
|
||||
desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction."
|
||||
mob_trait = TRAIT_CROCRIN_IMMUNE
|
||||
value = 0
|
||||
category = CATEGORY_SEXUAL
|
||||
gain_text = "<span class='notice'>You feel more prudish.</span>"
|
||||
lose_text = "<span class='notice'>You don't feel as prudish as before.</span>"
|
||||
medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin."
|
||||
|
||||
/datum/quirk/assblastusa
|
||||
name = "Buns of Steel"
|
||||
desc = "You've never skipped ass day. With this trait, you are completely immune to all forms of ass slapping and anyone who tries to slap your rock hard ass usually gets a broken hand."
|
||||
@@ -151,12 +141,25 @@
|
||||
mob_trait = TRAIT_DISTANT
|
||||
value = 0
|
||||
category = CATEGORY_SEXUAL //Any better place to put it? Doesn't really affect gameplay
|
||||
medical_record_text = "Patient cares little with or dislikes being touched."
|
||||
medical_record_text = "Patient dislikes being touched."
|
||||
|
||||
/* REPLACED WITH PREFS
|
||||
/datum/quirk/crocrin_immunity
|
||||
name = "Crocin Immunity"
|
||||
desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction."
|
||||
mob_trait = TRAIT_CROCRIN_IMMUNE
|
||||
value = 0
|
||||
category = CATEGORY_SEXUAL
|
||||
gain_text = "<span class='notice'>You feel more prudish.</span>"
|
||||
lose_text = "<span class='notice'>You don't feel as prudish as before.</span>"
|
||||
medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin."
|
||||
*/
|
||||
|
||||
/datum/quirk/colorist
|
||||
name = "Colorist"
|
||||
desc = "You like carrying around a hair dye spray to quickly apply color patterns to your hair."
|
||||
value = 0
|
||||
category = CATEGORY_ITEMS
|
||||
medical_record_text = "Patient enjoys dyeing their hair with pretty colors."
|
||||
|
||||
/datum/quirk/colorist/on_spawn()
|
||||
@@ -168,4 +171,13 @@
|
||||
/datum/quirk/colorist/post_add()
|
||||
var/mob/living/carbon/human/H = quirk_holder
|
||||
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
|
||||
to_chat(quirk_holder, "<span class='boldnotice'>You brought some extra dye with you! It's in your bag if you forgot.</span>")
|
||||
to_chat(quirk_holder, "<span class='boldnotice'>You brought some extra dye with you! It's in your bag if you forgot.</span>")
|
||||
|
||||
/datum/quirk/trashcan
|
||||
name = "Trashcan"
|
||||
desc = "You are able to consume and digest trash."
|
||||
value = 0
|
||||
category = CATEGORY_FOOD
|
||||
gain_text = "<span class='notice'>You feel like munching on a can of soda.</span>"
|
||||
lose_text = "<span class='notice'>You no longer feel like you should be eating trash.</span>"
|
||||
mob_trait = TRAIT_TRASHCAN
|
||||
|
||||
@@ -213,10 +213,10 @@
|
||||
return UI_CLOSE
|
||||
|
||||
/datum/wires/ui_interact(mob/user, ui_key = "wires", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_physical_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/datum/wires/ui_data(mob/user)
|
||||
@@ -295,3 +295,15 @@
|
||||
to_chat(L, "<span class='warning'>You need an attachable assembly!</span>")
|
||||
|
||||
#undef MAXIMUM_EMP_WIRES
|
||||
|
||||
//gremlins
|
||||
/datum/wires/proc/npc_tamper(mob/living/L)
|
||||
if(!wires.len)
|
||||
return
|
||||
|
||||
var/wire_to_screw = pick(wires)
|
||||
|
||||
if(is_color_cut(wire_to_screw) || prob(50)) //CutWireColour() proc handles both cutting and mending wires. If the wire is already cut, always mend it back. Otherwise, 50% to cut it and 50% to pulse it
|
||||
cut(wire_to_screw)
|
||||
else
|
||||
pulse(wire_to_screw, L)
|
||||
|
||||
@@ -61,6 +61,29 @@
|
||||
|
||||
/area/centcom/supplypod/loading/four
|
||||
name = "Supplypod Loading Bay #4"
|
||||
|
||||
/area/centcom/bunk
|
||||
hidden = TRUE
|
||||
|
||||
/area/centcom/bunk/one
|
||||
name = "Centcom Bunk #1"
|
||||
|
||||
/area/centcom/bunk/two
|
||||
name = "Centcom Bunk #2"
|
||||
|
||||
/area/centcom/bunk/three
|
||||
name = "Centcom Bunk #3"
|
||||
|
||||
/area/centcom/bunk/four
|
||||
name = "Centcom Bunk #4"
|
||||
|
||||
/area/centcom/bunk/five
|
||||
name = "Centcom Bunk #5"
|
||||
|
||||
/area/centcom/bunk/six
|
||||
name = "Centcom Bunk #6"
|
||||
|
||||
|
||||
//THUNDERDOME
|
||||
|
||||
/area/tdome
|
||||
|
||||
@@ -81,7 +81,6 @@
|
||||
icon_state = "red"
|
||||
|
||||
//Xeno Nest
|
||||
|
||||
/area/ruin/unpowered/xenonest
|
||||
name = "The Hive"
|
||||
always_unpowered = TRUE
|
||||
@@ -90,6 +89,10 @@
|
||||
power_light = FALSE
|
||||
poweralm = FALSE
|
||||
|
||||
//ash walker nest
|
||||
//Ash Walker Nest
|
||||
/area/ruin/unpowered/ash_walkers
|
||||
icon_state = "red"
|
||||
|
||||
//Jettisoned Reactor
|
||||
/area/ruin/unpowered/reactor
|
||||
icon_state = "red"
|
||||
|
||||
@@ -342,6 +342,25 @@
|
||||
. += "<span class='danger'>It's empty.</span>"
|
||||
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
//Examine Tab stuff - Hyperstation
|
||||
var/examineTabOutput = ""
|
||||
examineTabOutput = "<center>"
|
||||
examineTabOutput += "[icon2html(icon, world, icon_state)]"
|
||||
examineTabOutput += " [url_encode(name)]" //url_encode for safty!
|
||||
examineTabOutput += "</center>"
|
||||
examineTabOutput += "<br>[url_encode(desc)]"
|
||||
user.client << output(examineTabOutput, "statbrowser:update_examine") //open the examine window
|
||||
user.client << output(null, "statbrowser:create_mobexamine") //open the examine window
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
/// Updates the icon of the atom
|
||||
/atom/proc/update_icon()
|
||||
// I expect we're going to need more return flags and options in this proc
|
||||
|
||||
@@ -166,6 +166,29 @@
|
||||
occurances_max = 2
|
||||
chaos_min = 2
|
||||
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
// CRY-STALS //
|
||||
// //
|
||||
//////////////////////////////////////////////
|
||||
|
||||
/datum/dynamic_ruleset/event/crystals
|
||||
name = "Crystal Invasion"
|
||||
typepath = /datum/round_event/crystalloid_entities
|
||||
weight = 5
|
||||
repeatable_weight_decrease = 1
|
||||
cost = 3
|
||||
enemy_roles = list("AI","Security Officer","Head of Security","Captain","Assistant","Scientist","Station Engineer")
|
||||
required_enemies = list(3,2,2,2,2,1,1,1,0,0)
|
||||
requirements = list(101,20,15,10,10,10,10,10,10,10)
|
||||
high_population_requirement = 5
|
||||
earliest_start = 30 MINUTES
|
||||
repeatable = TRUE
|
||||
occurances_max = 3
|
||||
chaos_min = 1.0
|
||||
map_whitelist = list("LayeniaStation.dmm")
|
||||
|
||||
//////////////////////////////////////////////
|
||||
// //
|
||||
// CLOGGED VENTS //
|
||||
@@ -185,7 +208,7 @@
|
||||
high_population_requirement = 5
|
||||
repeatable = TRUE
|
||||
//property_weights = list("chaos" = 1, "extended" = 2)
|
||||
occurances_max = 2
|
||||
occurances_max = 1
|
||||
chaos_min = 1.2
|
||||
|
||||
/datum/dynamic_ruleset/event/ventclog/ready()
|
||||
@@ -705,9 +728,9 @@
|
||||
high_population_requirement = 0
|
||||
weight = 100
|
||||
cost = 2
|
||||
repeatable_weight_decrease = 1 //Slightly drop the weight each time it is called to keep the pool from getting too diluted as the round goes on.
|
||||
repeatable_weight_decrease = 2 //Slightly drop the weight each time it is called to keep the pool from getting too diluted as the round goes on.
|
||||
repeatable = TRUE
|
||||
occurances_max = 200 //Our rounds can go for a WHILE
|
||||
occurances_max = 100 //Our rounds can go for a WHILE
|
||||
|
||||
/datum/dynamic_ruleset/event/disease_outbreak
|
||||
name = "Disease Outbreak"
|
||||
@@ -821,7 +844,7 @@
|
||||
typepath = /datum/round_event/spontaneous_appendicitis
|
||||
enemy_roles = list("Medical Doctor","Chief Medical Officer")
|
||||
required_enemies = list(2,2,2,2,2,2,2,1,1,1)
|
||||
requirements = list(5,5,5,5,5,5,5,5,0,0)
|
||||
requirements = list(101,101,20,18,16,14,12,10,8,6)
|
||||
high_population_requirement = 10
|
||||
weight = 5
|
||||
cost = 6
|
||||
|
||||
@@ -195,14 +195,14 @@
|
||||
. += "<span class='notice'>Alt-click [src] to [state_open ? "close" : "open"] it.</span>"
|
||||
|
||||
/obj/machinery/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_notcontained_state)
|
||||
|
||||
if(controls_inside && state == GLOB.notcontained_state)
|
||||
state = GLOB.default_state // If it has a set of controls on the inside, make it actually controllable by the mob in it.
|
||||
if(controls_inside && state == GLOB.tgui_notcontained_state)
|
||||
state = GLOB.tgui_default_state // If it has a set of controls on the inside, make it actually controllable by the mob in it.
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "sleeper", name, 550, 700, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Sleeper", name, 550, 700, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/sleeper/ui_data()
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
next_warning = world.time + minimum_time_between_warnings
|
||||
|
||||
/obj/machinery/computer/bank_machine/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "bank_machine", name, 320, 165, master_ui, state)
|
||||
ui = new(user, src, ui_key, "BankMachine", name, 320, 165, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/bank_machine/ui_data(mob/user)
|
||||
|
||||
@@ -43,10 +43,10 @@
|
||||
table.computer = src
|
||||
break
|
||||
|
||||
/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_state)
|
||||
/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_not_incapacitated_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "operating_computer", name, 350, 470, master_ui, state)
|
||||
ui = new(user, src, ui_key, "OperatingComputer", name, 350, 470, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/operating/ui_data(mob/user)
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/atmos_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmos_alert", name, 350, 300, master_ui, state)
|
||||
ui = new(user, src, ui_key, "AtmosAlertConsole", name, 350, 300, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/atmos_alert/ui_data(mob/user)
|
||||
|
||||
@@ -124,10 +124,10 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/atmos_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmos_control", name, ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "AtmosControlConsole", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/atmos_control/ui_data(mob/user)
|
||||
@@ -266,10 +266,10 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers)
|
||||
U.broadcast_status()
|
||||
|
||||
/obj/machinery/computer/atmos_control/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmos_control", name, ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "AtmosControlConsole", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/atmos_control/tank/ui_data(mob/user)
|
||||
|
||||
@@ -76,10 +76,10 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
return ..()
|
||||
|
||||
/datum/crewmonitor/ui_interact(mob/user, ui_key = "crew", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "crew", "crew monitor", 800, 600 , master_ui, state)
|
||||
ui = new(user, src, ui_key, "CrewConsole", "crew monitor", 800, 600 , master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/datum/crewmonitor/proc/show(mob/M, source)
|
||||
|
||||
@@ -53,10 +53,10 @@
|
||||
var/obj/machinery/launchpad/pad = launchpads[number]
|
||||
return pad
|
||||
|
||||
/obj/machinery/computer/launchpad/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
/obj/machinery/computer/launchpad/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "launchpad_console", name, ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "LaunchpadConsole", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/launchpad/ui_data(mob/user)
|
||||
|
||||
@@ -22,10 +22,10 @@
|
||||
scan_machinery()
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "gulag_console", name, ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "GulagTeleporterConsole", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_data(mob/user)
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/station_alert/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "station_alert", name, 325, 500, master_ui, state)
|
||||
ui = new(user, src, ui_key, "StationAlertConsole", name, 325, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/station_alert/ui_data(mob/user)
|
||||
|
||||
@@ -35,10 +35,10 @@
|
||||
return power_station
|
||||
|
||||
obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "teleporter", name, ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Teleporter", name, ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/teleporter/ui_data(mob/user)
|
||||
|
||||
@@ -1485,10 +1485,10 @@
|
||||
return "photo"
|
||||
|
||||
/obj/machinery/door/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "ai_airlock", name, 500, 390, master_ui, state)
|
||||
ui = new(user, src, ui_key, "AiAirlock", name, 500, 390, master_ui, state)
|
||||
ui.open()
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -11,10 +11,10 @@
|
||||
. += "<span class='notice'>Has a neat <i>selection menu</i> for modifying airlock access levels.</span>"
|
||||
|
||||
/obj/item/electronics/airlock/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_hands_state)
|
||||
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "airlock_electronics", name, 420, 485, master_ui, state)
|
||||
ui = new(user, src, ui_key, "AirlockElectronics", name, 420, 485, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/electronics/airlock/ui_data()
|
||||
|
||||
@@ -146,10 +146,10 @@
|
||||
timer_duration = new_time
|
||||
|
||||
/obj/machinery/door_timer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "brig_timer", name, 300, 138, master_ui, state)
|
||||
ui = new(user, src, ui_key, "BrigTimer", name, 300, 138, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
//icon update function
|
||||
|
||||
@@ -91,3 +91,55 @@
|
||||
/obj/machinery/door/poddoor/try_to_crowbar(obj/item/I, mob/user)
|
||||
if(stat & NOPOWER)
|
||||
open(1)
|
||||
|
||||
//Multi-tile poddoors don't turn invisible automatically, so we change the opacity of the turfs below instead one by one.
|
||||
/obj/machinery/door/poddoor/multi_tile/proc/apply_opacity_to_my_turfs(var/new_opacity)
|
||||
for(var/turf/T in locs)
|
||||
T.opacity = new_opacity
|
||||
T.has_opaque_atom = new_opacity
|
||||
T.reconsider_lights()
|
||||
T.air_update_turf(1)
|
||||
update_freelook_sight()
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile
|
||||
rad_insulation = RAD_NEAR_FULL_INSULATION
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/open()
|
||||
. = ..()
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
apply_opacity_to_my_turfs(0)
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/close()
|
||||
. = ..()
|
||||
rad_insulation = RAD_NEAR_FULL_INSULATION
|
||||
apply_opacity_to_my_turfs(1)
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/four_tile_ver/
|
||||
icon = 'icons/obj/doors/1x4blast_vert.dmi'
|
||||
bound_height = 128
|
||||
dir = NORTH
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/three_tile_ver/
|
||||
icon = 'icons/obj/doors/1x3blast_vert.dmi'
|
||||
bound_height = 96
|
||||
dir = NORTH
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/two_tile_ver/
|
||||
icon = 'icons/obj/doors/1x2blast_vert.dmi'
|
||||
bound_height = 64
|
||||
dir = NORTH
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/four_tile_hor/
|
||||
icon = 'icons/obj/doors/1x4blast_hor.dmi'
|
||||
bound_width = 128
|
||||
dir = EAST
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/three_tile_hor/
|
||||
icon = 'icons/obj/doors/1x3blast_hor.dmi'
|
||||
bound_width = 96
|
||||
dir = EAST
|
||||
|
||||
/obj/machinery/door/poddoor/multi_tile/two_tile_hor/
|
||||
icon = 'icons/obj/doors/1x2blast_hor.dmi'
|
||||
bound_width = 64
|
||||
dir = EAST
|
||||
@@ -41,23 +41,21 @@
|
||||
desc = "Lead-lined shutters painted yellow with a radioactive hazard symbol on it. Blocks out most radiation"
|
||||
icon = 'icons/obj/doors/shutters_radiation.dmi'
|
||||
icon_state = "closed"
|
||||
rad_insulation = 0.2
|
||||
rad_insulation = RAD_NEAR_FULL_INSULATION
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/radiation/preopen
|
||||
icon_state = "open"
|
||||
density = FALSE
|
||||
opacity = 0
|
||||
rad_insulation = 1
|
||||
opacity = FALSE
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/radiation/do_animate(animation)
|
||||
..()
|
||||
switch(animation)
|
||||
if("opening")
|
||||
rad_insulation = 1
|
||||
if("closing")
|
||||
rad_insulation = -0.5
|
||||
/obj/machinery/door/poddoor/shutters/radiation/open()
|
||||
. = ..()
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
// A 3x3 N2 SM setup won't irradiate you if you're behind the shutter at -0.9 insulation. If it starts to delam, it'll start irradiating you slowly. Keep the value between -0.1 to -0.9
|
||||
/obj/machinery/door/poddoor/shutters/radiation/close()
|
||||
. = ..()
|
||||
rad_insulation = RAD_NEAR_FULL_INSULATION
|
||||
|
||||
/obj/machinery/door/poddoor/shutters/window
|
||||
name = "windowed shutters"
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
obj_flags |= EMAGGED
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "gulag_item_reclaimer", name, 300, 400, master_ui, state)
|
||||
ui = new(user, src, ui_key, "GulagItemReclaimer", name, 300, 400, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/gulag_item_reclaimer/ui_data(mob/user)
|
||||
|
||||
@@ -277,11 +277,11 @@
|
||||
ui_interact(user)
|
||||
to_chat(user, "<span class='notice'>[src] projects a display onto your retina.</span>")
|
||||
|
||||
/obj/item/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
/obj/item/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "launchpad_remote", "Briefcase Launchpad Remote", 300, 240, master_ui, state) //width, height
|
||||
ui.set_style("syndicate")
|
||||
ui = new(user, src, ui_key, "LaunchpadRemote", "Briefcase Launchpad Remote", 300, 240, master_ui, state) //width, height
|
||||
// ui.set_style("syndicate")
|
||||
ui.open()
|
||||
|
||||
ui.set_autoupdate(TRUE)
|
||||
|
||||
@@ -164,10 +164,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_physical_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "space_heater", name, 400, 305, master_ui, state)
|
||||
ui = new(user, src, ui_key, "SpaceHeater", name, 400, 305, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/space_heater/ui_data()
|
||||
|
||||
@@ -373,10 +373,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_notcontained_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "suit_storage_unit", name, 400, 305, master_ui, state)
|
||||
ui = new(user, src, ui_key, "SuitStorageUnit", name, 400, 305, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/suit_storage_unit/ui_data()
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
var/universal_translate = FALSE // set to TRUE(1) if it can translate nonhuman speech
|
||||
|
||||
/obj/machinery/computer/telecomms/server/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "tcommsserver", "Telecomms Server Monitor", 575, 400, master_ui, state)
|
||||
ui = new(user, src, ui_key, "TelecommsLogBrowser", "Telecomms Server Monitor", 575, 400, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/telecomms/server/ui_data(mob/user)
|
||||
|
||||
@@ -37,11 +37,11 @@
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/machinery/computer/message_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE,\
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "telepdalog", name, 727, 510, master_ui, state)
|
||||
ui = new(user, src, ui_key, "TelecommsPDALog", name, 727, 510, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/message_monitor/ui_static_data(mob/user)
|
||||
|
||||
@@ -18,11 +18,11 @@
|
||||
circuit = /obj/item/circuitboard/computer/comm_monitor
|
||||
|
||||
/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE,\
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "telemonitor", name, 575, 400, master_ui, state)
|
||||
ui = new(user, src, ui_key, "TelecommsMonitor", name, 575, 400, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/telecomms/monitor/ui_data(mob/user)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/telecomms/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE,\
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
if(!canInteract(user))
|
||||
if(ui)
|
||||
ui.close() //haha no.
|
||||
@@ -36,7 +36,7 @@
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "teleinteract", "[name] Access", 520, 500, master_ui, state)
|
||||
ui = new(user, src, ui_key, "TelecommsInteraction", "[name] Access", 520, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/telecomms/ui_data(mob/user)
|
||||
|
||||
@@ -76,10 +76,10 @@
|
||||
var/obj/machinery/mech_bay_recharge_port/recharge_port
|
||||
light_color = LIGHT_COLOR_PINK
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "mech_bay_power_console", "Mech Bay Power Control Console", 400, 200, master_ui, state)
|
||||
ui = new(user, src, ui_key, "MechBayPowerConsole", "Mech Bay Power Control Console", 400, 200, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/mech_bay_power_console/ui_act(action, params)
|
||||
|
||||
@@ -68,6 +68,20 @@
|
||||
/obj/item/toy/cards/deck/syndicate = 2
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/trash
|
||||
name = "maint trash spawner"
|
||||
loot = list(/obj/item/cigbutt = 1,
|
||||
/obj/item/trash/cheesie = 1,
|
||||
/obj/item/trash/candy = 1,
|
||||
/obj/item/trash/chips = 1,
|
||||
/obj/item/reagent_containers/food/snacks/deadmouse = 1,
|
||||
/obj/item/trash/pistachios = 1,
|
||||
/obj/item/trash/plate = 1,
|
||||
/obj/item/trash/popcorn = 1,
|
||||
/obj/item/trash/raisins = 1,
|
||||
/obj/item/trash/sosjerky = 1,
|
||||
/obj/item/trash/syndi_cakes = 1)
|
||||
|
||||
/obj/effect/spawner/lootdrop/grille_or_trash
|
||||
name = "maint grille or trash spawner"
|
||||
loot = list(/obj/structure/grille = 5,
|
||||
|
||||
@@ -243,13 +243,13 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
|
||||
. = replacetext(html, "<!--customheadhtml-->", assets.css_tag())
|
||||
|
||||
/obj/item/pipe_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/pipes)
|
||||
assets.send(user)
|
||||
|
||||
ui = new(user, src, ui_key, "rpd", name, 425, 472, master_ui, state)
|
||||
ui = new(user, src, ui_key, "RapidPipeDispenser", name, 425, 472, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/pipe_dispenser/ui_data(mob/user)
|
||||
|
||||
+1095
-1091
File diff suppressed because it is too large
Load Diff
@@ -145,12 +145,12 @@
|
||||
to_chat(user, "<span class='warning'>There is not enough of [src] left!</span>")
|
||||
. = TRUE
|
||||
|
||||
/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_hands_state)
|
||||
// tgui is a plague upon this codebase
|
||||
|
||||
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "crayon", name, 600, 600,
|
||||
ui = new(user, src, ui_key, "Crayon", name, 600, 600,
|
||||
master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
@@ -48,10 +48,10 @@
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/item/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_hands_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Intellicard", name, 500, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/aicard/ui_data()
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
var/min_health = -100
|
||||
var/cleaning = FALSE
|
||||
var/cleaning_cycles = 10
|
||||
var/patient_laststat = null
|
||||
var/list/injection_chems = list(/datum/reagent/medicine/antitoxin, /datum/reagent/medicine/epinephrine,
|
||||
/datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine, /datum/reagent/medicine/kelotane)
|
||||
var/eject_port = "ingestion"
|
||||
@@ -86,16 +85,16 @@
|
||||
if(patient)
|
||||
to_chat(user, "<span class='warning'>Your [src] is already occupied.</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>", "<span class='notice'>You start placing [target] into your [src]...</span>")
|
||||
|
||||
user.visible_message("<span class='warning'>[hound.name] is carefully inserting [target.name] into their [src].</span>",
|
||||
"<span class='notice'>You start placing [target] into your [src]...</span>")
|
||||
|
||||
if(!patient && iscarbon(target) && !target.buckled && do_after (user, 100, target = target))
|
||||
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
|
||||
if(!in_range(src, target))
|
||||
return
|
||||
if(patient)
|
||||
return //If you try to eat two people at once, you can only eat one.
|
||||
|
||||
else //If you don't have someone in you, proceed.
|
||||
return
|
||||
else
|
||||
if(!isjellyperson(target) && ("toxin" in injection_chems))
|
||||
injection_chems -= "toxin"
|
||||
injection_chems += "antitoxin"
|
||||
@@ -104,8 +103,8 @@
|
||||
injection_chems += "toxin"
|
||||
target.forceMove(src)
|
||||
target.reset_perspective(src)
|
||||
target.ExtinguishMob() //The tongue already puts out fire stacks but being put into the sleeper shouldn't allow you to keep burning.
|
||||
update_gut(hound)
|
||||
target.ExtinguishMob()
|
||||
UpdateGut(hound)
|
||||
user.visible_message("<span class='warning'>[voracious ? "[hound]'s [src.name] lights up and expands as [target] slips inside into their [src.name]." : "[hound]'s sleeper indicator lights up as [target] is scooped up into [hound.p_their()] [src]."]</span>", \
|
||||
"<span class='notice'>Your [voracious ? "[src.name] lights up as [target] slips into" : "sleeper indicator light shines brightly as [target] is scooped inside"] your [src]. Life support functions engaged.</span>")
|
||||
message_admins("[key_name(hound)] has sleeper'd [key_name(patient)] as a dogborg. [ADMIN_JMP(src)]")
|
||||
@@ -156,7 +155,7 @@
|
||||
items_preserved.Cut()
|
||||
cleaning = FALSE
|
||||
if(hound)
|
||||
update_gut(hound)
|
||||
UpdateGut(hound)
|
||||
|
||||
|
||||
/obj/item/dogborg/sleeper/attack_self(mob/user)
|
||||
@@ -166,16 +165,22 @@
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_notcontained_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "dogborg_sleeper", name, 375, 550, master_ui, state)
|
||||
ui = new(user, src, ui_key, "DogborgSleeper", name, 375, 550, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_data()
|
||||
var/list/data = list()
|
||||
var/chemical_list = list()
|
||||
var/blood_percent = 0
|
||||
|
||||
data["occupied"] = patient ? 1 : 0
|
||||
data["blood_levels"] = blood_percent
|
||||
data["blood_status"] = "Patient either has no blood, or does not require it to function."
|
||||
data["chemical_list"] = chemical_list
|
||||
|
||||
if(cleaning && length(contents - items_preserved))
|
||||
data["items"] = "Self-cleaning mode active: [length(contents - items_preserved)] object(s) remaining."
|
||||
@@ -184,7 +189,7 @@
|
||||
data["chem"] = list()
|
||||
for(var/chem in injection_chems)
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[chem]
|
||||
data["chem"] += list(list("name" = R.name, "id" = R.type))
|
||||
data["chem"] += list(list("name" = R.name, "id" = R.type, "allowed" = TRUE))
|
||||
|
||||
data["occupant"] = list()
|
||||
var/mob/living/mob_occupant = patient
|
||||
@@ -212,10 +217,41 @@
|
||||
data["occupant"]["fireLoss"] = mob_occupant.getFireLoss()
|
||||
data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss()
|
||||
data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN)
|
||||
data["occupant"]["reagents"] = list()
|
||||
|
||||
if(mob_occupant.reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in mob_occupant.reagents.reagent_list)
|
||||
data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume))
|
||||
chemical_list += list(list("name" = R.name, "volume" = R.volume))
|
||||
else
|
||||
chemical_list = "Patient has no reagents."
|
||||
|
||||
data["occupant"]["failing_organs"] = list()
|
||||
var/mob/living/carbon/C = mob_occupant
|
||||
if(C)
|
||||
for(var/obj/item/organ/Or in C.getFailingOrgans())
|
||||
if(istype(Or, /obj/item/organ/brain))
|
||||
continue
|
||||
data["occupant"]["failing_organs"] += list(list("name" = Or.name))
|
||||
|
||||
if(istype(C)) //Non-carbons shouldn't be able to enter sleepers, but this is to prevent runtimes if something ever breaks
|
||||
if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner.
|
||||
blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100)
|
||||
var/blood_id = C.get_blood_id()
|
||||
var/blood_warning = ""
|
||||
if(blood_percent < 80)
|
||||
blood_warning = "Patient has low blood levels."
|
||||
if(blood_percent < 60)
|
||||
blood_warning = "Patient has DANGEROUSLY low blood levels."
|
||||
if(blood_id)
|
||||
var/blood_type = C.dna.blood_type
|
||||
if(!(blood_id in GLOB.blood_reagent_types)) // special blood substance
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id]
|
||||
if(R)
|
||||
blood_type = R.name
|
||||
else
|
||||
blood_type = blood_id
|
||||
data["blood_status"] = "Patient has [blood_type] type blood. [blood_warning]"
|
||||
data["blood_levels"] = blood_percent
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_act(action, params)
|
||||
@@ -238,81 +274,42 @@
|
||||
to_chat(src, "Your [src] is already cleaned.")
|
||||
return
|
||||
if(patient)
|
||||
to_chat(patient, "<span class='danger'>[usr.name]'s [src] fills with caustic enzymes around you!</span>")
|
||||
to_chat(patient, "<span class='userdanger'>[usr.name]'s [src] fills with caustic enzymes around you!</span>")
|
||||
to_chat(src, "<span class='danger'>Cleaning process enabled.</span>")
|
||||
clean_cycle(usr)
|
||||
. = TRUE
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/update_gut(mob/living/silicon/robot/hound)
|
||||
//Well, we HAD one, what happened to them?
|
||||
if(!hound) //runetime error fix with dogborgs with no sleepers
|
||||
return
|
||||
|
||||
var/prociconupdate = FALSE
|
||||
var/currentenvy = hound.sleeper_nv
|
||||
hound.sleeper_nv = FALSE
|
||||
if(patient in contents)
|
||||
if(patient_laststat != patient.stat)
|
||||
if(patient.stat & DEAD)
|
||||
hound.sleeper_r = 1
|
||||
hound.sleeper_g = 0
|
||||
patient_laststat = patient.stat
|
||||
else
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 1
|
||||
patient_laststat = patient.stat
|
||||
prociconupdate = TRUE
|
||||
|
||||
if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
hound.sleeper_nv = TRUE
|
||||
else
|
||||
hound.sleeper_nv = FALSE
|
||||
if(hound.sleeper_nv != currentenvy)
|
||||
prociconupdate = TRUE
|
||||
|
||||
//Update icon
|
||||
if(prociconupdate)
|
||||
hound.update_icons()
|
||||
//Return original patient
|
||||
return(patient)
|
||||
//Check for a new patient
|
||||
else
|
||||
for(var/mob/living/carbon/human/C in contents)
|
||||
patient = C
|
||||
if(patient.stat & DEAD)
|
||||
hound.sleeper_r = 1
|
||||
hound.sleeper_g = 0
|
||||
patient_laststat = patient.stat
|
||||
else
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 1
|
||||
patient_laststat = patient.stat
|
||||
|
||||
if(!patient.client || !(patient.client.prefs.cit_toggles & MEDIHOUND_SLEEPER) || !hound.client || !(hound.client.prefs.cit_toggles & MEDIHOUND_SLEEPER))
|
||||
hound.sleeper_nv = TRUE
|
||||
else
|
||||
hound.sleeper_nv = FALSE
|
||||
|
||||
//Update icon and return new patient
|
||||
hound.update_icons()
|
||||
return
|
||||
|
||||
//Cleaning looks better with red on, even with nobody in it
|
||||
if(cleaning && !patient)
|
||||
hound.sleeper_r = 1
|
||||
hound.sleeper_g = 0
|
||||
//Couldn't find anyone, and not cleaning
|
||||
else if(!cleaning && !patient)
|
||||
hound.sleeper_r = 0
|
||||
hound.sleeper_g = 0
|
||||
|
||||
patient_laststat = null
|
||||
/obj/item/dogborg/sleeper/proc/UpdatePatient(mob/living/silicon/robot/hound)
|
||||
patient = null
|
||||
hound.update_icons()
|
||||
for(var/mob/living/carbon/human/C in contents)
|
||||
patient = C
|
||||
break
|
||||
return patient
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/CheckNeedsGutUpdate(mob/living/silicon/robot/hound)
|
||||
if(!hound) return
|
||||
var/current_belly = BORGBELLY_NONE
|
||||
UpdatePatient(hound)
|
||||
if(patient)
|
||||
var/patient_vore_enabled = patient.client?.prefs?.cit_toggles & MEDIHOUND_SLEEPER
|
||||
var/hound_vore_enabled = hound.client?.prefs?.cit_toggles & MEDIHOUND_SLEEPER
|
||||
if(patient_vore_enabled && hound_vore_enabled)
|
||||
if(patient.stat & DEAD)
|
||||
current_belly = BORGBELLY_RED
|
||||
else
|
||||
current_belly = BORGBELLY_GREEN
|
||||
else
|
||||
if(cleaning)
|
||||
current_belly = BORGBELLY_RED
|
||||
return current_belly
|
||||
|
||||
/obj/item/dogborg/sleeper/proc/UpdateGut(mob/living/silicon/robot/hound)
|
||||
var/new_belly = CheckNeedsGutUpdate(hound)
|
||||
if(hound.sleeper_state != new_belly)
|
||||
hound.sleeper_state = new_belly
|
||||
hound.update_icons()
|
||||
|
||||
//Gurgleborg process
|
||||
/obj/item/dogborg/sleeper/proc/clean_cycle(mob/living/silicon/robot/hound)
|
||||
//Sanity
|
||||
if(!hound)
|
||||
return
|
||||
for(var/I in items_preserved)
|
||||
@@ -364,15 +361,13 @@
|
||||
if(!T.dropItemToGround(W))
|
||||
qdel(W)
|
||||
qdel(T)
|
||||
//Handle the target being anything but a mob
|
||||
else if(isobj(target))
|
||||
var/obj/T = target
|
||||
if(T.type in important_items) //If the object is in the items_preserved global list
|
||||
items_preserved += T
|
||||
//If the object is not one to preserve
|
||||
else
|
||||
qdel(T)
|
||||
update_gut()
|
||||
UpdateGut(hound)
|
||||
hound.cell.give(10)
|
||||
else
|
||||
cleaning_cycles = initial(cleaning_cycles)
|
||||
@@ -398,9 +393,8 @@
|
||||
H.playsound_local(source, null, 45, falloff = 0, S = pred_digest)
|
||||
else if(H in contents)
|
||||
H.playsound_local(source, null, 65, falloff = 0, S = prey_digest)
|
||||
|
||||
update_gut(hound)
|
||||
|
||||
|
||||
UpdateGut(hound)
|
||||
if(cleaning)
|
||||
addtimer(CALLBACK(src, .proc/clean_cycle, hound), 50)
|
||||
|
||||
@@ -461,7 +455,7 @@
|
||||
if(do_after(user, 30, target = target) && !patient && !target.buckled)
|
||||
target.forceMove(src)
|
||||
target.reset_perspective(src)
|
||||
update_gut(hound)
|
||||
UpdateGut(hound)
|
||||
user.visible_message("<span class='warning'>[hound.name]'s mobile brig clunks in series as [target] slips inside.</span>", "<span class='notice'>Your mobile brig groans lightly as [target] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1) // Really don't need ERP sound effects for robots
|
||||
|
||||
@@ -489,31 +483,25 @@
|
||||
if(length(contents) > (max_item_count - 1))
|
||||
to_chat(user,"<span class='warning'>Your [src] is full. Eject or process contents to continue.</span>")
|
||||
return
|
||||
|
||||
if(isitem(target))
|
||||
var/obj/item/I = target
|
||||
if(CheckAccepted(I))
|
||||
to_chat(user,"<span class='warning'>[I] registers an error code to your [src]</span>")
|
||||
to_chat(user,"<span class='warning'>[I] registers an error code to your [src].</span>")
|
||||
return
|
||||
if(I.w_class > WEIGHT_CLASS_NORMAL)
|
||||
to_chat(user,"<span class='warning'>[I] is too large to fit into your [src]</span>")
|
||||
to_chat(user,"<span class='warning'>[I] is too large to fit into your [src].</span>")
|
||||
return
|
||||
user.visible_message("<span class='warning'>[hound.name] is ingesting [I] into their [src.name].</span>", "<span class='notice'>You start ingesting [target] into your [src.name]...</span>")
|
||||
if(do_after(user, 15, target = target) && length(contents) < max_item_count)
|
||||
I.forceMove(src)
|
||||
I.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [I] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [I] slips inside.</span>")
|
||||
playsound(hound, 'sound/machines/disposalflush.ogg', 50, 1)
|
||||
if(length(contents) > 11) //grow that tum after a certain junk amount
|
||||
hound.sleeper_r = 1
|
||||
hound.update_icons()
|
||||
else
|
||||
hound.sleeper_r = 0
|
||||
hound.update_icons()
|
||||
return
|
||||
|
||||
if(iscarbon(target) || issilicon(target))
|
||||
else if(iscarbon(target) || issilicon(target))
|
||||
var/mob/living/trashman = target
|
||||
if(!trashman.devourable)
|
||||
to_chat(user, "<span class='warning'>[target] registers an error code to your [src]</span>")
|
||||
to_chat(user, "<span class='warning'>[target] registers an error code to your [src].</span>")
|
||||
return
|
||||
if(patient)
|
||||
to_chat(user,"<span class='warning'>Your [src] is already occupied.</span>")
|
||||
@@ -525,6 +513,14 @@
|
||||
if(do_after(user, 30, target = trashman) && !patient && !trashman.buckled && length(contents) < max_item_count)
|
||||
trashman.forceMove(src)
|
||||
trashman.reset_perspective(src)
|
||||
update_gut()
|
||||
user.visible_message("<span class='warning'>[hound.name]'s garbage processor groans lightly as [trashman] slips inside.</span>", "<span class='notice'>Your garbage compactor groans lightly as [trashman] slips inside.</span>")
|
||||
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
|
||||
|
||||
UpdateGut(hound)
|
||||
|
||||
|
||||
/obj/item/dogborg/sleeper/compactor/CheckNeedsGutUpdate(mob/living/silicon/robot/hound)
|
||||
var/current_belly = ..()
|
||||
if(length(contents) > 11)
|
||||
current_belly = BORGBELLY_RED
|
||||
return current_belly
|
||||
@@ -65,7 +65,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
tracking = TRUE
|
||||
|
||||
|
||||
/obj/item/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
|
||||
/obj/item/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state) // Remember to use the appropriate state.
|
||||
if(emped)
|
||||
to_chat(user, "[src] fizzles weakly.")
|
||||
return
|
||||
@@ -74,7 +74,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
// Variable window height, depending on how many GPS units there are
|
||||
// to show, clamped to relatively safe range.
|
||||
var/gps_window_height = CLAMP(325 + GLOB.GPS_list.len * 14, 325, 700)
|
||||
ui = new(user, src, ui_key, "gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height
|
||||
ui = new(user, src, ui_key, "Gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height
|
||||
ui.open()
|
||||
|
||||
ui.set_autoupdate(state = updating)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
/obj/item/radio/intercom/interact(mob/user)
|
||||
..()
|
||||
ui_interact(user, state = GLOB.default_state)
|
||||
ui_interact(user, state = GLOB.tgui_default_state)
|
||||
|
||||
/obj/item/radio/intercom/can_receive(freq, level)
|
||||
if(!on)
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/radio/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_inventory_state)
|
||||
. = ..()
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
@@ -118,7 +118,7 @@
|
||||
ui_height += 6 + channels.len * 21
|
||||
else
|
||||
ui_height += 24
|
||||
ui = new(user, src, ui_key, "radio", name, ui_width, ui_height, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Radio", name, ui_width, ui_height, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/radio/ui_data(mob/user)
|
||||
|
||||
@@ -135,6 +135,9 @@ GENE SCANNER
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (user.stat == 0) //no more ghost scans
|
||||
H.scan_animation()
|
||||
|
||||
if(H.undergoing_cardiac_arrest() && H.stat != DEAD)
|
||||
to_chat(user, "<span class='danger'>Subject suffering from heart attack: Apply defibrillation or other electric shock immediately!</span>")
|
||||
if(H.undergoing_liver_failure() && H.stat != DEAD) //might be depreciated BUG_PROBABLE_CAUSE
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
return
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
|
||||
var/new_hair_color = input(usr, "Choose a base hair color:", "Character Preference","#"+human_target.hair_color) as color|null
|
||||
if(!new_hair_color)
|
||||
return
|
||||
|
||||
var/new_grad_style = input(usr, "Choose a color pattern:", "Character Preference") as null|anything in GLOB.hair_gradients_list
|
||||
if(!new_grad_style)
|
||||
return
|
||||
@@ -31,6 +35,7 @@
|
||||
if(!new_grad_color)
|
||||
return
|
||||
|
||||
human_target.hair_color = sanitize_hexcolor(new_hair_color)
|
||||
human_target.grad_style = new_grad_style
|
||||
human_target.grad_color = sanitize_hexcolor(new_grad_color)
|
||||
to_chat(human_target, "<span class='notice'>You start applying the hair dye...</span>")
|
||||
|
||||
@@ -192,11 +192,11 @@
|
||||
|
||||
return top_vote
|
||||
|
||||
/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state = GLOB.always_state)
|
||||
/obj/item/toy/eightball/haunted/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/tgui_state/state = GLOB.tgui_always_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "eightball", name, 400, 600, master_ui, state)
|
||||
ui = new(user, src, ui_key, "EightBallVote", name, 400, 600, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/toy/eightball/haunted/ui_data(mob/user)
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
deliveryamt = 10
|
||||
|
||||
/obj/item/grenade/spawnergrenade/clustaur
|
||||
desc = "A very strange grenade often found in maintanance. Use of this may constitute a war crime in your area, consult your local captain."
|
||||
desc = "A very strange grenade often found in maintenance. Use of this may constitute a war crime in your area, consult your local captain."
|
||||
name = "clustaur grenade"
|
||||
icon_state = "clustaur"
|
||||
item_state = "clustaur"
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
/obj/item/implant/radio/activate()
|
||||
. = ..()
|
||||
// needs to be GLOB.deep_inventory_state otherwise it won't open
|
||||
radio.ui_interact(usr, "main", null, FALSE, null, GLOB.deep_inventory_state)
|
||||
// needs to be GLOB.tgui_deep_inventory_state otherwise it won't open
|
||||
radio.ui_interact(usr, "main", null, FALSE, null, GLOB.tgui_deep_inventory_state)
|
||||
|
||||
/obj/item/implant/radio/implant(mob/living/target, mob/user, silent = FALSE)
|
||||
. = ..()
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
to_chat(target, "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
else
|
||||
to_chat(target, "<span class='notice'>You feel a sense of peace and security. You are now enslaved!</span>")
|
||||
var/slave_objective = "[(target.client?.prefs.lewdchem?"Security has enslaved you into being their pet! Obey their commands, but remember: a good pet is not violent.":"You've been neutralized by security! Follow their orders, but remember: neutralization also means nonviolence.")]"
|
||||
var/slave_objective = "[((target.client?.prefs.cit_toggles & HYPNO)?"Security has enslaved you into being their pet! Obey their commands, but remember: a good pet is not violent.":"You've been neutralized by security! Follow their orders, but remember: neutralization also means nonviolence.")]"
|
||||
brainwash(target, slave_objective)
|
||||
target.sec_hud_set_implants()
|
||||
return TRUE
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
/obj/item/implant/uplink/Initialize(mapload, _owner)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, starting_tc, GLOB.not_incapacitated_state)
|
||||
AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, starting_tc, GLOB.tgui_not_incapacitated_state)
|
||||
|
||||
/obj/item/implanter/uplink
|
||||
name = "implanter (uplink)"
|
||||
|
||||
@@ -27,10 +27,10 @@
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state)
|
||||
/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_notcontained_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state)
|
||||
ui = new(user, src, ui_key, "ImplantChair", name, 375, 280, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
|
||||
@@ -210,6 +210,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
|
||||
|
||||
GLOBAL_LIST_INIT(gold_recipes, list ( \
|
||||
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("throne", /obj/structure/chair/throne, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20), \
|
||||
new/datum/stack_recipe("HoS Statue", /obj/structure/statue/gold/hos, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("HoP Statue", /obj/structure/statue/gold/hop, 5, one_per_turf = 1, on_floor = 1), \
|
||||
|
||||
@@ -106,6 +106,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
|
||||
new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1), \
|
||||
null, \
|
||||
new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \
|
||||
new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("micro powered fan assembly", /obj/machinery/fan_assembly, 10, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
))
|
||||
@@ -243,6 +244,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
|
||||
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
|
||||
null, \
|
||||
new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\
|
||||
new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar, 3), \
|
||||
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\
|
||||
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
|
||||
new/datum/stack_recipe("cross", /obj/structure/kitchenspike/cross, 10, time = 10),\
|
||||
@@ -476,8 +478,8 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
null, \
|
||||
new/datum/stack_recipe("colored brown", /obj/item/storage/box/brown), \
|
||||
new/datum/stack_recipe("colored green", /obj/item/storage/box/green), \
|
||||
new/datum/stack_recipe("colored red", /obj/item/storage/box/blue), \
|
||||
new/datum/stack_recipe("colored blue", /obj/item/storage/box/red), \
|
||||
new/datum/stack_recipe("colored red", /obj/item/storage/box/red), \
|
||||
new/datum/stack_recipe("colored blue", /obj/item/storage/box/blue), \
|
||||
new/datum/stack_recipe("colored yellow", /obj/item/storage/box/yellow), \
|
||||
new/datum/stack_recipe("colored pink", /obj/item/storage/box/pink), \
|
||||
new/datum/stack_recipe("colored purple", /obj/item/storage/box/purple), \
|
||||
|
||||
@@ -153,10 +153,10 @@
|
||||
. = ..()
|
||||
|
||||
/obj/item/tank/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_hands_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "tanks", name, 400, 120, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Tank", name, 400, 120, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/tank/ui_data(mob/user)
|
||||
|
||||
@@ -1,89 +1,90 @@
|
||||
//Added by Jack Rost
|
||||
/obj/item/trash
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
desc = "This is rubbish."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/trash/raisins
|
||||
name = "\improper 4no raisins"
|
||||
icon_state= "4no_raisins"
|
||||
|
||||
/obj/item/trash/candy
|
||||
name = "candy"
|
||||
icon_state= "candy"
|
||||
|
||||
/obj/item/trash/cheesie
|
||||
name = "cheesie honkers"
|
||||
icon_state = "cheesie_honkers"
|
||||
|
||||
/obj/item/trash/chips
|
||||
name = "chips"
|
||||
icon_state = "chips"
|
||||
|
||||
/obj/item/trash/popcorn
|
||||
name = "popcorn"
|
||||
icon_state = "popcorn"
|
||||
|
||||
/obj/item/trash/sosjerky
|
||||
name = "\improper Scaredy's Private Reserve Beef Jerky"
|
||||
icon_state = "sosjerky"
|
||||
|
||||
/obj/item/trash/syndi_cakes
|
||||
name = "syndi-cakes"
|
||||
icon_state = "syndi_cakes"
|
||||
|
||||
/obj/item/trash/waffles
|
||||
name = "waffles tray"
|
||||
icon_state = "waffles"
|
||||
|
||||
/obj/item/trash/plate
|
||||
name = "plate"
|
||||
icon_state = "plate"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios pack"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
/obj/item/trash/semki
|
||||
name = "semki pack"
|
||||
icon_state = "semki_pack"
|
||||
|
||||
/obj/item/trash/tray
|
||||
name = "tray"
|
||||
icon_state = "tray"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/candle
|
||||
name = "candle"
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candle4"
|
||||
|
||||
/obj/item/trash/can
|
||||
name = "crushed can"
|
||||
icon_state = "cola"
|
||||
resistance_flags = NONE
|
||||
grind_results = list(/datum/reagent/aluminium = 10)
|
||||
|
||||
/obj/item/trash/boritos
|
||||
name = "boritos bag"
|
||||
icon_state = "boritos"
|
||||
grind_results = list(/datum/reagent/aluminium = 1) //from the mylar bag
|
||||
|
||||
/obj/item/trash/soy_food
|
||||
name = "soyfood"
|
||||
icon_state = "soy_food"
|
||||
|
||||
/obj/item/trash/carbonnanotube_noodles
|
||||
name = "carbon nanotube noodles"
|
||||
icon_state = "carbonnanotube_noodles"
|
||||
|
||||
/obj/item/trash/bird_seed
|
||||
name = "Sunflower Seeds"
|
||||
icon_state = "seedtrash"
|
||||
|
||||
/obj/item/trash/attack(mob/M, mob/living/user)
|
||||
return
|
||||
//Added by Jack Rost
|
||||
/obj/item/trash
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
|
||||
desc = "This is rubbish."
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/trash/Initialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/trash)
|
||||
|
||||
/obj/item/trash/raisins
|
||||
name = "\improper 4no raisins"
|
||||
icon_state= "4no_raisins"
|
||||
|
||||
/obj/item/trash/candy
|
||||
name = "candy"
|
||||
icon_state= "candy"
|
||||
|
||||
/obj/item/trash/cheesie
|
||||
name = "cheesie honkers"
|
||||
icon_state = "cheesie_honkers"
|
||||
|
||||
/obj/item/trash/chips
|
||||
name = "chips"
|
||||
icon_state = "chips"
|
||||
|
||||
/obj/item/trash/popcorn
|
||||
name = "popcorn"
|
||||
icon_state = "popcorn"
|
||||
|
||||
/obj/item/trash/sosjerky
|
||||
name = "\improper Scaredy's Private Reserve Beef Jerky"
|
||||
icon_state = "sosjerky"
|
||||
|
||||
/obj/item/trash/syndi_cakes
|
||||
name = "syndi-cakes"
|
||||
icon_state = "syndi_cakes"
|
||||
|
||||
/obj/item/trash/waffles
|
||||
name = "waffles tray"
|
||||
icon_state = "waffles"
|
||||
|
||||
/obj/item/trash/plate
|
||||
name = "plate"
|
||||
icon_state = "plate"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios pack"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
/obj/item/trash/semki
|
||||
name = "semki pack"
|
||||
icon_state = "semki_pack"
|
||||
|
||||
/obj/item/trash/tray
|
||||
name = "tray"
|
||||
icon_state = "tray"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/candle
|
||||
name = "candle"
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candle4"
|
||||
|
||||
/obj/item/trash/can
|
||||
name = "crushed can"
|
||||
icon_state = "cola"
|
||||
resistance_flags = NONE
|
||||
grind_results = list(/datum/reagent/aluminium = 10)
|
||||
|
||||
/obj/item/trash/boritos
|
||||
name = "boritos bag"
|
||||
icon_state = "boritos"
|
||||
grind_results = list(/datum/reagent/aluminium = 1) //from the mylar bag
|
||||
|
||||
/obj/item/trash/soy_food
|
||||
name = "soyfood"
|
||||
icon_state = "soy_food"
|
||||
|
||||
/obj/item/trash/carbonnanotube_noodles
|
||||
name = "carbon nanotube noodles"
|
||||
icon_state = "carbonnanotube_noodles"
|
||||
|
||||
/obj/item/trash/bird_seed
|
||||
name = "Sunflower Seeds"
|
||||
icon_state = "seedtrash"
|
||||
|
||||
@@ -77,11 +77,11 @@
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/canvas/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "canvas", name, ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Canvas", name, ui_x, ui_y, master_ui, state)
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
@@ -273,16 +273,16 @@
|
||||
if(persistence_id)
|
||||
. += "<span class='notice'>Any painting placed here will be archived at the end of the shift.</span>"
|
||||
if(current_canvas)
|
||||
ui_interact(user, state = GLOB.physical_obscured_state)
|
||||
ui_interact(user, state = GLOB.tgui_physical_obscured_state)
|
||||
. += "<span class='notice'>Use wirecutters to remove the painting.</span>"
|
||||
|
||||
//Hyperstation UI hotwire code ahead. No, I'm not particularly proud of this but if it works, it works.
|
||||
/obj/structure/sign/painting/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "canvas", name, current_canvas.ui_x, current_canvas.ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Canvas", name, current_canvas.ui_x, current_canvas.ui_y, master_ui, state)
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
|
||||
@@ -558,9 +558,52 @@
|
||||
item_state = "stoolbrass_bar"
|
||||
origin_type = /obj/structure/chair/stool/bar/bronze
|
||||
|
||||
/////////////////////////////////
|
||||
//End of Brass & Bronze stools!//
|
||||
/////////////////////////////////
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
//////////////////////////
|
||||
// Golden Seats //
|
||||
//////////////////////////
|
||||
/obj/structure/chair/throne
|
||||
name = "throne"
|
||||
desc = "A magnificent chair for the most magnificent people."
|
||||
icon_state = "throne"
|
||||
max_integrity = 250
|
||||
buildstacktype = /obj/item/stack/sheet/mineral/gold
|
||||
buildstackamount = 5
|
||||
item_chair = null
|
||||
color = "#ffffff"
|
||||
var/mutable_appearance/armrest
|
||||
|
||||
/obj/structure/chair/throne/proc/GetArmrest()
|
||||
return mutable_appearance('icons/obj/chairs.dmi', "throne-arm")
|
||||
|
||||
/obj/structure/chair/throne/Destroy()
|
||||
QDEL_NULL(armrest)
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/throne/post_buckle_mob(mob/living/M)
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/throne/proc/update_armrest()
|
||||
if(has_buckled_mobs())
|
||||
add_overlay(armrest)
|
||||
else
|
||||
cut_overlay(armrest)
|
||||
|
||||
/obj/structure/chair/throne/post_unbuckle_mob()
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/throne/Initialize()
|
||||
|
||||
armrest = GetArmrest()
|
||||
armrest.layer = ABOVE_MOB_LAYER
|
||||
return ..()
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/obj/item/chair/stool/narsie_act()
|
||||
return //sturdy enough to ignore a god
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#define STAIR_TERMINATOR_YES 2
|
||||
|
||||
// dir determines the direction of travel to go upwards (due to lack of sprites, currently only 1 and 2 make sense)
|
||||
// stairs require /turf/open/openspace as the tile above them to work
|
||||
// stairs require /turf/open/transparent/openspace as the tile above them to work
|
||||
// multiple stair objects can be chained together; the Z level transition will happen on the final stair object in the chain
|
||||
|
||||
/obj/structure/stairs
|
||||
@@ -12,7 +12,7 @@
|
||||
icon_state = "stairs"
|
||||
anchored = TRUE
|
||||
|
||||
var/force_open_above = FALSE // replaces the turf above this stair obj with /turf/open/openspace
|
||||
var/force_open_above = FALSE // replaces the turf above this stair obj with /turf/open/transparent/openspace
|
||||
var/terminator_mode = STAIR_TERMINATOR_AUTOMATIC
|
||||
var/turf/listeningTo
|
||||
|
||||
@@ -95,20 +95,20 @@
|
||||
/obj/structure/stairs/proc/build_signal_listener()
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_TURF_MULTIZ_NEW)
|
||||
var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP)
|
||||
var/turf/open/transparent/openspace/T = get_step_multiz(get_turf(src), UP)
|
||||
RegisterSignal(T, COMSIG_TURF_MULTIZ_NEW, .proc/on_multiz_new)
|
||||
listeningTo = T
|
||||
|
||||
/obj/structure/stairs/proc/force_open_above()
|
||||
var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP)
|
||||
var/turf/open/transparent/openspace/T = get_step_multiz(get_turf(src), UP)
|
||||
if(T && !istype(T))
|
||||
T.ChangeTurf(/turf/open/openspace)
|
||||
T.ChangeTurf(/turf/open/transparent/openspace, flags = CHANGETURF_INHERIT_AIR)
|
||||
|
||||
/obj/structure/stairs/proc/on_multiz_new(turf/source, dir)
|
||||
if(dir == UP)
|
||||
var/turf/open/openspace/T = get_step_multiz(get_turf(src), UP)
|
||||
var/turf/open/transparent/openspace/T = get_step_multiz(get_turf(src), UP)
|
||||
if(T && !istype(T))
|
||||
T.ChangeTurf(/turf/open/openspace)
|
||||
T.ChangeTurf(/turf/open/transparent/openspace, flags = CHANGETURF_INHERIT_AIR)
|
||||
|
||||
/obj/structure/stairs/intercept_zImpact(atom/movable/AM, levels = 1)
|
||||
. = ..()
|
||||
|
||||
@@ -68,10 +68,10 @@
|
||||
update_icon()
|
||||
|
||||
/obj/structure/tank_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_physical_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "tank_dispenser", name, 275, 103, master_ui, state)
|
||||
ui = new(user, src, ui_key, "TankDispenser", name, 275, 103, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/structure/tank_dispenser/attack_robot(mob/user)
|
||||
|
||||
@@ -11,68 +11,47 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
layer = SPLASHSCREEN_LAYER
|
||||
|
||||
/turf/open/openspace
|
||||
/turf/open/transparent/openspace
|
||||
name = "open space"
|
||||
desc = "Watch your step!"
|
||||
icon_state = "transparent"
|
||||
baseturfs = /turf/open/openspace
|
||||
baseturfs = /turf/open/transparent/openspace
|
||||
CanAtmosPassVertical = ATMOS_PASS_YES
|
||||
//mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
var/can_cover_up = TRUE
|
||||
var/can_build_on = TRUE
|
||||
|
||||
/turf/open/openspace/debug/update_multiz()
|
||||
/turf/open/transparent/openspace/airless
|
||||
initial_gas_mix = AIRLESS_ATMOS
|
||||
|
||||
/turf/open/transparent/openspace/debug/update_multiz()
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
|
||||
///No bottom level for openspace.
|
||||
/turf/open/transparent/openspace/show_bottom_level()
|
||||
return FALSE
|
||||
|
||||
/turf/open/transparent/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
|
||||
. = ..()
|
||||
plane = OPENSPACE_PLANE
|
||||
layer = OPENSPACE_LAYER
|
||||
|
||||
vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it.
|
||||
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
/turf/open/transparent/openspace/can_have_cabling()
|
||||
if(locate(/obj/structure/lattice/catwalk, src))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/turf/open/openspace/LateInitialize()
|
||||
update_multiz(TRUE, TRUE)
|
||||
|
||||
/turf/open/openspace/Destroy()
|
||||
vis_contents.len = 0
|
||||
return ..()
|
||||
|
||||
/turf/open/openspace/update_multiz(prune_on_fail = FALSE, init = FALSE)
|
||||
. = ..()
|
||||
var/turf/T = below()
|
||||
if(!T)
|
||||
vis_contents.len = 0
|
||||
if(prune_on_fail)
|
||||
ChangeTurf(/turf/open/floor/plating)
|
||||
return FALSE
|
||||
if(init)
|
||||
vis_contents += T
|
||||
/turf/open/transparent/openspace/zAirIn()
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/multiz_turf_del(turf/T, dir)
|
||||
if(dir != DOWN)
|
||||
return
|
||||
update_multiz()
|
||||
|
||||
/turf/open/openspace/multiz_turf_new(turf/T, dir)
|
||||
if(dir != DOWN)
|
||||
return
|
||||
update_multiz()
|
||||
|
||||
/turf/open/openspace/zAirIn()
|
||||
/turf/open/transparent/openspace/zAirOut()
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/zAirOut()
|
||||
/turf/open/transparent/openspace/zPassIn(atom/movable/A, direction, turf/source)
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/zPassIn(atom/movable/A, direction, turf/source)
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/zPassOut(atom/movable/A, direction, turf/destination)
|
||||
/turf/open/transparent/openspace/zPassOut(atom/movable/A, direction, turf/destination)
|
||||
if(A.anchored)
|
||||
return FALSE
|
||||
for(var/obj/O in contents)
|
||||
@@ -80,13 +59,13 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/turf/open/openspace/proc/CanCoverUp()
|
||||
/turf/open/transparent/openspace/proc/CanCoverUp()
|
||||
return can_cover_up
|
||||
|
||||
/turf/open/openspace/proc/CanBuildHere()
|
||||
/turf/open/transparent/openspace/proc/CanBuildHere()
|
||||
return can_build_on
|
||||
|
||||
/turf/open/openspace/attackby(obj/item/C, mob/user, params)
|
||||
/turf/open/transparent/openspace/attackby(obj/item/C, mob/user, params)
|
||||
..()
|
||||
if(!CanBuildHere())
|
||||
return
|
||||
@@ -100,14 +79,14 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
|
||||
if(L)
|
||||
if(R.use(1))
|
||||
to_chat(user, "<span class='notice'>You construct a catwalk.</span>")
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE)
|
||||
new/obj/structure/lattice/catwalk(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need two rods to build a catwalk!</span>")
|
||||
return
|
||||
if(R.use(1))
|
||||
to_chat(user, "<span class='notice'>You construct a lattice.</span>")
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE)
|
||||
ReplaceWithLattice()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one rod to build a lattice.</span>")
|
||||
@@ -120,7 +99,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
|
||||
var/obj/item/stack/tile/plasteel/S = C
|
||||
if(S.use(1))
|
||||
qdel(L)
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE)
|
||||
to_chat(user, "<span class='notice'>You build a floor.</span>")
|
||||
PlaceOnTop(/turf/open/floor/plating)
|
||||
else
|
||||
@@ -128,7 +107,7 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The plating is going to need some support! Place metal rods first.</span>")
|
||||
|
||||
/turf/open/openspace/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||
/turf/open/transparent/openspace/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||
if(!CanBuildHere())
|
||||
return FALSE
|
||||
|
||||
@@ -141,10 +120,22 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
|
||||
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3)
|
||||
return FALSE
|
||||
|
||||
/turf/open/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
|
||||
/turf/open/transparent/openspace/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
|
||||
switch(passed_mode)
|
||||
if(RCD_FLOORWALL)
|
||||
to_chat(user, "<span class='notice'>You build a floor.</span>")
|
||||
PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/* We don't have the icemoon framework yet.
|
||||
/turf/open/transparent/openspace/icemoon
|
||||
name = "ice chasm"
|
||||
baseturfs = /turf/open/transparent/openspace/icemoon
|
||||
can_cover_up = TRUE
|
||||
can_build_on = TRUE
|
||||
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
|
||||
|
||||
/turf/open/transparent/openspace/icemoon/can_zFall(atom/movable/A, levels = 1, turf/target)
|
||||
return TRUE
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/turf/open/transparent
|
||||
baseturfs = /turf/open/transparent/openspace
|
||||
intact = FALSE //this means wires go on top
|
||||
|
||||
/turf/open/transparent/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
|
||||
. = ..()
|
||||
plane = OPENSPACE_PLANE
|
||||
layer = OPENSPACE_LAYER
|
||||
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/turf/open/transparent/LateInitialize()
|
||||
update_multiz(TRUE, TRUE)
|
||||
|
||||
/turf/open/transparent/Destroy()
|
||||
vis_contents.len = 0
|
||||
return ..()
|
||||
|
||||
/turf/open/transparent/update_multiz(prune_on_fail = FALSE, init = FALSE)
|
||||
. = ..()
|
||||
var/turf/T = below()
|
||||
if(!T)
|
||||
vis_contents.len = 0
|
||||
if(!show_bottom_level() && prune_on_fail) //If we cant show whats below, and we prune on fail, change the turf to plating as a fallback
|
||||
ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
|
||||
return FALSE
|
||||
if(init)
|
||||
vis_contents += T
|
||||
return TRUE
|
||||
|
||||
/turf/open/transparent/multiz_turf_del(turf/T, dir)
|
||||
if(dir != DOWN)
|
||||
return
|
||||
update_multiz()
|
||||
|
||||
/turf/open/transparent/multiz_turf_new(turf/T, dir)
|
||||
if(dir != DOWN)
|
||||
return
|
||||
update_multiz()
|
||||
|
||||
///Called when there is no real turf below this turf
|
||||
/turf/open/transparent/proc/show_bottom_level()
|
||||
var/turf/path = SSmapping.level_trait(z, ZTRAIT_BASETURF) || /turf/open/space
|
||||
if(!ispath(path))
|
||||
path = text2path(path)
|
||||
if(!ispath(path))
|
||||
warning("Z-level [z] has invalid baseturf '[SSmapping.level_trait(z, ZTRAIT_BASETURF)]'")
|
||||
path = /turf/open/space
|
||||
var/mutable_appearance/underlay_appearance = mutable_appearance(initial(path.icon), initial(path.icon_state), layer = TURF_LAYER, plane = PLANE_SPACE)
|
||||
underlays += underlay_appearance
|
||||
return TRUE
|
||||
|
||||
|
||||
/turf/open/transparent/glass
|
||||
name = "Glass floor"
|
||||
desc = "Dont jump on it, or do, I'm not your mom."
|
||||
icon = 'icons/turf/floors/glass.dmi'
|
||||
icon_state = "floor_glass"
|
||||
smooth = SMOOTH_MORE
|
||||
var/floor_tile = /obj/item/stack/sheet/glass
|
||||
canSmoothWith = list(/turf/open/transparent/glass, /turf/open/transparent/glass/reinforced)
|
||||
footstep = FOOTSTEP_PLATING
|
||||
barefootstep = FOOTSTEP_HARD_BAREFOOT
|
||||
clawfootstep = FOOTSTEP_HARD_CLAW
|
||||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||||
|
||||
/turf/open/transparent/glass/Initialize()
|
||||
icon_state = "" //Prevent the normal icon from appearing behind the smooth overlays
|
||||
return ..()
|
||||
|
||||
/turf/open/transparent/glass/wrench_act(mob/living/user, obj/item/I)
|
||||
to_chat(user, "<span class='notice'>You begin removing glass...</span>")
|
||||
if(I.use_tool(src, user, 30, volume=80))
|
||||
if(!istype(src, /turf/open/transparent/glass))
|
||||
return TRUE
|
||||
if(floor_tile)
|
||||
new floor_tile(src, 2)
|
||||
ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
|
||||
return TRUE
|
||||
|
||||
/turf/open/transparent/glass/reinforced
|
||||
name = "Reinforced glass floor"
|
||||
desc = "Do jump on it, it can take it."
|
||||
icon = 'icons/turf/floors/reinf_glass.dmi'
|
||||
floor_tile = /obj/item/stack/sheet/rglass
|
||||
|
||||
/turf/open/transparent/glass/reinforced/wrench_act(mob/living/user, obj/item/I)
|
||||
to_chat(user, "<span class='notice'>You begin removing reinforced glass...</span>")
|
||||
if(I.use_tool(src, user, 30, volume=80))
|
||||
if(!istype(src, /turf/open/transparent/glass/reinforced))
|
||||
return TRUE
|
||||
if(floor_tile)
|
||||
new floor_tile(src, 2)
|
||||
ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
|
||||
return TRUE
|
||||
@@ -66,6 +66,40 @@
|
||||
R.use(2)
|
||||
to_chat(user, "<span class='notice'>You reinforce the floor.</span>")
|
||||
return
|
||||
if(istype(C, /obj/item/stack/sheet/glass))
|
||||
if(broken || burnt)
|
||||
to_chat(user, "<span class='warning'>Repair the plating first!</span>")
|
||||
return
|
||||
var/obj/item/stack/sheet/glass/G = C
|
||||
if (G.get_amount() < 2)
|
||||
to_chat(user, "<span class='warning'>You need two glass sheets to make a glass floor!</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You begin adding glass to the floor...</span>")
|
||||
if(do_after(user, 5, target = src))
|
||||
if (G.get_amount() >= 2 && !istype(src, /turf/open/transparent/glass))
|
||||
PlaceOnTop(/turf/open/transparent/glass, flags = CHANGETURF_INHERIT_AIR)
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 80, 1)
|
||||
G.use(2)
|
||||
to_chat(user, "<span class='notice'>You add glass to the floor.</span>")
|
||||
return
|
||||
if(istype(C, /obj/item/stack/sheet/rglass))
|
||||
if(broken || burnt)
|
||||
to_chat(user, "<span class='warning'>Repair the plating first!</span>")
|
||||
return
|
||||
var/obj/item/stack/sheet/rglass/RG = C
|
||||
if (RG.get_amount() < 2)
|
||||
to_chat(user, "<span class='warning'>You need two reinforced glass sheets to make a reinforced glass floor!</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You begin adding reinforced glass to the floor...</span>")
|
||||
if(do_after(user, 10, target = src))
|
||||
if (RG.get_amount() >= 2 && !istype(src, /turf/open/transparent/glass/reinforced))
|
||||
PlaceOnTop(/turf/open/transparent/glass/reinforced, flags = CHANGETURF_INHERIT_AIR)
|
||||
playsound(src, 'sound/items/deconstruct.ogg', 80, 1)
|
||||
RG.use(2)
|
||||
to_chat(user, "<span class='notice'>You add reinforced glass to the floor.</span>")
|
||||
return
|
||||
else if(istype(C, /obj/item/stack/tile))
|
||||
if(!broken && !burnt)
|
||||
for(var/obj/O in src)
|
||||
|
||||
@@ -209,3 +209,15 @@
|
||||
sheet_type = /obj/item/stack/tile/bronze
|
||||
sheet_amount = 2
|
||||
girder_type = /obj/structure/girder/bronze
|
||||
|
||||
/turf/closed/wall/mineral/lead
|
||||
name = "lead lined metal wall"
|
||||
desc = "A hefty wall with lead inserts."
|
||||
icon = 'icons/turf/walls/riveted.dmi'
|
||||
icon_state = "riveted"
|
||||
sheet_type = /obj/item/stack/rods
|
||||
hardness = 10
|
||||
girder_type = /obj/structure/girder/reinforced
|
||||
explosion_block = 2
|
||||
rad_insulation = RAD_NEAR_FULL_INSULATION
|
||||
canSmoothWith = list(/turf/closed/wall/mineral/lead)
|
||||
|
||||
@@ -64,12 +64,12 @@
|
||||
SSnetworks.station_network.add_log("Quantum relay switched from overload recovery mode to normal operation mode.")
|
||||
..()
|
||||
|
||||
/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "ntnet_relay", "NTNet Quantum Relay", ui_x, ui_y, master_ui, state)
|
||||
ui = new(user, src, ui_key, "NtnetRelay", "NTNet Quantum Relay", ui_x, ui_y, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
|
||||
@@ -77,9 +77,10 @@
|
||||
return
|
||||
close_machine(target)
|
||||
|
||||
/obj/machinery/vr_sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
/obj/machinery/vr_sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
// TGUI TODO: do something about this UI
|
||||
ui = new(user, src, ui_key, "vr_sleeper", "VR Sleeper", 475, 340, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
|
||||
borg = to_borg
|
||||
|
||||
/datum/borgpanel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state)
|
||||
/datum/borgpanel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_admin_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "borgopanel", "Borg Panel", 700, 700, master_ui, state)
|
||||
ui = new(user, src, ui_key, "BorgPanel", "Borg Panel", 700, 700, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/datum/borgpanel/ui_data(mob/user)
|
||||
|
||||
@@ -13,10 +13,10 @@
|
||||
changeling = null
|
||||
. = ..()
|
||||
|
||||
/datum/cellular_emporium/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state)
|
||||
/datum/cellular_emporium/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_always_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "cellular_emporium", name, 900, 480, master_ui, state)
|
||||
ui = new(user, src, ui_key, "CellularEmporium", name, 900, 480, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/datum/cellular_emporium/ui_data(mob/user)
|
||||
|
||||
@@ -192,12 +192,13 @@
|
||||
ui_interact(user)
|
||||
return TRUE
|
||||
|
||||
/obj/item/clockwork/slab/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
|
||||
/obj/item/clockwork/slab/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_inventory_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
// TGUI TODO: do something with this UI
|
||||
ui = new(user, src, ui_key, "clockwork_slab", name, 800, 420, master_ui, state)
|
||||
ui.set_autoupdate(FALSE) //we'll update this occasionally, but not as often as possible
|
||||
ui.set_style("clockwork")
|
||||
// ui.set_style("clockwork")
|
||||
ui.open()
|
||||
|
||||
/obj/item/clockwork/slab/proc/recite_scripture(datum/clockwork_scripture/scripture, mob/living/user)
|
||||
|
||||
@@ -260,11 +260,11 @@
|
||||
ui_mode = NUKEUI_AWAIT_TIMER
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/ui_state/state=GLOB.default_state)
|
||||
/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, datum/tgui/master_ui=null, datum/tgui_state/state=GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "nuclear_bomb", name, 350, 442, master_ui, state)
|
||||
ui.set_style(ui_style)
|
||||
ui = new(user, src, ui_key, "NuclearBomb", name, 350, 442, master_ui, state)
|
||||
// ui.set_style(ui_style)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/nuclearbomb/ui_data(mob/user)
|
||||
|
||||
@@ -47,14 +47,14 @@
|
||||
holder.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/assembly/signaler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
/obj/item/assembly/signaler/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
if(!is_secured(user))
|
||||
return
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
var/ui_width = 280
|
||||
var/ui_height = 132
|
||||
ui = new(user, src, ui_key, "signaler", name, ui_width, ui_height, master_ui, state)
|
||||
ui = new(user, src, ui_key, "Signaler", name, ui_width, ui_height, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/assembly/signaler/ui_data(mob/user)
|
||||
|
||||
@@ -1,27 +1,9 @@
|
||||
//DEFINITIONS FOR ASSET DATUMS START HERE.
|
||||
/* uncomment this and delete the tgui def bellow this for the new tgui
|
||||
/datum/asset/simple/tgui
|
||||
assets = list(
|
||||
"tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js',
|
||||
"tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css',
|
||||
)
|
||||
*/
|
||||
/datum/asset/simple/tgui
|
||||
assets = list(
|
||||
// Old TGUI
|
||||
"tgui.css" = 'tgui/assets/tgui.css',
|
||||
"tgui.js" = 'tgui/assets/tgui.js',
|
||||
// tgui-next
|
||||
"tgui-main.html" = 'tgui-next/packages/tgui/public/tgui-main.html',
|
||||
"tgui.bundle.js" = 'tgui-next/packages/tgui/public/tgui.bundle.js',
|
||||
"tgui.bundle.css" = 'tgui-next/packages/tgui/public/tgui.bundle.css',
|
||||
// Old TGUI compatability
|
||||
"tgui-fallback.html" = 'tgui-next/packages/tgui/public/tgui-fallback.html',
|
||||
"shim-html5shiv.js" = 'tgui-next/packages/tgui/public/shim-html5shiv.js',
|
||||
"shim-ie8.js" = 'tgui-next/packages/tgui/public/shim-ie8.js',
|
||||
"shim-dom4.js" = 'tgui-next/packages/tgui/public/shim-dom4.js',
|
||||
"shim-css-om.js" = 'tgui-next/packages/tgui/public/shim-css-om.js',
|
||||
)
|
||||
|
||||
/datum/asset/group/tgui
|
||||
children = list(
|
||||
|
||||
@@ -237,10 +237,10 @@
|
||||
return UI_CLOSE
|
||||
|
||||
/obj/machinery/airalarm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "airalarm", name, 440, 650, master_ui, state)
|
||||
ui = new(user, src, ui_key, "AirAlarm", name, 440, 650, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/airalarm/ui_data(mob/user)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user