Merge branch 'master' into bunnypack

This commit is contained in:
Nick
2018-02-09 07:10:12 +01:00
committed by GitHub
394 changed files with 84552 additions and 70254 deletions
+14
View File
@@ -0,0 +1,14 @@
CREATE TABLE `mentor_memo` (
`ckey` varchar(32) NOT NULL,
`memotext` text NOT NULL,
`timestamp` datetime NOT NULL,
`last_editor` varchar(32) DEFAULT NULL,
`edits` text,
PRIMARY KEY (`ckey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `mentor` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ckey` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+1 -1
View File
@@ -17,6 +17,6 @@
"data"
],
"dlls": [
"libmysql.dll"
"libmariadb.dll"
]
}
@@ -77,7 +77,7 @@
/area/ruin/powered/greed)
"p" = (
/obj/structure/table/wood/poker,
/obj/item/ore/gold,
/obj/item/stack/ore/gold,
/turf/open/floor/engine/cult,
/area/ruin/powered/greed)
"q" = (
+6 -6
View File
@@ -690,9 +690,9 @@
/turf/open/floor/plasteel,
/area/ruin/space/derelict/solar_control)
"cn" = (
/obj/item/ore/iron,
/obj/item/ore/iron,
/obj/item/ore/iron,
/obj/item/stack/ore/iron,
/obj/item/stack/ore/iron,
/obj/item/stack/ore/iron,
/turf/template_noop,
/area/template_noop)
"co" = (
@@ -736,7 +736,7 @@
},
/area/ruin/space/derelict/gravity_generator)
"cv" = (
/obj/item/ore/slag,
/obj/item/stack/ore/slag,
/turf/open/floor/plasteel/airless{
icon_state = "damaged4"
},
@@ -807,7 +807,7 @@
/turf/open/floor/plasteel/airless,
/area/ruin/space/derelict/gravity_generator)
"cI" = (
/obj/item/ore/slag,
/obj/item/stack/ore/slag,
/turf/template_noop,
/area/template_noop)
"cJ" = (
@@ -1897,7 +1897,7 @@
/turf/open/floor/plasteel/airless,
/area/ruin/space/derelict/bridge/access)
"gh" = (
/obj/item/ore/slag,
/obj/item/stack/ore/slag,
/turf/open/floor/plating/airless,
/area/ruin/space/derelict/singularity_engine)
"gi" = (
+6 -15
View File
@@ -208,8 +208,7 @@
/area/ruin/space/has_grav/derelictoutpost/powerstorage)
"aN" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -679,7 +678,6 @@
dir = 4
},
/turf/open/floor/plating{
icon_plating = "wall_thermite";
icon_state = "wall_thermite";
name = "melted wall"
},
@@ -1054,8 +1052,7 @@
/area/ruin/space/has_grav/derelictoutpost/cargobay)
"cH" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/structure/cable{
icon_state = "1-4"
@@ -1712,7 +1709,6 @@
dir = 8
},
/turf/open/floor/plating{
icon_plating = "wall_thermite";
icon_state = "wall_thermite";
name = "melted wall"
},
@@ -1730,7 +1726,6 @@
dir = 8
},
/turf/open/floor/plating{
icon_plating = "wall_thermite";
icon_state = "wall_thermite";
name = "melted wall"
},
@@ -1812,8 +1807,7 @@
/area/ruin/space/has_grav/derelictoutpost/cargostorage)
"dY" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/stack/sheet/plasteel/twenty,
/obj/effect/turf_decal/delivery,
@@ -1917,8 +1911,7 @@
/area/ruin/space/has_grav/derelictoutpost/cargostorage)
"ek" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/stack/sheet/cardboard/fifty,
/obj/effect/turf_decal/delivery,
@@ -1964,8 +1957,7 @@
/area/ruin/space/has_grav/derelictoutpost/cargostorage)
"eq" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/crowbar,
/turf/open/floor/plasteel,
@@ -2049,8 +2041,7 @@
/area/ruin/space/has_grav/derelictoutpost/cargostorage)
"eB" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/device/paicard,
/obj/machinery/light,
@@ -2877,8 +2877,7 @@
/area/shuttle/caravan/freighter1)
"jl" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/stack/sheet/metal/fifty,
/turf/open/floor/plasteel/airless/dark,
@@ -27,19 +27,18 @@
/area/ruin/unpowered)
"i" = (
/obj/structure/closet/crate,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"j" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/ore/bananium,
/obj/item/stack/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"k" = (
@@ -84,7 +83,7 @@
/turf/open/floor/plating/asteroid/airless,
/area/ruin/unpowered)
"p" = (
/obj/item/ore/bananium,
/obj/item/stack/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"q" = (
@@ -148,10 +147,10 @@
/area/ruin/unpowered)
"y" = (
/obj/structure/closet/crate,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/turf/open/floor/mineral/bananium/airless,
/area/ruin/unpowered)
"z" = (
@@ -17,7 +17,6 @@
"ad" = (
/obj/structure/girder,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg2";
icon_state = "platingdmg2"
},
/area/ruin/unpowered)
@@ -38,7 +37,6 @@
/area/ruin/unpowered)
"ah" = (
/turf/open/floor/plating/airless{
icon_plating = "platingdmg1";
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
@@ -55,7 +53,6 @@
"ak" = (
/obj/item/stack/rods,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg2";
icon_state = "platingdmg2"
},
/area/ruin/unpowered)
@@ -82,20 +79,17 @@
"ao" = (
/obj/structure/closet/emcloset,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
"ap" = (
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
"aq" = (
/obj/structure/girder,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -106,7 +100,6 @@
"as" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg2";
icon_state = "platingdmg2"
},
/area/ruin/unpowered)
@@ -117,7 +110,6 @@
"au" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -136,7 +128,6 @@
"ay" = (
/obj/item/stack/tile/plasteel,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg2";
icon_state = "platingdmg2"
},
/area/ruin/unpowered)
@@ -159,7 +150,6 @@
"aB" = (
/obj/item/stack/tile/plasteel,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg1";
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
@@ -176,7 +166,6 @@
},
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg2";
icon_state = "platingdmg2"
},
/area/ruin/unpowered)
@@ -240,7 +229,6 @@
status = 2
},
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -263,7 +251,6 @@
/obj/structure/table/wood,
/obj/item/shard,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -271,7 +258,6 @@
/obj/structure/table/wood,
/obj/item/trash/plate,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -312,14 +298,12 @@
/area/ruin/unpowered)
"be" = (
/turf/open/floor/plating/airless{
icon_plating = "platingdmg2";
icon_state = "platingdmg2"
},
/area/ruin/unpowered)
"bg" = (
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg1";
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
@@ -336,7 +320,6 @@
/obj/item/stack/sheet/metal,
/obj/item/clothing/head/chefhat,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -348,21 +331,18 @@
"bk" = (
/obj/structure/table_frame/wood,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
"bl" = (
/obj/structure/girder,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg1";
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
"bm" = (
/obj/item/chair,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -374,14 +354,12 @@
/obj/item/stack/sheet/metal,
/obj/structure/girder,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg1";
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
"bq" = (
/obj/item/stack/tile/plasteel,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg3";
icon_state = "platingdmg3"
},
/area/ruin/unpowered)
@@ -389,7 +367,6 @@
/obj/structure/girder,
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/airless{
icon_plating = "platingdmg1";
icon_state = "platingdmg1"
},
/area/ruin/unpowered)
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -43,9 +43,9 @@
/obj/item/stack/sheet/mineral/gold{
amount = 15
},
/obj/item/ore/bluespace_crystal,
/obj/item/ore/bluespace_crystal,
/obj/item/ore/bluespace_crystal,
/obj/item/stack/ore/bluespace_crystal,
/obj/item/stack/ore/bluespace_crystal,
/obj/item/stack/ore/bluespace_crystal,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/ancientstation/hivebot)
"ak" = (
+2 -2
View File
@@ -188,7 +188,7 @@
/area/ruin/space/has_grav/onehalf/drone_bay)
"aF" = (
/obj/structure/disposalpipe/trunk,
/obj/item/ore/diamond,
/obj/item/stack/ore/diamond,
/turf/open/floor/plating/airless,
/area/ruin/space/has_grav/onehalf/drone_bay)
"aG" = (
@@ -1100,7 +1100,7 @@
/area/ruin/space/has_grav/onehalf/bridge)
"cZ" = (
/obj/structure/table/reinforced,
/obj/item/ore/bluespace_crystal,
/obj/item/stack/ore/bluespace_crystal,
/obj/item/coin/plasma,
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/onehalf/bridge)
+1 -2
View File
@@ -1724,8 +1724,7 @@
/area/awaymission/caves/listeningpost)
"fn" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/paper/fluff/awaymissions/caves/shipment_receipt,
/obj/item/organ/eyes/robotic/thermals,
+11 -23
View File
@@ -273,7 +273,7 @@
},
/area/awaymission/moonoutpost19/syndicate)
"aS" = (
/obj/item/ore/iron{
/obj/item/stack/ore/iron{
pixel_x = 7;
pixel_y = -6
},
@@ -1656,8 +1656,8 @@
},
/area/awaymission/moonoutpost19/syndicate)
"dv" = (
/obj/item/ore/iron,
/obj/item/ore/iron{
/obj/item/stack/ore/iron,
/obj/item/stack/ore/iron{
pixel_x = -7;
pixel_y = -4
},
@@ -1708,7 +1708,7 @@
},
/area/awaymission/moonoutpost19/syndicate)
"dz" = (
/obj/item/ore/iron{
/obj/item/stack/ore/iron{
pixel_x = -3;
pixel_y = 9
},
@@ -1854,7 +1854,7 @@
},
/area/awaymission/moonoutpost19/main)
"dN" = (
/obj/item/ore/iron{
/obj/item/stack/ore/iron{
pixel_x = -7;
pixel_y = -4
},
@@ -4927,9 +4927,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/door/firedoor{
density = 1;
icon_state = "door_closed";
/obj/machinery/door/firedoor/closed{
opacity = 0
},
/turf/open/floor/plasteel{
@@ -5026,9 +5024,7 @@
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/firedoor{
density = 1;
icon_state = "door_closed";
/obj/machinery/door/firedoor/closed{
opacity = 0
},
/turf/open/floor/plasteel/floorgrime{
@@ -5186,9 +5182,7 @@
/area/awaymission/moonoutpost19/arrivals)
"kA" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/firedoor{
density = 1;
icon_state = "door_closed";
/obj/machinery/door/firedoor/closed{
opacity = 0
},
/turf/open/floor/plasteel{
@@ -5250,9 +5244,7 @@
},
/area/awaymission/moonoutpost19/arrivals)
"kH" = (
/obj/machinery/door/firedoor{
density = 1;
icon_state = "door_closed";
/obj/machinery/door/firedoor/closed{
opacity = 0
},
/turf/open/floor/plasteel{
@@ -5339,9 +5331,7 @@
},
/area/awaymission/moonoutpost19/arrivals)
"kR" = (
/obj/machinery/door/firedoor{
density = 1;
icon_state = "door_closed";
/obj/machinery/door/firedoor/closed{
opacity = 0
},
/turf/open/floor/plasteel/neutral/corner{
@@ -5350,9 +5340,7 @@
},
/area/awaymission/moonoutpost19/arrivals)
"kS" = (
/obj/machinery/door/firedoor{
density = 1;
icon_state = "door_closed";
/obj/machinery/door/firedoor/closed{
opacity = 0
},
/turf/open/floor/plasteel/neutral/corner{
+1 -2
View File
@@ -2625,8 +2625,7 @@
/area/awaymission/research/interior/maint)
"hY" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
+77681 -67930
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -1735,11 +1735,11 @@
/turf/open/floor/plating,
/area/awaymission/spacebattle/cruiser)
"gT" = (
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/item/stack/ore/bananium,
/obj/structure/closet/crate,
/turf/open/floor/plating,
/area/awaymission/spacebattle/cruiser)
+11 -9
View File
@@ -3032,7 +3032,7 @@
dir = 4
},
/obj/machinery/iv_drip,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood,
/turf/open/floor/plasteel/whitered/side{
dir = 5
},
@@ -7187,8 +7187,7 @@
/area/maintenance/port/fore)
"arM" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -13846,7 +13845,9 @@
/area/chapel/office)
"aIB" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/bodycontainer/crematorium,
/obj/structure/bodycontainer/crematorium{
id = "crematoriumChapel"
},
/turf/open/floor/plasteel/dark,
/area/chapel/office)
"aIC" = (
@@ -14271,6 +14272,7 @@
"aJG" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/button/crematorium{
id = "crematoriumChapel";
pixel_x = 25
},
/obj/machinery/light/small{
@@ -34231,7 +34233,7 @@
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
"bHz" = (
/obj/item/ore/iron,
/obj/item/stack/ore/iron,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -35471,8 +35473,8 @@
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
"bKk" = (
/obj/item/ore/silver,
/obj/item/ore/silver,
/obj/item/stack/ore/silver,
/obj/item/stack/ore/silver,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -51884,8 +51886,8 @@
/area/quartermaster/storage)
"cCp" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/blood/AMinus,
/obj/item/reagent_containers/blood/BMinus{
pixel_x = -4;
+18 -39
View File
@@ -5807,8 +5807,7 @@
"amD" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/device/flashlight,
/obj/effect/spawner/lootdrop/maintenance,
@@ -8649,8 +8648,7 @@
/area/maintenance/port/fore)
"asU" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -9954,8 +9952,7 @@
/area/maintenance/port/fore)
"avq" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/crowbar/red,
/obj/effect/spawner/lootdrop/maintenance,
@@ -10795,8 +10792,7 @@
"axl" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -11852,8 +11848,7 @@
/area/quartermaster/storage)
"azA" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance,
/obj/effect/turf_decal/bot,
@@ -12521,7 +12516,6 @@
/area/engine/atmospherics_engine)
"aBd" = (
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
icon_state = "intact";
dir = 4
},
/obj/structure/sign/directions/engineering{
@@ -12533,7 +12527,6 @@
/area/engine/atmospherics_engine)
"aBe" = (
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
icon_state = "intact";
dir = 10
},
/obj/effect/turf_decal/stripes/line{
@@ -12885,8 +12878,7 @@
/area/quartermaster/warehouse)
"aBN" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -16688,8 +16680,7 @@
"aJv" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -22164,8 +22155,7 @@
/area/security/execution/education)
"aUJ" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 4
@@ -29173,8 +29163,7 @@
"bjo" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/device/flashlight,
/obj/effect/spawner/lootdrop/maintenance,
@@ -56882,8 +56871,7 @@
/area/maintenance/starboard)
"clv" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/decal/cleanable/dirt,
/obj/item/device/flashlight,
@@ -61354,8 +61342,7 @@
/area/maintenance/starboard)
"cuH" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/clothing/shoes/jackboots,
/obj/item/device/radio,
@@ -63386,8 +63373,7 @@
/area/maintenance/starboard)
"cza" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -68671,8 +68657,7 @@
"cJM" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/device/flashlight,
/obj/effect/spawner/lootdrop/maintenance,
@@ -70444,8 +70429,7 @@
/area/science/xenobiology)
"cNj" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/device/flashlight,
/obj/effect/spawner/lootdrop/maintenance,
@@ -90134,8 +90118,7 @@
"dCR" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/device/flashlight,
/obj/effect/spawner/lootdrop/maintenance,
@@ -94162,8 +94145,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -94534,8 +94516,7 @@
"dLT" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/crowbar/red,
/obj/effect/spawner/lootdrop/maintenance{
@@ -98791,8 +98772,7 @@
"dUX" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/device/flashlight,
/obj/effect/spawner/lootdrop/maintenance,
@@ -102093,7 +102073,6 @@
/area/shuttle/escape)
"ecg" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
icon_state = "inje_map";
dir = 1
},
/obj/effect/turf_decal/stripes/line,
+32 -50
View File
@@ -2034,8 +2034,7 @@
/obj/item/clothing/mask/gas,
/obj/item/clothing/mask/gas,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/machinery/atmospherics/pipe/manifold/general/visible,
/obj/item/wrench,
@@ -9684,15 +9683,13 @@
/area/maintenance/starboard/fore)
"auC" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
"auD" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/structure/sign/warning/vacuum/external{
pixel_y = 32
@@ -10630,8 +10627,7 @@
/area/security/brig)
"awA" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/storage/box/donkpockets,
/turf/open/floor/plating,
@@ -11785,7 +11781,7 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"azj" = (
/obj/item/ore/iron,
/obj/item/stack/ore/iron,
/obj/effect/turf_decal/stripes/line{
dir = 9
},
@@ -13140,8 +13136,8 @@
/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"aBS" = (
/obj/item/ore/silver,
/obj/item/ore/silver,
/obj/item/stack/ore/silver,
/obj/item/stack/ore/silver,
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -13215,7 +13211,7 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
/obj/item/ore/glass,
/obj/item/stack/ore/glass,
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aCc" = (
@@ -17320,8 +17316,7 @@
"aKw" = (
/obj/effect/decal/cleanable/cobweb,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/wirecutters,
/obj/item/weldingtool,
@@ -17462,8 +17457,8 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
/obj/item/ore/glass,
/obj/item/ore/iron,
/obj/item/stack/ore/glass,
/obj/item/stack/ore/iron,
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/quartermaster/storage)
@@ -17933,10 +17928,8 @@
},
/area/hydroponics/garden)
"aLX" = (
/obj/machinery/door/firedoor/border_only{
density = 1;
/obj/machinery/door/firedoor/border_only/closed{
dir = 8;
icon_state = "door_closed";
name = "Animal Pen A";
opacity = 1
},
@@ -19846,8 +19839,7 @@
/area/quartermaster/storage)
"aQk" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/spawner/lootdrop/maintenance{
@@ -19942,8 +19934,7 @@
/area/quartermaster/qm)
"aQu" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/machinery/light{
dir = 8
@@ -20327,10 +20318,8 @@
},
/area/hydroponics/garden)
"aRg" = (
/obj/machinery/door/firedoor/border_only{
density = 1;
/obj/machinery/door/firedoor/border_only/closed{
dir = 8;
icon_state = "door_closed";
name = "Animal Pen B";
opacity = 1
},
@@ -21050,8 +21039,7 @@
/area/maintenance/port)
"aSP" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/turf/open/floor/plating,
/area/maintenance/port/fore)
@@ -29600,8 +29588,7 @@
/area/quartermaster/office)
"bks" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plasteel/brown{
@@ -41146,8 +41133,7 @@
/area/gateway)
"bIp" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/stack/sheet/rglass{
amount = 50
@@ -42372,8 +42358,7 @@
/area/maintenance/port)
"bLc" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 3;
@@ -43143,8 +43128,7 @@
/area/maintenance/port)
"bMG" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/rack_parts,
/obj/effect/spawner/lootdrop/maintenance,
@@ -48851,8 +48835,7 @@
/area/maintenance/port/aft)
"bYP" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/storage/box/donkpockets,
/obj/effect/spawner/lootdrop/maintenance,
@@ -53191,8 +53174,7 @@
/area/maintenance/starboard)
"chD" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/cane,
/obj/effect/spawner/lootdrop/maintenance,
@@ -55691,8 +55673,7 @@
/area/aisat)
"cmY" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance,
/obj/effect/turf_decal/stripes/line{
@@ -56418,11 +56399,11 @@
},
/obj/item/reagent_containers/blood/random,
/obj/item/reagent_containers/blood/random,
/obj/item/reagent_containers/blood/empty{
/obj/item/reagent_containers/blood{
pixel_x = -3;
pixel_y = -3
},
/obj/item/reagent_containers/blood/empty{
/obj/item/reagent_containers/blood{
pixel_x = -3;
pixel_y = -3
},
@@ -66149,8 +66130,8 @@
pixel_x = 8;
pixel_y = 2
},
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/syringe,
/obj/item/reagent_containers/dropper,
/obj/structure/sign/warning/biohazard{
@@ -66543,8 +66524,8 @@
/area/medical/virology)
"cIu" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood/empty{
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/blood{
pixel_x = -3;
pixel_y = -3
},
@@ -69004,7 +68985,7 @@
/area/medical/virology)
"cNt" = (
/obj/machinery/button/crematorium{
id = "cremawheat";
id = "crematoriumChapel";
pixel_x = -26;
req_access_txt = "27"
},
@@ -75666,7 +75647,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/item/ore/slag,
/obj/item/stack/ore/slag,
/turf/open/floor/plating,
/area/maintenance/aft)
"diS" = (
@@ -77189,6 +77170,7 @@
/area/science/circuit)
"eFN" = (
/obj/structure/bodycontainer/crematorium{
id = "crematoriumChapel";
dir = 1
},
/turf/open/floor/plasteel/dark,
+6 -10
View File
@@ -1216,8 +1216,8 @@
/area/mine/maintenance)
"dB" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood/empty{
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/blood{
pixel_x = -3;
pixel_y = -3
},
@@ -1317,8 +1317,7 @@
/area/mine/production)
"dL" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -1772,15 +1771,13 @@
pixel_y = -22
},
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/turf/open/floor/plasteel/purple/side,
/area/mine/production)
"eT" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/machinery/light,
/turf/open/floor/plasteel/brown,
@@ -1791,8 +1788,7 @@
/area/mine/production)
"eV" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/turf/open/floor/plasteel/brown{
dir = 6
+9 -12
View File
@@ -462,7 +462,7 @@
/turf/open/floor/plating/asteroid,
/area/asteroid/nearstation)
"aaW" = (
/obj/item/ore/iron,
/obj/item/stack/ore/iron,
/turf/open/floor/plating/asteroid,
/area/asteroid/nearstation)
"aaX" = (
@@ -927,7 +927,7 @@
/turf/open/space,
/area/asteroid/nearstation)
"abS" = (
/obj/item/ore/glass,
/obj/item/stack/ore/glass,
/turf/open/floor/plating/astplate,
/area/asteroid/nearstation)
"abT" = (
@@ -1717,8 +1717,7 @@
/area/shuttle/supply)
"adv" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating/astplate,
@@ -2887,7 +2886,7 @@
/turf/open/floor/plating,
/area/asteroid/nearstation)
"afM" = (
/obj/item/ore/iron,
/obj/item/stack/ore/iron,
/obj/structure/barricade/wooden,
/turf/open/floor/plating/astplate,
/area/asteroid/nearstation)
@@ -3289,8 +3288,8 @@
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"agE" = (
/obj/item/ore/silver,
/obj/item/ore/iron,
/obj/item/stack/ore/silver,
/obj/item/stack/ore/iron,
/turf/open/floor/plating/astplate,
/area/asteroid/nearstation)
"agF" = (
@@ -5052,7 +5051,7 @@
/turf/open/floor/plating/airless,
/area/shuttle/supply)
"ajQ" = (
/obj/item/ore/iron,
/obj/item/stack/ore/iron,
/turf/open/floor/plating/astplate,
/area/asteroid/nearstation)
"ajR" = (
@@ -11620,8 +11619,7 @@
/area/maintenance/port/fore)
"avP" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/clothing/shoes/jackboots,
/obj/item/device/radio,
@@ -33431,8 +33429,7 @@
/area/maintenance/starboard)
"sCQ" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
+7 -21
View File
@@ -7207,8 +7207,7 @@
/area/crew_quarters/fitness/recreation)
"ato" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -7526,7 +7525,7 @@
/obj/item/ammo_box/a357,
/obj/item/tank/internals/plasma/full,
/obj/item/disk/nuclear/fake,
/obj/item/ore/diamond,
/obj/item/stack/ore/diamond,
/obj/item/gun/energy/disabler,
/turf/open/floor/plasteel/vault{
dir = 4
@@ -16450,8 +16449,7 @@
/area/quartermaster/warehouse)
"aQf" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plasteel/floorgrime,
@@ -17262,8 +17260,7 @@
/area/maintenance/department/crew_quarters/bar)
"aRY" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
@@ -19193,8 +19190,7 @@
/area/quartermaster/storage)
"aWz" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
@@ -36440,8 +36436,7 @@
/area/science/mineral_storeroom)
"bLj" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/storage/bag/ore,
/obj/item/storage/bag/ore,
@@ -40161,7 +40156,6 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 4
},
/turf/open/floor/plasteel,
@@ -40169,14 +40163,12 @@
"bUx" = (
/obj/machinery/atmospherics/pipe/simple/green/visible,
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
"bUy" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 4
},
/turf/open/floor/plasteel/yellow/side{
@@ -40187,7 +40179,6 @@
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/cyan/visible,
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 4
},
/turf/open/floor/plating,
@@ -40195,7 +40186,6 @@
"bUA" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 10
},
/turf/open/space,
@@ -40646,8 +40636,7 @@
"bVB" = (
/obj/item/book/manual/barman_recipes,
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/cigbutt,
/obj/effect/spawner/lootdrop/maintenance,
@@ -42222,7 +42211,6 @@
/area/maintenance/disposal/incinerator)
"bZi" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 6
},
/obj/machinery/meter,
@@ -42230,7 +42218,6 @@
/area/maintenance/disposal/incinerator)
"bZj" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 9
},
/turf/closed/wall/r_wall,
@@ -42471,7 +42458,6 @@
/area/maintenance/disposal/incinerator)
"bZR" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible{
icon_state = "intact";
dir = 5
},
/turf/closed/wall/r_wall,
+2 -4
View File
@@ -1079,8 +1079,7 @@
/area/holodeck/rec_center/kobayashi)
"dv" = (
/obj/structure/closet{
density = 0;
opened = 1
density = 0
},
/obj/item/clothing/suit/judgerobe,
/obj/item/clothing/head/powdered_wig,
@@ -8981,8 +8980,7 @@
/area/wizard_station)
"zp" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
opened = 1
icon_state = "crateopen"
},
/obj/item/clothing/suit/wizrobe/red,
/obj/item/clothing/head/wizard/red,
+2 -4
View File
@@ -790,7 +790,6 @@
/area/shuttle/escape)
"cq" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
icon_state = "intact";
dir = 5
},
/turf/open/floor/plasteel/white,
@@ -801,7 +800,6 @@
/area/shuttle/escape)
"cs" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
icon_state = "intact";
dir = 9
},
/turf/open/floor/plasteel/white,
@@ -879,8 +877,8 @@
/area/shuttle/escape)
"cE" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood/empty,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/blood,
/obj/item/reagent_containers/blood/AMinus,
/obj/item/reagent_containers/blood/BMinus{
pixel_x = -4;
+947
View File
@@ -0,0 +1,947 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/turf/template_noop,
/area/template_noop)
"ab" = (
/turf/closed/wall/clockwork,
/area/shuttle/escape)
"ac" = (
/turf/closed/wall/mineral/titanium,
/area/shuttle/escape)
"ad" = (
/obj/effect/spawner/structure/window/shuttle,
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"ae" = (
/turf/closed/wall/mineral/titanium,
/turf/closed/wall/mineral/cult,
/area/shuttle/escape)
"af" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor,
/obj/structure/destructible/clockwork/trap/brass_skewer,
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"ag" = (
/obj/structure/shuttle/engine/propulsion/right{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"ah" = (
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/escape)
"ai" = (
/obj/machinery/computer/emergency_shuttle,
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aj" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/card/emag/fake,
/obj/machinery/light{
dir = 1
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"ak" = (
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"al" = (
/obj/effect/decal/cleanable/salt,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"am" = (
/obj/effect/decal/cleanable/salt,
/obj/effect/decal/cleanable/crayon,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"an" = (
/obj/machinery/light{
dir = 1
},
/obj/effect/decal/cleanable/salt,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"ao" = (
/obj/effect/decal/cleanable/salt,
/obj/item/tome,
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"ap" = (
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/gloves/clockwork,
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor,
/obj/structure/destructible/clockwork/trap/brass_skewer,
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"aq" = (
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/suit/armor/clockwork,
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor,
/obj/structure/destructible/clockwork/trap/brass_skewer,
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"ar" = (
/obj/machinery/light{
dir = 4
},
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/shoes/clockwork,
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor,
/obj/structure/destructible/clockwork/trap/brass_skewer,
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"as" = (
/obj/structure/shuttle/engine/propulsion{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"at" = (
/obj/effect/decal/cleanable/salt,
/obj/machinery/portable_atmospherics/canister/water_vapor,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"au" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/structure/holosign/wetsign,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"av" = (
/obj/machinery/door/airlock/command/glass{
name = "bridge door";
req_access_txt = "19";
secondsElectrified = -1
},
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aw" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor,
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"ax" = (
/obj/structure/shuttle/engine/propulsion/left{
dir = 4
},
/turf/open/floor/plating/airless,
/area/shuttle/escape)
"ay" = (
/obj/machinery/light,
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"az" = (
/turf/open/floor/plasteel/cult,
/turf/closed/wall/mineral/cult,
/area/shuttle/escape)
"aA" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/twohanded/spear,
/obj/item/device/assembly/flash/handheld,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"aB" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/greentext,
/obj/item/banhammer,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"aC" = (
/obj/effect/decal/cleanable/salt,
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"aD" = (
/obj/machinery/door/airlock/security/glass{
name = "security airlock";
req_access_txt = "63";
secondsElectrified = -1
},
/obj/effect/decal/cleanable/salt,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"aE" = (
/obj/structure/sign/poster/contraband/energy_swords,
/turf/closed/wall/clockwork,
/area/shuttle/escape)
"aF" = (
/obj/structure/sign/poster/contraband/revolver,
/turf/closed/wall/clockwork,
/area/shuttle/escape)
"aG" = (
/obj/effect/decal/cleanable/salt,
/obj/machinery/door/airlock/clockwork{
req_access = null
},
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"aH" = (
/obj/structure/sign/poster/contraband/kudzu,
/turf/closed/wall/clockwork,
/area/shuttle/escape)
"aI" = (
/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6,
/turf/closed/wall/clockwork,
/area/shuttle/escape)
"aJ" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/glass/beaker/waterbottle/large,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aK" = (
/obj/effect/decal/cleanable/salt,
/obj/item/grown/bananapeel,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aL" = (
/obj/structure/table/reinforced,
/obj/machinery/light{
dir = 1
},
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/mask/vape,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aM" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/glass,
/obj/item/toy/plush/plushvar,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aN" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/snacks/salad/validsalad,
/obj/item/toy/figure/warden,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aO" = (
/obj/item/grown/bananapeel,
/obj/item/storage/backpack,
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aP" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aQ" = (
/obj/item/soap/deluxe,
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aR" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/glass,
/obj/item/toy/spinningtoy,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aS" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/toy/katana,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aT" = (
/obj/machinery/door/airlock/titanium,
/obj/item/soap/deluxe,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aU" = (
/obj/effect/decal/cleanable/salt,
/obj/item/toy/syndicateballoon,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aW" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/mask/vape,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aX" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/glass,
/obj/item/toy/plush/narplush,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"aY" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/snacks/salad/validsalad,
/obj/item/toy/figure/hos,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"ba" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/gun/ballistic/revolver/reverse,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bb" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/toy/sword,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bc" = (
/obj/machinery/light/small,
/obj/item/soap/deluxe,
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bd" = (
/obj/machinery/door/airlock/titanium,
/obj/docking_port/mobile/emergency{
dheight = 0;
dir = 8;
dwidth = 6;
height = 18;
name = "Saltmine";
port_direction = 4;
timid = 1;
width = 14
},
/obj/item/soap/deluxe,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"be" = (
/obj/effect/decal/cleanable/salt,
/mob/living/simple_animal/bot/secbot/beepsky,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bf" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/glass/beaker/waterbottle/large,
/obj/structure/window/plasma/reinforced,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bg" = (
/obj/effect/decal/cleanable/salt,
/obj/item/grown/bananapeel,
/obj/structure/window/plasma/reinforced,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bh" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/mask/vape,
/obj/structure/window/plasma/reinforced,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bi" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/window/plasma/reinforced,
/obj/structure/table/glass,
/obj/item/toy/plush/nukeplushie,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bj" = (
/obj/structure/window/plasma/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/grown/bananapeel,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bk" = (
/obj/structure/window/plasma/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/snacks/salad/validsalad,
/obj/item/toy/figure/secofficer,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bl" = (
/obj/structure/window/plasma/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/grown/bananapeel,
/obj/item/storage/backpack,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bm" = (
/obj/structure/window/plasma/reinforced,
/obj/machinery/light{
dir = 4
},
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bn" = (
/obj/structure/sign/poster/contraband/lizard,
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/escape)
"bo" = (
/obj/structure/sign/poster/contraband/lusty_xenomorph,
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/escape)
"bp" = (
/obj/structure/sign/poster/contraband/grey_tide,
/turf/closed/wall/mineral/titanium/nodiagonal,
/area/shuttle/escape)
"bq" = (
/obj/structure/sign/poster/contraband/fun_police,
/turf/closed/wall/mineral/titanium,
/area/shuttle/escape)
"br" = (
/obj/structure/sign/poster/official/wtf_is_co2,
/turf/closed/wall/mineral/titanium,
/area/shuttle/escape)
"bs" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/glass/beaker/waterbottle/large,
/obj/structure/window/plasma/reinforced{
dir = 1
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bt" = (
/obj/effect/decal/cleanable/salt,
/obj/item/grown/bananapeel,
/obj/structure/window/plasma/reinforced{
dir = 1
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bu" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/clothing/head/collectable/wizard,
/obj/structure/window/plasma/reinforced{
dir = 1
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bv" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/glass,
/obj/item/clothing/head/kitty/genuine,
/obj/structure/window/plasma/reinforced{
dir = 1
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bw" = (
/obj/effect/decal/cleanable/salt,
/obj/item/grown/bananapeel,
/obj/structure/window/plasma/reinforced{
dir = 1
},
/obj/item/device/assembly/flash,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bx" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/structure/window/plasma/reinforced{
dir = 1
},
/obj/item/toy/plush/lizardplushie,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"by" = (
/obj/effect/decal/cleanable/salt,
/turf/closed/wall/mineral/titanium,
/area/shuttle/escape)
"bz" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/clothing/suit/wizrobe,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bA" = (
/obj/structure/table/glass,
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/head/rabbitears,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bB" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/stack/sheet/animalhide/lizard,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bC" = (
/obj/structure/table/reinforced,
/obj/effect/decal/cleanable/salt,
/obj/item/bikehorn,
/obj/item/organ/eyes/moth,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bD" = (
/obj/effect/decal/cleanable/salt,
/turf/open/floor/fakepit,
/area/shuttle/escape)
"bE" = (
/obj/structure/table/glass,
/obj/effect/decal/cleanable/salt,
/obj/item/storage/firstaid/fire,
/turf/open/floor/fakepit,
/area/shuttle/escape)
"bF" = (
/obj/machinery/light,
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/gun/magic/wand/resurrection/inert,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bG" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/glass,
/obj/item/clothing/head/rabbitears,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bH" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/drinks/bottle/lizardwine,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bI" = (
/turf/open/chasm,
/area/shuttle/escape)
"bJ" = (
/obj/structure/table/glass,
/obj/machinery/light{
dir = 4
},
/obj/effect/decal/cleanable/salt,
/obj/item/clothing/mask/frog,
/obj/item/storage/box/hug/medical,
/turf/open/floor/fakepit,
/area/shuttle/escape)
"bK" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/glass,
/obj/item/clothing/head/kitty/genuine,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bL" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/toy/plush/lizardplushie,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"bM" = (
/obj/effect/decal/cleanable/salt,
/obj/machinery/sleeper/syndie,
/turf/open/floor/fakepit,
/area/shuttle/escape)
"bN" = (
/obj/structure/table/glass,
/obj/effect/decal/cleanable/salt,
/obj/item/grenade/flashbang,
/obj/item/grenade/flashbang,
/obj/item/grenade/flashbang,
/obj/item/grenade/flashbang,
/obj/item/grenade/flashbang,
/turf/open/floor/fakepit,
/area/shuttle/escape)
"jz" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/statue/plasma/scientist{
desc = "This statue is suitably made from tears of a certain man, you can still hear him crying to this day.";
oreAmount = 0
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"oC" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/window,
/obj/structure/window{
dir = 4
},
/mob/living/simple_animal/hostile/retaliate/clown{
health = 200;
maxHealth = 200
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"rH" = (
/obj/effect/decal/cleanable/salt,
/obj/item/mecha_parts/mecha_equipment/weapon/honker,
/obj/structure/table/reinforced,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"vf" = (
/obj/effect/spawner/structure/window/shuttle,
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"wp" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/destructible/clockwork/trap/trigger/pressure_sensor,
/obj/structure/destructible/clockwork/trap/brass_skewer,
/obj/item/device/radio/beacon,
/turf/open/indestructible/clock_spawn_room,
/area/shuttle/escape)
"xd" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/codespeak_manual/unlimited,
/turf/open/floor/plasteel/cult,
/area/shuttle/escape)
"xi" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/reagent_containers/food/snacks/grown/citrus/orange,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"Ac" = (
/obj/effect/decal/cleanable/salt,
/mob/living/simple_animal/bot/honkbot,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"CB" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/window{
dir = 4
},
/mob/living/simple_animal/hostile/retaliate/clown{
health = 200;
maxHealth = 200
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"Ho" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/window/plasma/reinforced{
dir = 1
},
/obj/structure/table/reinforced,
/obj/item/clothing/neck/petcollar,
/obj/item/restraints/handcuffs,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"HA" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/table/reinforced,
/obj/item/clothing/under/schoolgirl,
/obj/item/clothing/head/kitty,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"Iq" = (
/obj/effect/decal/cleanable/salt,
/obj/structure/bed/dogbed/ian,
/obj/item/stack/sheet/animalhide/corgi,
/obj/item/reagent_containers/food/snacks/meat/slab/corgi,
/turf/open/floor/fakespace,
/area/shuttle/escape)
"LR" = (
/obj/effect/decal/cleanable/salt,
/obj/mecha/combat/honker{
max_integrity = 60
},
/turf/open/floor/fakespace,
/area/shuttle/escape)
"Uc" = (
/obj/effect/decal/cleanable/salt,
/obj/item/grown/bananapeel,
/obj/structure/table/reinforced,
/obj/item/clothing/suit/armor/reactive/table,
/turf/open/floor/fakespace,
/area/shuttle/escape)
(1,1,1) = {"
aa
aa
ac
ac
ac
ac
ad
ad
ad
ad
ad
ac
aa
aa
"}
(2,1,1) = {"
aa
ac
ah
LR
CB
vf
jz
aU
aU
aU
jz
ah
ac
aa
"}
(3,1,1) = {"
aa
ac
ai
oC
xi
av
Ac
ak
be
ak
Ac
ak
ac
aa
"}
(4,1,1) = {"
aa
ac
aj
rH
ay
ac
aJ
aJ
bf
bs
aJ
aJ
ac
aa
"}
(5,1,1) = {"
aa
ac
ak
at
ak
ac
aK
aK
bg
bt
aK
aK
ac
aa
"}
(6,1,1) = {"
aa
ac
Iq
au
ak
ac
aL
aW
bh
bu
bz
bF
ah
ac
"}
(7,1,1) = {"
aa
ae
ae
av
az
ae
aK
aK
bg
bt
aK
aK
aK
ac
"}
(8,1,1) = {"
aa
ae
al
al
al
az
aM
aX
bi
bv
bA
bG
bK
ac
"}
(9,1,1) = {"
aa
ae
am
al
aA
aD
aK
aK
bj
bw
aK
aK
aK
ad
"}
(10,1,1) = {"
aa
ae
an
al
al
az
aN
aY
bk
bx
bB
bH
bL
ad
"}
(11,1,1) = {"
aa
ae
al
al
al
ae
aO
aO
bl
bt
aK
aK
aK
ad
"}
(12,1,1) = {"
aa
ae
ao
xd
aB
ae
aP
ba
bm
Ho
aK
Uc
HA
ac
"}
(13,1,1) = {"
ab
ab
ab
ab
ab
aE
aQ
aQ
bn
ah
bC
ad
ac
ac
"}
(14,1,1) = {"
ab
wp
ap
af
af
aF
aR
aR
bo
by
bD
bD
bM
ac
"}
(15,1,1) = {"
ab
wp
aq
af
af
aG
aQ
aQ
bp
by
bD
bI
bD
ac
"}
(16,1,1) = {"
ab
wp
ar
aw
aC
aH
aS
bb
bq
ac
bE
bJ
bN
ac
"}
(17,1,1) = {"
ab
ab
ab
ab
ab
aI
aQ
bc
br
ac
ac
ac
ac
ac
"}
(18,1,1) = {"
ac
ag
as
ax
ac
ac
aT
bd
ac
ah
ag
as
ax
ac
"}
+4 -8
View File
@@ -215,8 +215,7 @@
},
/obj/structure/closet/crate{
icon_state = "crateopen";
name = "spare equipment crate";
opened = 1
name = "spare equipment crate"
},
/turf/open/floor/mineral/titanium/yellow,
/area/shuttle/abandoned)
@@ -239,8 +238,7 @@
},
/obj/structure/closet/crate{
icon_state = "crateopen";
name = "spare equipment crate";
opened = 1
name = "spare equipment crate"
},
/obj/item/pickaxe,
/obj/item/pickaxe,
@@ -289,8 +287,7 @@
},
/obj/structure/closet/crate{
icon_state = "crateopen";
name = "spare equipment crate";
opened = 1
name = "spare equipment crate"
},
/obj/item/storage/bag/ore,
/obj/item/pickaxe,
@@ -411,8 +408,7 @@
},
/obj/structure/closet/crate{
icon_state = "crateopen";
name = "spare equipment crate";
opened = 1
name = "spare equipment crate"
},
/obj/machinery/light,
/turf/open/floor/mineral/titanium/yellow,
+2 -3
View File
@@ -215,8 +215,7 @@
/obj/item/cigbutt,
/obj/structure/closet/crate{
icon_state = "crateopen";
name = "spare equipment crate";
opened = 1
name = "spare equipment crate"
},
/obj/item/tank/internals/oxygen/red,
/obj/item/tank/internals/air,
@@ -1288,7 +1287,7 @@
/area/shuttle/abandoned)
"cl" = (
/obj/structure/closet/crate/freezer,
/obj/item/reagent_containers/blood/empty{
/obj/item/reagent_containers/blood{
pixel_x = -3;
pixel_y = -3
},
+16 -1
View File
@@ -11,4 +11,19 @@
#define APPRENTICE_DESTRUCTION "destruction"
#define APPRENTICE_BLUESPACE "bluespace"
#define APPRENTICE_ROBELESS "robeless"
#define APPRENTICE_HEALING "healing"
#define APPRENTICE_HEALING "healing"
//ERT Types
#define ERT_BLUE "Blue"
#define ERT_RED "Red"
#define ERT_AMBER "Amber"
#define ERT_DEATHSQUAD "Deathsquad"
//ERT subroles
#define ERT_SEC "sec"
#define ERT_MED "med"
#define ERT_ENG "eng"
#define ERT_LEADER "leader"
#define DEATHSQUAD "ds"
#define DEATHSQUAD_LEADER "ds_leader"
+1 -1
View File
@@ -67,7 +67,7 @@ Last space-z level = empty
DECLARE_LEVEL("Main Station", CROSSLINKED, list(ZTRAIT_STATION = TRUE)),\
DECLARE_LEVEL("Empty Area 1", CROSSLINKED, list(ZTRAIT_SPACE_RUINS = TRUE)),\
DECLARE_LEVEL("Empty Area 2", CROSSLINKED, list(ZTRAIT_SPACE_RUINS = TRUE)),\
DECLARE_LEVEL("Lavaland", UNAFFECTED, list(ZTRAIT_MINING = TRUE, ZTRAIT_LAVA_RUINS = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 3)),\
DECLARE_LEVEL("Lavaland", UNAFFECTED, list(ZTRAIT_MINING = TRUE, ZTRAIT_LAVA_RUINS = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 2)),\
DECLARE_LEVEL("Reebe", UNAFFECTED, list(ZTRAIT_REEBE = TRUE, ZTRAIT_BOMBCAP_MULTIPLIER = 0.5)),\
)
+1 -1
View File
@@ -191,7 +191,7 @@
#define OFFSET_NECK "neck"
//MINOR TWEAKS/MISC
#define AGE_MIN 17 //youngest a character can be
#define AGE_MIN 18 //youngest a character can be
#define AGE_MAX 85 //oldest a character can be
#define WIZARD_AGE_MIN 30 //youngest a wizard can be
#define APPRENTICE_AGE_MIN 29 //youngest an apprentice can be
+2
View File
@@ -30,6 +30,8 @@
#define STATUS_EFFECT_FLESHMEND /datum/status_effect/fleshmend //Very fast healing; suppressed by fire, and heals less fire damage
#define STATUS_EFFECT_EXERCISED /datum/status_effect/exercised //Prevents heart disease
/////////////
// DEBUFFS //
/////////////
+5 -2
View File
@@ -1506,10 +1506,13 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
// Makes a call in the context of a different usr
// Use sparingly
/world/proc/PushUsr(mob/M, datum/callback/CB)
/world/proc/PushUsr(mob/M, datum/callback/CB, ...)
var/temp = usr
usr = M
. = CB.Invoke()
if (length(args) > 2)
. = CB.Invoke(arglist(args.Copy(3)))
else
. = CB.Invoke()
usr = temp
//Returns a list of all servants of Ratvar and observers.
+28 -28
View File
@@ -1,28 +1,28 @@
//////////////
GLOBAL_VAR_INIT(NEARSIGHTBLOCK, 0)
GLOBAL_VAR_INIT(EPILEPSYBLOCK, 0)
GLOBAL_VAR_INIT(COUGHBLOCK, 0)
GLOBAL_VAR_INIT(TOURETTESBLOCK, 0)
GLOBAL_VAR_INIT(NERVOUSBLOCK, 0)
GLOBAL_VAR_INIT(BLINDBLOCK, 0)
GLOBAL_VAR_INIT(DEAFBLOCK, 0)
GLOBAL_VAR_INIT(HULKBLOCK, 0)
GLOBAL_VAR_INIT(TELEBLOCK, 0)
GLOBAL_VAR_INIT(FIREBLOCK, 0)
GLOBAL_VAR_INIT(XRAYBLOCK, 0)
GLOBAL_VAR_INIT(CLUMSYBLOCK, 0)
GLOBAL_VAR_INIT(STRANGEBLOCK, 0)
GLOBAL_VAR_INIT(RACEBLOCK, 0)
GLOBAL_LIST(bad_se_blocks)
GLOBAL_LIST(good_se_blocks)
GLOBAL_LIST(op_se_blocks)
GLOBAL_VAR(NULLED_SE)
GLOBAL_VAR(NULLED_UI)
GLOBAL_LIST_EMPTY(global_mutations) // list of hidden mutation things
GLOBAL_LIST_EMPTY(bad_mutations)
GLOBAL_LIST_EMPTY(good_mutations)
GLOBAL_LIST_EMPTY(not_good_mutations)
//////////////
GLOBAL_VAR_INIT(NEARSIGHTBLOCK, 0)
GLOBAL_VAR_INIT(EPILEPSYBLOCK, 0)
GLOBAL_VAR_INIT(COUGHBLOCK, 0)
GLOBAL_VAR_INIT(TOURETTESBLOCK, 0)
GLOBAL_VAR_INIT(NERVOUSBLOCK, 0)
GLOBAL_VAR_INIT(BLINDBLOCK, 0)
GLOBAL_VAR_INIT(DEAFBLOCK, 0)
GLOBAL_VAR_INIT(HULKBLOCK, 0)
GLOBAL_VAR_INIT(TELEBLOCK, 0)
GLOBAL_VAR_INIT(FIREBLOCK, 0)
GLOBAL_VAR_INIT(XRAYBLOCK, 0)
GLOBAL_VAR_INIT(CLUMSYBLOCK, 0)
GLOBAL_VAR_INIT(STRANGEBLOCK, 0)
GLOBAL_VAR_INIT(RACEBLOCK, 0)
GLOBAL_LIST(bad_se_blocks)
GLOBAL_LIST(good_se_blocks)
GLOBAL_LIST(op_se_blocks)
GLOBAL_VAR(NULLED_SE)
GLOBAL_VAR(NULLED_UI)
GLOBAL_LIST_EMPTY(global_mutations) // list of hidden mutation things
GLOBAL_LIST_EMPTY(bad_mutations)
GLOBAL_LIST_EMPTY(good_mutations)
GLOBAL_LIST_EMPTY(not_good_mutations)
+1 -1
View File
@@ -162,7 +162,7 @@
if(..())
return
var/mob/living/silicon/S = usr
S.sensor_mode()
S.toggle_sensors()
/datum/hud/ai
+20 -19
View File
@@ -1004,49 +1004,49 @@ obj/item/projectile/bullet/c10mm/soporific
switch(choice)
if("Frame Color")
var/frame_color_input = input(usr,"Choose Frame Color") as color|null
var/frame_color_input = input(usr,"","Choose Frame Color",frame_color) as color|null
if(frame_color_input)
frame_color = sanitize_hexcolor(frame_color_input, desired_format=6, include_crunch=1)
update_icon()
if("Receiver Color")
var/receiver_color_input = input(usr,"Choose Receiver Color") as color|null
var/receiver_color_input = input(usr,"","Choose Receiver Color",receiver_color) as color|null
if(receiver_color_input)
receiver_color = sanitize_hexcolor(receiver_color_input, desired_format=6, include_crunch=1)
update_icon()
if("Body Color")
var/body_color_input = input(usr,"Choose Body Color") as color|null
var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null
if(body_color_input)
body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
update_icon()
if("Barrel Color")
var/barrel_color_input = input(usr,"Choose Barrel Color") as color|null
var/barrel_color_input = input(usr,"","Choose Barrel Color",barrel_color) as color|null
if(barrel_color_input)
barrel_color = sanitize_hexcolor(barrel_color_input, desired_format=6, include_crunch=1)
update_icon()
if("Barrel Tip Color")
var/tip_color_input = input(usr,"Choose Barrel Tip Color") as color|null
var/tip_color_input = input(usr,"","Choose Barrel Tip Color",tip_color) as color|null
if(tip_color_input)
tip_color = sanitize_hexcolor(tip_color_input, desired_format=6, include_crunch=1)
update_icon()
if("Grip Light Color")
var/grip_color_input = input(usr,"Choose Grip Light Color") as color|null
var/grip_color_input = input(usr,"","Choose Grip Light Color",grip_color) as color|null
if(grip_color_input)
grip_color = sanitize_hexcolor(grip_color_input, desired_format=6, include_crunch=1)
update_icon()
if("Light Color")
var/energy_color_input = input(usr,"Choose Light Color") as color|null
var/energy_color_input = input(usr,"","Choose Light Color",energy_color) as color|null
if(energy_color_input)
energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
update_icon()
if("Arm Color")
var/arm_color_input = input(usr,"Choose Arm Color") as color|null
var/arm_color_input = input(usr,"","Choose Arm Color",arm_color) as color|null
if(arm_color_input)
arm_color = sanitize_hexcolor(arm_color_input, desired_format=6, include_crunch=1)
update_icon()
@@ -1155,6 +1155,7 @@ obj/item/projectile/bullet/c10mm/soporific
pin = /obj/item/device/firing_pin
spawnwithmagazine = TRUE
obj_flags = 0
casing_ejector = FALSE
mag_type = /obj/item/ammo_box/magazine/toy/pistol
can_suppress = FALSE
actions_types = list(/datum/action/item_action/pick_color)
@@ -1182,7 +1183,6 @@ obj/item/gun/energy/e_gun/cx
ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
flight_x_offset = 15
flight_y_offset = 10
actions_types = list(/datum/action/item_action/pick_color)
var/body_color = "#252528"
obj/item/gun/energy/e_gun/cx/update_icon()
@@ -1196,16 +1196,17 @@ obj/item/gun/energy/e_gun/cx/update_icon()
var/mob/M = loc
M.update_inv_hands()
obj/item/gun/energy/e_gun/cx/ui_action_click(mob/user, var/datum/action/A)
if(istype(A, /datum/action/item_action/pick_color))
if(alert("Are you sure you want to repaint your gun?", "Confirm Repaint", "Yes", "No") == "Yes")
var/body_color_input = input(usr,"Choose Body Color") as color|null
if(body_color_input)
body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user)
if(!in_range(src, user)) //Basic checks to prevent abuse
return
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(alert("Are you sure you want to repaint your gun?", "Confirm Repaint", "Yes", "No") == "Yes")
var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null
if(body_color_input)
body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
update_icon()
A.UpdateButtonIcon()
else
..()
obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file)
. = ..()
@@ -1261,7 +1262,7 @@ obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file)
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(alert("Are you sure you want to recolor your gun?", "Confirm Repaint", "Yes", "No") == "Yes")
var/body_color_input = input(usr,"Choose Shroud Color") as color|null
var/body_color_input = input(usr,"","Choose Shroud Color",body_color) as color|null
if(body_color_input)
body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
update_icon()
+2 -1
View File
@@ -49,7 +49,8 @@ SUBSYSTEM_DEF(atoms)
++count
CHECK_TICK
log_world("Initialized [count] atoms")
testing("Initialized [count] atoms")
pass(count)
initialized = INITIALIZATION_INNEW_REGULAR
+1 -1
View File
@@ -204,7 +204,7 @@ SUBSYSTEM_DEF(ticker)
check_queue()
check_maprotate()
scripture_states = scripture_unlock_alert(scripture_states)
//SSshuttle.autoEnd()
SSshuttle.autoEnd()
if(!roundend_check_paused && mode.check_finished(force_ending) || force_ending)
current_state = GAME_STATE_FINISHED
+8 -4
View File
@@ -78,11 +78,13 @@
if(W)
var/mob/M = W.resolve()
if(M)
if (length(args))
return world.PushUsr(arglist(list(M, src) + args))
return world.PushUsr(M, src)
if (!object)
return
var/list/calling_arguments = arguments
if (length(args))
if (length(arguments))
@@ -104,11 +106,13 @@
if(W)
var/mob/M = W.resolve()
if(M)
if (length(args))
return world.PushUsr(arglist(list(M, src) + args))
return world.PushUsr(M, src)
if (!object)
return
var/list/calling_arguments = arguments
if (length(args))
if (length(arguments))
+2 -2
View File
@@ -95,7 +95,7 @@
if(!istype(proc_or_callback, /datum/callback)) //if it wasnt a callback before, it is now
proc_or_callback = CALLBACK(src, proc_or_callback)
procs[sig_type] = proc_or_callback
enabled = TRUE
/datum/component/proc/InheritComponent(datum/component/C, i_am_original)
@@ -180,7 +180,7 @@
var/datum/component/old_comp
var/datum/component/new_comp
if(ispath(nt))
if(nt == /datum/component)
CRASH("[nt] attempted instantiation!")
+9 -8
View File
@@ -72,10 +72,10 @@
/datum/component/material_container/proc/user_insert(obj/item/I, mob/living/user)
set waitfor = FALSE
var/requested_amount
var/Itype = I.type
if(ispath(Itype, /obj/item/stack) && precise_insertion)
if(istype(I, /obj/item/stack) && precise_insertion)
var/atom/current_parent = parent
requested_amount = input(user, "How much do you want to insert?", "Inserting sheets") as num|null
var/obj/item/stack/S = I
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.canUseTopic(current_parent) || !user.is_holding(I) || !user.Adjacent(current_parent))
@@ -86,14 +86,15 @@
var/inserted = insert_item(I, stack_amt = requested_amount)
if(inserted)
if(istype(I, /obj/item/stack))
to_chat(user, "<span class='notice'>You insert [inserted] sheet[inserted>1 ? "s" : ""] into [parent].</span>")
var/obj/item/stack/S = I
to_chat(user, "<span class='notice'>You insert [inserted] [S.singular_name][inserted>1 ? "s" : ""] into [parent].</span>")
if(!QDELETED(I))
user.put_in_active_hand(I)
else
to_chat(user, "<span class='notice'>You insert a material total of [inserted] into [parent].</span>")
qdel(I)
if(after_insert)
after_insert.Invoke(Itype, last_inserted_id, inserted)
after_insert.Invoke(I.type, last_inserted_id, inserted)
else
user.put_in_active_hand(I)
@@ -114,7 +115,7 @@
return (total_amount - total_amount_saved)
return FALSE
/datum/component/material_container/proc/insert_stack(obj/item/stack/S, amt)
/datum/component/material_container/proc/insert_stack(obj/item/stack/S, amt, multiplier = 1)
if(isnull(amt))
amt = S.amount
@@ -132,7 +133,7 @@
if(!amt)
return FALSE
last_inserted_id = insert_materials(S,amt)
last_inserted_id = insert_materials(S,amt * multiplier)
S.use(amt)
return amt
@@ -140,7 +141,7 @@
if(!I)
return FALSE
if(istype(I, /obj/item/stack))
return insert_stack(I, stack_amt)
return insert_stack(I, stack_amt, multiplier)
var/material_amount = get_item_material_amount(I)
if(!material_amount || !has_space(material_amount))
+59
View File
@@ -0,0 +1,59 @@
/datum/disease/heart_failure
form = "Condition"
name = "Myocardial Infarction"
max_stages = 5
stage_prob = 2
cure_text = "Heart replacement surgery to cure. Defibrillation (or as a last resort, uncontrolled electric shocking) may also be effective after the onset of cardiac arrest. Corazone can also mitigate cardiac arrest."
agent = "Shitty Heart"
viable_mobtypes = list(/mob/living/carbon)
permeability_mod = 1
desc = "If left untreated the subject will die!"
severity = "Dangerous!"
disease_flags = CAN_CARRY|CAN_RESIST
spread_flags = VIRUS_SPREAD_NON_CONTAGIOUS
visibility_flags = HIDDEN_PANDEMIC
required_organs = list(/obj/item/organ/heart)
var/sound = FALSE
/datum/disease/heart_failure/stage_act()
..()
var/obj/item/organ/heart/O = affected_mob.getorgan(/obj/item/organ/heart)
var/mob/living/carbon/H = affected_mob
if(O && H.can_heartattack())
switch(stage)
if(1 to 2)
if(prob(2))
to_chat(H, "<span class='warning'>You feel [pick("discomfort", "pressure", "a burning sensation", "pain")] in your chest.</span>")
if(prob(2))
to_chat(H, "<span class='warning'>You feel dizzy.</span>")
H.confused += 6
if(prob(3))
to_chat(H, "<span class='warning'>You feel [pick("full", "nauseous", "sweaty", "weak", "tired", "short on breath", "uneasy")].</span>")
if(3 to 4)
if(!sound)
H.playsound_local(H, 'sound/health/slowbeat.ogg',40,0, channel = CHANNEL_HEARTBEAT)
sound = TRUE
if(prob(3))
to_chat(H, "<span class='danger'>You feel a sharp pain in your chest!</span>")
if(prob(25))
affected_mob.vomit(95)
H.emote("cough")
H.Knockdown(40)
H.losebreath += 4
if(prob(3))
to_chat(H, "<span class='danger'>You feel very weak and dizzy...</span>")
H.confused += 8
H.adjustStaminaLoss(40)
H.emote("cough")
if(5)
H.stop_sound_channel(CHANNEL_HEARTBEAT)
H.playsound_local(H, 'sound/effects/singlebeat.ogg', 100, 0)
if(H.stat == CONSCIOUS)
H.visible_message("<span class='userdanger'>[H] clutches at [H.p_their()] chest as if [H.p_their()] heart is stopping!</span>")
H.adjustStaminaLoss(60)
H.reagents.add_reagent("corazone", 3) // To give the victim a final chance to shock their heart before losing consciousness
H.set_heartattack(TRUE)
cure()
else
cure()
+20 -2
View File
@@ -202,6 +202,12 @@
var/list/entries = list()
var/language = /datum/language/common //Initial language, can be changed by HOLORECORD_LANGUAGE entries
/datum/holorecord/proc/set_caller_image(mob/user)
var/olddir = user.dir
user.setDir(SOUTH)
caller_image = getFlatIcon(user)
user.setDir(olddir)
/obj/item/disk/holodisk
name = "holorecord disk"
desc = "Stores recorder holocalls."
@@ -234,7 +240,7 @@
record.language = holodiskOriginal.record.language
to_chat(user, "You copy the record from [holodiskOriginal] to [src] by connecting the ports!")
name = holodiskOriginal.name
else
else
to_chat(user, "[holodiskOriginal] has no record on it!")
..()
@@ -278,7 +284,7 @@
else
var/datum/preset_holoimage/H = new preset_image_type
record.caller_image = H.build_image()
//These build caller image from outfit and some additional data, for use by mappers for ruin holorecords
/datum/preset_holoimage
var/nonhuman_mobtype //Fill this if you just want something nonhuman
@@ -324,9 +330,21 @@
/datum/preset_holoimage/engineer
outfit_type = /datum/outfit/job/engineer/gloved/rig
/datum/preset_holoimage/researcher
outfit_type = /datum/outfit/job/scientist
/datum/preset_holoimage/captain
outfit_type = /datum/outfit/job/captain
/datum/preset_holoimage/nanotrasenprivatesecurity
outfit_type = /datum/outfit/nanotrasensoldiercorpse2
/datum/preset_holoimage/gorilla
nonhuman_mobtype = /mob/living/simple_animal/hostile/gorilla
/datum/preset_holoimage/corgi
nonhuman_mobtype = /mob/living/simple_animal/pet/dog/corgi
/datum/preset_holoimage/clown
outfit_type = /datum/outfit/job/clown
+7
View File
@@ -268,3 +268,10 @@
suffix = "whiteshipdock.dmm"
name = "Whiteship Dock"
description = "An abandoned but functional vessel parked in deep space, ripe for the taking."
/datum/map_template/ruin/space/cat_experiments
id = "meow"
suffix = "mrow_thats_right.dmm"
name = "Feline-Human Combination Den"
description = "With heated debates over the legality of the catperson and their status in the workforce, there's always a place for the blackmarket to slip in for some cash. Whether the results \
are morally sound or not is another issue entirely."
+13
View File
@@ -87,6 +87,7 @@
description = "A respectable mid-sized shuttle that first saw service shuttling Nanotrasen crew to and from their asteroid belt embedded facilities."
credit_cost = 3000
/datum/map_template/shuttle/emergency/bar
suffix = "bar"
name = "The Emergency Escape Bar"
@@ -109,6 +110,18 @@
admin_notes = "This shuttle will likely crush escape, killing anyone there."
credit_cost = -5000
/datum/map_template/shuttle/emergency/saltmine
suffix = "saltmine"
name = "The Saltmine"
description = "Contains everything that upsets you."
admin_notes = "Don't forget: You're here forever."
credit_cost = 5000
/datum/map_template/shuttle/emergency/saltmine/prerequisites_met()
if("revenant" in SSshuttle.shuttle_purchase_requirements_met)
return TRUE
return FALSE
/datum/map_template/shuttle/emergency/luxury
suffix = "luxury"
name = "Luxury Shuttle"
+14
View File
@@ -436,3 +436,17 @@
name = "Fleshmend"
desc = "Our wounds are rapidly healing. <i>This effect is prevented if we are on fire.</i>"
icon_state = "fleshmend"
/datum/status_effect/exercised
id = "Exercised"
duration = 1200
alert_type = null
/datum/status_effect/exercised/on_creation(mob/living/new_owner, ...)
. = ..()
STOP_PROCESSING(SSfastprocess, src)
START_PROCESSING(SSprocessing, src) //this lasts 20 minutes, so SSfastprocess isn't needed.
/datum/status_effect/exercised/Destroy()
. = ..()
STOP_PROCESSING(SSprocessing, src)
@@ -0,0 +1,26 @@
/datum/weather/snow_storm
name = "snow storm"
desc = "Harsh snowstorms roam the topside of this arctic planet, burying any area unfortunate enough to be in its path."
probability = 90
telegraph_message = "<span class='warning'>Drifting particles of snow begin to dust the surrounding area..</span>"
telegraph_duration = 300
telegraph_overlay = "light_snow"
weather_message = "<span class='userdanger'><i>Harsh winds pick up as dense snow begins to fall from the sky! Seek shelter!</i></span>"
weather_overlay = "snow_storm"
weather_duration_lower = 600
weather_duration_upper = 1500
end_duration = 100
end_message = "<span class='boldannounce'>The snowfall dies down, it should be safe to go outside again.</span>"
area_type = /area/awaymission/snowdin/outside
target_trait = ZTRAIT_AWAY
immunity_type = "snow"
/datum/weather/snow_storm/weather_act(mob/living/L)
L.bodytemperature -=(rand(5,15))
+3
View File
@@ -55,6 +55,9 @@
/area/ruin/space/has_grav/powered/dinner_for_two
name = "Dinner for Two"
/area/ruin/space/has_grav/powered/cat_man
name = "Kitty Den"
/area/ruin/space/has_grav/powered/authorship
name = "Authorship"
+2 -2
View File
@@ -370,7 +370,7 @@
SendSignal(COMSIG_ATOM_EMAG_ACT)
/atom/proc/rad_act(strength)
SendSignal(COMSIG_ATOM_RAD_ACT)
SendSignal(COMSIG_ATOM_RAD_ACT, strength)
/atom/proc/narsie_act()
SendSignal(COMSIG_ATOM_NARSIE_ACT)
@@ -569,4 +569,4 @@
return
/atom/proc/GenerateTag()
return
return
+5 -5
View File
@@ -98,7 +98,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
var/threat = 0 // used for determining which meteors are most interesting
var/lifetime = DEFAULT_METEOR_LIFETIME
var/timerid = null
var/list/meteordrop = list(/obj/item/ore/iron)
var/list/meteordrop = list(/obj/item/stack/ore/iron)
var/dropamt = 2
/obj/effect/meteor/Move()
@@ -217,7 +217,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
hits = 1
hitpwr = 3
meteorsound = 'sound/weapons/gunshot_smg.ogg'
meteordrop = list(/obj/item/ore/glass)
meteordrop = list(/obj/item/stack/ore/glass)
threat = 1
//Medium-sized
@@ -250,7 +250,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
hits = 5
heavy = 1
meteorsound = 'sound/effects/bamf.ogg'
meteordrop = list(/obj/item/ore/plasma)
meteordrop = list(/obj/item/stack/ore/plasma)
threat = 20
/obj/effect/meteor/flaming/meteor_effect()
@@ -262,7 +262,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
name = "glowing meteor"
icon_state = "glowing"
heavy = 1
meteordrop = list(/obj/item/ore/uranium)
meteordrop = list(/obj/item/stack/ore/uranium)
threat = 15
@@ -332,7 +332,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
hitpwr = 1
heavy = 1
meteorsound = 'sound/effects/bamf.ogg'
meteordrop = list(/obj/item/ore/plasma)
meteordrop = list(/obj/item/stack/ore/plasma)
threat = 50
/obj/effect/meteor/tunguska/Move()
+9 -10
View File
@@ -89,18 +89,17 @@
if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O))
updateUsrDialog()
return
return TRUE
if(exchange_parts(user, O))
return
return TRUE
if(panel_open)
if(istype(O, /obj/item/crowbar))
default_deconstruction_crowbar(O)
return TRUE
else if(is_wire_tool(O))
wires.interact(user)
return TRUE
if(default_deconstruction_crowbar(O))
return TRUE
if(panel_open && is_wire_tool(O))
wires.interact(user)
return TRUE
if(user.a_intent == INTENT_HARM) //so we can hit the machine
return ..()
@@ -124,7 +123,7 @@
return ..()
/obj/machinery/autolathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
if(ispath(type_inserted, /obj/item/ore/bluespace_crystal))
if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal))
use_power(MINERAL_MATERIAL_AMOUNT / 10)
else
switch(id_inserted)
+2 -1
View File
@@ -46,6 +46,7 @@
/obj/item/toy/eightball = 2,
/obj/item/toy/windupToolbox = 2,
/obj/item/toy/clockwork_watch = 2,
/obj/item/toy/toy_dagger = 2,
/obj/item/extendohand/acme = 1)
light_color = LIGHT_COLOR_GREEN
@@ -76,7 +77,7 @@
new prizeselect(src)
var/atom/movable/prize = pick(contents)
visible_message("<span class='notice'>[src] dispenses a [prize]!</span>", "<span class='notice'>You hear a chime and a clunk.</span>")
visible_message("<span class='notice'>[src] dispenses [prize]!</span>", "<span class='notice'>You hear a chime and a clunk.</span>")
prize.forceMove(get_turf(src))
#undef PULSE_MEDAL
@@ -745,9 +745,9 @@
/datum/comm_message/New(new_title,new_content,new_possible_answers)
..()
if(title)
if(new_title)
title = new_title
if(content)
if(new_content)
content = new_content
if(new_possible_answers)
possible_answers = new_possible_answers
+1 -1
View File
@@ -38,7 +38,7 @@
if(defib && defib.cell && defib.cell.charge < defib.cell.maxcharge)
use_power(20)
defib.cell.give(18) //90% efficiency, slightly better than the cell charger's 87.5%
if(isliving(defib.paddles.loc))
if(defib && defib.paddles && isliving(defib.paddles.loc))
var/mob/living/L = defib.paddles.loc
if(!L.Adjacent(src))
to_chat(L, "<span class='warning'>[defib]'s paddles overextend and come out of your hands!</span>")
+15 -1
View File
@@ -62,9 +62,23 @@
icon = 'icons/obj/structures.dmi'
icon_state = "woodenbarricade"
material = WOOD
var/drop_amount = 3
/obj/structure/barricade/wooden/crude
name = "crude plank barricade"
desc = "This space is blocked off by a crude assortment of planks."
icon_state = "woodenbarricade-old"
drop_amount = 1
max_integrity = 50
proj_pass_rate = 65
/obj/structure/barricade/wooden/crude/snow
desc = "This space is blocked off by a crude assortment of planks. It seems to be covered in a layer of snow."
icon_state = "woodenbarricade-snow-old"
max_integrity = 75
/obj/structure/barricade/wooden/make_debris()
new /obj/item/stack/sheet/mineral/wood(get_turf(src), 3)
new /obj/item/stack/sheet/mineral/wood(get_turf(src), drop_amount)
/obj/structure/barricade/sandbags
+5
View File
@@ -211,6 +211,11 @@
flags_1 = ON_BORDER_1
CanAtmosPass = ATMOS_PASS_PROC
/obj/machinery/door/firedoor/border_only/closed
icon_state = "door_closed"
opacity = TRUE
density = TRUE
/obj/machinery/door/firedoor/border_only/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && (mover.pass_flags & PASSGLASS))
return 1
+9 -4
View File
@@ -110,10 +110,15 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
if(!istype(linked_techweb))
say("Warning: No linked research system!")
return
var/point_gain = techweb_scale_bomb(orig_light - 20 - linked_techweb.max_bomb_value)
if(!point_gain)
var/adjusted = orig_light - 10 - linked_techweb.max_bomb_value
if(adjusted <= 0)
say("Explosion not large enough for research calculations.")
return
linked_techweb.max_bomb_value = orig_light - 20
var/point_gain = techweb_scale_bomb(adjusted)
if(point_gain <= 0)
say("Explosion not large enough for research calculations.")
return
linked_techweb.max_bomb_value = orig_light - 10
linked_techweb.research_points += point_gain
say("Gained [point_gain] points from explosion dataset.")
@@ -124,4 +129,4 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
linked_techweb = SSresearch.science_tech
/proc/techweb_scale_bomb(lightradius)
return (lightradius ** 0.5) * 13000
return (lightradius ** 0.5) * 5000
+2 -2
View File
@@ -165,10 +165,10 @@ The console is located at computer/gulag_teleporter.dm
name = "labor camp teleporter (Machine Board)"
build_path = /obj/machinery/gulag_teleporter
req_components = list(
/obj/item/ore/bluespace_crystal = 2,
/obj/item/stack/ore/bluespace_crystal = 2,
/obj/item/stock_parts/scanning_module,
/obj/item/stock_parts/manipulator)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial)
/* beacon that receives the teleported prisoner */
/obj/structure/gulag_beacon
+19 -11
View File
@@ -58,6 +58,7 @@ Possible to do for anyone motivated enough:
var/static/force_answer_call = FALSE //Calls will be automatically answered after a couple rings, here for debugging
var/static/list/holopads = list()
var/obj/effect/overlay/holoray/ray
var/offset = FALSE
/obj/machinery/holopad/Initialize()
. = ..()
@@ -279,7 +280,16 @@ Possible to do for anyone motivated enough:
record_stop()
else if(href_list["record_clear"])
record_clear()
else if(href_list["offset"])
offset++
if (offset > 4)
offset = FALSE
var/turf/new_turf
if (!offset)
new_turf = get_turf(src)
else
new_turf = get_step(src, GLOB.cardinals[offset])
replay_holo.forceMove(new_turf)
updateDialog()
//do not allow AIs to answer calls or people will use it to meta the AI sattelite
@@ -420,7 +430,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/holopad/proc/clear_holo(mob/living/user)
qdel(masters[user]) // Get rid of user's hologram
qdel(holorays[user])
unset_holo(user)
return TRUE
@@ -429,6 +438,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
if(istype(AI) && AI.current == src)
AI.current = null
LAZYREMOVE(masters, user) // Discard AI from the list of those who use holopad
qdel(holorays[user])
LAZYREMOVE(holorays, user)
SetLightsAndPower()
return TRUE
@@ -493,7 +503,8 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
replay_mode = TRUE
replay_holo = setup_replay_holo(disk.record)
temp = "Replaying...<br>"
temp += "<A href='?src=[REF(src)];replay_stop=1'>End replay.</A>"
temp += "<A href='?src=[REF(src)];offset=1'>Change offset</A><br>"
temp += "<A href='?src=[REF(src)];replay_stop=1'>End replay</A>"
SetLightsAndPower()
replay_entry(1)
return
@@ -502,6 +513,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
if(replay_mode)
replay_mode = FALSE
loop_mode = FALSE
offset = FALSE
temp = null
QDEL_NULL(replay_holo)
SetLightsAndPower()
@@ -514,16 +526,10 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
record_mode = TRUE
record_start = world.time
record_user = user
disk.record.caller_image = get_record_icon(user)
disk.record.set_caller_image(user)
temp = "Recording...<br>"
temp += "<A href='?src=[REF(src)];record_stop=1'>End recording.</A>"
/obj/machinery/holopad/proc/get_record_icon(mob/living/user)
var/olddir = user.dir
user.setDir(SOUTH)
. = getFlatIcon(user)
user.setDir(olddir)
/obj/machinery/holopad/proc/record_message(mob/living/speaker,message,language)
if(!record_mode)
return
@@ -553,8 +559,10 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/holopad/proc/replay_entry(entry_number)
if(!replay_mode)
return
if (!disk.record.entries.len) // check for zero entries such as photographs and no text recordings
return // and pretty much just display them statically untill manually stopped
if(disk.record.entries.len < entry_number)
if (loop_mode)
if(loop_mode)
entry_number = 1
else
replay_stop()
+1 -1
View File
@@ -37,7 +37,7 @@
/obj/machinery/mecha_part_fabricator/Initialize()
var/datum/component/material_container/materials = AddComponent(/datum/component/material_container,
list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0,
FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
FALSE, list(/obj/item/stack, /obj/item/stack/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
materials.precise_insertion = TRUE
stored_research = new
return ..()
+5 -2
View File
@@ -28,6 +28,9 @@
else
to_chat(user, ("<span class='warning'>There's not enough cable to finish the task!</span>"))
return FALSE
else if(istype(used_atom, /obj/item/stack/ore/bluespace_crystal))
var/obj/item/stack/ore/bluespace_crystal/BSC = used_atom
BSC.use(1)
else if(istype(used_atom, /obj/item/stack))
var/obj/item/stack/S = used_atom
if(S.get_amount() < 5)
@@ -1320,7 +1323,7 @@
"backkey"=/obj/item/crowbar,
"desc"="The bluespace crystal is installed."),
//12
list("key"=/obj/item/ore/bluespace_crystal,
list("key"=/obj/item/stack/ore/bluespace_crystal,
"backkey"=/obj/item/screwdriver,
"desc"="Super capacitor is secured."),
//13
@@ -1514,7 +1517,7 @@
holder.icon_state = "phazon16"
else
user.visible_message("[user] removes the bluespace crystal from the [holder].", "<span class='notice'>You remove the bluespace crystal from the [holder].</span>")
new /obj/item/ore/bluespace_crystal(get_turf(holder))
new /obj/item/stack/ore/bluespace_crystal(get_turf(holder))
holder.icon_state = "phazon14"
if(11)
if(diff==FORWARD)
+4 -4
View File
@@ -26,7 +26,7 @@
if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in cargo
if(ore_box)
for(var/obj/item/ore/ore in range(1, src))
for(var/obj/item/stack/ore/ore in range(1, src))
if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it!
ore.forceMove(ore_box)
@@ -128,10 +128,10 @@
if(href_list["drop_from_cargo"])
var/obj/O = locate(href_list["drop_from_cargo"])
if(O && O in src.cargo)
src.occupant_message("<span class='notice'>You unload [O].</span>")
occupant_message("<span class='notice'>You unload [O].</span>")
O.forceMove(drop_location())
src.cargo -= O
src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
cargo -= O
log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
return
+33 -30
View File
@@ -1,30 +1,33 @@
/obj/effect/decal/remains
name = "remains"
gender = PLURAL
icon = 'icons/effects/blood.dmi'
/obj/effect/decal/remains/acid_act()
visible_message("<span class='warning'>[src] dissolve[gender==PLURAL?"":"s"] into a puddle of sizzling goop!</span>")
playsound(src, 'sound/items/welder.ogg', 150, 1)
new /obj/effect/decal/cleanable/greenglow(drop_location())
qdel(src)
/obj/effect/decal/remains/human
desc = "They look like human remains. They have a strange aura about them."
icon_state = "remains"
/obj/effect/decal/remains/xeno
desc = "They look like the remains of something... alien. They have a strange aura about them."
icon_state = "remainsxeno"
/obj/effect/decal/remains/xeno/larva
icon_state = "remainslarva"
/obj/effect/decal/remains/robot
desc = "They look like the remains of something mechanical. They have a strange aura about them."
icon = 'icons/mob/robots.dmi'
icon_state = "remainsrobot"
/obj/effect/decal/cleanable/robot_debris/old
name = "dusty robot debris"
desc = "Looks like nobody has touched this in a while."
/obj/effect/decal/remains
name = "remains"
gender = PLURAL
icon = 'icons/effects/blood.dmi'
/obj/effect/decal/remains/acid_act()
visible_message("<span class='warning'>[src] dissolve[gender==PLURAL?"":"s"] into a puddle of sizzling goop!</span>")
playsound(src, 'sound/items/welder.ogg', 150, 1)
new /obj/effect/decal/cleanable/greenglow(drop_location())
qdel(src)
/obj/effect/decal/remains/human
desc = "They look like human remains. They have a strange aura about them."
icon_state = "remains"
/obj/effect/decal/remains/plasma
icon_state = "remainsplasma"
/obj/effect/decal/remains/xeno
desc = "They look like the remains of something... alien. They have a strange aura about them."
icon_state = "remainsxeno"
/obj/effect/decal/remains/xeno/larva
icon_state = "remainslarva"
/obj/effect/decal/remains/robot
desc = "They look like the remains of something mechanical. They have a strange aura about them."
icon = 'icons/mob/robots.dmi'
icon_state = "remainsrobot"
/obj/effect/decal/cleanable/robot_debris/old
name = "dusty robot debris"
desc = "Looks like nobody has touched this in a while."
@@ -0,0 +1,12 @@
/obj/effect/turf_decal/weather
name = "sandy floor"
icon_state = "sandyfloor"
/obj/effect/turf_decal/weather/snow
name = "snowy floor"
icon_state = "snowyfloor"
/obj/effect/turf_decal/weather/snow/corner
name = "snow corner piece"
icon = 'icons/turf/snow.dmi'
icon_state = "snow_corner"
+1 -1
View File
@@ -147,7 +147,7 @@
var/turf/real_target = get_link_target_turf()
if(!istype(real_target))
return FALSE
if(!ismecha(M) && M.anchored && !allow_anchored)
if(!ismecha(M) && !istype(M, /obj/item/projectile) && M.anchored && !allow_anchored)
return
if(ismegafauna(M))
message_admins("[M] has used a portal at [ADMIN_COORDJMP(src)] made by [usr].")
+6 -6
View File
@@ -126,12 +126,12 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
if(damtype == "brute")
hitsound = "swing_hit"
if (!embedding)
embedding = getEmbeddingBehavior()
else if (islist(embedding))
embedding = getEmbeddingBehavior(arglist(embedding))
else if (!istype(embedding, /datum/embedding_behavior))
stack_trace("Invalid type [embedding.type] found in .embedding during /obj/item Initialize()")
if (!embedding)
embedding = getEmbeddingBehavior()
else if (islist(embedding))
embedding = getEmbeddingBehavior(arglist(embedding))
else if (!istype(embedding, /datum/embedding_behavior))
stack_trace("Invalid type [embedding.type] found in .embedding during /obj/item Initialize()")
/obj/item/Destroy()
flags_1 &= ~DROPDEL_1 //prevent reqdels
+1
View File
@@ -191,6 +191,7 @@
var/obj/machinery/door/firedoor/FD = D
FD.CalculateAffectingAreas()
to_chat(usr, "<span class='notice'>You rename the '[prevname]' to '[str]'.</span>")
log_game("[key_name(usr)] has renamed [prevname] to [str]")
interact()
return 1
+4
View File
@@ -78,6 +78,10 @@
return
A.emag_act(user)
/obj/item/card/emag/fake/afterattack()
playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1)
return
/obj/item/card/id
name = "identification card"
desc = "A card used to provide ID and determine access across the station."
@@ -58,9 +58,9 @@
name = "Bluespace Launchpad (Machine Board)"
build_path = /obj/machinery/launchpad
req_components = list(
/obj/item/ore/bluespace_crystal = 1,
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stock_parts/manipulator = 1)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial)
/obj/item/circuitboard/machine/limbgrower
name = "Limb Grower (Machine Board)"
@@ -74,11 +74,11 @@
name = "Quantum Pad (Machine Board)"
build_path = /obj/machinery/quantumpad
req_components = list(
/obj/item/ore/bluespace_crystal = 1,
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 1)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial)
/obj/item/circuitboard/machine/recharger
name = "Weapon Recharger (Machine Board)"
@@ -175,18 +175,18 @@
name = "Teleporter Hub (Machine Board)"
build_path = /obj/machinery/teleport/hub
req_components = list(
/obj/item/ore/bluespace_crystal = 3,
/obj/item/stack/ore/bluespace_crystal = 3,
/obj/item/stock_parts/matter_bin = 1)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial)
/obj/item/circuitboard/machine/teleporter_station
name = "Teleporter Station (Machine Board)"
build_path = /obj/machinery/teleport/station
req_components = list(
/obj/item/ore/bluespace_crystal = 2,
/obj/item/stack/ore/bluespace_crystal = 2,
/obj/item/stock_parts/capacitor = 2,
/obj/item/stack/sheet/glass = 1)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial)
/obj/item/circuitboard/machine/vendor
name = "Booze-O-Mat Vendor (Machine Board)"
@@ -674,7 +674,7 @@
name = "Bluespace Artillery Fusor (Machine Board)"
build_path = /obj/machinery/bsa/middle
req_components = list(
/obj/item/ore/bluespace_crystal = 20,
/obj/item/stack/ore/bluespace_crystal = 20,
/obj/item/stack/cable_coil = 2)
/obj/item/circuitboard/machine/bsa/front
@@ -119,6 +119,7 @@
loop.start()
/obj/item/device/geiger_counter/rad_act(amount)
. = ..()
if(amount <= RAD_BACKGROUND_RADIATION || !scanning)
return
current_tick_amount += amount
@@ -200,6 +201,20 @@
to_chat(user, "<span class='warning'>You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.</span>")
obj_flags |= EMAGGED
/obj/item/device/geiger_counter/cyborg
var/datum/component/mobhook
/obj/item/device/geiger_counter/cyborg/equipped(mob/user)
. = ..()
if (mobhook && mobhook.parent != user)
QDEL_NULL(mobhook)
if (!mobhook)
mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_ATOM_RAD_ACT), CALLBACK(src, /atom.proc/rad_act))
/obj/item/device/geiger_counter/cyborg/dropped()
. = ..()
QDEL_NULL(mobhook)
#undef RAD_LEVEL_NORMAL
#undef RAD_LEVEL_MODERATE
#undef RAD_LEVEL_HIGH
+7 -37
View File
@@ -40,10 +40,11 @@
var/cuffsound = 'sound/weapons/handcuffs.ogg'
var/trashtype = null //for disposable cuffs
/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/user)
if(!istype(C))
return
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
if(iscarbon(user) && (user.has_trait(TRAIT_CLUMSY) && prob(50)))
to_chat(user, "<span class='warning'>Uh... how do those things work?!</span>")
apply_cuffs(user,user)
return
@@ -61,7 +62,10 @@
playsound(loc, cuffsound, 30, 1, -2)
if(do_mob(user, C, 30) && (C.get_num_arms() >= 2 || C.get_arm_ignore()))
apply_cuffs(C,user)
if(iscyborg(user))
apply_cuffs(C, user, TRUE)
else
apply_cuffs(C, user)
to_chat(user, "<span class='notice'>You handcuff [C].</span>")
SSblackbox.record_feedback("tally", "handcuffs", 1, type)
@@ -113,7 +117,6 @@
materials = list(MAT_METAL=150, MAT_GLASS=75)
breakouttime = 300 //Deciseconds = 30s
cuffsound = 'sound/weapons/cablecuff.ogg'
var/datum/robot_energy_storage/wirestorage = null
/obj/item/restraints/handcuffs/cable/Initialize(mapload, param_color)
. = ..()
@@ -128,23 +131,6 @@
color = null
add_atom_colour(item_color, FIXED_COLOUR_PRIORITY)
/obj/item/restraints/handcuffs/cable/attack(mob/living/carbon/C, mob/living/carbon/human/user)
if(!istype(C))
return
if(wirestorage && wirestorage.energy < 15)
to_chat(user, "<span class='warning'>You need at least 15 wire to restrain [C]!</span>")
return
return ..()
/obj/item/restraints/handcuffs/cable/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
if(wirestorage)
if(!wirestorage.use_charge(15))
to_chat(user, "<span class='warning'>You need at least 15 wire to restrain [target]!</span>")
return
return ..(target, user, 1)
return ..()
/obj/item/restraints/handcuffs/cable/red
item_color = "red"
color = "#ff0000"
@@ -215,21 +201,6 @@
else
return ..()
/obj/item/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
if(iscyborg(user))
if(!C.handcuffed)
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
C.visible_message("<span class='danger'>[user] is trying to put zipties on [C]!</span>", \
"<span class='userdanger'>[user] is trying to put zipties on [C]!</span>")
if(do_mob(user, C, 30))
if(!C.handcuffed)
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
C.update_handcuffed()
to_chat(user, "<span class='notice'>You handcuff [C].</span>")
add_logs(user, C, "handcuffed")
else
to_chat(user, "<span class='warning'>You fail to handcuff [C]!</span>")
/obj/item/restraints/handcuffs/cable/zipties
name = "zipties"
desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use."
@@ -249,7 +220,6 @@
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
return
//Legcuffs
/obj/item/restraints/legcuffs
+13 -13
View File
@@ -1,5 +1,5 @@
//Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
/obj/item/ore/bluespace_crystal
/obj/item/stack/ore/bluespace_crystal
name = "bluespace crystal"
desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
icon = 'icons/obj/telescience.dmi'
@@ -11,38 +11,38 @@
refined_type = /obj/item/stack/sheet/bluespace_crystal
grind_results = list("bluespace" = 20)
/obj/item/ore/bluespace_crystal/refined
/obj/item/stack/ore/bluespace_crystal/refined
name = "refined bluespace crystal"
points = 0
refined_type = null
/obj/item/ore/bluespace_crystal/New()
..()
/obj/item/stack/ore/bluespace_crystal/Initialize()
. = ..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/item/ore/bluespace_crystal/attack_self(mob/user)
/obj/item/stack/ore/bluespace_crystal/attack_self(mob/user)
user.visible_message("<span class='warning'>[user] crushes [src]!</span>", "<span class='danger'>You crush [src]!</span>")
new /obj/effect/particle_effect/sparks(loc)
playsound(src.loc, "sparks", 50, 1)
playsound(loc, "sparks", 50, 1)
blink_mob(user)
qdel(src)
use(1)
/obj/item/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
/obj/item/stack/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
/obj/item/ore/bluespace_crystal/throw_impact(atom/hit_atom)
/obj/item/stack/ore/bluespace_crystal/throw_impact(atom/hit_atom)
if(!..()) // not caught in mid-air
visible_message("<span class='notice'>[src] fizzles and disappears upon impact!</span>")
var/turf/T = get_turf(hit_atom)
new /obj/effect/particle_effect/sparks(T)
playsound(src.loc, "sparks", 50, 1)
playsound(loc, "sparks", 50, 1)
if(isliving(hit_atom))
blink_mob(hit_atom)
qdel(src)
use(1)
//Artifical bluespace crystal, doesn't give you much research.
/obj/item/ore/bluespace_crystal/artificial
/obj/item/stack/ore/bluespace_crystal/artificial
name = "artificial bluespace crystal"
desc = "An artificially made bluespace crystal, it looks delicate."
materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT / 2)
@@ -61,7 +61,7 @@
attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed")
novariants = TRUE
grind_results = list("bluespace" = 20)
var/crystal_type = /obj/item/ore/bluespace_crystal/refined
var/crystal_type = /obj/item/stack/ore/bluespace_crystal/refined
/obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening
to_chat(user, "<span class='warning'>You cannot crush the polycrystal in-hand, try breaking one off.</span>")
@@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 2, 4, 20), \
new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Breakdown into sand", /obj/item/ore/glass, 1, one_per_turf = 0, on_floor = 1) \
new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = 0, on_floor = 1) \
))
/obj/item/stack/sheet/mineral/sandstone
@@ -84,12 +84,13 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
w_class = WEIGHT_CLASS_TINY
/obj/item/emptysandbag/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/ore/glass))
if(istype(W, /obj/item/stack/ore/glass))
var/obj/item/stack/ore/glass/G = W
to_chat(user, "<span class='notice'>You fill the sandbag.</span>")
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
qdel(src)
user.put_in_hands(I)
qdel(W)
G.use(1)
else
return ..()
+50 -5
View File
@@ -85,11 +85,56 @@
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
w_class = WEIGHT_CLASS_NORMAL
storage_slots = 50
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
max_w_class = WEIGHT_CLASS_NORMAL
can_hold = list(/obj/item/ore)
storage_slots = 8
max_combined_w_class = 16 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class
max_w_class = WEIGHT_CLASS_HUGE
can_hold = list(/obj/item/stack/ore)
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
var/datum/component/mobhook
/obj/item/storage/bag/ore/equipped(mob/user)
. = ..()
if (mobhook && mobhook.parent != user)
QDEL_NULL(mobhook)
if (!mobhook)
mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED), CALLBACK(src, .proc/Pickup_ores, user))
/obj/item/storage/bag/ore/dropped()
. = ..()
if (mobhook)
QDEL_NULL(mobhook)
/obj/item/storage/bag/ore/proc/Pickup_ores(mob/living/user)
var/show_message = FALSE
var/obj/structure/ore_box/box
var/turf/tile = user.loc
if (!isturf(tile))
return
if (istype(user.pulling, /obj/structure/ore_box))
box = user.pulling
for(var/A in tile)
if (!is_type_in_typecache(A, can_hold))
continue
if (box)
user.transferItemToLoc(A, box)
show_message = TRUE
else if(can_be_inserted(A, TRUE, user))
handle_item_insertion(A, TRUE, user)
show_message = TRUE
else
if(!spam_protection)
to_chat(user, "<span class='warning'>Your [name] is full and can't hold any more!</span>")
spam_protection = TRUE
continue
if(show_message)
playsound(user, "rustle", 50, TRUE)
if (box)
user.visible_message("<span class='notice'>[user] offloads the ores beneath them into [box].</span>", \
"<span class='notice'>You offload the ores beneath you into your [box].</span>")
else
user.visible_message("<span class='notice'>[user] scoops up the ores beneath them.</span>", \
"<span class='notice'>You scoop up the ores beneath you with your [name].</span>")
spam_protection = FALSE
/obj/item/storage/bag/ore/cyborg
name = "cyborg mining satchel"
@@ -228,7 +273,7 @@
var/col_count = min(7,storage_slots) -1
if (adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
src.standard_orient_objs(row_num, col_count, numbered_contents)
standard_orient_objs(row_num, col_count, numbered_contents)
return
+3 -1
View File
@@ -4,6 +4,8 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi'
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
max_integrity = 300
@@ -230,7 +232,7 @@
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/reagent_containers/pill,
/obj/item/storage/pill_bottle,
/obj/item/ore,
/obj/item/stack/ore,
/obj/item/reagent_containers/food/drinks,
/obj/item/organ/regenerative_core,
/obj/item/device/wormhole_jaunter,
+3 -2
View File
@@ -26,12 +26,13 @@
do_teleport(M, get_turf(M), 15)
/obj/item/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod
if(istype(I, /obj/item/ore/bluespace_crystal))
if(istype(I, /obj/item/stack/ore/bluespace_crystal))
if(!cell)
var/obj/item/stack/ore/bluespace_crystal/BSC = I
var/obj/item/melee/baton/cattleprod/teleprod/S = new /obj/item/melee/baton/cattleprod/teleprod
remove_item_from_storage(user)
qdel(src)
qdel(I)
BSC.use(1)
user.put_in_hands(S)
to_chat(user, "<span class='notice'>You place the bluespace crystal firmly into the igniter.</span>")
else
+17
View File
@@ -21,6 +21,7 @@
* Kitty toys!
* Snowballs
* Clockwork Watches
* Toy Daggers
*/
@@ -1075,6 +1076,22 @@
..()
to_chat(user, "<span class='info'>Station Time: [worldtime2text()]")
/*
* Toy Dagger
*/
/obj/item/toy/toy_dagger
name = "toy dagger"
desc = "A cheap plastic replica of a dagger. Produced by THE ARM Toys, Inc."
icon = 'icons/obj/wizard.dmi'
icon_state = "render"
item_state = "cultdagger"
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
inhand_x_dimension = 32
inhand_y_dimension = 32
w_class = WEIGHT_CLASS_SMALL
/*
* Xenomorph action figure
*/
+1 -1
View File
@@ -80,5 +80,5 @@
/obj/item/trash/coal/burn()
visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...")
new /obj/item/ore/diamond(loc)
new /obj/item/stack/ore/diamond(loc)
qdel(src)
@@ -365,6 +365,7 @@
buildstacktype = /obj/item/stack/tile/brass
buildstackamount = 1
item_chair = null
var/turns = 0
/obj/structure/chair/brass/Destroy()
STOP_PROCESSING(SSfastprocess, src)
@@ -373,11 +374,15 @@
/obj/structure/chair/brass/process()
setDir(turn(dir,-90))
playsound(src, 'sound/effects/servostep.ogg', 50, FALSE)
turns++
if(turns >= 8)
STOP_PROCESSING(SSfastprocess, src)
/obj/structure/chair/brass/ratvar_act()
return
/obj/structure/chair/brass/AltClick(mob/living/user)
turns = 0
if(!user.canUseTopic(src, be_close = TRUE))
return
if(!isprocessing)
@@ -17,6 +17,8 @@
/obj/structure/closet/crate/New()
..()
if(icon_state == "[initial(icon_state)]open")
opened = TRUE
update_icon()
/obj/structure/closet/crate/CanPass(atom/movable/mover, turf/target)
@@ -87,8 +89,8 @@
/obj/structure/closet/crate/freezer/blood/PopulateContents()
. = ..()
new /obj/item/reagent_containers/blood/empty(src)
new /obj/item/reagent_containers/blood/empty(src)
new /obj/item/reagent_containers/blood(src)
new /obj/item/reagent_containers/blood(src)
new /obj/item/reagent_containers/blood/AMinus(src)
new /obj/item/reagent_containers/blood/BMinus(src)
new /obj/item/reagent_containers/blood/BPlus(src)
+161
View File
@@ -0,0 +1,161 @@
//Chain link fences
//Sprites ported from /VG/
#define CUT_TIME 100
#define CLIMB_TIME 150
#define NO_HOLE 0 //section is intact
#define MEDIUM_HOLE 1 //medium hole in the section - can climb through
#define LARGE_HOLE 2 //large hole in the section - can walk through
#define MAX_HOLE_SIZE LARGE_HOLE
/obj/structure/fence
name = "fence"
desc = "A chain link fence. Not as effective as a wall, but generally it keeps people out."
density = TRUE
anchored = TRUE
icon = 'icons/obj/fence.dmi'
icon_state = "straight"
var/cuttable = TRUE
var/hole_size= NO_HOLE
var/invulnerable = FALSE
/obj/structure/fence/Initialize()
. = ..()
update_cut_status()
/obj/structure/fence/examine(mob/user)
.=..()
switch(hole_size)
if(MEDIUM_HOLE)
user.show_message("There is a large hole in \the [src].")
if(LARGE_HOLE)
user.show_message("\The [src] has been completely cut through.")
/obj/structure/fence/end
icon_state = "end"
cuttable = FALSE
/obj/structure/fence/corner
icon_state = "corner"
cuttable = FALSE
/obj/structure/fence/post
icon_state = "post"
cuttable = FALSE
/obj/structure/fence/cut/medium
icon_state = "straight_cut2"
hole_size = MEDIUM_HOLE
/obj/structure/fence/cut/large
icon_state = "straight_cut3"
hole_size = LARGE_HOLE
/obj/structure/fence/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/wirecutters))
if(!cuttable)
to_chat(user, "<span class='notice'>This section of the fence can't be cut.</span>")
return
if(invulnerable)
to_chat(user, "<span class='notice'>This fence is too strong to cut through.</span>")
return
var/current_stage = hole_size
if(current_stage >= MAX_HOLE_SIZE)
to_chat(user, "<span class='notice'>This fence has too much cut out of it already.</span>")
return
user.visible_message("<span class='danger'>\The [user] starts cutting through \the [src] with \the [W].</span>",\
"<span class='danger'>You start cutting through \the [src] with \the [W].</span>")
if(do_after(user, CUT_TIME*W.toolspeed, target = src))
if(current_stage == hole_size)
switch(++hole_size)
if(MEDIUM_HOLE)
visible_message("<span class='notice'>\The [user] cuts into \the [src] some more.</span>")
to_chat(user, "<span class='info'>You could probably fit yourself through that hole now. Although climbing through would be much faster if you made it even bigger.</span>")
climbable = TRUE
if(LARGE_HOLE)
visible_message("<span class='notice'>\The [user] completely cuts through \the [src].</span>")
to_chat(user, "<span class='info'>The hole in \the [src] is now big enough to walk through.</span>")
climbable = FALSE
update_cut_status()
return TRUE
/obj/structure/fence/proc/update_cut_status()
if(!cuttable)
return
density = TRUE
switch(hole_size)
if(NO_HOLE)
icon_state = initial(icon_state)
if(MEDIUM_HOLE)
icon_state = "straight_cut2"
if(LARGE_HOLE)
icon_state = "straight_cut3"
density = FALSE
//FENCE DOORS
/obj/structure/fence/door
name = "fence door"
desc = "Not very useful without a real lock."
icon_state = "door_closed"
cuttable = FALSE
var/open = FALSE
/obj/structure/fence/door/Initialize()
. = ..()
update_door_status()
/obj/structure/fence/door/opened
icon_state = "door_opened"
open = TRUE
density = TRUE
/obj/structure/fence/door/attack_hand(mob/user)
if(can_open(user))
toggle(user)
return TRUE
/obj/structure/fence/door/proc/toggle(mob/user)
switch(open)
if(FALSE)
visible_message("<span class='notice'>\The [user] opens \the [src].</span>")
open = TRUE
if(TRUE)
visible_message("<span class='notice'>\The [user] closes \the [src].</span>")
open = FALSE
update_door_status()
playsound(src, 'sound/machines/click.ogg', 100, 1)
/obj/structure/fence/door/proc/update_door_status()
switch(open)
if(FALSE)
density = TRUE
icon_state = "door_closed"
if(TRUE)
density = FALSE
icon_state = "door_opened"
/obj/structure/fence/door/proc/can_open(mob/user)
return TRUE
#undef CUT_TIME
#undef CLIMB_TIME
#undef NO_HOLE
#undef SMALL_HOLE
#undef MEDIUM_HOLE
#undef LARGE_HOLE
#undef MAX_HOLE_SIZE
+6
View File
@@ -161,3 +161,9 @@
name = "shrine"
desc = "A shrine dedicated to a deity."
icon_state = "shrine"
/obj/structure/fluff/fokoff_sign
name = "crude sign"
desc = "A crudely-made sign with the words 'fok of' written in some sort of red paint."
icon = 'icons/obj/fluff.dmi'
icon_state = "fokof"
+1 -1
View File
@@ -89,7 +89,7 @@
name = "magic mirror"
desc = "Turn and face the strange... face."
icon_state = "magic_mirror"
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant")
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth")
var/list/choosable_races = list()
/obj/structure/mirror/magic/New()
+2
View File
@@ -352,7 +352,9 @@
/turf/open/rad_act(pulse_strength)
. = ..()
if (air.gases[/datum/gas/carbon_dioxide] && air.gases[/datum/gas/oxygen])
pulse_strength = min(pulse_strength,air.gases[/datum/gas/carbon_dioxide][MOLES]*1000,air.gases[/datum/gas/oxygen][MOLES]*2000) //Ensures matter is conserved properly
air.gases[/datum/gas/carbon_dioxide][MOLES]=max(air.gases[/datum/gas/carbon_dioxide][MOLES]-(pulse_strength/1000),0)
air.gases[/datum/gas/oxygen][MOLES]=max(air.gases[/datum/gas/oxygen][MOLES]-(pulse_strength/2000),0)
air.assert_gas(/datum/gas/pluoxium)
@@ -72,7 +72,7 @@
floor_tile = /obj/item/stack/tile/grass
broken_states = list("sand")
flags_1 = NONE
var/ore_type = /obj/item/ore/glass
var/ore_type = /obj/item/stack/ore/glass
var/turfverb = "uproot"
/turf/open/floor/grass/Initialize()
@@ -81,9 +81,8 @@
/turf/open/floor/grass/attackby(obj/item/C, mob/user, params)
if(istype(C, /obj/item/shovel) && params)
new ore_type(src)
new ore_type(src) //Make some sand if you shovel grass
user.visible_message("[user] digs up [src].", "<span class='notice'>You [src.turfverb] [src].</span>")
new ore_type(src, 2)
user.visible_message("[user] digs up [src].", "<span class='notice'>You [turfverb] [src].</span>")
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
make_plating()
if(..())
@@ -109,7 +108,7 @@
name = "volcanic floor"
icon = 'icons/turf/floors.dmi'
icon_state = "basalt"
ore_type = /obj/item/ore/glass/basalt
ore_type = /obj/item/stack/ore/glass/basalt
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
slowdown = 0
@@ -126,7 +125,7 @@
icon = 'icons/turf/floors.dmi'
icon_state = "basalt"
floor_tile = /obj/item/stack/tile/basalt
ore_type = /obj/item/ore/glass/basalt
ore_type = /obj/item/stack/ore/glass/basalt
turfverb = "dig up"
slowdown = 0
@@ -183,11 +182,11 @@
A.narsie_act()
/turf/open/floor/carpet/break_tile()
broken = 1
broken = TRUE
update_icon()
/turf/open/floor/carpet/burn_tile()
burnt = 1
burnt = TRUE
update_icon()
/turf/open/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
@@ -13,7 +13,7 @@
var/environment_type = "asteroid"
var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal
var/floor_variance = 20 //probability floor has a different icon state
archdrops = list(/obj/item/ore/glass = 5)
archdrops = list(/obj/item/stack/ore/glass = 5)
attachment_holes = FALSE
/turf/open/floor/plating/asteroid/Initialize()
@@ -41,7 +41,7 @@
if(istype(W, /obj/item/storage/bag/ore))
var/obj/item/storage/bag/ore/S = W
if(S.collection_mode == 1)
for(var/obj/item/ore/O in src.contents)
for(var/obj/item/stack/ore/O in contents)
O.attackby(W,user)
return
@@ -77,7 +77,7 @@
icon_state = "basalt"
icon_plating = "basalt"
environment_type = "basalt"
archdrops = list(/obj/item/ore/glass/basalt = 5)
archdrops = list(/obj/item/stack/ore/glass/basalt = 5)
floor_variance = 15
/turf/open/floor/plating/asteroid/basalt/lava //lava underneath
@@ -213,7 +213,7 @@
C.produce_tunnel_from_data(rand(10, 15), dir)
else
SpawnFloor(tunnel)
else //if(!istype(tunnel, src.parent)) // We hit space/normal/wall, stop our tunnel.
else //if(!istype(tunnel, parent)) // We hit space/normal/wall, stop our tunnel.
break
// Chance to change our direction left or right.
@@ -284,17 +284,42 @@
baseturfs = /turf/open/floor/plating/asteroid/snow
icon_state = "snow"
icon_plating = "snow"
initial_gas_mix = "TEMP=180"
initial_gas_mix = "o2=22;n2=82;TEMP=180"
slowdown = 2
environment_type = "snow"
flags_1 = NONE
planetary_atmos = TRUE
archdrops = list(/obj/item/stack/sheet/mineral/snow = 5)
burnt_states = list("snow_dug")
/turf/open/floor/plating/asteroid/snow/burn_tile()
if(!burnt)
visible_message("<span class='danger'>[src] melts away!.</span>")
slowdown = 0
burnt = TRUE
icon_state = "snow_dug"
return TRUE
return FALSE
/turf/open/floor/plating/asteroid/snow/ice
name = "icey snow"
desc = "Looks colder."
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
floor_variance = 0
icon_state = "snow-ice"
icon_plating = "snow-ice"
environment_type = "snow_cavern"
/turf/open/floor/plating/asteroid/snow/ice/burn_tile()
return FALSE
/turf/open/floor/plating/asteroid/snow/airless
initial_gas_mix = "TEMP=2.7"
/turf/open/floor/plating/asteroid/snow/temperatre
initial_gas_mix = "TEMP=255.37"
initial_gas_mix = "o2=22;n2=82;TEMP=255.37"
/turf/open/floor/plating/asteroid/snow/atmosphere
initial_gas_mix = "o2=22;n2=82;TEMP=180"
planetary_atmos = FALSE
@@ -122,18 +122,31 @@
/turf/open/floor/plating/ironsand/burn_tile()
return
/turf/open/floor/plating/ice
name = "ice sheet"
desc = "A sheet of solid ice. Looks slippery."
icon = 'icons/turf/snow.dmi'
icon_state = "ice"
icon = 'icons/turf/floors/ice_turf.dmi'
icon_state = "unsmooth"
initial_gas_mix = "o2=22;n2=82;TEMP=180"
temperature = 180
planetary_atmos = TRUE
baseturfs = /turf/open/floor/plating/ice
slowdown = 1
wet = TURF_WET_PERMAFROST
attachment_holes = FALSE
/turf/open/floor/plating/ice/HandleWet()
if(wet == TURF_WET_ICE)
return
..()
MakeSlippery(TURF_WET_ICE) //rewet after ..() clears out lube/ice etc.
/turf/open/floor/plating/ice/smooth
icon_state = "smooth"
smooth = SMOOTH_MORE | SMOOTH_BORDER
canSmoothWith = list(/turf/open/floor/plating/ice/smooth, /turf/open/floor/plating/ice)
/turf/open/floor/plating/ice/colder
/turf/open/floor/plating/ice/colder
temperature = 140
@@ -149,11 +162,23 @@
/turf/open/floor/plating/snowed
name = "snowed-over plating"
desc = "A section of plating covered in a light layer of snow."
desc = "A section of heated plating, helps keep the snow from stacking up too high."
icon = 'icons/turf/snow.dmi'
icon_state = "snowplating"
initial_gas_mix = "o2=22;n2=82;TEMP=180"
temperature = 180
attachment_holes = FALSE
planetary_atmos = TRUE
/turf/open/floor/plating/snowed/cavern
initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
/turf/open/floor/plating/snowed/smoothed
smooth = SMOOTH_MORE | SMOOTH_BORDER
canSmoothWith = list(/turf/open/floor/plating/snowed/smoothed, /turf/open/floor/plating/snowed)
planetary_atmos = TRUE
icon = 'icons/turf/floors/snow_turf.dmi'
icon_state = "smooth"
/turf/open/floor/plating/snowed/colder
temperature = 140
+68 -19
View File
@@ -71,11 +71,9 @@
return attack_hand(user)
/turf/closed/mineral/proc/gets_drilled()
if (mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11))
var/i
for(i in 1 to mineralAmt)
new mineralType(src)
SSblackbox.record_feedback("tally", "ore_mined", 1, mineralType)
if (mineralType && (mineralAmt > 0))
new mineralType(src, mineralAmt)
SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType)
for(var/obj/effect/temp_visual/mining_overlay/M in src)
qdel(M)
var/flags = NONE
@@ -108,7 +106,7 @@
else if(iscyborg(AM))
var/mob/living/silicon/robot/R = AM
if(istype(R.module_active, /obj/item/pickaxe))
src.attackby(R.module_active,R)
attackby(R.module_active,R)
return
else
return
@@ -121,12 +119,12 @@
switch(severity)
if(3)
if (prob(75))
src.gets_drilled(null, 1)
gets_drilled(null, 1)
if(2)
if (prob(90))
src.gets_drilled(null, 1)
gets_drilled(null, 1)
if(1)
src.gets_drilled(null, 1)
gets_drilled(null, 1)
return
/turf/closed/mineral/Spread(turf/T)
@@ -225,7 +223,7 @@
/turf/closed/mineral/iron
mineralType = /obj/item/ore/iron
mineralType = /obj/item/stack/ore/iron
spreadChance = 20
spread = 1
scan_state = "rock_Iron"
@@ -237,9 +235,18 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
/turf/closed/mineral/iron/ice
environment_type = "snow_cavern"
icon_state = "icerock_iron"
smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
turf_type = /turf/open/floor/plating/asteroid/snow/ice
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
initial_gas_mix = "o2=22;n2=82;TEMP=180"
defer_change = TRUE
/turf/closed/mineral/uranium
mineralType = /obj/item/ore/uranium
mineralType = /obj/item/stack/ore/uranium
spreadChance = 5
spread = 1
scan_state = "rock_Uranium"
@@ -253,7 +260,7 @@
/turf/closed/mineral/diamond
mineralType = /obj/item/ore/diamond
mineralType = /obj/item/stack/ore/diamond
spreadChance = 0
spread = 1
scan_state = "rock_Diamond"
@@ -265,9 +272,18 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
/turf/closed/mineral/diamond/ice
environment_type = "snow_cavern"
icon_state = "icerock_diamond"
smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
turf_type = /turf/open/floor/plating/asteroid/snow/ice
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
initial_gas_mix = "o2=22;n2=82;TEMP=180"
defer_change = TRUE
/turf/closed/mineral/gold
mineralType = /obj/item/ore/gold
mineralType = /obj/item/stack/ore/gold
spreadChance = 5
spread = 1
scan_state = "rock_Gold"
@@ -281,7 +297,7 @@
/turf/closed/mineral/silver
mineralType = /obj/item/ore/silver
mineralType = /obj/item/stack/ore/silver
spreadChance = 5
spread = 1
scan_state = "rock_Silver"
@@ -295,7 +311,7 @@
/turf/closed/mineral/titanium
mineralType = /obj/item/ore/titanium
mineralType = /obj/item/stack/ore/titanium
spreadChance = 5
spread = 1
scan_state = "rock_Titanium"
@@ -309,7 +325,7 @@
/turf/closed/mineral/plasma
mineralType = /obj/item/ore/plasma
mineralType = /obj/item/stack/ore/plasma
spreadChance = 8
spread = 1
scan_state = "rock_Plasma"
@@ -321,9 +337,19 @@
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = 1
/turf/closed/mineral/plasma/ice
environment_type = "snow_cavern"
icon_state = "icerock_plasma"
smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
turf_type = /turf/open/floor/plating/asteroid/snow/ice
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
initial_gas_mix = "o2=22;n2=82;TEMP=180"
defer_change = TRUE
/turf/closed/mineral/bananium
mineralType = /obj/item/ore/bananium
mineralType = /obj/item/stack/ore/bananium
mineralAmt = 3
spreadChance = 0
spread = 0
@@ -331,7 +357,7 @@
/turf/closed/mineral/bscrystal
mineralType = /obj/item/ore/bluespace_crystal
mineralType = /obj/item/stack/ore/bluespace_crystal
mineralAmt = 1
spreadChance = 0
spread = 0
@@ -370,6 +396,29 @@
turf_type = /turf/open/floor/plating/ashplanet/rocky
defer_change = 1
/turf/closed/mineral/snowmountain
name = "snowy mountainside"
icon = 'icons/turf/mining.dmi'
smooth_icon = 'icons/turf/walls/mountain_wall.dmi'
icon_state = "mountainrock"
smooth = SMOOTH_MORE|SMOOTH_BORDER
canSmoothWith = list (/turf/closed)
baseturfs = /turf/open/floor/plating/asteroid/snow
initial_gas_mix = "o2=22;n2=82;TEMP=180"
environment_type = "snow"
turf_type = /turf/open/floor/plating/asteroid/snow
defer_change = TRUE
/turf/closed/mineral/snowmountain/cavern
name = "ice cavern rock"
icon = 'icons/turf/mining.dmi'
smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
icon_state = "icerock"
smooth = SMOOTH_MORE|SMOOTH_BORDER
canSmoothWith = list (/turf/closed)
baseturfs = /turf/open/floor/plating/asteroid/snow/ice
environment_type = "snow_cavern"
turf_type = /turf/open/floor/plating/asteroid/snow/ice
//GIBTONITE
@@ -441,7 +490,7 @@
stage = GIBTONITE_STABLE
if(det_time < 0)
det_time = 0
visible_message("<span class='notice'>The chain reaction was stopped! The gibtonite had [src.det_time] reactions left till the explosion!</span>")
visible_message("<span class='notice'>The chain reaction was stopped! The gibtonite had [det_time] reactions left till the explosion!</span>")
/turf/closed/mineral/gibtonite/gets_drilled(mob/user, triggered_by_explosion = 0)
if(stage == GIBTONITE_UNSTRUCK && mineralAmt >= 1) //Gibtonite deposit is activated
+18 -3
View File
@@ -8,11 +8,18 @@ GLOBAL_PROTECT(admin_ranks)
var/list/subs
/datum/admin_rank/New(init_name, init_rights, list/init_adds, list/init_subs)
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin("[key_name(usr)][msg]")
if (name == "NoRank") //only del if this is a true creation (and not just a New() proc call), other wise trialmins/coders could abuse this to deadmin other admins
QDEL_IN(src, 0)
CRASH("Admin proc call creation of admin datum")
return
name = init_name
switch(name)
if("Removed",null,"")
spawn(0)
qdel(src)
QDEL_IN(src, 0)
throw EXCEPTION("invalid admin-rank name")
return
if(init_rights)
@@ -24,6 +31,14 @@ GLOBAL_PROTECT(admin_ranks)
adds = init_adds
subs = init_subs
/datum/admin_rank/Destroy()
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin("[key_name(usr)][msg]")
return QDEL_HINT_LETMELIVE
. = ..()
/datum/admin_rank/vv_edit_var(var_name, var_value)
return FALSE
@@ -78,7 +93,7 @@ GLOBAL_PROTECT(admin_ranks)
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin_private("[key_name(usr)][msg]")
log_admin("[key_name(usr)][msg]")
return
var/flag = admin_keyword_to_flag(word, previous_rights)
if(flag)
+4 -1
View File
@@ -40,7 +40,10 @@
// Jim (Status) FLW PM TP
/datum/antagonist/proc/antag_listing_entry()
var/list/parts = list()
parts += antag_listing_name()
if(show_name_in_check_antagonists)
parts += "[antag_listing_name()]([name])"
else
parts += antag_listing_name()
parts += antag_listing_status()
parts += antag_listing_commands()
return "<tr><td>[parts.Join("</td><td>")]</td></tr>"
+33 -3
View File
@@ -27,6 +27,14 @@ GLOBAL_PROTECT(href_token)
var/deadmined
/datum/admins/New(datum/admin_rank/R, ckey, force_active = FALSE)
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin("[key_name(usr)][msg]")
if (!target) //only del if this is a true creation (and not just a New() proc call), other wise trialmins/coders could abuse this to deadmin other admins
QDEL_IN(src, 0)
CRASH("Admin proc call creation of admin datum")
return
if(!ckey)
QDEL_IN(src, 0)
throw EXCEPTION("Admin datum created without a ckey")
@@ -48,8 +56,20 @@ GLOBAL_PROTECT(href_token)
else
deactivate()
/datum/admins/Destroy()
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin("[key_name(usr)][msg]")
return QDEL_HINT_LETMELIVE
. = ..()
/datum/admins/proc/activate()
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin("[key_name(usr)][msg]")
return
GLOB.deadmins -= target
GLOB.admin_datums[target] = src
deadmined = FALSE
@@ -58,6 +78,11 @@ GLOBAL_PROTECT(href_token)
/datum/admins/proc/deactivate()
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin("[key_name(usr)][msg]")
return
GLOB.deadmins[target] = src
GLOB.admin_datums -= target
deadmined = TRUE
@@ -70,14 +95,14 @@ GLOBAL_PROTECT(href_token)
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin_private("[key_name(usr)][msg]")
log_admin("[key_name(usr)][msg]")
return
if(istype(C))
if(C.ckey != target)
var/msg = " has attempted to associate with [target]'s admin datum"
message_admins("[key_name_admin(C)][msg]")
log_admin_private("[key_name(C)][msg]")
log_admin("[key_name(C)][msg]")
return
if (deadmined)
activate()
@@ -88,6 +113,11 @@ GLOBAL_PROTECT(href_token)
GLOB.admins |= C
/datum/admins/proc/disassociate()
if(IsAdminAdvancedProcCall())
var/msg = " has tried to elevate permissions!"
message_admins("[key_name_admin(usr)][msg]")
log_admin("[key_name(usr)][msg]")
return
if(owner)
GLOB.admins -= owner
owner.remove_admin_verbs()
@@ -173,4 +203,4 @@ you will have to do something like if(client.rights & R_ADMIN) yourself.
return "admin_token=[RawHrefToken(forceGlobal)]"
/proc/HrefTokenFormField(forceGlobal = FALSE)
return "<input type='hidden' name='admin_token' value='[RawHrefToken(forceGlobal)]'>"
return "<input type='hidden' name='admin_token' value='[RawHrefToken(forceGlobal)]'>"
+72 -147
View File
@@ -271,77 +271,7 @@
// DEATH SQUADS
/datum/admins/proc/makeDeathsquad()
var/mission = input("Assign a mission to the deathsquad", "Assign Mission", "Leave no witnesses.")
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for an elite Nanotrasen Strike Team?", "deathsquad", null)
var/squadSpawned = 0
if(candidates.len >= 2) //Minimum 2 to be considered a squad
//Pick the lucky players
var/numagents = min(5,candidates.len) //How many commandos to spawn
var/list/spawnpoints = GLOB.emergencyresponseteamspawn
while(numagents && candidates.len)
if (numagents > spawnpoints.len)
numagents--
continue // This guy's unlucky, not enough spawn points, we skip him.
var/spawnloc = spawnpoints[numagents]
var/mob/dead/observer/chosen_candidate = pick(candidates)
candidates -= chosen_candidate
if(!chosen_candidate.key)
continue
//Spawn and equip the commando
var/mob/living/carbon/human/Commando = new(spawnloc)
chosen_candidate.client.prefs.copy_to(Commando)
if(numagents == 1) //If Squad Leader
Commando.real_name = "Officer [pick(GLOB.commando_names)]"
Commando.equipOutfit(/datum/outfit/death_commando/officer)
else
Commando.real_name = "Trooper [pick(GLOB.commando_names)]"
Commando.equipOutfit(/datum/outfit/death_commando)
Commando.dna.update_dna_identity()
Commando.key = chosen_candidate.key
Commando.mind.assigned_role = "Death Commando"
for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
spawn(0)
door.open()
//Assign antag status and the mission
Commando.mind.special_role = "deathsquad"
var/datum/objective/missionobj = new
missionobj.owner = Commando.mind
missionobj.explanation_text = mission
missionobj.completed = 1
Commando.mind.objectives += missionobj
Commando.mind.add_antag_datum(/datum/antagonist/auto_custom)
//Greet the commando
to_chat(Commando, "<B><font size=3 color=red>You are the [numagents==1?"Deathsquad Officer":"Death Commando"].</font></B>")
var/missiondesc = "Your squad is being sent on a mission to [station_name()] by Nanotrasen's Security Division."
if(numagents == 1) //If Squad Leader
missiondesc += " Lead your squad to ensure the completion of the mission. Board the shuttle when your team is ready."
else
missiondesc += " Follow orders given to you by your squad leader."
missiondesc += "<BR><B>Your Mission</B>: [mission]"
to_chat(Commando, missiondesc)
if(CONFIG_GET(flag/enforce_human_authority))
Commando.set_species(/datum/species/human)
//Logging and cleanup
if(numagents == 1)
message_admins("The deathsquad has spawned with the mission: [mission].")
log_game("[key_name(Commando)] has been selected as a Death Commando")
numagents--
squadSpawned++
if (squadSpawned)
return 1
else
return 0
return
return makeEmergencyresponseteam(ERT_DEATHSQUAD)
/datum/admins/proc/makeOfficial()
var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.")
@@ -386,38 +316,70 @@
return 0
// CENTCOM RESPONSE TEAM
/datum/admins/proc/makeEmergencyresponseteam()
var/alert = input("Which team should we send?", "Select Response Level") as null|anything in list("Green: CentCom Official", "Blue: Light ERT (No Armoury Access)", "Amber: Full ERT (Armoury Access)", "Red: Elite ERT (Armoury Access + Pulse Weapons)", "Delta: Deathsquad")
if(!alert)
return
/datum/admins/proc/makeEmergencyresponseteam(alert_type)
var/alert
if(!alert_type)
alert = input("Which team should we send?", "Select Response Level") as null|anything in list("Green: CentCom Official", "Blue: Light ERT (No Armoury Access)", "Amber: Full ERT (Armoury Access)", "Red: Elite ERT (Armoury Access + Pulse Weapons)", "Delta: Deathsquad")
if(!alert)
return
else
alert = alert_type
var/teamsize = 0
var/deathsquad = FALSE
switch(alert)
if("Delta: Deathsquad")
return makeDeathsquad()
alert = ERT_DEATHSQUAD
teamsize = 5
deathsquad = TRUE
if("Red: Elite ERT (Armoury Access + Pulse Weapons)")
alert = "Red"
alert = ERT_RED
if("Amber: Full ERT (Armoury Access)")
alert = "Amber"
alert = ERT_AMBER
if("Blue: Light ERT (No Armoury Access)")
alert = "Blue"
alert = ERT_BLUE
if("Green: CentCom Official")
return makeOfficial()
var/teamcheck = input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num
if(isnull(teamcheck))
return
var/teamsize = min(7,teamcheck)
var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", "Assist the station.") as null|text
else
return
if(!teamsize)
var/teamcheck = input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num
if(isnull(teamcheck))
return
teamsize = min(7,teamcheck)
var/default_mission = deathsquad ? "Leave no witnesses." : "Assist the station."
var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", default_mission) as null|text
if(!mission)
return
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null)
var/prompt_name = deathsquad ? "an elite Nanotrasen Strike Team" : "a Code [alert] Nanotrasen Emergency Response Team"
var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [prompt_name] ?", "deathsquad", null)
var/teamSpawned = 0
if(candidates.len > 0)
//Pick the (un)lucky players
var/numagents = min(teamsize,candidates.len) //How many officers to spawn
var/redalert //If the ert gets super weapons
if (alert == "Red")
numagents = min(teamsize,candidates.len)
redalert = 1
//Create team
var/datum/team/ert/ert_team = new
if(deathsquad)
ert_team.name = "Death Squad"
//Asign team objective
var/datum/objective/missionobj = new
missionobj.team = ert_team
missionobj.explanation_text = mission
missionobj.completed = 1
ert_team.objectives += missionobj
ert_team.mission = missionobj
//We give these out in order, then back from the start if there's more than 3
var/list/role_order = list(ERT_SEC,ERT_MED,ERT_ENG)
var/list/spawnpoints = GLOB.emergencyresponseteamspawn
while(numagents && candidates.len)
if (numagents > spawnpoints.len)
@@ -429,75 +391,38 @@
if(!chosen_candidate.key)
continue
//Spawn and equip the officer
//Spawn the body
var/mob/living/carbon/human/ERTOperative = new(spawnloc)
var/list/lastname = GLOB.last_names
chosen_candidate.client.prefs.copy_to(ERTOperative)
var/ertname = pick(lastname)
switch(numagents)
if(1)
ERTOperative.real_name = "Commander [ertname]"
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/commander/alert : /datum/outfit/ert/commander)
if(2)
ERTOperative.real_name = "Security Officer [ertname]"
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security)
if(3)
ERTOperative.real_name = "Medical Officer [ertname]"
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic)
if(4)
ERTOperative.real_name = "Engineer [ertname]"
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer)
if(5)
ERTOperative.real_name = "Security Officer [ertname]"
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security)
if(6)
ERTOperative.real_name = "Medical Officer [ertname]"
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic)
if(7)
ERTOperative.real_name = "Engineer [ertname]"
ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer)
ERTOperative.dna.update_dna_identity()
ERTOperative.key = chosen_candidate.key
ERTOperative.mind.assigned_role = "ERT"
//Open the Armory doors
if(alert != "Blue")
for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
spawn(0)
door.open()
//Assign antag status and the mission
ERTOperative.mind.special_role = "ERT"
var/datum/objective/missionobj = new
missionobj.owner = ERTOperative.mind
missionobj.explanation_text = mission
missionobj.completed = 1
ERTOperative.mind.objectives += missionobj
ERTOperative.mind.add_antag_datum(/datum/antagonist/auto_custom)
//Greet the commando
to_chat(ERTOperative, "<B><font size=3 color=red>You are [numagents==1?"the Emergency Response Team Commander":"an Emergency Response Officer"].</font></B>")
var/missiondesc = "Your squad is being sent on a Code [alert] mission to [station_name()] by Nanotrasen's Security Division."
if(numagents == 1) //If Squad Leader
missiondesc += " Lead your squad to ensure the completion of the mission. Avoid civilian casualites when possible. Board the shuttle when your team is ready."
else
missiondesc += " Follow orders given to you by your commander. Avoid civilian casualites when possible."
missiondesc += "<BR><B>Your Mission</B>: [mission]"
to_chat(ERTOperative, missiondesc)
if(CONFIG_GET(flag/enforce_human_authority))
ERTOperative.set_species(/datum/species/human)
//Logging and cleanup
//Give antag datum
var/datum/antagonist/ert/ert_antag = new
ert_antag.high_alert = alert == ERT_RED
if(numagents == 1)
message_admins("A Code [alert] emergency response team has spawned with the mission: [mission]")
log_game("[key_name(ERTOperative)] has been selected as an Emergency Response Officer")
ert_antag.role = deathsquad ? DEATHSQUAD_LEADER : ERT_LEADER
else
ert_antag.role = deathsquad ? DEATHSQUAD : role_order[WRAP(numagents,1,role_order.len + 1)]
ERTOperative.mind.add_antag_datum(ert_antag,ert_team)
ERTOperative.mind.assigned_role = ert_antag.name
//Logging and cleanup
log_game("[key_name(ERTOperative)] has been selected as an [ert_antag.name]")
numagents--
teamSpawned++
if (teamSpawned)
message_admins("[prompt_name] has spawned with the mission: [mission]")
//Open the Armory doors
if(alert != ERT_BLUE)
for(var/obj/machinery/door/poddoor/ert/door in GLOB.airlocks)
spawn(0)
door.open()
return 1
else
return 0
@@ -17,6 +17,7 @@ GLOBAL_LIST_EMPTY(antagonists)
//Antag panel properties
var/show_in_antagpanel = TRUE //This will hide adding this antag type in antag panel, use only for internal subtypes that shouldn't be added directly but still show if possessed by mind
var/antagpanel_category = "Uncategorized" //Antagpanel will display these together, REQUIRED
var/show_name_in_check_antagonists = FALSE //Will append antagonist name in admin listings - use for categories that share more than one antag type
/datum/antagonist/New()
GLOB.antagonists += src
@@ -206,6 +207,7 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/auto_custom
show_in_antagpanel = FALSE
antagpanel_category = "Other"
show_name_in_check_antagonists = TRUE
/datum/antagonist/auto_custom/on_gain()
..()
@@ -219,12 +221,10 @@ GLOBAL_LIST_EMPTY(antagonists)
already_registered_objectives |= A.objectives
objectives = owner.objectives - already_registered_objectives
/datum/antagonist/auto_custom/antag_listing_name()
return ..() + "([name])"
//This one is created by admin tools for custom objectives
/datum/antagonist/custom
antagpanel_category = "Custom"
show_name_in_check_antagonists = TRUE //They're all different
/datum/antagonist/custom/admin_add(datum/mind/new_owner,mob/admin)
var/custom_name = stripped_input(admin, "Custom antagonist name:", "Custom antag", "Antagonist")
@@ -232,7 +232,4 @@ GLOBAL_LIST_EMPTY(antagonists)
name = custom_name
else
return
..()
/datum/antagonist/custom/antag_listing_name()
return ..() + "([name])"
..()
+252 -266
View File
@@ -1,266 +1,252 @@
/obj/item/antag_spawner
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_TINY
var/used = FALSE
/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
return
/obj/item/antag_spawner/proc/equip_antag(mob/target)
return
///////////WIZARD
/obj/item/antag_spawner/contract
name = "contract"
desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid."
icon = 'icons/obj/wizard.dmi'
icon_state ="scroll2"
/obj/item/antag_spawner/contract/attack_self(mob/user)
user.set_machine(src)
var/dat
if(used)
dat = "<B>You have already summoned your apprentice.</B><BR>"
else
dat = "<B>Contract of Apprenticeship:</B><BR>"
dat += "<I>Using this contract, you may summon an apprentice to aid you on your mission.</I><BR>"
dat += "<I>If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.</I><BR>"
dat += "<B>Which school of magic is your apprentice studying?:</B><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_DESTRUCTION]'>Destruction</A><BR>"
dat += "<I>Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.</I><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_BLUESPACE]'>Bluespace Manipulation</A><BR>"
dat += "<I>Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.</I><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_HEALING]'>Healing</A><BR>"
dat += "<I>Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.</I><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_ROBELESS]'>Robeless</A><BR>"
dat += "<I>Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.</I><BR>"
user << browse(dat, "window=radio")
onclose(user, "radio")
return
/obj/item/antag_spawner/contract/Topic(href, href_list)
..()
var/mob/living/carbon/human/H = usr
if(H.stat || H.restrained())
return
if(!ishuman(H))
return 1
if(loc == H || (in_range(src, H) && isturf(loc)))
H.set_machine(src)
if(href_list["school"])
if(used)
to_chat(H, "You already used this contract!")
return
var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
if(LAZYLEN(candidates))
if(used)
to_chat(H, "You already used this contract!")
return
used = TRUE
var/client/C = pick(candidates)
spawn_antag(C, get_turf(src), href_list["school"],H.mind)
else
to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")
/obj/item/antag_spawner/contract/spawn_antag(client/C, turf/T, kind ,datum/mind/user)
new /obj/effect/particle_effect/smoke(T)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M)
M.key = C.key
var/datum/mind/app_mind = M.mind
var/datum/antagonist/wizard/apprentice/app = new()
app.master = user
app.school = kind
var/datum/antagonist/wizard/master_wizard = user.has_antag_datum(/datum/antagonist/wizard)
if(master_wizard)
if(!master_wizard.wiz_team)
master_wizard.create_wiz_team()
app.wiz_team = master_wizard.wiz_team
master_wizard.wiz_team.add_member(app_mind)
app_mind.add_antag_datum(app)
//TODO Kill these if possible
app_mind.assigned_role = "Apprentice"
app_mind.special_role = "apprentice"
//
SEND_SOUND(M, sound('sound/effects/magic.ogg'))
///////////BORGS AND OPERATIVES
/obj/item/antag_spawner/nuke_ops
name = "syndicate operative teleporter"
desc = "A single-use teleporter designed to quickly reinforce operatives in the field."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
var/borg_to_spawn
/obj/item/antag_spawner/nuke_ops/proc/check_usability(mob/user)
if(used)
to_chat(user, "<span class='warning'>[src] is out of power!</span>")
return FALSE
if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE))
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
return FALSE
if(!user.onSyndieBase())
to_chat(user, "<span class='warning'>[src] is out of range! It can only be used at your base!</span>")
return FALSE
return TRUE
/obj/item/antag_spawner/nuke_ops/attack_self(mob/user)
if(!(check_usability(user)))
return
to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>")
var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE)
if(LAZYLEN(nuke_candidates))
if(!(check_usability(user)))
return
used = TRUE
var/client/C = pick(nuke_candidates)
spawn_antag(C, get_turf(src), "syndieborg", user.mind)
do_sparks(4, TRUE, src)
qdel(src)
else
to_chat(user, "<span class='warning'>Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.</span>")
/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M)
M.key = C.key
var/datum/antagonist/nukeop/new_op = new()
new_op.send_to_spawnpoint = FALSE
new_op.nukeop_outfit = /datum/outfit/syndicate/no_crystals
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(creator_op)
M.mind.add_antag_datum(new_op,creator_op.nuke_team)
M.mind.special_role = "Nuclear Operative"
//////SYNDICATE BORG
/obj/item/antag_spawner/nuke_ops/borg_tele
name = "syndicate cyborg teleporter"
desc = "A single-use teleporter designed to quickly reinforce operatives in the field.."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
/obj/item/antag_spawner/nuke_ops/borg_tele/assault
name = "syndicate assault cyborg teleporter"
borg_to_spawn = "Assault"
/obj/item/antag_spawner/nuke_ops/borg_tele/medical
name = "syndicate medical teleporter"
borg_to_spawn = "Medical"
/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/silicon/robot/R
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(!creator_op)
return
switch(borg_to_spawn)
if("Medical")
R = new /mob/living/silicon/robot/modules/syndicate/medical(T)
else
R = new /mob/living/silicon/robot/modules/syndicate(T) //Assault borg by default
var/brainfirstname = pick(GLOB.first_names_male)
if(prob(50))
brainfirstname = pick(GLOB.first_names_female)
var/brainopslastname = pick(GLOB.last_names)
if(creator_op.nuke_team.syndicate_name) //the brain inside the syndiborg has the same last name as the other ops.
brainopslastname = creator_op.nuke_team.syndicate_name
var/brainopsname = "[brainfirstname] [brainopslastname]"
R.mmi.name = "Man-Machine Interface: [brainopsname]"
R.mmi.brain.name = "[brainopsname]'s brain"
R.mmi.brainmob.real_name = brainopsname
R.mmi.brainmob.name = brainopsname
R.real_name = R.name
R.key = C.key
var/datum/antagonist/nukeop/new_borg = new()
new_borg.send_to_spawnpoint = FALSE
R.mind.add_antag_datum(new_borg,creator_op.nuke_team)
R.mind.special_role = "Syndicate Cyborg"
///////////SLAUGHTER DEMON
/obj/item/antag_spawner/slaughter_demon //Warning edgiest item in the game
name = "vial of blood"
desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures."
icon = 'icons/obj/wizard.dmi'
icon_state = "vial"
var/shatter_msg = "<span class='notice'>You shatter the bottle, no turning back now!</span>"
var/veil_msg = "<span class='warning'>You sense a dark presence lurking just beyond the veil...</span>"
var/objective_verb = "Kill"
var/mob/living/demon_type = /mob/living/simple_animal/slaughter
/obj/item/antag_spawner/slaughter_demon/attack_self(mob/user)
if(!is_station_level(user.z))
to_chat(user, "<span class='notice'>You should probably wait until you reach the station.</span>")
return
if(used)
return
var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src)
if(LAZYLEN(candidates))
if(used)
return
used = TRUE
var/client/C = pick(candidates)
spawn_antag(C, get_turf(src), initial(demon_type.name),user.mind)
to_chat(user, shatter_msg)
to_chat(user, veil_msg)
playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1)
qdel(src)
else
to_chat(user, "<span class='notice'>You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.</span>")
/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
var/mob/living/simple_animal/slaughter/S = new demon_type(holder)
S.holder = holder
S.key = C.key
S.mind.assigned_role = S.name
S.mind.special_role = S.name
var/datum/objective/assassinate/new_objective
if(user)
new_objective = new /datum/objective/assassinate
new_objective.owner = S.mind
new_objective.target = user
new_objective.explanation_text = "[objective_verb] [user.name], the one who summoned you."
S.mind.objectives += new_objective
var/datum/objective/new_objective2 = new /datum/objective
new_objective2.owner = S.mind
new_objective2.explanation_text = "[objective_verb] everyone[user ? " else while you're at it":""]."
S.mind.objectives += new_objective2
S.mind.add_antag_datum(/datum/antagonist/auto_custom)
to_chat(S, S.playstyle_string)
to_chat(S, "<B>You are currently not currently in the same plane of existence as the station. \
Ctrl+Click a blood pool to manifest.</B>")
if(new_objective)
to_chat(S, "<B>Objective #[1]</B>: [new_objective.explanation_text]")
to_chat(S, "<B>Objective #[new_objective ? "[2]":"[1]"]</B>: [new_objective2.explanation_text]")
/obj/item/antag_spawner/slaughter_demon/laughter
name = "vial of tickles"
desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures."
icon = 'icons/obj/wizard.dmi'
icon_state = "vial"
color = "#FF69B4" // HOT PINK
veil_msg = "<span class='warning'>You sense an adorable presence lurking just beyond the veil...</span>"
objective_verb = "Hug and Tickle"
demon_type = /mob/living/simple_animal/slaughter/laughter
/obj/item/antag_spawner
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_TINY
var/used = 0
/obj/item/antag_spawner/proc/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
return
/obj/item/antag_spawner/proc/equip_antag(mob/target)
return
///////////WIZARD
/obj/item/antag_spawner/contract
name = "contract"
desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid."
icon = 'icons/obj/wizard.dmi'
icon_state ="scroll2"
/obj/item/antag_spawner/contract/attack_self(mob/user)
user.set_machine(src)
var/dat
if(used)
dat = "<B>You have already summoned your apprentice.</B><BR>"
else
dat = "<B>Contract of Apprenticeship:</B><BR>"
dat += "<I>Using this contract, you may summon an apprentice to aid you on your mission.</I><BR>"
dat += "<I>If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.</I><BR>"
dat += "<B>Which school of magic is your apprentice studying?:</B><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_DESTRUCTION]'>Destruction</A><BR>"
dat += "<I>Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.</I><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_BLUESPACE]'>Bluespace Manipulation</A><BR>"
dat += "<I>Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.</I><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_HEALING]'>Healing</A><BR>"
dat += "<I>Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.</I><BR>"
dat += "<A href='byond://?src=[REF(src)];school=[APPRENTICE_ROBELESS]'>Robeless</A><BR>"
dat += "<I>Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.</I><BR>"
user << browse(dat, "window=radio")
onclose(user, "radio")
return
/obj/item/antag_spawner/contract/Topic(href, href_list)
..()
var/mob/living/carbon/human/H = usr
if(H.stat || H.restrained())
return
if(!ishuman(H))
return 1
if(loc == H || (in_range(src, H) && isturf(loc)))
H.set_machine(src)
if(href_list["school"])
if(used)
to_chat(H, "You already used this contract!")
return
var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
if(candidates.len)
if(used)
to_chat(H, "You already used this contract!")
return
used = 1
var/mob/dead/observer/theghost = pick(candidates)
spawn_antag(theghost.client, get_turf(src), href_list["school"],H.mind)
else
to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")
/obj/item/antag_spawner/contract/spawn_antag(client/C, turf/T, kind ,datum/mind/user)
new /obj/effect/particle_effect/smoke(T)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M)
M.key = C.key
var/datum/mind/app_mind = M.mind
var/datum/antagonist/wizard/apprentice/app = new()
app.master = user
app.school = kind
var/datum/antagonist/wizard/master_wizard = user.has_antag_datum(/datum/antagonist/wizard)
if(master_wizard)
if(!master_wizard.wiz_team)
master_wizard.create_wiz_team()
app.wiz_team = master_wizard.wiz_team
master_wizard.wiz_team.add_member(app_mind)
app_mind.add_antag_datum(app)
//TODO Kill these if possible
app_mind.assigned_role = "Apprentice"
app_mind.special_role = "apprentice"
//
SEND_SOUND(M, sound('sound/effects/magic.ogg'))
///////////BORGS AND OPERATIVES
/obj/item/antag_spawner/nuke_ops
name = "syndicate operative teleporter"
desc = "A single-use teleporter designed to quickly reinforce operatives in the field."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
var/borg_to_spawn
/obj/item/antag_spawner/nuke_ops/proc/check_usability(mob/user)
if(used)
to_chat(user, "<span class='warning'>[src] is out of power!</span>")
return FALSE
if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE))
to_chat(user, "<span class='danger'>AUTHENTICATION FAILURE. ACCESS DENIED.</span>")
return FALSE
if(!user.onSyndieBase())
to_chat(user, "<span class='warning'>[src] is out of range! It can only be used at your base!</span>")
return FALSE
return TRUE
/obj/item/antag_spawner/nuke_ops/attack_self(mob/user)
if(!(check_usability(user)))
return
to_chat(user, "<span class='notice'>You activate [src] and wait for confirmation.</span>")
var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE)
if(nuke_candidates.len)
if(!(check_usability(user)))
return
used = TRUE
var/mob/dead/observer/theghost = pick(nuke_candidates)
spawn_antag(theghost.client, get_turf(src), "syndieborg", user.mind)
do_sparks(4, TRUE, src)
qdel(src)
else
to_chat(user, "<span class='warning'>Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.</span>")
/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
C.prefs.copy_to(M)
M.key = C.key
var/datum/antagonist/nukeop/new_op = new()
new_op.send_to_spawnpoint = FALSE
new_op.nukeop_outfit = /datum/outfit/syndicate/no_crystals
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(creator_op)
M.mind.add_antag_datum(new_op,creator_op.nuke_team)
M.mind.special_role = "Nuclear Operative"
//////SYNDICATE BORG
/obj/item/antag_spawner/nuke_ops/borg_tele
name = "syndicate cyborg teleporter"
desc = "A single-use teleporter designed to quickly reinforce operatives in the field.."
icon = 'icons/obj/device.dmi'
icon_state = "locator"
/obj/item/antag_spawner/nuke_ops/borg_tele/assault
name = "syndicate assault cyborg teleporter"
borg_to_spawn = "Assault"
/obj/item/antag_spawner/nuke_ops/borg_tele/medical
name = "syndicate medical teleporter"
borg_to_spawn = "Medical"
/obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user)
var/mob/living/silicon/robot/R
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(!creator_op)
return
switch(borg_to_spawn)
if("Medical")
R = new /mob/living/silicon/robot/modules/syndicate/medical(T)
else
R = new /mob/living/silicon/robot/modules/syndicate(T) //Assault borg by default
var/brainfirstname = pick(GLOB.first_names_male)
if(prob(50))
brainfirstname = pick(GLOB.first_names_female)
var/brainopslastname = pick(GLOB.last_names)
if(creator_op.nuke_team.syndicate_name) //the brain inside the syndiborg has the same last name as the other ops.
brainopslastname = creator_op.nuke_team.syndicate_name
var/brainopsname = "[brainfirstname] [brainopslastname]"
R.mmi.name = "Man-Machine Interface: [brainopsname]"
R.mmi.brain.name = "[brainopsname]'s brain"
R.mmi.brainmob.real_name = brainopsname
R.mmi.brainmob.name = brainopsname
R.real_name = R.name
R.key = C.key
var/datum/antagonist/nukeop/new_borg = new()
new_borg.send_to_spawnpoint = FALSE
R.mind.add_antag_datum(new_borg,creator_op.nuke_team)
R.mind.special_role = "Syndicate Cyborg"
///////////SLAUGHTER DEMON
/obj/item/antag_spawner/slaughter_demon //Warning edgiest item in the game
name = "vial of blood"
desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures."
icon = 'icons/obj/wizard.dmi'
icon_state = "vial"
var/shatter_msg = "<span class='notice'>You shatter the bottle, no turning back now!</span>"
var/veil_msg = "<span class='warning'>You sense a dark presence lurking just beyond the veil...</span>"
var/mob/living/demon_type = /mob/living/simple_animal/slaughter
var/antag_type = /datum/antagonist/slaughter
/obj/item/antag_spawner/slaughter_demon/attack_self(mob/user)
if(!is_station_level(user.z))
to_chat(user, "<span class='notice'>You should probably wait until you reach the station.</span>")
return
if(used)
return
var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src)
if(demon_candidates.len)
if(used)
return
used = 1
var/mob/dead/observer/theghost = pick(demon_candidates)
spawn_antag(theghost.client, get_turf(src), initial(demon_type.name),user.mind)
to_chat(user, shatter_msg)
to_chat(user, veil_msg)
playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1)
qdel(src)
else
to_chat(user, "<span class='notice'>You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.</span>")
/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, kind = "", datum/mind/user)
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
var/mob/living/simple_animal/slaughter/S = new demon_type(holder)
S.holder = holder
S.key = C.key
S.mind.assigned_role = S.name
S.mind.special_role = S.name
S.mind.add_antag_datum(antag_type)
to_chat(S, S.playstyle_string)
to_chat(S, "<B>You are currently not currently in the same plane of existence as the station. \
Ctrl+Click a blood pool to manifest.</B>")
/obj/item/antag_spawner/slaughter_demon/laughter
name = "vial of tickles"
desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures."
icon = 'icons/obj/wizard.dmi'
icon_state = "vial"
color = "#FF69B4" // HOT PINK
veil_msg = "<span class='warning'>You sense an adorable presence lurking just beyond the veil...</span>"
demon_type = /mob/living/simple_animal/slaughter/laughter
antag_type = /datum/antagonist/slaughter/laughter
+19 -2
View File
@@ -27,8 +27,25 @@
/datum/team/proc/roundend_report()
var/list/report = list()
report += "<b>[name]:</b>"
report += "<span class='header'>[name]:</span>"
report += "The [member_name]s were:"
report += printplayerlist(members)
return report.Join("<br>")
if(objectives.len)
report += "<span class='header'>Team had following objectives:</span>"
var/win = TRUE
var/objective_count = 1
for(var/datum/objective/objective in objectives)
if(objective.check_completion())
report += "<B>Objective #[objective_count]</B>: [objective.explanation_text] <span class='greentext'><B>Success!</span>"
else
report += "<B>Objective #[objective_count]</B>: [objective.explanation_text] <span class='redtext'>Fail.</span>"
win = FALSE
objective_count++
if(win)
report += "<span class='greentext'>The [name] was successful!</span>"
else
report += "<span class='redtext'>The [name] have failed!</span>"
return "<div class='panel redborder'>[report.Join("<br>")]</div>"
@@ -148,7 +148,7 @@
result += printplayer(abductor_mind)
result += printobjectives(abductor_mind)
return result.Join("<br>")
return "<div class='panel redborder'>[result.Join("<br>")]</div>"
/datum/antagonist/abductee
name = "Abductee"
@@ -264,8 +264,8 @@
/obj/item/organ/heart/gland/egg/activate()
to_chat(owner, "<span class='boldannounce'>You lay an egg!</span>")
var/obj/item/reagent_containers/food/snacks/egg/egg = new(owner.drop_location())
egg.reagents.add_reagent("sacid",20)
egg.desc += " It smells bad."
egg.reagents.add_reagent(get_random_reagent_id(), 15)
egg.desc += " It looks weird..."
/obj/item/organ/heart/gland/electric
cooldown_low = 800
@@ -28,7 +28,7 @@
to_chat(user, "<span class='[message_span]'>[cultist_message]</span>")
if(user.mind && user.mind.isholy)
to_chat(user, "<span class='boldannounce'>The power of your faith melts away [src]!</span>")
var/obj/item/ore/slag/wrath = new /obj/item/ore/slag
var/obj/item/stack/ore/slag/wrath = new /obj/item/stack/ore/slag
qdel(src)
user.put_in_active_hand(wrath)
if(is_servant_of_ratvar(user) && prob(20))
@@ -89,13 +89,12 @@
if(cooldowntime > world.time)
to_chat(user, "<span class='cult italic'>The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].</span>")
return
var/choice = alert(user,"You study the schematics etched into the altar...",,"Eldritch Whetstone","Construct Shells","Flask of Unholy Water")
var/choice = alert(user,"You study the schematics etched into the altar...",,"Eldritch Whetstone","Construct Shell","Flask of Unholy Water")
var/list/pickedtype = list()
switch(choice)
if("Eldritch Whetstone")
pickedtype += /obj/item/sharpener/cult
if("Construct Shells")
pickedtype += /obj/structure/constructshell
if("Construct Shell")
pickedtype += /obj/structure/constructshell
if("Flask of Unholy Water")
pickedtype += /obj/item/reagent_containers/glass/beaker/unholywater
-11
View File
@@ -138,21 +138,10 @@ This file contains the cult dagger and rune list code
if(isspaceturf(T))
to_chat(user, "<span class='warning'>You cannot scribe runes in space!</span>")
return FALSE
if(locate(/obj/effect/rune) in T)
to_chat(user, "<span class='cult'>There is already a rune here.</span>")
return FALSE
if(!is_station_level(T.z) && !is_mining_level(T.z))
to_chat(user, "<span class='warning'>The veil is not weak enough here.</span>")
return FALSE
var/area/A = get_area(T)
if(A && !A.blob_allowed)
to_chat(user, "<span class='warning'>There's a passage in [src] specifically forbidding oyster consumption, triple-frying, and building outside of designated cult zones.</span>")
return FALSE
return TRUE
+1 -1
View File
@@ -316,7 +316,7 @@ structure_check() searches for nearby cultist structures required for the invoca
to_chat(M, "<span class='cultlarge'>\"I accept this meager sacrifice.\"</span>")
var/obj/item/device/soulstone/stone = new /obj/item/device/soulstone(get_turf(src))
if(sacrificial.mind)
if(sacrificial.mind && !sacrificial.suiciding)
stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul()
stone.transfer_soul("FORCE", sacrificial, usr)
stone.invisibility = 0

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