diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm
index efec203756c..f7774086d51 100644
--- a/_maps/map_files/Delta/delta.dmm
+++ b/_maps/map_files/Delta/delta.dmm
@@ -15063,7 +15063,11 @@
pixel_x = -1;
pixel_y = 7
},
-/obj/item/gps/mining,
+/obj/item/gps{
+ icon_state = "gps-m";
+ desc = "A positioning system designed to keep an eye on your fellow workers.";
+ gpstag = "CARG0"
+ },
/turf/simulated/floor/plasteel{
icon_state = "neutralfull"
},
@@ -69161,12 +69165,12 @@
dir = 4
},
/obj/effect/decal/warning_stripes/red/hollow,
-/obj/item/storage/box/beanbag,
-/obj/item/storage/box/beanbag{
+/obj/item/ammo_box/shotgun/beanbag,
+/obj/item/ammo_box/shotgun/beanbag{
pixel_x = -3;
pixel_y = 3
},
-/obj/item/storage/box/tranquilizer{
+/obj/item/ammo_box/shotgun/tranquilizer{
pixel_x = -6;
pixel_y = 6
},
@@ -71123,15 +71127,15 @@
c_tag = "HoS Bedroom";
network = list("SS13","Security")
},
-/obj/item/ammo_box/a357{
+/obj/item/ammo_box/speedloader/a357{
pixel_x = -9;
pixel_y = 9
},
-/obj/item/ammo_box/a357{
+/obj/item/ammo_box/speedloader/a357{
pixel_x = -4;
pixel_y = 4
},
-/obj/item/ammo_box/a357,
+/obj/item/ammo_box/speedloader/a357,
/obj/item/clothing/accessory/holster,
/obj/structure/safe{
known_by = list("hos")
@@ -118472,13 +118476,13 @@
dir = 4
},
/obj/effect/decal/warning_stripes/red/hollow,
-/obj/item/storage/box/buck{
+/obj/item/ammo_box/shotgun/buck{
pixel_x = 3
},
-/obj/item/storage/box/buck{
+/obj/item/ammo_box/shotgun/buck{
pixel_y = 3
},
-/obj/item/storage/box/slug{
+/obj/item/ammo_box/shotgun{
pixel_x = -3;
pixel_y = 6
},
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm b/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm
deleted file mode 100644
index 4ee0054d860..00000000000
--- a/_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm
+++ /dev/null
@@ -1,3903 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"aa" = (
-/turf/template_noop,
-/area/template_noop)
-"ab" = (
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"ac" = (
-/turf/simulated/floor/plating/airless,
-/area/space/nearstation)
-"ad" = (
-/obj/structure/lattice,
-/obj/structure/grille/broken,
-/turf/template_noop,
-/area/space/nearstation)
-"ae" = (
-/obj/structure/lattice,
-/obj/structure/grille,
-/turf/template_noop,
-/area/space/nearstation)
-"af" = (
-/obj/structure/grille,
-/turf/simulated/floor/plating/airless,
-/area/space/nearstation)
-"ag" = (
-/turf/simulated/wall/r_wall,
-/area/space/nearstation)
-"ah" = (
-/obj/structure/girder,
-/turf/simulated/floor/plating/airless,
-/area/space/nearstation)
-"ai" = (
-/turf/simulated/wall/r_wall,
-/area/ruin/tcommsat)
-"aj" = (
-/obj/structure/girder,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ak" = (
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"al" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/template_noop,
-/area/space/nearstation)
-"am" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"an" = (
-/obj/machinery/power/apc{
- cell_type = 2500;
- dir = 1;
- name = "Worn-out APC";
- pixel_x = 1;
- pixel_y = 26
- },
-/obj/structure/cable{
- d2 = 4;
- icon_state = "0-4"
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ao" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ap" = (
-/obj/item/stock_parts/cell,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aq" = (
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ar" = (
-/obj/item/coin/clown,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"as" = (
-/obj/structure/bed,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"at" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"au" = (
-/obj/effect/landmark/tiles/damageturf,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"av" = (
-/obj/structure/lattice,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/template_noop,
-/area/space/nearstation)
-"aw" = (
-/obj/structure/cable{
- icon_state = "1-2";
- pixel_y = 0
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ax" = (
-/obj/item/wrench,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ay" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"az" = (
-/obj/structure/lattice,
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/template_noop,
-/area/space/nearstation)
-"aA" = (
-/obj/structure/table,
-/obj/item/paper,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aB" = (
-/obj/structure/table,
-/obj/item/paper_bin,
-/obj/item/pen/blue,
-/obj/machinery/light/small{
- dir = 1
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aC" = (
-/obj/structure/computerframe,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aD" = (
-/obj/structure/table,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aE" = (
-/obj/item/reagent_containers/food/snacks/meat/syntiflesh{
- name = "Cuban Pete-Meat"
- },
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"aF" = (
-/obj/structure/grille,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aG" = (
-/obj/structure/grille/broken,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aH" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aI" = (
-/obj/structure/window/reinforced,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aJ" = (
-/obj/item/stack/cable_coil/cut{
- amount = 1
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aK" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/closet,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aL" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/template_noop,
-/area/space/nearstation)
-"aM" = (
-/obj/item/folder/yellow,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aN" = (
-/obj/structure/bed,
-/obj/effect/decal/remains/human,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aO" = (
-/turf/template_noop,
-/area/space/nearstation)
-"aP" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"aQ" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"aR" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aS" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/template_noop,
-/area/space/nearstation)
-"aT" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/template_noop,
-/area/space/nearstation)
-"aU" = (
-/obj/structure/window/reinforced,
-/turf/template_noop,
-/area/space/nearstation)
-"aV" = (
-/obj/structure/sign/securearea,
-/turf/simulated/wall/r_wall,
-/area/ruin/tcommsat)
-"aW" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aX" = (
-/obj/item/paper/crumpled,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aY" = (
-/obj/structure/chair{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"aZ" = (
-/obj/structure/table,
-/obj/item/storage/fancy/cigarettes,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ba" = (
-/obj/structure/chair{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bb" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bc" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bd" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/item/airlock_electronics,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"be" = (
-/obj/structure/door_assembly/door_assembly_hatch,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bf" = (
-/obj/item/cigbutt,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bg" = (
-/obj/machinery/vending/snack,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bh" = (
-/obj/machinery/vending/cola,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bi" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bj" = (
-/obj/machinery/disposal,
-/obj/structure/disposalpipe/trunk{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bk" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/wall/r_wall,
-/area/ruin/tcommsat)
-"bl" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/wall/r_wall,
-/area/space/nearstation)
-"bm" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/structure/grille/broken,
-/turf/simulated/floor/plating/airless,
-/area/space/nearstation)
-"bn" = (
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/space/nearstation)
-"bo" = (
-/obj/structure/disposaloutlet{
- dir = 4
- },
-/obj/structure/disposalpipe/trunk{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/space/nearstation)
-"bp" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/template_noop,
-/area/space/nearstation)
-"bq" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"br" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/template_noop,
-/area/space/nearstation)
-"bs" = (
-/obj/structure/table,
-/obj/item/radio/off,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bt" = (
-/obj/structure/chair,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bv" = (
-/obj/machinery/door/airlock/hatch,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bw" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"bx" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/item/shard{
- icon_state = "medium"
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"by" = (
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bz" = (
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bA" = (
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bB" = (
-/obj/structure/grille,
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bC" = (
-/obj/machinery/door/airlock/maintenance_hatch,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bD" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bE" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"bF" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/item/stack/rods,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bG" = (
-/obj/item/stack/rods,
-/obj/item/shard{
- icon_state = "medium"
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bH" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bI" = (
-/obj/effect/spawner/window/reinforced{
- useFull = 0
- },
-/turf/simulated/floor/plating,
-/area/ruin/tcommsat)
-"bJ" = (
-/obj/effect/decal/cleanable/blood,
-/obj/item/scalpel{
- pixel_y = 12
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bK" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/item/shard{
- icon_state = "medium"
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bL" = (
-/obj/structure/rack,
-/obj/item/circuitboard/teleporter,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bM" = (
-/obj/item/radio/off,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bN" = (
-/obj/effect/decal/cleanable/blood/oil,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bO" = (
-/obj/effect/decal/cleanable/blood,
-/obj/structure/chair,
-/obj/item/clothing/under/rank/centcom_officer,
-/obj/item/restraints/handcuffs,
-/obj/effect/decal/remains/human,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bP" = (
-/obj/structure/table,
-/obj/item/flashlight/lamp,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bQ" = (
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bR" = (
-/obj/structure/door_assembly/door_assembly_mhatch,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bS" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bT" = (
-/obj/effect/decal/cleanable/blood,
-/obj/item/assembly/signaler,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bU" = (
-/obj/structure/table,
-/obj/item/reagent_containers/syringe/lethal{
- pixel_y = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bV" = (
-/obj/item/storage/toolbox/syndicate,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bW" = (
-/obj/structure/table,
-/obj/item/radio/electropack,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bX" = (
-/obj/structure/table,
-/obj/item/hemostat,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bY" = (
-/obj/structure/table,
-/obj/item/circular_saw,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"bZ" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/item/stack/rods,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ca" = (
-/obj/structure/window/reinforced{
- dir = 8
- },
-/obj/structure/window/reinforced,
-/turf/template_noop,
-/area/space/nearstation)
-"cb" = (
-/obj/structure/window/reinforced,
-/obj/structure/lattice,
-/turf/template_noop,
-/area/space/nearstation)
-"cc" = (
-/obj/effect/decal/warning_stripes/northwest,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cd" = (
-/obj/effect/decal/warning_stripes/northwestcorner,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ce" = (
-/obj/effect/decal/warning_stripes/north,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cf" = (
-/obj/effect/decal/warning_stripes/northeast,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cg" = (
-/obj/structure/window/reinforced{
- dir = 4
- },
-/obj/structure/window/reinforced,
-/turf/template_noop,
-/area/space/nearstation)
-"ch" = (
-/obj/item/paper/crumpled,
-/obj/effect/decal/warning_stripes/west,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ci" = (
-/obj/item/stack/rods,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cj" = (
-/obj/effect/decal/warning_stripes/east,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"ck" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cl" = (
-/obj/effect/decal/warning_stripes/southwest,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cm" = (
-/obj/machinery/light/small,
-/obj/item/paper,
-/obj/effect/decal/warning_stripes/southwestcorner,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cn" = (
-/obj/effect/decal/warning_stripes/southeast,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"co" = (
-/obj/item/shard{
- icon_state = "medium"
- },
-/turf/template_noop,
-/area/space/nearstation)
-"cp" = (
-/obj/structure/lattice,
-/obj/item/stack/rods,
-/obj/item/shard{
- icon_state = "medium"
- },
-/turf/template_noop,
-/area/space/nearstation)
-"cq" = (
-/obj/structure/grille,
-/obj/structure/window/reinforced{
- dir = 1
- },
-/obj/structure/window/reinforced,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cr" = (
-/obj/structure/grille/broken,
-/turf/template_noop,
-/area/space/nearstation)
-"cs" = (
-/obj/machinery/door/airlock/hatch,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"ct" = (
-/obj/effect/decal/warning_stripes/northwest,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cu" = (
-/obj/effect/decal/warning_stripes/north,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cv" = (
-/obj/effect/decal/warning_stripes/northeast,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cw" = (
-/obj/effect/decal/warning_stripes/northwestcorner,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cx" = (
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cy" = (
-/obj/effect/decal/warning_stripes/northeastcorner,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cz" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cA" = (
-/obj/structure/sign/vacuum,
-/turf/simulated/wall/r_wall,
-/area/ruin/tcommsat)
-"cB" = (
-/obj/structure/closet/emcloset,
-/obj/effect/decal/warning_stripes/northwest,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cC" = (
-/obj/item/paper/crumpled,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cD" = (
-/obj/structure/closet/malf/suits,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cE" = (
-/obj/structure/door_assembly/door_assembly_ext,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-"cF" = (
-/obj/machinery/door/airlock/external,
-/turf/simulated/floor/plating,
-/area/ruin/tcommsat)
-"cG" = (
-/obj/effect/decal/warning_stripes/west,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cH" = (
-/obj/item/crowbar,
-/turf/simulated/floor/plating/airless,
-/area/space/nearstation)
-"cI" = (
-/obj/structure/closet/crate,
-/obj/item/clothing/glasses/night,
-/obj/effect/decal/warning_stripes/southwest,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cJ" = (
-/obj/effect/decal/warning_stripes/southwestcorner,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cK" = (
-/obj/item/storage/toolbox/electrical{
- pixel_x = 1;
- pixel_y = -1
- },
-/obj/effect/decal/warning_stripes/southwest,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cL" = (
-/obj/effect/decal/warning_stripes/south,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cM" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/effect/decal/warning_stripes/southeast,
-/turf/simulated/floor/plasteel,
-/area/ruin/tcommsat)
-"cN" = (
-/obj/structure/computerframe,
-/turf/simulated/floor/plating,
-/area/ruin/tcommsat)
-"cO" = (
-/obj/machinery/teleport/station,
-/turf/simulated/floor/plating,
-/area/ruin/tcommsat)
-"cP" = (
-/obj/machinery/teleport/hub,
-/turf/simulated/floor/plating,
-/area/ruin/tcommsat)
-"cQ" = (
-/obj/item/gps/ruin{
- gpstag = "Faint Radio Signal"
- },
-/turf/simulated/wall/r_wall,
-/area/ruin/tcommsat)
-"dN" = (
-/obj/structure/table,
-/obj/item/melee/bigiron,
-/turf/simulated/floor/plating/airless,
-/area/ruin/tcommsat)
-
-(1,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(2,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(3,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(4,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(5,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(6,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-ab
-ab
-aa
-aa
-aa
-aa
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(7,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-ab
-ab
-aa
-aa
-aa
-ab
-ab
-ab
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(8,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-ab
-ab
-aa
-aa
-aa
-ab
-ab
-ab
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(9,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-ac
-ac
-ab
-aa
-aa
-aa
-ab
-ac
-ab
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(10,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-ac
-ac
-ac
-aa
-aa
-aa
-ac
-ac
-ab
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(11,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-aa
-ab
-ac
-ac
-aa
-aa
-aa
-ac
-ac
-ab
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(12,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-aa
-ab
-ac
-ac
-ac
-ac
-ac
-ac
-ac
-ab
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(13,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-ab
-aa
-aa
-aa
-aa
-ac
-aa
-aa
-aa
-aa
-ae
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(14,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ae
-ae
-ae
-ad
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-af
-ae
-ae
-ae
-ae
-ae
-ae
-ad
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(15,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-ae
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ah
-ac
-ac
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(16,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-ae
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ah
-ab
-ab
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(17,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ag
-ag
-ag
-ab
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(18,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ah
-ag
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-ah
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(19,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ah
-ag
-aa
-ab
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-ah
-ag
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(20,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-ag
-al
-av
-al
-aO
-al
-al
-bw
-al
-al
-aO
-al
-bw
-al
-aO
-al
-aO
-bw
-al
-al
-aO
-aa
-ab
-aa
-ag
-ag
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(21,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ah
-ai
-am
-am
-aH
-aP
-bb
-aR
-bx
-bF
-am
-aR
-bD
-aR
-aR
-bD
-aR
-bZ
-bK
-bD
-aH
-br
-aa
-ab
-aa
-ag
-ag
-ae
-ad
-ac
-ac
-cH
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(22,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ag
-ai
-an
-ak
-aI
-aQ
-bc
-bp
-az
-bE
-bE
-bE
-aL
-az
-aL
-aO
-aL
-aL
-az
-ca
-aI
-br
-aa
-ab
-aa
-ag
-ag
-ae
-ac
-ac
-ac
-ac
-ac
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(23,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-ag
-ai
-ao
-aw
-aJ
-aR
-aI
-bq
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-cb
-bc
-bq
-ab
-ab
-aa
-ag
-ag
-ae
-ac
-ac
-ac
-ac
-ac
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(24,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ad
-ae
-ae
-ae
-ag
-ai
-ap
-ax
-aI
-aS
-bc
-br
-ai
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-aU
-bc
-br
-aa
-cp
-ai
-ai
-ai
-ae
-ae
-cQ
-cE
-ai
-ae
-ae
-ad
-ae
-ae
-ae
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-"}
-(25,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-ae
-ag
-ai
-aq
-ay
-aK
-aT
-aI
-br
-ai
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-aO
-bc
-br
-ai
-cq
-ai
-ai
-ai
-ae
-ae
-ai
-ak
-ai
-ae
-ae
-ae
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(26,1,1) = {"
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-aa
-ab
-aa
-ae
-ag
-ai
-ai
-az
-aL
-aU
-bd
-br
-ai
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-ai
-bv
-ai
-ai
-au
-ak
-ai
-ai
-ae
-ai
-cA
-cF
-cA
-ai
-ae
-ae
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(27,1,1) = {"
-aa
-aa
-ab
-ab
-ac
-ac
-ac
-ab
-ac
-ab
-ae
-ag
-ai
-ai
-ai
-ai
-aV
-be
-ai
-ai
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-cc
-ch
-cl
-ai
-ak
-ak
-ai
-ai
-ai
-ai
-cB
-cG
-cI
-ai
-ai
-ae
-ae
-ab
-ac
-ab
-ab
-ac
-ac
-ab
-aa
-aa
-"}
-(28,1,1) = {"
-aa
-aa
-aa
-ab
-ab
-aa
-aa
-aa
-ac
-aa
-ae
-ag
-ai
-ai
-ak
-ak
-aW
-ak
-ak
-by
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-cd
-ak
-cm
-ai
-ai
-ak
-ai
-ai
-ai
-cz
-cx
-cx
-cJ
-cK
-ai
-ai
-ae
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(29,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-aa
-ae
-ag
-ai
-ai
-ak
-aM
-ak
-ak
-bs
-bz
-bG
-ak
-ak
-ak
-bN
-ak
-dN
-ak
-ak
-ai
-au
-ak
-au
-ai
-ak
-ak
-ai
-ct
-cw
-cx
-cx
-cx
-cx
-cL
-cN
-ai
-ae
-aa
-ac
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(30,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-ac
-af
-ag
-ai
-ai
-aA
-ak
-aX
-bf
-bt
-bA
-ak
-ak
-ak
-ak
-bO
-bf
-bW
-ak
-ak
-ai
-ce
-ak
-au
-au
-au
-ak
-cs
-cu
-cx
-cx
-cx
-cx
-cx
-cL
-cO
-ai
-af
-ac
-ac
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(31,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-aa
-ae
-ag
-ai
-ai
-aB
-ak
-ak
-ak
-ak
-bA
-ak
-ak
-ak
-ak
-ak
-bT
-bX
-ak
-ak
-ai
-cd
-ak
-ak
-aj
-ak
-ak
-ai
-cv
-cy
-cx
-cx
-cx
-cx
-cL
-cP
-ai
-ae
-aa
-ac
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(32,1,1) = {"
-aa
-aa
-ab
-ab
-ac
-ac
-ab
-ab
-ac
-aa
-ad
-ag
-ai
-ai
-aC
-ak
-ak
-ak
-ak
-bB
-ak
-ak
-bJ
-bM
-bP
-bU
-bY
-ak
-ak
-ai
-au
-ci
-au
-ai
-ai
-at
-ai
-ai
-ai
-cx
-cC
-cx
-cx
-cM
-ai
-ai
-ae
-aa
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-"}
-(33,1,1) = {"
-aa
-aa
-ab
-ab
-ab
-ac
-ac
-ab
-ac
-ab
-ae
-ag
-ai
-ai
-aD
-aC
-aC
-ai
-bC
-ai
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-cf
-cj
-cn
-ai
-ak
-ak
-ai
-ai
-ai
-ai
-cD
-cx
-cD
-ai
-ai
-ae
-ae
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-"}
-(34,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ab
-aa
-ae
-ag
-ai
-ai
-ai
-ai
-ai
-ai
-ak
-bC
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-ai
-bv
-ai
-ai
-aC
-ak
-ai
-ai
-ae
-ai
-ai
-ai
-ai
-ai
-ae
-ae
-aa
-aa
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(35,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-ae
-ag
-ai
-ar
-aE
-aE
-aE
-ai
-ai
-ai
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-aU
-bc
-br
-ai
-bI
-ai
-ai
-ai
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(36,1,1) = {"
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-ad
-ae
-ae
-ae
-ag
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ak
-ai
-aU
-aI
-br
-aa
-ab
-ai
-ai
-ak
-ae
-ae
-ad
-ae
-ae
-ae
-ae
-ad
-ae
-ab
-ae
-ab
-ab
-ab
-ab
-ab
-ab
-ab
-"}
-(37,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-ag
-ai
-as
-aF
-aN
-aF
-bg
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-aU
-bc
-br
-aa
-ab
-aa
-ag
-ab
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(38,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ae
-ag
-ai
-at
-aG
-aF
-aF
-bh
-ai
-bw
-bw
-bw
-bw
-bw
-bw
-al
-aO
-al
-al
-bw
-cg
-bc
-co
-aa
-ab
-aa
-ah
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(39,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ag
-aj
-au
-ak
-ak
-ak
-ak
-bv
-bD
-bD
-bH
-bK
-bD
-am
-bD
-bD
-bD
-bH
-bD
-bD
-ck
-br
-aa
-ab
-aa
-ac
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(40,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ah
-ak
-au
-au
-ak
-aY
-bf
-ai
-bE
-aO
-aL
-aL
-aU
-bQ
-br
-aL
-aL
-aL
-az
-aL
-aL
-aO
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(41,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ac
-ab
-ak
-au
-au
-aZ
-bi
-ai
-ab
-aa
-bI
-bI
-bI
-bR
-bI
-bI
-bI
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(42,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ak
-au
-au
-ba
-bj
-ai
-ab
-ab
-bI
-ak
-ak
-ak
-ak
-ak
-bI
-ab
-ab
-ab
-ab
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-ac
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(43,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ab
-ak
-ai
-ai
-bk
-ai
-ab
-aa
-bI
-ak
-ak
-ak
-bV
-ak
-bI
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-ac
-ab
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(44,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ac
-ah
-ag
-ag
-bl
-ag
-ag
-ag
-ai
-bL
-aD
-bS
-ak
-aD
-ai
-ag
-ag
-ah
-ac
-ab
-aa
-aa
-aa
-aa
-ab
-ab
-ah
-ac
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(45,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-ah
-ag
-ag
-ag
-bl
-ag
-ag
-ag
-ai
-ai
-ai
-ai
-ai
-ai
-ai
-ag
-ah
-ab
-ab
-aa
-aa
-aa
-aa
-aa
-ab
-ag
-ag
-ag
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(46,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ad
-ae
-ae
-ae
-bm
-ae
-ae
-ae
-ag
-ag
-ag
-ag
-ag
-ag
-ag
-ae
-ae
-ae
-ad
-aa
-aa
-aa
-ab
-ac
-ah
-ag
-ag
-ae
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(47,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-bn
-ae
-ae
-ae
-ae
-ae
-ae
-af
-ae
-ae
-ae
-ae
-ae
-ae
-aa
-aa
-ab
-ab
-ac
-ah
-ag
-ag
-ae
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(48,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-bo
-ad
-ae
-aa
-ab
-aa
-aa
-ac
-aa
-aa
-ab
-aa
-ae
-ae
-aa
-aa
-aa
-cr
-ae
-ae
-ad
-ae
-ae
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(49,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-ab
-ac
-ab
-ab
-ab
-ab
-ac
-ac
-ab
-aa
-ad
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(50,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(51,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-ab
-ab
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(52,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
-(53,1,1) = {"
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-ab
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-aa
-"}
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/crashedipcship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/crashedipcship.dmm
index 397f8943d27..142f4b0393c 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/crashedipcship.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/crashedipcship.dmm
@@ -473,7 +473,7 @@
icon_state = "grass_edge_medium";
name = "grass"
},
-/obj/item/ammo_box/caps,
+/obj/item/ammo_box/speedloader/caps,
/turf/simulated/floor/plating/asteroid,
/area/ruin/space/crashedipcship/asteroid)
"iG" = (
@@ -863,7 +863,7 @@
name = "grass"
},
/obj/structure/flora/rock/pile,
-/obj/item/ammo_box/caps,
+/obj/item/ammo_box/speedloader/caps,
/turf/simulated/floor/beach/water,
/area/ruin/space/crashedipcship/asteroid)
"oI" = (
@@ -1437,7 +1437,7 @@
icon_state = "grass_edge_medium";
name = "grass"
},
-/obj/item/ammo_box/caps,
+/obj/item/ammo_box/speedloader/caps,
/turf/simulated/floor/plating/asteroid,
/area/ruin/space/crashedipcship/asteroid)
"yi" = (
@@ -1492,7 +1492,7 @@
icon_state = "grass_edge_medium";
name = "grass"
},
-/obj/item/ammo_box/caps,
+/obj/item/ammo_box/speedloader/caps,
/turf/simulated/floor/beach/water,
/area/ruin/space/crashedipcship/asteroid)
"yD" = (
@@ -2767,7 +2767,7 @@
/area/ruin/space/crashedipcship/asteroid)
"Tq" = (
/obj/structure/spacevine,
-/obj/item/ammo_box/caps,
+/obj/item/ammo_box/speedloader/caps,
/turf/simulated/floor/grass,
/area/ruin/space/crashedipcship/asteroid)
"Tw" = (
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/spaceprison.dmm b/_maps/map_files/RandomRuins/SpaceRuins/spaceprison.dmm
new file mode 100644
index 00000000000..fb4ba7b4b9d
--- /dev/null
+++ b/_maps/map_files/RandomRuins/SpaceRuins/spaceprison.dmm
@@ -0,0 +1,6231 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ab" = (
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"ac" = (
+/turf/simulated/floor/plating/airless,
+/area/space/nearstation)
+"ad" = (
+/obj/structure/lattice,
+/obj/structure/grille/broken,
+/turf/template_noop,
+/area/space/nearstation)
+"ae" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/template_noop,
+/area/space/nearstation)
+"af" = (
+/obj/machinery/power/tracker,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "solarpanel"
+ },
+/area/space/nearstation)
+"ag" = (
+/turf/simulated/wall/r_wall,
+/area/space/nearstation)
+"ah" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"ai" = (
+/turf/simulated/wall/r_wall,
+/area/ruin/spaceprison)
+"aj" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"al" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"am" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/effect/decal/warning_stripes/southeast,
+/obj/item/stack/cable_coil/cut{
+ amount = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"an" = (
+/obj/machinery/power/solar{
+ name = "South-East Solar Panel"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "solarpanel"
+ },
+/area/space/nearstation)
+"ao" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"ap" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"aq" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"ar" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"as" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"at" = (
+/obj/machinery/power/solar{
+ name = "South-East Solar Panel"
+ },
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "solarpanel"
+ },
+/area/space/nearstation)
+"au" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"av" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"aw" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"ax" = (
+/obj/machinery/power/solar{
+ name = "South-East Solar Panel"
+ },
+/obj/structure/cable,
+/turf/simulated/floor/plasteel/airless{
+ icon_state = "solarpanel"
+ },
+/area/space/nearstation)
+"ay" = (
+/obj/structure/grille,
+/turf/simulated/floor/plating/airless,
+/area/space/nearstation)
+"aA" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating/airless,
+/area/space/nearstation)
+"aB" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ frequency = 1379;
+ id_tag = "solar_space_prison_pump"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"aC" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 1
+ },
+/obj/machinery/door/airlock/external,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"aD" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/door_assembly/door_assembly_ext,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"aE" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"aF" = (
+/obj/structure/rack,
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/item/airlock_electronics{
+ pixel_x = -3;
+ pixel_y = 1
+ },
+/obj/item/apc_electronics{
+ pixel_x = 1;
+ pixel_y = -2
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"aG" = (
+/obj/structure/table,
+/obj/item/paper_bin,
+/obj/item/pen/blue,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"aJ" = (
+/obj/structure/table,
+/obj/item/storage/fancy/cigarettes/cigpack_random,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"aK" = (
+/obj/structure/computerframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"aL" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"aM" = (
+/obj/machinery/vending/cola,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"aN" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"aO" = (
+/turf/template_noop,
+/area/space/nearstation)
+"aP" = (
+/obj/structure/table,
+/obj/item/storage/fancy/cigarettes,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"aR" = (
+/obj/machinery/atmospherics/unary/portables_connector{
+ dir = 4
+ },
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/effect/decal/warning_stripes/northwest,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"aT" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 9
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/decal/warning_stripes/north,
+/obj/effect/landmark/tiles/damageturf,
+/obj/item/stack/cable_coil/cut{
+ amount = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"aU" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"aW" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"aZ" = (
+/obj/item/storage/toolbox/mechanical,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "yellowfull"
+ },
+/area/ruin/spaceprison)
+"ba" = (
+/obj/structure/rack,
+/obj/item/circuitboard/teleporter{
+ pixel_x = 4;
+ pixel_y = -4
+ },
+/obj/item/circuitboard/tcomms/core{
+ pixel_x = -5;
+ pixel_y = 3
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"bb" = (
+/obj/machinery/power/port_gen/pacman,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"bc" = (
+/obj/structure/closet/toolcloset,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"bd" = (
+/obj/machinery/power/smes,
+/obj/effect/decal/warning_stripes/west,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"be" = (
+/obj/item/cigbutt,
+/obj/item/paper/crumpled,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"bf" = (
+/obj/structure/cable,
+/obj/machinery/power/terminal{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bg" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"bh" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"bi" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable,
+/turf/simulated/floor/plating/airless,
+/area/ruin/spaceprison)
+"bj" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bl" = (
+/obj/structure/girder,
+/turf/simulated/floor/plating/airless,
+/area/space/nearstation)
+"bm" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_y = -30
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"bn" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"bo" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Space Prison Engineering";
+ req_access = list(12, 63)
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"bp" = (
+/obj/item/stack/sheet/mineral/plasma{
+ amount = 14
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "yellowfull"
+ },
+/area/ruin/spaceprison)
+"br" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"bs" = (
+/obj/structure/table,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "grimy"
+ },
+/area/ruin/spaceprison)
+"bt" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed,
+/obj/effect/decal/cleanable/dust,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bv" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bw" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"bx" = (
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/obj/machinery/power/solar_control{
+ id = "spaceprisonsolar";
+ name = "Space Prison Solar Control"
+ },
+/obj/effect/decal/warning_stripes/northeast,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bB" = (
+/obj/machinery/power/apc/worn_out{
+ pixel_y = -24
+ },
+/obj/effect/decal/warning_stripes/southwest,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bD" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bE" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "grimy"
+ },
+/area/ruin/spaceprison)
+"bF" = (
+/obj/effect/decal/warning_stripes/east,
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bI" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/chair/stool,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"bJ" = (
+/obj/structure/table/reinforced,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/door_control{
+ id = "spaceprisonnot";
+ name = "Space Prison North Control";
+ pixel_x = 6;
+ pixel_y = 7
+ },
+/obj/machinery/door_control{
+ id = "spaceprisonsot";
+ name = "Space Prison Sorth Control";
+ pixel_x = 6;
+ pixel_y = -3
+ },
+/obj/machinery/door_control{
+ id = "spaceprisonnot";
+ name = "North Doors Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -6;
+ pixel_y = 7;
+ specialfunctions = 4
+ },
+/obj/machinery/door_control{
+ id = "spaceprisonsot";
+ name = "Sorth Doors Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_x = -6;
+ pixel_y = -3;
+ specialfunctions = 4
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"bK" = (
+/obj/effect/decal/cleanable/dust,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"bL" = (
+/obj/item/stock_parts/cell,
+/obj/effect/decal/warning_stripes/south,
+/obj/effect/decal/cleanable/dust,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bM" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"bN" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Space Prison Engineering";
+ req_access = list(12, 63)
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"bO" = (
+/obj/item/twohanded/required/kirbyplants,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"bR" = (
+/obj/structure/lattice,
+/turf/template_noop,
+/area/template_noop)
+"bS" = (
+/obj/effect/decal/cleanable/dust,
+/obj/structure/chair/stool,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"bT" = (
+/obj/structure/bed,
+/obj/item/bedsheet/blue,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/wood,
+/area/ruin/spaceprison)
+"bU" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"bV" = (
+/obj/structure/bed,
+/obj/item/bedsheet/black,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/wood,
+/area/ruin/spaceprison)
+"bW" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"bX" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/item/paper/crumpled/bloody,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"bY" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced,
+/turf/template_noop,
+/area/space/nearstation)
+"bZ" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ca" = (
+/obj/structure/bed,
+/obj/item/bedsheet/fluff/hugosheet,
+/turf/simulated/floor/wood,
+/area/ruin/spaceprison)
+"cb" = (
+/obj/effect/decal/cleanable/fungus,
+/turf/simulated/wall/r_wall,
+/area/ruin/spaceprison)
+"cc" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/obj/item/stack/cable_coil/cut{
+ amount = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ce" = (
+/obj/structure/chair/office/light{
+ dir = 1
+ },
+/obj/item/paper/crumpled/hotel_scrap_6,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"cg" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"ch" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"cj" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ck" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/item/stack/rods,
+/obj/item/stack/cable_coil/cut{
+ amount = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cl" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/table,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cm" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/table,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cn" = (
+/obj/machinery/door/window/brigdoor{
+ id = "Ruin Cell 1";
+ name = "Cell 1";
+ req_access = list(2)
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"co" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/door_timer/cell_1{
+ id = "Ruin Cell 1";
+ pixel_x = -32;
+ pixel_y = 0
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cp" = (
+/obj/structure/table,
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/item/folder,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"cq" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cr" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ct" = (
+/obj/effect/decal/cleanable/dust,
+/obj/machinery/tcomms/relay,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"cu" = (
+/obj/machinery/door/airlock/security/glass{
+ id_tag = "spaceprisonnot";
+ name = "Space Prison";
+ req_access = list(63)
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"cv" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"cB" = (
+/obj/machinery/light/small,
+/obj/item/twohanded/required/kirbyplants,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"cC" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cD" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/closet/emcloset,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"cG" = (
+/obj/structure/bed/roller,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"cH" = (
+/obj/effect/decal/cleanable/ash,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"cI" = (
+/obj/machinery/door/window/brigdoor{
+ dir = 8;
+ id = "Ruin Cell 6";
+ name = "Cell 6";
+ req_access = list(2)
+ },
+/obj/structure/wryn/floor,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cJ" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/effect/decal/warning_stripes/southwestcorner,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"cK" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"cM" = (
+/obj/effect/decal/warning_stripes/southwestcorner,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"cN" = (
+/obj/item/paper/crumpled,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "vault"
+ },
+/area/ruin/spaceprison)
+"cO" = (
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "vault"
+ },
+/area/ruin/spaceprison)
+"cP" = (
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"cQ" = (
+/obj/machinery/door_control{
+ desc = "A remote control-switch for the pod doors.";
+ id = "spaceprisonpod";
+ name = "Pod Door Control";
+ pixel_x = 25;
+ pixel_y = 23
+ },
+/turf/simulated/floor/plating/airless,
+/area/ruin/spaceprison)
+"cS" = (
+/obj/structure/closet/toolcloset,
+/obj/effect/decal/cleanable/dust,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"dz" = (
+/obj/effect/decal/cleanable/dust,
+/obj/machinery/vending/snack,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"dN" = (
+/obj/effect/decal/cleanable/dust,
+/obj/machinery/blackbox_recorder,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"dP" = (
+/obj/structure/chair/office/light,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"ea" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"eb" = (
+/obj/structure/table,
+/obj/item/storage/firstaid/ancient{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/storage/firstaid/o2,
+/obj/machinery/defibrillator_mount/loaded{
+ pixel_y = 24
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"ed" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/door_timer/cell_3{
+ id = "Ruin Cell 3";
+ pixel_x = -32;
+ pixel_y = 0
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"el" = (
+/obj/structure/computerframe,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"et" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"eC" = (
+/obj/structure/spacepoddoor,
+/obj/machinery/door/poddoor/multi_tile/two_tile_ver{
+ id_tag = "spaceprisonpod"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"eG" = (
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"eO" = (
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"eS" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"fb" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/effect/decal/remains/human,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"fc" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/wood,
+/area/ruin/spaceprison)
+"ft" = (
+/obj/machinery/door/airlock/security/glass{
+ name = "Space Prison Armory";
+ req_access = list(63);
+ security_level = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"fv" = (
+/obj/machinery/door/airlock/glass{
+ name = "Space Prison Dorm";
+ req_access = list(1)
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"fE" = (
+/obj/effect/decal/cleanable/dust,
+/obj/item/paper/crumpled,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"fK" = (
+/obj/structure/window/reinforced,
+/obj/effect/decal/cleanable/dust,
+/obj/structure/wryn/floor,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"fT" = (
+/obj/structure/window/reinforced,
+/obj/structure/toilet{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"fV" = (
+/obj/effect/decal/warning_stripes/east,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"gc" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"gd" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"gi" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"gj" = (
+/obj/structure/toilet{
+ dir = 8
+ },
+/obj/structure/wryn/floor,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"gm" = (
+/obj/item/paper/crumpled,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"gr" = (
+/obj/structure/table/reinforced,
+/obj/effect/spawner/lootdrop/officetoys,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"gy" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/rack/gunrack,
+/obj/item/gun/energy/gun,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/windoor_assembly{
+ dir = 2
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"gD" = (
+/obj/structure/door_assembly/door_assembly_ext,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"gE" = (
+/obj/structure/table/reinforced,
+/obj/item/flashlight/lamp,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"hf" = (
+/obj/structure/window/reinforced,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"hl" = (
+/obj/effect/decal/warning_stripes/east,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"hq" = (
+/obj/structure/dispenser/oxygen,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"hI" = (
+/obj/structure/bed,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"hK" = (
+/obj/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"hR" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"iz" = (
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"iH" = (
+/obj/effect/decal/cleanable/ash,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"iR" = (
+/obj/machinery/bodyscanner{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"iS" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"jf" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed,
+/obj/structure/wryn/floor,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ji" = (
+/obj/structure/closet/secure_closet/guncabinet,
+/obj/effect/spawner/lootdrop/maintenance/tripple,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"jk" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable,
+/turf/simulated/floor/plating/airless,
+/area/ruin/spaceprison)
+"jy" = (
+/obj/effect/decal/warning_stripes/west,
+/obj/machinery/door_control{
+ desc = "A remote control-switch for the pod doors.";
+ id = "spaceprisonpod";
+ name = "Pod Door Control";
+ pixel_x = -25;
+ pixel_y = 23
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"jO" = (
+/obj/structure/sign/vacuum/external,
+/turf/simulated/wall/r_wall,
+/area/ruin/spaceprison)
+"jU" = (
+/obj/item/gps/ruin{
+ gpstag = "Faint Radio Signal"
+ },
+/turf/simulated/wall/r_wall,
+/area/ruin/spaceprison)
+"jX" = (
+/obj/effect/decal/cleanable/dust,
+/obj/item/twohanded/required/kirbyplants,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"kh" = (
+/obj/structure/computerframe,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"kp" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger{
+ pixel_x = 1;
+ pixel_y = 3
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"kE" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"kH" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"kP" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/closet/secure_closet/brig{
+ id = "Ruin Cell 1";
+ name = "Cell 1 Locker"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"kR" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"lD" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/reagent_containers/iv_bag/bloodsynthetic/nitrogenis,
+/obj/item/reagent_containers/iv_bag/bloodsynthetic/nitrogenis,
+/obj/item/reagent_containers/iv_bag/bloodsynthetic/oxygenis,
+/obj/item/reagent_containers/iv_bag/bloodsynthetic/oxygenis,
+/obj/machinery/iv_drip,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"lI" = (
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"lK" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"lL" = (
+/obj/effect/decal/warning_stripes/southwestcorner,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"mK" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"mZ" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"ni" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"np" = (
+/obj/machinery/door/airlock/external,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"nS" = (
+/obj/machinery/suit_storage_unit/security,
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"nT" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/lattice,
+/obj/structure/window/reinforced,
+/turf/template_noop,
+/area/space/nearstation)
+"oc" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"of" = (
+/obj/effect/decal/cleanable/dust,
+/obj/structure/chair/office/light{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"op" = (
+/obj/machinery/door/airlock/glass{
+ name = "Space Prison Dorm";
+ req_access = list(1)
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"oq" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"pf" = (
+/obj/structure/table/reinforced,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"pz" = (
+/obj/effect/spawner/lootdrop/maintenance/tripple,
+/obj/structure/closet/secure_closet/guncabinet,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"pH" = (
+/obj/structure/grille,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"pK" = (
+/obj/effect/decal/cleanable/vomit,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"pP" = (
+/obj/structure/grille/broken,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/item/stack/rods{
+ amount = 2
+ },
+/obj/structure/cable,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"pW" = (
+/obj/machinery/teleport/station,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"qp" = (
+/obj/item/paper/crumpled/hotel_scrap_1,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"qN" = (
+/obj/structure/rack{
+ dir = 8;
+ layer = 2.9
+ },
+/obj/item/grenade/barrier{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/grenade/barrier,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"qP" = (
+/obj/machinery/vending/boozeomat,
+/turf/simulated/floor/plasteel{
+ icon_state = "grimy"
+ },
+/area/ruin/spaceprison)
+"qR" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"rh" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"rl" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/machinery/door_timer/cell_5{
+ pixel_x = 32;
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ru" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "grimy"
+ },
+/area/ruin/spaceprison)
+"rx" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"se" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/brig{
+ id = "Ruin Cell 6";
+ name = "Cell 6 Locker"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"sw" = (
+/obj/effect/decal/cleanable/blood,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"sx" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"sE" = (
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"sQ" = (
+/obj/structure/table,
+/turf/simulated/floor/plasteel{
+ icon_state = "grimy"
+ },
+/area/ruin/spaceprison)
+"tc" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/emergency,
+/obj/item/clothing/glasses/night,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"tz" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"tH" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/template_noop,
+/area/space/nearstation)
+"tJ" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"tV" = (
+/obj/machinery/door/window/brigdoor{
+ dir = 8;
+ id = "Ruin Cell 4";
+ name = "Cell 4";
+ req_access = list(2)
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"uL" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkredcorners"
+ },
+/area/ruin/spaceprison)
+"uO" = (
+/obj/effect/decal/warning_stripes/northwestcorner,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"va" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"vk" = (
+/obj/structure/table/reinforced,
+/obj/item/taperecorder,
+/obj/item/storage/box/tapes,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"vm" = (
+/obj/structure/window/reinforced,
+/obj/structure/closet/crate/medical,
+/obj/machinery/vending/wallmed{
+ pixel_x = -25
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"vs" = (
+/obj/machinery/door/airlock/security{
+ name = "Security Checkpoint";
+ req_access = list(1)
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"vE" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/turf/simulated/floor/plating/airless,
+/area/ruin/spaceprison)
+"vN" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"vY" = (
+/obj/machinery/door/window/brigdoor{
+ dir = 8;
+ id = "Ruin Cell 5";
+ name = "Cell 5";
+ req_access = list(2)
+ },
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"vZ" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/table,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"wm" = (
+/obj/structure/closet/secure_closet/guncabinet{
+ anchored = 1;
+ name = "Tasers";
+ req_access = list(1)
+ },
+/obj/item/gun/energy/gun/advtaser{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkredcorners"
+ },
+/area/ruin/spaceprison)
+"wU" = (
+/obj/structure/window/reinforced,
+/obj/structure/closet/secure_closet/brig{
+ id = "Ruin Cell 2";
+ name = "Cell 2 Locker"
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"xb" = (
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"xy" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/item/twohanded/required/kirbyplants,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"xB" = (
+/obj/machinery/door/window/brigdoor{
+ name = "Prison Med Door";
+ req_access = list(63)
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"xG" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 12
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"xW" = (
+/obj/effect/landmark/tiles/damageturf,
+/obj/machinery/light_construct/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"xZ" = (
+/obj/structure/table/reinforced,
+/obj/item/folder/red,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"yd" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "grimy"
+ },
+/area/ruin/spaceprison)
+"yv" = (
+/obj/structure/window/reinforced,
+/obj/structure/toilet{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"yw" = (
+/obj/structure/dresser,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"yH" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 12
+ },
+/obj/structure/wryn/floor,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"yJ" = (
+/obj/item/paper/crumpled,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"zj" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"zk" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/cable,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"zr" = (
+/obj/machinery/door/window/brigdoor{
+ id = "Ruin Cell 3";
+ name = "Cell 3";
+ req_access = list(2)
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"zt" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "yellow"
+ },
+/area/ruin/spaceprison)
+"zO" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/brig{
+ id = "Ruin Cell 4";
+ name = "Cell 4 Locker"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Aa" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/door_timer/cell_2{
+ id = "Ruin Cell 2";
+ pixel_x = -32;
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Ai" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/cable,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"An" = (
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Ao" = (
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "vault"
+ },
+/area/ruin/spaceprison)
+"Aq" = (
+/obj/structure/rack,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -1;
+ pixel_y = 1
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"As" = (
+/obj/structure/table/reinforced,
+/obj/item/paper_bin,
+/obj/item/pen/blue,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"AC" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkredcorners"
+ },
+/area/ruin/spaceprison)
+"AF" = (
+/obj/machinery/light,
+/obj/machinery/suit_storage_unit,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Bd" = (
+/obj/effect/decal/warning_stripes/west,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Br" = (
+/obj/structure/closet/secure_closet/guncabinet{
+ anchored = 1;
+ name = "Rubber Bullets";
+ req_access = list(1)
+ },
+/obj/item/ammo_box/magazine/enforcer{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/ammo_box/magazine/enforcer,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"BG" = (
+/obj/effect/decal/warning_stripes/northwestcorner,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/structure/closet/crate,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"BH" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/table,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"BI" = (
+/obj/item/paper/crumpled,
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"BT" = (
+/obj/item/paper,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Cc" = (
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"Cr" = (
+/obj/structure/closet/emcloset,
+/obj/effect/decal/warning_stripes/southeastcorner,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"CD" = (
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"CF" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkredcorners"
+ },
+/area/ruin/spaceprison)
+"CG" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/item/paper/crumpled,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Do" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"Dv" = (
+/obj/effect/decal/cleanable/dust,
+/obj/item/paper/crumpled/bloody,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Ee" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"Ej" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Es" = (
+/obj/effect/decal/cleanable/dust,
+/obj/item/paper/crumpled/bloody/ruins,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"Ew" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "darkbluecorners"
+ },
+/area/ruin/spaceprison)
+"Ex" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"EF" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/machinery/door_timer/cell_6,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ES" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"EY" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Fh" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Fr" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Gu" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"GQ" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"GZ" = (
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/obj/machinery/light,
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Hc" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/structure/closet/firecloset,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Hk" = (
+/obj/effect/decal/cleanable/dust,
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"HB" = (
+/obj/structure/grille,
+/turf/template_noop,
+/area/space/nearstation)
+"HH" = (
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"HN" = (
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"HY" = (
+/obj/structure/table,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/item/paper_bin,
+/obj/item/pen/blue,
+/obj/item/paper/crumpled/hotel_scrap_1,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Ih" = (
+/obj/effect/decal/warning_stripes/northeastcorner,
+/obj/structure/closet/firecloset,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Io" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Ir" = (
+/obj/structure/table,
+/obj/machinery/recharger{
+ pixel_x = 1;
+ pixel_y = 3
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"IL" = (
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"IM" = (
+/obj/effect/decal/warning_stripes/northeastcorner,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"IP" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Ji" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Jl" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"JK" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/item/stack/cable_coil{
+ amount = 5
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Ka" = (
+/obj/effect/spawner/window/reinforced,
+/turf/simulated/floor/plating/airless,
+/area/ruin/spaceprison)
+"Kh" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"Ko" = (
+/obj/structure/window/reinforced,
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Ky" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"KD" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"KP" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Lj" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Lr" = (
+/turf/simulated/floor/plating/airless,
+/area/ruin/spaceprison)
+"Me" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/structure/chair/stool,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"Mj" = (
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 12
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Mv" = (
+/obj/machinery/door/airlock/maintenance_hatch{
+ name = "Space Prison Airstorage";
+ req_access = list(12,63)
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Mw" = (
+/obj/structure/sign/vacuum,
+/turf/simulated/wall/r_wall,
+/area/ruin/spaceprison)
+"Mz" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"ME" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"MG" = (
+/obj/effect/decal/warning_stripes/west,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"MI" = (
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = -12
+ },
+/obj/effect/decal/cleanable/vomit,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"MN" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"MT" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"MW" = (
+/obj/structure/window/reinforced,
+/obj/machinery/door_timer/cell_4{
+ pixel_x = 32;
+ pixel_y = 0
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Nr" = (
+/obj/structure/table/reinforced,
+/obj/item/restraints/handcuffs{
+ pixel_y = 3
+ },
+/obj/item/restraints/handcuffs{
+ pixel_y = -3
+ },
+/obj/item/flashlight/seclite,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Nu" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/template_noop,
+/area/space/nearstation)
+"Nz" = (
+/obj/structure/window/reinforced,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"NL" = (
+/obj/item/paper/crumpled/bloody/ruins,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"NM" = (
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = -12
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"NS" = (
+/obj/machinery/portable_atmospherics/canister/air,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Ok" = (
+/obj/effect/decal/cleanable/dust,
+/obj/item/paper/crumpled/hotel_scrap_6,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"OB" = (
+/obj/structure/grille/broken,
+/obj/structure/lattice,
+/turf/template_noop,
+/area/space/nearstation)
+"OI" = (
+/obj/structure/window/reinforced,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"OK" = (
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/obj/machinery/door/airlock/security/glass{
+ name = "Space Prison Armory";
+ req_access = list(63);
+ security_level = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Pd" = (
+/turf/simulated/floor/wood,
+/area/ruin/spaceprison)
+"Pq" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"PI" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/item/stack/cable_coil{
+ amount = 5
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"PP" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Qc" = (
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Qh" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 6;
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"Qi" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/fancy/donut_box,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"QF" = (
+/obj/structure/table,
+/obj/machinery/recharger{
+ pixel_x = 1;
+ pixel_y = 3
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkredcorners"
+ },
+/area/ruin/spaceprison)
+"QJ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/structure/chair/office/light{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"QK" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"QL" = (
+/obj/machinery/teleport/hub,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"QP" = (
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"QX" = (
+/obj/machinery/door/airlock/security/glass{
+ id_tag = "spaceprisonsot";
+ name = "Space Prison";
+ req_access = list(63)
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Rc" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/closet/secure_closet/brig{
+ id = "Ruin Cell 3";
+ name = "Cell 3 Locker"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Rr" = (
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = -12
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Sg" = (
+/obj/effect/decal/cleanable/blood,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Sp" = (
+/obj/structure/lattice,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/turf/template_noop,
+/area/space/nearstation)
+"SN" = (
+/obj/structure/closet/secure_closet/guncabinet{
+ anchored = 1;
+ name = "Security Ballistic Weapons";
+ req_access = list(1)
+ },
+/obj/item/gun/projectile/automatic/pistol/enforcer/security{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/turf/simulated/floor/plasteel{
+ dir = 5;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"SX" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/obj/item/paper/crumpled/hotel_scrap_6,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Td" = (
+/obj/effect/decal/warning_stripes/east,
+/obj/item/stack/ore/bluespace_crystal{
+ amount = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Tg" = (
+/obj/structure/window/reinforced,
+/obj/item/stack/cable_coil/cut{
+ amount = 1
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"TB" = (
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"TH" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/wryn/wax/wall,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"TI" = (
+/obj/machinery/door/window/brigdoor{
+ id = "Ruin Cell 2";
+ name = "Cell 2";
+ req_access = list(2)
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"TK" = (
+/obj/effect/decal/warning_stripes/northwestcorner,
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Uv" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-2"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"UR" = (
+/obj/structure/closet/crate,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Vg" = (
+/obj/structure/bed,
+/obj/effect/decal/cleanable/dust,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Vs" = (
+/obj/effect/spawner/window/reinforced,
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-8"
+ },
+/turf/simulated/floor/plating/airless,
+/area/ruin/spaceprison)
+"Vt" = (
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"VC" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/bed,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"VL" = (
+/obj/effect/decal/cleanable/dust,
+/obj/structure/closet/crate/can,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
+ },
+/area/ruin/spaceprison)
+"Wf" = (
+/obj/structure/toilet{
+ dir = 1
+ },
+/obj/machinery/light/small,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Wg" = (
+/obj/machinery/door/window/northright{
+ name = "Sleep door"
+ },
+/turf/simulated/floor/wood,
+/area/ruin/spaceprison)
+"Wr" = (
+/obj/structure/closet/emcloset,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"WF" = (
+/obj/effect/landmark/tiles/damageturf,
+/obj/structure/inflatable,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"Xe" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/spawner/lootdrop/maintenance/tripple,
+/obj/structure/closet/secure_closet/guncabinet,
+/obj/item/clothing/under/rank/centcom_officer,
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Xj" = (
+/obj/structure/window/reinforced,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"Xy" = (
+/obj/structure/spacepoddoor,
+/turf/simulated/floor,
+/area/ruin/spaceprison)
+"XX" = (
+/obj/structure/chair/office/light{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Yc" = (
+/obj/structure/sink{
+ dir = 8;
+ pixel_x = -12
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"Yo" = (
+/obj/structure/window/reinforced,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "whiteblue"
+ },
+/area/ruin/spaceprison)
+"Ys" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Yx" = (
+/obj/machinery/door/airlock/hatch,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"YB" = (
+/obj/effect/decal/cleanable/dust,
+/obj/structure/wryn/floor,
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"YF" = (
+/obj/item/paper/crumpled,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"YI" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"YK" = (
+/obj/structure/table,
+/obj/item/radio,
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "darkblue"
+ },
+/area/ruin/spaceprison)
+"YL" = (
+/obj/structure/window/reinforced,
+/obj/structure/toilet{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+"YV" = (
+/obj/item/paper/crumpled/hotel_scrap_7,
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ icon_state = "dark"
+ },
+/area/ruin/spaceprison)
+"Zd" = (
+/obj/effect/decal/cleanable/dust,
+/obj/structure/chair/office/light{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/simulated/floor/plasteel{
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Zh" = (
+/obj/effect/decal/cleanable/dust,
+/obj/effect/landmark/tiles/damageturf,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "darkred"
+ },
+/area/ruin/spaceprison)
+"Zz" = (
+/obj/machinery/door/airlock/security/glass{
+ name = "Space Prison Armory";
+ req_access = list(1);
+ security_level = 1
+ },
+/obj/structure/cable{
+ icon_state = "1-2";
+ pixel_y = 0
+ },
+/turf/simulated/floor/plasteel{
+ dir = 10;
+ icon_state = "darkredfull"
+ },
+/area/ruin/spaceprison)
+"ZJ" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/closet/secure_closet/brig{
+ id = "Ruin Cell 5";
+ name = "Cell 5 Locker"
+ },
+/turf/simulated/floor/plating,
+/area/ruin/spaceprison)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ac
+ab
+ab
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ac
+ab
+ab
+aa
+aa
+aa
+ab
+ab
+ab
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(8,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+ac
+ab
+ab
+aa
+aa
+aa
+ab
+ab
+ab
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(9,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+ac
+ac
+ab
+aa
+aa
+aa
+ab
+ac
+ab
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(10,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+aa
+ac
+ac
+ac
+aa
+aa
+aa
+ac
+ac
+ab
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(11,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+aa
+ab
+ac
+ac
+aa
+aa
+aa
+ac
+ac
+ab
+aa
+ad
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(12,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+bR
+ab
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+ae
+ae
+ab
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+ae
+ae
+ae
+ad
+ae
+ae
+ae
+ae
+ae
+ae
+ae
+ay
+ae
+ae
+ae
+ae
+ae
+ae
+ad
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(14,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+ae
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+bl
+ac
+OB
+ae
+ae
+ad
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(15,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+ae
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ac
+bl
+ag
+ag
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(16,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+au
+ax
+aa
+ae
+ag
+ag
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aO
+Nu
+Nu
+ab
+aa
+Nu
+Nu
+Nu
+aa
+Nu
+Nu
+Nu
+aa
+ab
+ac
+bl
+ag
+ag
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ah
+ax
+aa
+ad
+ag
+ag
+aa
+aa
+ab
+ab
+ab
+aa
+aa
+hf
+Ej
+NM
+yv
+sx
+VC
+Yc
+lI
+Do
+Vg
+Rr
+fT
+ES
+ab
+aa
+ab
+ag
+ag
+ag
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(18,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+an
+ao
+at
+ah
+ax
+aa
+ad
+bl
+ag
+ab
+Ka
+Ka
+Ka
+cb
+ai
+ab
+bY
+sE
+Hk
+OI
+bY
+gc
+vN
+Nz
+sx
+cj
+vN
+Nz
+ab
+aa
+aa
+aa
+ab
+bl
+ac
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(19,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+an
+ap
+at
+ah
+ax
+ab
+ab
+ac
+ai
+Ka
+Ka
+aR
+bd
+bB
+ai
+ab
+ab
+cl
+cn
+kP
+ES
+vZ
+TI
+wU
+Do
+lK
+zr
+Rc
+ES
+aa
+aa
+aa
+aa
+ac
+ab
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(20,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+af
+aj
+aj
+aq
+aj
+aw
+aj
+aj
+av
+aA
+aD
+aB
+aC
+aT
+bf
+bL
+Ka
+bw
+al
+ai
+iz
+ai
+bw
+ai
+sE
+ai
+aO
+ai
+sE
+ai
+ab
+aa
+aa
+aa
+aa
+ac
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(21,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+an
+ar
+at
+aa
+aa
+ab
+ab
+ac
+ai
+Ka
+Ka
+bx
+bF
+am
+bN
+cc
+ck
+co
+cr
+cr
+bZ
+Aa
+kE
+JK
+MN
+ed
+hR
+hK
+ab
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(22,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+an
+as
+at
+aa
+aa
+aa
+ad
+ag
+ag
+ab
+Ka
+bb
+aW
+bM
+Ka
+ch
+aU
+aU
+aU
+aL
+Sp
+bj
+ch
+ab
+aU
+aU
+hf
+oq
+bU
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(23,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+ag
+ag
+aa
+cb
+cS
+bp
+bm
+ai
+ai
+cb
+ai
+ab
+aa
+bY
+bj
+bU
+aa
+ab
+aa
+hf
+Tg
+ES
+ab
+ab
+ab
+ab
+ab
+ab
+ac
+ac
+aa
+ac
+ac
+ac
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(24,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ad
+ae
+ae
+ae
+ag
+ag
+aa
+cb
+bc
+aZ
+zt
+Mv
+MI
+Wf
+ai
+ab
+aa
+bY
+zj
+ES
+aa
+ab
+aa
+hf
+Gu
+ES
+qR
+kH
+va
+zk
+Ai
+ac
+ac
+ac
+ac
+ac
+ac
+ac
+ab
+pH
+aa
+aa
+aa
+aa
+aa
+"}
+(25,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+ae
+ag
+ag
+aa
+ai
+aF
+ba
+bn
+ai
+NS
+Wr
+cb
+Uv
+Fh
+ni
+OK
+IP
+IP
+Ex
+aa
+hf
+Lj
+ES
+ME
+kh
+HY
+Ir
+ME
+ac
+ac
+ac
+ac
+jU
+gD
+ai
+ab
+OB
+pH
+aa
+aa
+aa
+aa
+"}
+(26,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+aa
+ab
+aa
+ae
+ag
+ag
+ab
+ai
+cb
+ai
+bo
+ai
+ai
+ai
+ai
+Xe
+IL
+jX
+An
+gr
+Nr
+tJ
+ab
+hf
+oq
+ES
+Kh
+kh
+QJ
+qp
+Kh
+ac
+cQ
+Lr
+ac
+ai
+Vt
+ai
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(27,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ac
+ac
+ac
+ab
+ac
+ab
+ae
+ag
+ag
+ab
+ai
+aG
+cH
+QK
+YK
+ai
+eb
+vm
+pz
+cP
+SX
+KD
+of
+vk
+ai
+ai
+ai
+Yx
+ai
+ai
+NL
+fb
+cB
+cb
+ai
+Xy
+eC
+ai
+Mw
+np
+jO
+ai
+ab
+ae
+aa
+aa
+aa
+aa
+"}
+(28,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+ac
+aa
+ae
+ag
+ag
+aa
+ai
+cp
+ce
+CG
+bW
+vE
+cG
+Xj
+ji
+Ok
+eS
+eG
+KD
+AC
+GZ
+ai
+cM
+MG
+TK
+vs
+mK
+cK
+bJ
+GQ
+cJ
+jy
+Bd
+uO
+lL
+Bd
+BG
+ai
+ab
+ae
+aa
+aa
+aa
+aa
+"}
+(29,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ac
+aa
+ae
+ag
+ag
+ab
+ai
+aJ
+be
+Jl
+bX
+jk
+iR
+Xj
+qN
+cP
+kp
+rx
+sw
+cP
+hq
+cb
+iz
+BT
+iz
+ai
+cv
+Ky
+GQ
+ai
+KD
+cO
+cN
+cP
+KD
+KD
+UR
+ai
+ab
+ae
+aa
+aa
+aa
+aa
+"}
+(30,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ac
+ac
+ay
+ag
+ag
+ab
+ai
+aK
+mZ
+PP
+QP
+Vs
+lD
+Yo
+Zh
+dP
+pf
+Zd
+cP
+cP
+TB
+ft
+sE
+iz
+sE
+cu
+KD
+YI
+KD
+QX
+KD
+Ao
+cO
+KD
+KD
+cP
+Aq
+ai
+ab
+ab
+ab
+aa
+aa
+aa
+"}
+(31,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ac
+aa
+ae
+ag
+ag
+ab
+ai
+ct
+Ew
+xy
+Cc
+ai
+xB
+Qh
+CD
+KD
+Qi
+Sg
+xb
+KD
+nS
+cb
+gm
+iz
+sE
+cv
+ea
+KP
+Ji
+pP
+Qc
+KD
+cP
+KD
+KD
+BI
+tc
+ai
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(32,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ac
+ac
+ab
+ab
+ac
+aa
+ad
+ag
+ag
+aa
+cb
+dN
+br
+ai
+Ys
+Zz
+Fr
+tz
+uL
+ea
+et
+fE
+Dv
+CF
+AF
+ai
+xW
+hl
+IM
+cu
+KD
+Pq
+KD
+QX
+KD
+KD
+KD
+cP
+cP
+KD
+cP
+WF
+ab
+ad
+aa
+aa
+aa
+aa
+"}
+(33,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ac
+ac
+ab
+ac
+ab
+ae
+ag
+ag
+ab
+ai
+cb
+op
+ai
+QF
+ai
+SN
+Br
+wm
+YV
+gi
+iH
+XX
+gE
+ai
+ai
+ai
+Yx
+cb
+ai
+ai
+ai
+ai
+ai
+cD
+Cr
+Td
+fV
+fV
+Ih
+Hc
+ai
+ab
+ad
+aa
+aa
+aa
+aa
+"}
+(34,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+aa
+ae
+ag
+ag
+ab
+ai
+aM
+kR
+ai
+ai
+ai
+ai
+ai
+gy
+eO
+yJ
+YF
+As
+xZ
+aE
+ab
+hf
+PI
+bU
+ab
+ab
+ab
+ab
+ai
+ai
+ai
+el
+pW
+QL
+ai
+ai
+ai
+ab
+ae
+aa
+aa
+aa
+aa
+"}
+(35,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+ae
+ag
+ag
+aa
+ai
+dz
+bh
+yw
+bT
+bV
+ca
+ai
+Uv
+Fh
+oc
+OK
+IP
+IP
+MT
+aa
+hf
+Ko
+bU
+ad
+ae
+ae
+ab
+ab
+ab
+ai
+ai
+ai
+ai
+ai
+ab
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+"}
+(36,1,1) = {"
+aa
+aa
+aa
+aa
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ad
+ae
+ae
+ae
+ag
+ag
+aa
+cb
+aN
+kR
+bh
+Wg
+Pd
+fc
+cb
+ab
+aa
+bY
+zj
+ES
+aa
+ab
+aa
+bY
+bj
+bU
+aa
+aa
+aa
+aa
+ae
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(37,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+ag
+ag
+aa
+cb
+aP
+bg
+Es
+cb
+ai
+ai
+ai
+ab
+aa
+ab
+zj
+bU
+aa
+ab
+aa
+hf
+Io
+bU
+aa
+aa
+aa
+aa
+ab
+ae
+ab
+ae
+ae
+ae
+ab
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(38,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+ag
+ag
+ab
+aE
+bh
+pK
+kR
+bO
+vE
+bw
+bw
+bw
+al
+nT
+zj
+cg
+bw
+bw
+bw
+Ee
+Io
+HN
+ae
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(39,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+ag
+ag
+ab
+bv
+bE
+bs
+Me
+bK
+fv
+bD
+iz
+HH
+EF
+bZ
+EY
+Mz
+rl
+gd
+cC
+rh
+MW
+bU
+ae
+aa
+aa
+aa
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(40,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ag
+ag
+ab
+iS
+ru
+sQ
+bS
+kR
+Vs
+aa
+cb
+sE
+ai
+aU
+ai
+sE
+ai
+aL
+ai
+sE
+ai
+ab
+ae
+aa
+aa
+aa
+ac
+ab
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(41,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ag
+ag
+ab
+iS
+qP
+yd
+bI
+VL
+ai
+hf
+cm
+cI
+se
+tH
+BH
+vY
+ZJ
+bU
+cm
+tV
+zO
+bU
+ae
+aa
+aa
+aa
+ac
+ab
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(42,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ad
+ag
+ag
+ab
+cq
+IP
+bi
+cb
+ai
+ai
+ab
+TH
+YB
+fK
+tH
+gc
+vN
+sE
+tH
+cj
+Hk
+Nz
+ES
+ab
+aa
+aa
+ab
+bl
+ac
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(43,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ae
+ad
+ag
+ag
+aa
+aa
+ab
+ab
+ab
+aa
+aa
+hf
+jf
+yH
+gj
+tH
+bt
+xG
+YL
+hf
+hI
+Mj
+YL
+ab
+ab
+aa
+ab
+ag
+ag
+ag
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(44,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+bl
+ag
+aa
+ab
+ab
+ab
+ab
+ab
+aa
+aa
+ch
+ab
+ch
+aa
+ch
+ch
+ch
+aa
+ch
+ch
+ab
+aa
+ab
+ac
+bl
+ag
+ag
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(45,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+ad
+bl
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ac
+bl
+ag
+ag
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(46,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+ad
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ag
+ab
+ab
+ae
+ad
+ae
+ae
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(47,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+ae
+bR
+ae
+ae
+OB
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ab
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(48,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+ab
+ae
+ae
+ae
+ae
+ae
+ae
+ay
+ae
+ae
+ae
+ae
+ae
+HB
+ae
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(49,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ad
+ae
+aa
+ab
+aa
+ab
+ac
+ab
+ac
+ac
+ab
+ae
+ab
+ae
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(50,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+ab
+ac
+ab
+ab
+ab
+aa
+aa
+ab
+ab
+aa
+aa
+ad
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(51,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+ab
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(52,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(53,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm
index 09c0e0ac67e..45f80016dfd 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm
@@ -1,27 +1,27 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/obj/effect/landmark/tiles/burnturf,
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "cautionfull");
- icon_state = "4-i"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "cautionfull"
- },
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium,
+/area/derelict/engineer_area)
"ab" = (
/turf/simulated/floor/plasteel/airless{
icon_state = "solarpanel"
},
/area/space/nearstation)
"ac" = (
-/turf/template_noop,
+/turf/space,
/area/template_noop)
"ad" = (
-/turf/simulated/floor/plasteel/airless{
- icon_state = "solarpanel"
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel,
+/area/derelict/rnd)
+"ae" = (
+/obj/item/storage/ashtray,
+/obj/structure/table/glass,
+/turf/simulated/floor/plasteel{
+ icon_state = "grimy"
},
-/area/template_noop)
+/area/derelict/dining)
"af" = (
/obj/machinery/power/solar/fake{
desc = "A broken solar panel. This one is beyond of any possible repair.";
@@ -33,33 +33,32 @@
/area/space/nearstation)
"ag" = (
/obj/structure/lattice,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"ah" = (
-/obj/item/stack/cable_coil/cut{
- amount = 1
- },
-/turf/template_noop,
-/area/space/nearstation)
+/obj/effect/decal/cleanable/blood/drip,
+/obj/effect/mob_spawn/mousedead,
+/turf/simulated/floor/plasteel,
+/area/derelict/dock)
"ai" = (
/obj/item/shard{
icon_state = "medium"
},
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"aj" = (
/obj/item/shard,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"ak" = (
/obj/item/stack/rods,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"al" = (
-/turf/simulated/wall/mineral/titanium/nodecon,
+/turf/simulated/wall/mineral/titanium,
/area/derelict/bridge)
"am" = (
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/bridge)
"an" = (
/obj/structure/grille,
@@ -74,12 +73,12 @@
/area/derelict/bridge)
"ao" = (
/obj/effect/landmark/tiles/damageturf,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/bridge)
"ap" = (
/obj/effect/landmark/tiles/damageturf,
/obj/effect/landmark/tiles/burnturf,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/bridge)
"aq" = (
/obj/effect/landmark/tiles/burnturf,
@@ -123,69 +122,54 @@
},
/area/derelict/bridge)
"au" = (
-/obj/machinery/computer/atmos_alert,
+/obj/machinery/computer/atmos_alert{
+ icon = 'icons/obj/machines/computer3.dmi'
+ },
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkblue"
},
/area/derelict/bridge)
"av" = (
-/obj/machinery/computer/monitor,
/obj/structure/cable{
d2 = 2;
icon_state = "0-2"
},
-/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "darkblue"
- },
-/area/derelict/bridge)
-"aw" = (
-/obj/structure/table/reinforced,
-/obj/machinery/door_control{
- id = "rusbridge";
- name = "Bridge Shutters"
+/obj/machinery/computer/monitor{
+ icon = 'icons/obj/machines/computer3.dmi';
+ icon_screen = "power_oldframe";
+ icon_state = "frame-eng";
+ name = "Grid Power Monitoring Computer"
},
/turf/simulated/floor/plasteel{
- dir = 9;
+ dir = 1;
icon_state = "darkblue"
},
/area/derelict/bridge)
"ax" = (
-/obj/docking_port/stationary{
- dir = 8;
- dwidth = 2;
- height = 5;
- id = "ussp_dock";
- name = "Docking port USSP Station";
- width = 8
- },
-/turf/space{
- icon_state = "black"
- },
-/area/space)
-"ay" = (
-/obj/structure/computerframe{
- desc = "This computer is a husk of what it once was. Time and decay has worn its cheap circuitry to dust.";
- name = "decrepit computer"
+/obj/machinery/camera{
+ c_tag = "Лобби 4";
+ network = list("USSP")
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 1;
- icon_state = "darkblue"
+ icon_state = "caution"
},
-/area/derelict/bridge)
+/area/derelict/engineer_area)
"az" = (
-/obj/machinery/computer{
- desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages.";
- dir = 1;
- name = "Broken Computer";
- obj_integrity = 150
+/obj/machinery/computer/security{
+ icon = 'icons/obj/machines/computer3.dmi';
+ icon_screen = "sec_oldframe";
+ icon_state = "frame-sec";
+ network = list("USSP")
},
/obj/item/paper/djstation{
- info = "Август 28, 2532
Наш пост прослушивания передал несколько тревожных сообщений об активности TSF в секторе. Хотя перехваченные сообщения говорят о том, что это просто исследовательская работа, я не могу отделаться от ощущения, что эти упрямые ублюдки наконец-то нас догнали.
Капитан уверяет меня, что волноваться не о чем, но мне трудно воспринимать всерьез человека, параноидально относящегося к двери душа с электроприводом.
- Офицер Связи Восток";
+ info = "Август 28, 2532
Наш пост прослушки передал несколько тревожных сообщений об активности ТСФ в секторе. Хотя перехваченные сообщения говорят о том, что это просто исследовательская работа, я не могу отделаться от ощущения, что эти упрямые ублюдки всё таки нас разыскали.
Капитан уверяет меня, что волноваться не о чем, но мне трудно воспринимать всерьез человека, параноидальное относящегося к двери душа с электроприводом.
- Офицер Связи Восток";
name = "личный журнал";
pixel_x = 26;
- pixel_y = 4
+ pixel_y = 4;
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel{
dir = 1;
@@ -201,7 +185,12 @@
},
/area/derelict/bridge)
"aB" = (
-/obj/machinery/computer/crew,
+/obj/machinery/computer/crew{
+ dir = 4;
+ icon = 'icons/obj/machines/computer3.dmi';
+ icon_screen = "med_oldframe";
+ icon_state = "frame-med"
+ },
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkblue"
@@ -228,10 +217,12 @@
/area/derelict/bridge)
"aE" = (
/obj/structure/sign/nuke,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/bridge)
"aF" = (
-/obj/item/twohanded/required/kirbyplants,
+/obj/structure/displaycase/boat{
+ req_access = list(128)
+ },
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -239,7 +230,7 @@
"aG" = (
/obj/structure/safe/floor,
/obj/item/paper/djstation{
- info = "Я никогда не забуду те ночи, которые мы провели на Cygni, и все те времена, когда ты возил меня на своем 2452 Винсенте. По тому, как ты посмотрел на меня той ночью, я поняла, что мы с тобой родные души.
Я знаю, что они заставили тебя продать своего Винсента, когда тебя переназначили, но я не мог позволить что бы такая красивая вещь ржавела. Я договорилася, и он здесь, ждет тебя.
Ключи я приложила. Пожалуйста, пусть они всегда служат напоминанием о нашей любви и поводом вернуться. Я умоляю тебя, не позволяй нашей любви тихо уйти в ночь.";
+ info = "Моему дорогому Сергею,
Я никогда не забуду те ночи, которые мы провели на Cygni, и все те приключения, когда ты возил меня на своем 2452 Vincent. По тому, как ты посмотрел на меня той ночью, я поняла, что мы с тобой родные души.
Я знаю, что они заставили тебя продать твой Vincent, когда тебя переназначили. Но я не могу позволить что бы такая прекрасная вещь просто ржавела где нибудь. Я договорилась с начальством, и он здесь, ждет тебя.
В конверте ты найдешь и ключи. Пожалуйста, пусть они всегда служат напоминанием о нашей любви и поводом вернуться. Я умоляю тебя, не позволяй нашей любви тихо уйти в ночь.";
layer = 2.9;
name = "любовное письмо";
pixel_x = -5;
@@ -254,6 +245,9 @@
icon_state = "docs_generic";
name = "USSP//NOFORN//TOP SECRET"
},
+/obj/item/stack/spacecash/ussp/c1000,
+/obj/item/stack/spacecash/ussp/c1000,
+/obj/item/stack/spacecash/ussp/c1000,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -270,6 +264,7 @@
dir = 8;
tag = "icon-tube1 (WEST)"
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkblue"
@@ -323,7 +318,7 @@
/area/derelict/bridge)
"aO" = (
/obj/structure/table/reinforced,
-/obj/item/fan,
+/obj/effect/spawner/lootdrop/officetoys,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkblue"
@@ -360,7 +355,7 @@
/area/derelict/bridge)
"aS" = (
/obj/machinery/vending/cigarette/free{
- slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.")
+ slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.")
},
/turf/simulated/floor/plasteel{
dir = 9;
@@ -387,15 +382,12 @@
},
/area/derelict/bridge)
"aV" = (
-/turf/simulated/wall/mineral/titanium/nodecon,
+/turf/simulated/wall/mineral/titanium,
/area/derelict/crew_quarters)
"aW" = (
-/turf/simulated/wall/mineral/titanium/nodecon,
+/turf/simulated/wall/mineral/titanium,
/area/derelict/arrival)
"aX" = (
-/obj/structure/closet{
- icon_state = "cabinet"
- },
/obj/item/clothing/head/helmet/space/syndicate/blue{
desc = "This spacesuit is emblazoned with the emblem of the USSP. Glory to Space Russia!";
name = "Cosmonaut Command Helmet"
@@ -404,6 +396,11 @@
desc = "This spacesuit is emblazoned with the emblem of the USSP. Glory to Space Russia!";
name = "Cosmonaut Command Suit"
},
+/obj/item/stamp/ussp,
+/obj/structure/closet/secure_closet/personal/cabinet{
+ req_access = list(128)
+ },
+/obj/item/paper/gorky17/report,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -413,17 +410,16 @@
/obj/item/gun/energy/e_gun/old{
desc = "A rudimentary energy weapon co-opted by the USSP from a TSF experimental prototype. There are two firing modes."
},
+/obj/item/clothing/head/sovietofficerhat,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
/area/derelict/bridge)
"aZ" = (
/obj/structure/table/wood,
-/obj/item/trash/can{
- desc = "A miniature ship in a bottle. I wonder how they got it in there?";
- icon = 'icons/obj/lavaland/artefacts.dmi';
- icon_state = "ship_bottle";
- name = "ship in a bottle"
+/obj/machinery/photocopier/faxmachine/longrange/ussp{
+ department = "Red ring";
+ req_access = list(128)
},
/turf/simulated/floor/plasteel{
icon_state = "wood"
@@ -461,6 +457,7 @@
},
/area/derelict/bridge)
"bg" = (
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkblue"
@@ -481,8 +478,11 @@
/area/derelict/bridge)
"bj" = (
/obj/item/paper/djstation{
- info = "Записка испачкана чернильными пятнами, сильный и дрожащий почерк, нацарапанный по ней, едва различим.
Восток перестал стучать в дверь час назад, он должен попататься спасти нас. Я до сих пор не знаю, что произошло, но уже прошло шесть часов.
Мои руки не перестают трястись, даже сигареты не помогают.
Восток, если тебе удастся войти и я потеряю сознание, мои лекарства в морозилке рядом с моим столом. Пожалуйста. Я на тебя рассчитываю.";
- name = "ветхая записка"
+ info = "
Восток, я не слышал ни шороха от тебя уже около часа... Должно быть он слишком занят попытками найти способ связаться с командованием. Я до сих пор не уверен, что произошло, но с того момента прошло уже шесть часов.
Мои руки не перестают трястись, и даже сигареты не не в силах помочь.
Восток, если всё удастся, а я к тому моменту потеряю сознание - мои лекарства в шкафу рядом с моим столом. Пожалуйста. Я на тебя рассчитываю.";
+ name = "ветхая записка";
+ icon_state = "scrap_bloodied";
+ desc = "Записка испачкана чернильными пятнами, сильный и дрожащий почерк, нацарапанный по ней, едва различим.";
+ language = "Neo-Russkiya"
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
@@ -523,24 +523,15 @@
},
/area/derelict/bridge)
"bm" = (
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/crew_quarters)
"bn" = (
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/arrival)
"bo" = (
-/obj/structure/cable{
- d2 = 4;
- icon_state = "0-4"
- },
-/obj/machinery/power/apc/noalarm{
- dir = 8;
- pixel_x = -24
- },
-/turf/simulated/floor/plasteel{
- icon_state = "wood"
- },
-/area/derelict/bridge)
+/obj/effect/spawner/lootdrop/spentcasing/pistol,
+/turf/simulated/floor/plasteel,
+/area/derelict/dock)
"bp" = (
/obj/structure/chair/comfy/red{
dir = 4
@@ -548,6 +539,7 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -557,9 +549,11 @@
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/item/paper_bin/ussp,
/obj/item/paper/djstation{
- info = "Этот проклятый душ станет моей смертью. Я вижу, как Восток смотрит на меня, когда я говорю о нем, как его глаза весело ухмыляются. Только сегодня утром, клянусь, эта чертова штука пыталась запереть меня. Мне пришлось сломать замок, чтобы выбраться, Восток чуть не обосрался от смеха, когда он это увидел и я ему расказал про это.
Ну, посмотрим, долго ли он будет смеяться, когда я напишу комиссару Григору о его дерзости; единственное, чем он тогда будет заниматься, это драить туалет!";
- name = "капитанский журнал"
+ info = "Рано или поздно эта чертова дверь в душе прикончит меня. Я вижу, как Восток смотрит на меня, когда я говорю о ней, как его глаза весело ухмыляются. Вот только сегодня утром, клянусь, эта чертова штука пыталась запереть меня. Мне пришлось сломать замок, чтобы выбраться. Восток чуть не обоссался от смеха, когда я рассказал ему и показал на ту дверь.
Ну, посмотрим, долго ли он будет смеяться, когда я напишу комиссару Григору о его дерзости; единственное, что он будет после всего этого прослушивать - звуки слива бочка, надраивать который он будет последующий месяц!";
+ name = "капитанский журнал";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel{
icon_state = "wood"
@@ -580,27 +574,18 @@
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- icon_state = "wood"
+/turf/simulated/floor/wood{
+ broken = 1;
+ icon_state = "wood-broken"
},
/area/derelict/bridge)
"bt" = (
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/carpet,
/area/derelict/bridge)
-"bu" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/command/glass{
- name = "Command Wing"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
- },
-/area/derelict/bridge)
"bv" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -626,14 +611,6 @@
icon_state = "dark"
},
/area/derelict/bridge)
-"by" = (
-/obj/machinery/door/airlock/command/glass{
- name = "Command Wing"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
- },
-/area/derelict/bridge)
"bz" = (
/obj/structure/chair/comfy/brown{
dir = 4
@@ -653,15 +630,11 @@
},
/area/derelict/bridge)
"bB" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin,
-/obj/item/pen,
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
- dir = 5;
- icon_state = "dark";
- tag = "icon-vault (NORTHEAST)"
+ icon_state = "hydrofloor"
},
-/area/derelict/bridge)
+/area/derelict/common)
"bC" = (
/obj/structure/chair/comfy/brown{
dir = 8
@@ -695,40 +668,32 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "dark");
- icon_state = "4-i"
- },
-/area/derelict/arrival)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/security)
"bF" = (
/obj/machinery/light/spot{
dir = 1;
tag = "icon-tube1 (NORTH)"
},
+/obj/effect/decal/cleanable/dust,
+/obj/structure/safe,
+/obj/item/grenade/empgrenade,
/turf/simulated/floor/plasteel{
icon_state = "darkredcorners"
},
-/area/derelict/arrival)
+/area/derelict/security)
"bG" = (
/obj/structure/rack,
/obj/item/melee/classic_baton{
desc = "A wooden truncheon for beating capitalist scum."
},
/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkredcorners"
},
-/area/derelict/arrival)
-"bH" = (
-/obj/machinery/light/spot{
- dir = 8;
- tag = "icon-tube1 (WEST)"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "wood"
- },
-/area/derelict/bridge)
+/area/derelict/security)
"bI" = (
/obj/structure/table/wood,
/obj/item/storage/ashtray/glass{
@@ -736,6 +701,11 @@
pixel_y = 3
},
/obj/item/cigbutt,
+/obj/item/decorations/flag/soviet{
+ pixel_y = 10;
+ pixel_x = -5;
+ layer = 3.1
+ },
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -745,6 +715,9 @@
/obj/machinery/door_control{
name = "faulty switch"
},
+/obj/item/pen/multi{
+ pixel_y = 10
+ },
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -770,12 +743,11 @@
},
/area/derelict/bridge)
"bN" = (
-/obj/item/reagent_containers/syringe/insulin{
- pixel_y = 3
- },
-/obj/item/reagent_containers/syringe/insulin,
-/obj/structure/closet/crate/freezer{
- layer = 2.9
+/obj/item/reagent_containers/syringe/heparin,
+/obj/item/reagent_containers/syringe/calomel,
+/obj/item/reagent_containers/syringe/epinephrine,
+/obj/structure/closet/medical_wall{
+ pixel_x = 32
},
/turf/simulated/floor/plasteel{
dir = 4;
@@ -786,6 +758,7 @@
/obj/structure/table/wood,
/obj/item/taperecorder,
/obj/item/tape/random,
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "darkblue"
@@ -793,18 +766,13 @@
/area/derelict/bridge)
"bP" = (
/obj/structure/table/wood,
+/obj/item/paper_bin/ussp,
+/obj/item/pen,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "darkblue"
},
/area/derelict/bridge)
-"bQ" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- dir = 4;
- icon_state = "darkblue"
- },
-/area/derelict/bridge)
"bR" = (
/obj/structure/curtain/open,
/obj/structure/toilet,
@@ -814,17 +782,19 @@
},
/area/derelict/crew_quarters)
"bS" = (
+/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "darkredcorners"
},
-/area/derelict/arrival)
+/area/derelict/security)
"bT" = (
/obj/effect/decal/cleanable/dirt,
+/obj/item/clothing/suit/armor/vest/old,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"bU" = (
/obj/structure/rack,
/obj/effect/spawner/lootdrop/maintenance,
@@ -833,7 +803,7 @@
dir = 8;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"bV" = (
/turf/simulated/floor/wood{
icon_state = "wood-broken7";
@@ -868,27 +838,31 @@
},
/area/derelict/bridge)
"ca" = (
-/obj/structure/coatrack,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/spider/stickyweb,
/turf/simulated/floor/plasteel{
- icon_state = "darkblue"
+ icon_state = "redfull";
+ tag = "icon-redfull (NORTHWEST)"
},
-/area/derelict/bridge)
+/area/derelict/arrival)
"cb" = (
/obj/structure/table/reinforced,
/obj/item/folder,
+/obj/item/wrench,
/turf/simulated/floor/plasteel{
icon_state = "darkblue"
},
/area/derelict/bridge)
"cc" = (
/obj/structure/table/reinforced,
+/obj/item/paper/ussp,
/turf/simulated/floor/plasteel{
icon_state = "darkblue"
},
/area/derelict/bridge)
"cd" = (
/obj/structure/table/reinforced,
-/obj/item/paper_bin,
+/obj/item/paper_bin/ussp,
/obj/item/pen,
/turf/simulated/floor/plasteel{
dir = 6;
@@ -923,6 +897,7 @@
dir = 4;
tag = "icon-tube1 (EAST)"
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkblue"
@@ -956,20 +931,15 @@
/area/derelict/crew_quarters)
"cl" = (
/obj/structure/rack,
-/obj/item/clothing/suit/armor/vest/old,
-/obj/item/clothing/head/helmet/swat{
- desc = "A reinforced helmet often used by USSP security personnel.";
- name = "armoured helmet"
- },
/turf/simulated/floor/plasteel{
icon_state = "darkredcorners"
},
-/area/derelict/arrival)
+/area/derelict/security)
"cm" = (
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"cn" = (
/obj/effect/decal/cleanable/blood/splatter,
/obj/effect/decal/cleanable/blood/innards,
@@ -977,47 +947,25 @@
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
-"co" = (
-/obj/effect/decal/cleanable/dirt,
-/mob/living/simple_animal/bot/secbot/buzzsky{
- desc = "It's Comrade Blyatsky! Powered by vodka, communism, and hardbass.";
- name = "Comrade Blyatsky"
- },
-/turf/simulated/floor/plasteel{
- dir = 5;
- icon_state = "dark";
- tag = "icon-vault (NORTHEAST)"
- },
-/area/derelict/arrival)
-"cp" = (
-/obj/structure/rack,
-/obj/effect/spawner/lootdrop/maintenance,
-/turf/simulated/floor/plasteel{
- dir = 8;
- icon_state = "darkred"
- },
-/area/derelict/arrival)
+/area/derelict/security)
"cq" = (
-/obj/machinery/door/airlock/command/glass{
- name = "Command Wing"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "wood"
- },
-/area/derelict/bridge)
+/turf/simulated/wall/mineral/titanium,
+/area/derelict/security)
"cr" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass,
/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka{
+ pixel_x = 5;
+ pixel_y = 10
+ },
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
/area/derelict/bridge)
"cs" = (
-/obj/structure/rack,
-/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka,
/obj/effect/decal/cleanable/dirt,
+/obj/item/twohanded/required/kirbyplants,
/turf/simulated/floor/wood{
broken = 1;
icon_state = "wood-broken"
@@ -1026,16 +974,19 @@
"ct" = (
/obj/machinery/light/spot,
/obj/effect/decal/cleanable/dirt,
+/obj/item/flag/ussp,
/turf/simulated/floor/carpet,
/area/derelict/bridge)
"cu" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/carpet,
/area/derelict/bridge)
"cv" = (
/obj/machinery/light/spot,
+/obj/item/flag/ussp,
/turf/simulated/floor/carpet,
/area/derelict/bridge)
"cw" = (
@@ -1072,36 +1023,34 @@
desc = "This spacesuit is emblazoned with the emblem of the USSP. Glory to Space Russia!";
name = "Cosmonaut Security Suit"
},
-/obj/item/clothing/head/helmet/space/syndicate/orange{
- desc = "This spacesuit is emblazoned with the emblem of the USSP. Glory to Space Russia!";
- name = "Cosmonaut Security Helmet"
- },
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkredcorners"
},
-/area/derelict/arrival)
+/area/derelict/security)
"cA" = (
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"cB" = (
/obj/effect/decal/cleanable/blood/tracks,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"cC" = (
/obj/structure/rack,
-/obj/item/gun/projectile/revolver/doublebarrel,
+/obj/effect/decal/cleanable/dust,
+/obj/item/reagent_containers/food/drinks/oilcan/full,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkredcorners"
},
-/area/derelict/arrival)
+/area/derelict/security)
"cD" = (
/obj/structure/dresser,
/turf/simulated/floor/plasteel{
@@ -1110,30 +1059,14 @@
/area/derelict/bridge)
"cE" = (
/obj/structure/table/wood,
-/obj/item/flashlight/lamp/green,
/obj/structure/sign/poster/contraband/communist_state{
pixel_y = 31
},
+/obj/machinery/recharger,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
/area/derelict/bridge)
-"cF" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/impassable{
- id_tag = "ruslockcom";
- layer = 3;
- name = "Bridge Lockdown"
- },
-/obj/machinery/door/airlock/command/glass{
- name = "Command Wing"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
- },
-/area/derelict/bridge)
"cG" = (
/obj/structure/closet/crate/can,
/obj/effect/spawner/lootdrop/maintenance/double,
@@ -1182,22 +1115,12 @@
/area/derelict/crew_quarters)
"cL" = (
/obj/structure/sign/mech,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/arrival)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/security)
"cM" = (
/obj/structure/sign/securearea,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/arrival)
-"cN" = (
-/obj/machinery/door/airlock/hatch{
- desc = "A sturdy armoury door. If you listen closely, you can barely make out a soviet marching tune coming from the other side of the door.";
- name = "Armoury"
- },
-/obj/effect/decal/cleanable/blood/tracks,
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
- },
-/area/derelict/arrival)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/security)
"cO" = (
/obj/structure/curtain/open/shower,
/obj/machinery/shower{
@@ -1209,7 +1132,8 @@
dir = 1
},
/obj/machinery/door/window{
- name = "electrically operated shower door"
+ name = "electrically operated shower door";
+ req_access = list(300)
},
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
@@ -1226,18 +1150,11 @@
icon_state = "wood"
},
/area/derelict/bridge)
-"cQ" = (
-/obj/structure/bed,
-/obj/item/bedsheet/red,
-/turf/simulated/floor/plasteel{
- icon_state = "wood"
- },
-/area/derelict/bridge)
"cR" = (
/obj/item/shard{
icon_state = "small"
},
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"cS" = (
/obj/structure/grille,
@@ -1245,18 +1162,27 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/cable,
/turf/simulated/floor/plasteel/airless{
icon_state = "floorscorched2"
},
-/area/derelict/annex)
+/area/derelict/bridge)
"cT" = (
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/cable{
+ icon_state = "1-4";
+ tag = "90Curve"
+ },
+/obj/structure/cable{
+ icon_state = "1-8";
+ tag = ""
+ },
/turf/simulated/floor/plasteel/airless{
icon_state = "dark"
},
-/area/derelict/annex)
+/area/derelict/bridge)
"cU" = (
/obj/structure/table/reinforced,
/obj/item/storage/box/drinkingglasses,
@@ -1274,7 +1200,6 @@
},
/area/derelict/bridge)
"cW" = (
-/obj/item/twohanded/required/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 6;
@@ -1306,7 +1231,9 @@
/area/derelict/crew_quarters)
"da" = (
/obj/structure/table,
-/obj/item/flashlight/lamp,
+/obj/item/flashlight/lamp{
+ on = 0
+ },
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "blue"
@@ -1315,61 +1242,56 @@
"db" = (
/turf/simulated/floor/plasteel,
/area/derelict/crew_quarters)
-"dc" = (
-/obj/item/bedsheet/blue,
-/obj/structure/bed,
-/turf/simulated/floor/plasteel{
- dir = 4;
- icon_state = "blue"
- },
-/area/derelict/crew_quarters)
"dd" = (
-/obj/item/twohanded/required/kirbyplants,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"de" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"df" = (
-/obj/machinery/door/window/westleft,
+/obj/machinery/door/window/westleft{
+ req_access = list(128)
+ },
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dg" = (
/obj/machinery/photocopier,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dh" = (
/obj/structure/filingcabinet,
/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb2,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"di" = (
/obj/structure/grille,
/obj/item/shard,
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/cable,
/turf/simulated/floor/plasteel/airless{
icon_state = "floorscorched2"
},
-/area/derelict/annex)
+/area/derelict/bridge)
"dj" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -1381,7 +1303,7 @@
/turf/simulated/floor/plasteel/airless{
icon_state = "dark"
},
-/area/derelict/annex)
+/area/derelict/bridge)
"dk" = (
/obj/item/bedsheet/blue,
/obj/structure/bed,
@@ -1392,27 +1314,19 @@
/area/derelict/crew_quarters)
"dl" = (
/obj/effect/decal/cleanable/fungus,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/crew_quarters)
-"dm" = (
-/obj/machinery/computer/security,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- dir = 9;
- icon_state = "darkred"
- },
-/area/derelict/arrival)
"dn" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"do" = (
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dp" = (
/obj/structure/table/reinforced,
/obj/structure/window/reinforced{
@@ -1424,13 +1338,14 @@
dir = 4;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dq" = (
/obj/structure/chair/office/dark,
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dr" = (
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
@@ -1440,15 +1355,16 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"ds" = (
/obj/structure/chair/office/dark{
dir = 4
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dt" = (
/obj/structure/table/reinforced,
/obj/machinery/light/spot{
@@ -1460,7 +1376,7 @@
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"du" = (
/obj/structure/grille{
density = 0;
@@ -1469,10 +1385,11 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/cable,
/turf/simulated/floor/plasteel/airless{
icon_state = "floorscorched2"
},
-/area/derelict/annex)
+/area/derelict/bridge)
"dv" = (
/obj/item/bedsheet/blue,
/obj/structure/bed,
@@ -1490,20 +1407,12 @@
},
/area/derelict/crew_quarters)
"dx" = (
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 0;
icon_state = "blue"
},
/area/derelict/crew_quarters)
-"dy" = (
-/obj/structure/bed,
-/obj/item/bedsheet/blue,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- dir = 6;
- icon_state = "blue"
- },
-/area/derelict/crew_quarters)
"dz" = (
/obj/machinery/washing_machine,
/obj/effect/decal/cleanable/dirt,
@@ -1516,19 +1425,18 @@
dir = 8;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dB" = (
/obj/structure/table/reinforced,
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 8
},
-/obj/item/grenade/empgrenade,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dC" = (
/obj/structure/table/reinforced,
/obj/machinery/door/window/southright,
@@ -1537,13 +1445,14 @@
pixel_y = 1
},
/obj/item/paper/djstation{
- info = "Рекомендованая команда Товарищ Бляцкий
Подпись Офицера: Микаил Гогочев
Капитан,
Я понимаю характер этой просьбы, которая мне кажется странной, но выслушайте меня, пожалуйста: товарищ Бляцки хоть и бот, но как железный кулак самого комиссара Григора! Буквально на днях он выгнал из брига этого бесполезного ублюдка Тоттого, вы бы видели, как этот пьяница хныкал! Как собака с поджатым хвостом.
В любом случае, я отвлекся!Если кто и достоин признания, так это наш неусыпный и любимый Бляцкий, истинный чемпион USSP.
Если вы желаете, быть может, воочию увидеть его бдительность и самоотверженность, что ж! Вам нужно только прийти, чтобы осмотреть арсенал. Товарищ Бляцкий ждет вашего решения.";
- name = "рекомендации для похвалы"
+ info = "Рекомендация к премированию Товарищ Бляцкий
Подпись Офицера: Микаил Гогочев
Капитан,
Я осознаю странность данной просьбы, но прошу, выслушайте: товарищ Бляцки хоть и выглядит как мелкий пылесос, но он силен как стальной кулак самого комиссара Григора! Буквально на днях он выгнал из брига этого бесполезного ублюдка Тотского, вы бы видели, как этот пьяница хныкал! Прям как собака с поджатым хвостом.
В любом случае, я отвлекся! Если кто и достоин премирования, так это наш всегда стоящий на страже и любимый Бляцкий, истинный защитник СССП.
Если вы желаете, быть может, воочию увидеть его бдительность и самоотверженность, что ж! Вам нужно только прийти, чтобы осмотреть оружейную. Товарищ Бляцкий ждет вашего решения.";
+ name = "Рекомендация к премированию";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dD" = (
/obj/structure/table/reinforced,
/obj/structure/window/reinforced,
@@ -1554,22 +1463,17 @@
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dE" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
/obj/item/pen,
/obj/structure/window/reinforced,
-/obj/machinery/newscaster{
- desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. Strange that it's on a Russian station.";
- layer = 3.3;
- pixel_x = 27
- },
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dF" = (
/obj/structure/grille,
/obj/structure/window/full/shuttle,
@@ -1579,7 +1483,7 @@
name = "Security Wing Lockdown"
},
/turf/simulated/floor/plating,
-/area/derelict/arrival)
+/area/derelict/security)
"dG" = (
/obj/structure/grille{
density = 0;
@@ -1591,10 +1495,11 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/structure/cable,
/turf/simulated/floor/plasteel/airless{
icon_state = "floorscorched2"
},
-/area/derelict/annex)
+/area/derelict/bridge)
"dH" = (
/obj/structure/grille,
/obj/structure/window/full/shuttle,
@@ -1602,7 +1507,8 @@
/area/derelict/crew_quarters)
"dI" = (
/obj/machinery/door/airlock/shuttle{
- name = "Dormitories"
+ name = "Dormitories";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel,
/area/derelict/crew_quarters)
@@ -1619,11 +1525,12 @@
/turf/simulated/floor/plasteel,
/area/derelict/crew_quarters)
"dL" = (
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dM" = (
/obj/structure/rack,
/obj/item/crowbar,
@@ -1631,7 +1538,7 @@
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dN" = (
/obj/structure/closet,
/obj/machinery/light/spot{
@@ -1640,7 +1547,6 @@
},
/obj/item/clothing/head/ushanka,
/obj/item/clothing/head/ushanka,
-/obj/item/clothing/head/ushanka,
/obj/item/clothing/under/soviet,
/obj/item/clothing/under/soviet,
/obj/item/clothing/under/soviet,
@@ -1654,30 +1560,8 @@
/turf/simulated/floor/plasteel{
icon_state = "darkredfull"
},
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- icon_state = "4-i"
- },
-/area/derelict/arrival)
-"dP" = (
-/obj/item/clothing/under/retro/security,
-/obj/item/clothing/under/retro/security,
-/obj/structure/closet,
-/obj/item/clothing/gloves/combat,
-/obj/item/clothing/gloves/combat,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- d2 = 2;
- icon_state = "0-2"
- },
-/obj/machinery/power/apc/noalarm{
- dir = 1;
- pixel_y = 24
- },
-/turf/simulated/floor/plasteel{
- dir = 9;
- icon_state = "darkred"
- },
-/area/derelict/arrival)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/security)
"dQ" = (
/obj/machinery/recharger,
/obj/structure/table/reinforced,
@@ -1690,16 +1574,17 @@
dir = 1;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dR" = (
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dS" = (
/turf/simulated/wall/mineral/titanium/interior,
-/area/derelict/arrival)
+/area/derelict/security)
"dT" = (
/obj/structure/closet,
/obj/effect/spawner/lootdrop/maintenance,
@@ -1707,16 +1592,9 @@
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/shoes/jackboots,
-/obj/item/clothing/shoes/jackboots,
/obj/effect/decal/cleanable/dirt,
-/obj/item/clothing/head/panzer{
- desc = "An oldschool military softcap.";
- name = "old military cap"
- },
-/obj/item/clothing/head/panzer{
- desc = "An oldschool military softcap.";
- name = "old military cap"
- },
+/obj/item/clothing/head/sovietsidecap,
+/obj/item/clothing/head/sovietsidecap,
/turf/simulated/floor/plasteel,
/area/derelict/crew_quarters)
"dU" = (
@@ -1724,7 +1602,7 @@
dir = 9;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dV" = (
/obj/structure/cable{
icon_state = "1-2";
@@ -1733,38 +1611,28 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"dW" = (
-/turf/simulated/wall/mineral/titanium/nodecon,
+/turf/simulated/wall/mineral/titanium,
/area/derelict/annex)
"dX" = (
/obj/structure/sign/securearea,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/engineer_area)
"dY" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/impassable{
- id_tag = "ruslock";
- layer = 3;
- name = "Central Annex Lockdown"
- },
-/obj/machinery/door/airlock/command/glass{
- name = "Command Wing"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/spot{
+ dir = 8;
+ tag = "icon-tube1 (WEST)"
},
-/area/derelict/annex)
+/turf/simulated/floor/plasteel,
+/area/derelict/common)
"dZ" = (
/obj/structure/closet/crate/can,
/obj/item/paper/crumpled{
info = "Я ЗНАЮ, ЭТО ТЫ УКРАЛ МОИ ЩАСЛИВЫЕ ТРУСЕЛЯ. КЛЯНУСЬ, ЕСЛИ Я УВИЖУ ХОТЬ ЕЩЕ ОДИН РАЗ ТВОЮ ТОЩУЮ КРЫСИНУЮ ШЕЮ, Я БУДУ ДУШИТЬ ЕЕ, ПОКА ТЫ НЕ ПОСИНЕЕШЬ И НЕ ПОТЕРЯЕШЬ СОЗНАНИЕ!
НИКТО! НИКТО НЕ ПРИКОСЕТСЯ К СЧАСТЛИВЫМ ТРУСАМ БОРИСА БЕЗ ПОСЛЕДСТВИЙ!";
- name = "LISTEN UP CYKA"
+ name = "LISTEN UP CYKA";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel,
/area/derelict/crew_quarters)
@@ -1787,14 +1655,14 @@
dir = 9;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"ee" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/spray/pepper,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"ef" = (
/obj/structure/table/reinforced,
/obj/item/storage/box/zipties,
@@ -1804,23 +1672,21 @@
dir = 4;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"eg" = (
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
+/turf/simulated/wall/mineral/titanium/nodiagonal,
/area/derelict/annex)
"eh" = (
/obj/machinery/light/spot{
dir = 1;
tag = "icon-tube1 (NORTH)"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
+/obj/item/flag/ussp,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ei" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -1829,40 +1695,23 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ej" = (
/obj/machinery/light/spot{
dir = 1;
tag = "icon-tube1 (NORTH)"
},
/obj/effect/decal/cleanable/dirt,
-/obj/item/twohanded/required/kirbyplants,
-/obj/structure/cable{
- icon_state = "1-2"
- },
+/obj/item/flag/ussp,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ek" = (
/obj/machinery/door/airlock/shuttle{
- name = "Dormitories"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "wood"
- },
-/area/derelict/crew_quarters)
-"el" = (
-/obj/structure/cable{
- d2 = 2;
- icon_state = "0-2";
- pixel_y = 1
- },
-/obj/structure/piano,
-/obj/machinery/power/apc/noalarm{
- dir = 1;
- pixel_y = 24
+ name = "Dormitories";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
icon_state = "wood"
@@ -1888,37 +1737,41 @@
dir = 10;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"eo" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"ep" = (
/obj/structure/window/reinforced{
dir = 1
},
-/obj/machinery/door/window/westleft,
+/obj/machinery/door/window/westleft{
+ req_access = list(128,129,130,131)
+ },
/obj/structure/sign/poster/contraband/red_rum{
pixel_y = -32
},
/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"eq" = (
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/bed,
/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"er" = (
/obj/structure/table,
/obj/item/storage/box/cups,
@@ -1929,31 +1782,25 @@
dir = 9;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"es" = (
-/obj/structure/reagent_dispensers/water_cooler,
+/obj/structure/closet/l3closet/scientist,
+/obj/item/clothing/glasses/science,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"et" = (
/obj/structure/sign/science,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/rnd)
"eu" = (
/obj/structure/window/reinforced{
dir = 1
},
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "redfull");
- icon_state = "4-i"
- },
-/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "whiteredfull"
- },
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium,
+/area/derelict/dining)
"ev" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -1962,48 +1809,48 @@
icon_state = "rampbottom";
tag = "icon-stage_stairs"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ew" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
icon_state = "rampbottom";
tag = "icon-stage_stairs"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ex" = (
-/obj/machinery/power/smes/engineering{
- charge = 1e+006;
- input_attempt = 0;
- input_level = 0;
- inputting = 0;
- output_level = 30000
- },
/obj/structure/cable{
d2 = 4;
icon_state = "0-4"
},
+/obj/machinery/power/smes/vintage{
+ output_attempt = 0;
+ outputting = 0
+ },
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ey" = (
-/obj/machinery/atmospherics/unary/tank/oxygen,
/obj/structure/cable{
icon_state = "2-8"
},
+/obj/machinery/atmospherics/unary/tank/air/ninja{
+ volume = 30000
+ },
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ez" = (
/obj/structure/noticeboard,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/obj/item/paper/gorky17{
+ name = "Информация по настройки внутренней сети";
+ info = "Введение в локальную сеть дополнительных камер
После монтажа камеры - используй параметр USSP для введения камеры в местную сеть видеонаблюдения.
Настройка коммуникационного реле
Для введения реле в общую сеть настрой передатчик на частоту USSP-CORE"
+ },
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/engineer_area)
"eA" = (
/obj/machinery/atmospherics/unary/passive_vent,
/turf/simulated/floor/plating/airless,
@@ -2054,20 +1901,14 @@
/obj/structure/cable{
icon_state = "1-2"
},
+/obj/item/spentcasing,
/turf/simulated/floor/wood{
icon_state = "wood-broken";
tag = "icon-wood-broken"
},
/area/derelict/crew_quarters)
"eH" = (
-/obj/machinery/newscaster{
- desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. Strange that it's on a Russian station.";
- layer = 3.3;
- pixel_x = 30
- },
-/obj/item/trash/spentcasing{
- icon_state = "762-casing"
- },
+/obj/item/spentcasing/rifle,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -2075,8 +1916,8 @@
"eI" = (
/obj/structure/sign/securearea,
/obj/effect/decal/cleanable/blood/splatter,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/arrival)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/security)
"eJ" = (
/obj/machinery/door/poddoor/impassable{
id_tag = "ruslocksec";
@@ -2090,7 +1931,7 @@
dir = 8;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"eK" = (
/obj/machinery/door/poddoor/impassable{
id_tag = "ruslocksec";
@@ -2105,7 +1946,7 @@
dir = 4;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"eL" = (
/obj/structure/grille,
/obj/structure/window/full/shuttle,
@@ -2115,16 +1956,13 @@
name = "Central Annex Lockdown"
},
/turf/simulated/floor/plating,
-/area/derelict/annex)
+/area/derelict/rnd)
"eM" = (
/turf/simulated/floor/plasteel{
icon_state = "purplefull"
},
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "purplefull");
- icon_state = "4-i"
- },
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/rnd)
"eN" = (
/obj/structure/table,
/obj/item/storage/bag/tray{
@@ -2134,7 +1972,7 @@
dir = 9;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"eO" = (
/obj/structure/table/tray,
/obj/item/scalpel{
@@ -2144,29 +1982,27 @@
dir = 1;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"eP" = (
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"eQ" = (
/obj/machinery/door/airlock/science{
- name = "Science Wing"
+ name = "Science Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"eR" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eS" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -2176,25 +2012,23 @@
dir = 1;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eT" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eU" = (
/obj/machinery/door/airlock/engineering{
- name = "Engineering Wing"
+ name = "Engineering Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eV" = (
/obj/machinery/power/terminal{
dir = 1
@@ -2205,7 +2039,7 @@
pixel_y = 1
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eW" = (
/obj/machinery/atmospherics/pipe/simple/visible{
dir = 5
@@ -2214,7 +2048,7 @@
icon_state = "1-2"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eX" = (
/obj/machinery/portable_atmospherics/pump,
/obj/machinery/atmospherics/unary/portables_connector{
@@ -2225,7 +2059,7 @@
dir = 1;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eY" = (
/obj/structure/engineeringcart,
/obj/effect/decal/cleanable/dirt,
@@ -2233,16 +2067,13 @@
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"eZ" = (
/turf/simulated/floor/plasteel{
icon_state = "cautionfull"
},
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "cautionfull");
- icon_state = "4-i"
- },
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/engineer_area)
"fa" = (
/obj/structure/grille,
/obj/structure/window/full/shuttle,
@@ -2253,11 +2084,10 @@
},
/obj/machinery/atmospherics/pipe/simple/visible,
/turf/simulated/floor/plating,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fb" = (
-/obj/item/trash/spentcasing{
- icon_state = "s-casing"
- },
+/obj/effect/decal/cleanable/dust,
+/obj/item/spentcasing/pistol,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -2289,11 +2119,12 @@
/obj/item/trash/can,
/obj/item/trash/semki,
/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/cobweb,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fg" = (
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
@@ -2303,7 +2134,7 @@
dir = 1;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fh" = (
/obj/structure/rack,
/obj/item/storage/toolbox/emergency/old,
@@ -2312,49 +2143,48 @@
dir = 5;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fi" = (
-/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "purple"
+/obj/effect/decal/cleanable/spiderling_remains,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/area/derelict/annex)
+/turf/simulated/floor/plasteel,
+/area/derelict/arrival)
"fj" = (
/obj/structure/cable{
icon_state = "2-4"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"fk" = (
/obj/structure/cable{
icon_state = "4-8"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fl" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/door/airlock/science{
- name = "Science Wing"
+ name = "Science Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"fm" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fn" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -2366,40 +2196,29 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fo" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fp" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/door/airlock/engineering{
- name = "Engineering Wing"
+ name = "Engineering Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fq" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/simulated/floor/plasteel,
-/area/derelict/annex)
-"fr" = (
/obj/structure/cable{
icon_state = "4-8"
},
@@ -2407,24 +2226,29 @@
icon_state = "1-4"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
+"fr" = (
+/turf/simulated/wall/mineral/titanium,
+/area/derelict/dock)
"fs" = (
/obj/structure/cable{
icon_state = "2-8"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ft" = (
/obj/structure/closet/crate/can,
/obj/item/paper/crumpled{
- info = "Эта заметка зарисовано всевозможными грубыми рисунками, которые слишком мерзки, чтобы дать им описание.
Тоцтой,
Я знаю, что это ты поишь моих кошек алкоголем, мне все равно, какие у вас причины, но вы мешаете важным исследованиям. Это пятый кот, которого мне пришлось заменить в этом месяце из-за вашего грубого чувства юмора, и я буду говорить с шефом Бораховым, если вы не прекратите.
- Николай Картов, Deputy Researcher";
- name = "Моментальный отказ!"
+ info = "
Тотский,
Я знаю, что это ты поишь моих кошек алкоголем, мне все равно, зачем ты это делаешь, но ты мешаешь важным исследованиям! Это пятый кот, которого мне пришлось заменить в этом месяце из-за твоего тупого чувства юмора, и я буду говорить с Бораховым, если ты не прекратишь свои выходки.
- Николай Картов, научный сотрудник.";
+ name = "Немедленно прекращай!";
+ desc = "Эта бумажка изрисована всевозможными грубыми рисунками, которые слишком мерзки, чтобы дать им описание.";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fu" = (
/obj/machinery/portable_atmospherics/scrubber,
/obj/machinery/atmospherics/unary/portables_connector{
@@ -2435,7 +2259,7 @@
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fv" = (
/obj/effect/decal/cleanable/blood/drip,
/obj/effect/decal/cleanable/blood,
@@ -2462,6 +2286,11 @@
},
/obj/structure/table/wood,
/obj/item/trash/candle,
+/obj/item/gun/projectile/shotgun/lethal/rusted{
+ self_shot_divisor = 1;
+ malf_high_bound = 5;
+ malf_low_bound = 2
+ },
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -2486,19 +2315,17 @@
dir = 8;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fB" = (
-/obj/item/trash/spentcasing{
- icon_state = "762-casing"
- },
/obj/structure/cable{
icon_state = "2-4";
tag = ""
},
+/obj/item/spentcasing/rifle,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fC" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -2506,17 +2333,17 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fD" = (
-/obj/item/trash/spentcasing,
/obj/structure/cable{
icon_state = "1-8";
tag = ""
},
+/obj/item/spentcasing,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fE" = (
/obj/structure/chair/office/dark,
/obj/effect/decal/cleanable/dirt,
@@ -2528,7 +2355,7 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fF" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/computerframe{
@@ -2539,7 +2366,7 @@
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fG" = (
/obj/structure/grille,
/obj/structure/window/full/shuttle,
@@ -2557,102 +2384,99 @@
dir = 5;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"fI" = (
/obj/structure/table/tray,
/obj/item/circular_saw{
pixel_y = 10
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"fJ" = (
/obj/structure/cable{
icon_state = "1-8"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"fK" = (
+/obj/structure/closet/crate/can,
+/obj/item/paper/crumpled{
+ info = "
Катерина,
Глаза твои как бриллианты,
Рожденные в недрах Cygni-A.
Мое сердце тоскует по тебе,
По твоей нежной красоте
Бляблятьнетэтоплохо.
Твой голос отрада для ушей,
Ласкает меня своими нежными очертаниями.
Никогда раньше я не знал, он как
Ласкание,
Ласкание!
Ласкание ангельского голоса
пометка для себя: занимайся наукой, поэзия не твоя сильная сторона.";
+ name = "любовная поэма";
+ desc = "Эта записка была перечеркнута столько раз, что трудно разобрать ее содержание";
+ language = "Neo-Russkiya"
+ },
+/obj/effect/spawner/lootdrop/maintenance,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"fL" = (
/obj/structure/sign/nosmoking_1,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/rnd)
"fM" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "1-4"
- },
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fN" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fO" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fP" = (
/obj/machinery/light/spot{
dir = 8;
tag = "icon-tube1 (WEST)"
},
/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "1-4";
+ tag = "90Curve"
},
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fQ" = (
/obj/structure/cable{
icon_state = "1-4"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fR" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"fS" = (
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/solar_control{
- id = "russolar";
- track = 2
- },
/obj/structure/cable{
d2 = 2;
icon_state = "0-2";
pixel_y = 1
},
+/obj/machinery/power/solar_control{
+ icon = 'icons/obj/machines/computer3.dmi';
+ icon_screen = "solar_oldframe";
+ icon_state = "frame-eng";
+ id = "ussp"
+ },
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"fT" = (
/obj/machinery/door_control{
id = "ruslock";
@@ -2660,7 +2484,7 @@
name = "suspicious button"
},
/obj/machinery/vending/cigarette/free{
- slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.")
+ slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.")
},
/turf/simulated/floor/wood{
broken = 1;
@@ -2668,16 +2492,14 @@
},
/area/derelict/crew_quarters)
"fU" = (
-/obj/item/trash/spentcasing,
+/obj/item/spentcasing,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
/area/derelict/crew_quarters)
"fV" = (
/obj/structure/chair/stool/bar,
-/obj/item/trash/spentcasing{
- icon_state = "762-casing"
- },
+/obj/item/spentcasing/rifle,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -2700,17 +2522,18 @@
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fY" = (
/obj/structure/table/reinforced,
/obj/item/paper/djstation{
- info = "Август 21 - Самый Превосходный Комиссар Григор
Август 22 - Никто
Август 23 - Никто
Август 24 - Никто
Август 25 - Почему я даже беспокоюсь?
Август 26 - Никто
Август 27 -";
- name = "журнал посетителей"
+ info = "Август 21 - Самый Превосходный Комиссар Григор
Август 22 - Никого
Август 23 - Никого
Август 24 - Никого
Август 25 - И зачем я его вообще веду?
Август 26 - Никого
Август 27 -";
+ name = "журнал посетителей";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"fZ" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
@@ -2720,7 +2543,7 @@
dir = 4;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"ga" = (
/obj/effect/decal/remains/human{
desc = "This guy seemed to have died in terrible way! Half his remains are dust.";
@@ -2728,44 +2551,32 @@
},
/obj/effect/decal/cleanable/blood/splatter,
/obj/effect/decal/cleanable/blood/splatter,
-/mob/living/simple_animal/hostile/feral_cat{
- faction = list("cat","carp");
- name = "Experiment 432-A"
- },
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "purplecorner"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"gb" = (
/obj/machinery/door/window/eastleft{
- locked = 1
+ locked = 1;
+ req_access = list(131)
},
/obj/effect/decal/cleanable/blood/splatter,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "purple"
},
-/area/derelict/annex)
-"gc" = (
-/obj/structure/rack,
-/obj/item/clothing/gloves/color/latex/nitrile,
-/obj/item/clothing/gloves/color/latex/nitrile,
-/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"gd" = (
-/obj/structure/closet,
-/obj/item/clothing/under/retro/science,
-/obj/item/clothing/under/retro/science,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"ge" = (
/obj/effect/decal/cleanable/fungus,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/rnd)
"gf" = (
/obj/structure/chair/wood{
dir = 4
@@ -2774,14 +2585,7 @@
dir = 10;
icon_state = "darkblue"
},
-/area/derelict/annex)
-"gg" = (
-/obj/structure/table/wood,
-/obj/item/storage/ashtray,
-/turf/simulated/floor/plasteel{
- icon_state = "darkblue"
- },
-/area/derelict/annex)
+/area/derelict/engineer_area)
"gh" = (
/obj/structure/chair/wood{
dir = 8
@@ -2789,31 +2593,41 @@
/obj/structure/sign/poster/contraband/random{
pixel_x = 32
},
+/obj/machinery/camera{
+ c_tag = "Лобби 1";
+ dir = 1;
+ network = list("USSP")
+ },
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkblue"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"gi" = (
/obj/machinery/floodlight,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"gj" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/chair{
+ dir = 4
},
-/turf/simulated/floor/plasteel{
+/obj/machinery/camera{
+ c_tag = "Безопасность вход";
dir = 4;
- icon_state = "caution"
+ network = list("USSP")
},
-/area/derelict/annex)
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "darkred"
+ },
+/area/derelict/security)
"gk" = (
/obj/structure/sign/poster/contraband/random,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/engineer_area)
"gl" = (
/obj/structure/chair/wood,
/turf/simulated/floor/plasteel{
@@ -2823,6 +2637,7 @@
"gm" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/ants,
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
@@ -2848,21 +2663,12 @@
icon_state = "grimy"
},
/area/derelict/crew_quarters)
-"gq" = (
-/obj/structure/chair{
- dir = 4
- },
-/turf/simulated/floor/plasteel{
- dir = 9;
- icon_state = "darkred"
- },
-/area/derelict/arrival)
"gr" = (
-/obj/item/trash/spentcasing,
+/obj/item/spentcasing,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"gs" = (
/obj/structure/chair/stool,
/obj/effect/decal/cleanable/dirt,
@@ -2870,24 +2676,26 @@
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"gt" = (
-/obj/structure/window/reinforced,
-/obj/machinery/light/small{
- dir = 8
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/rdconsole/core{
+ icon = 'icons/obj/machines/computer3.dmi';
+ icon_screen = "rnd_oldframe";
+ icon_state = "frame-rnd";
+ req_access = list(131)
},
-/obj/effect/decal/cleanable/blood/splatter,
/turf/simulated/floor/plasteel{
- dir = 10;
+ dir = 6;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"gu" = (
/obj/structure/window/reinforced,
/turf/simulated/floor/plasteel{
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"gv" = (
/obj/structure/window/reinforced{
dir = 4
@@ -2898,12 +2706,12 @@
dir = 6;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"gw" = (
/turf/simulated/floor/plasteel{
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"gx" = (
/obj/structure/window/reinforced{
dir = 1
@@ -2916,32 +2724,32 @@
/turf/simulated/floor/plasteel{
icon_state = "showroomfloor"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"gy" = (
/obj/effect/landmark/tiles/burnturf,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/engineer_area)
"gz" = (
/obj/structure/computerframe{
desc = "This computer is a husk of what it once was. Time and decay has worn its cheap circuitry to dust.";
name = "decrepit computer"
},
-/obj/effect/landmark/tiles/damageturf,
/obj/item/stack/cable_coil/cut{
amount = 2
},
/obj/structure/cable,
+/obj/effect/landmark/tiles/damageturf,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"gA" = (
/obj/machinery/vending/assist,
/turf/simulated/floor/plasteel{
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"gB" = (
/obj/machinery/power/solar/fake{
desc = "A broken solar panel. This one is beyond of any possible repair.";
@@ -2951,21 +2759,6 @@
icon_state = "solarpanel"
},
/area/space/nearstation)
-"gC" = (
-/obj/structure/cable{
- d2 = 2;
- icon_state = "0-2";
- pixel_y = 1
- },
-/obj/machinery/power/apc/noalarm{
- dir = 1;
- pixel_y = 24
- },
-/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "caution"
- },
-/area/derelict/annex)
"gD" = (
/obj/structure/rack,
/obj/item/t_scanner,
@@ -2979,7 +2772,7 @@
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"gE" = (
/obj/structure/table/wood,
/obj/item/storage/ashtray/bronze,
@@ -3002,26 +2795,16 @@
},
/area/derelict/crew_quarters)
"gH" = (
-/obj/item/trash/spentcasing,
-/turf/simulated/floor/plasteel{
- icon_state = "grimy"
- },
-/area/derelict/crew_quarters)
-"gI" = (
-/obj/structure/closet/secure_closet/bar,
-/obj/item/reagent_containers/food/drinks/bottle/vodka,
-/obj/item/reagent_containers/food/drinks/bottle/vodka,
-/obj/item/reagent_containers/food/drinks/bottle/vodka,
-/obj/item/reagent_containers/food/drinks/bottle/rum,
-/obj/item/reagent_containers/food/drinks/bottle/kahlua,
+/obj/effect/decal/ants,
+/obj/item/spentcasing,
/turf/simulated/floor/plasteel{
icon_state = "grimy"
},
/area/derelict/crew_quarters)
"gJ" = (
/obj/effect/decal/cleanable/fungus,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/arrival)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/security)
"gK" = (
/obj/structure/chair{
dir = 4
@@ -3030,27 +2813,26 @@
dir = 8;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"gL" = (
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"gM" = (
-/obj/item/trash/spentcasing{
- icon_state = "762-casing"
- },
+/obj/item/spentcasing/rifle,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"gN" = (
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"gO" = (
/obj/structure/reagent_dispensers/fueltank,
/obj/effect/decal/cleanable/blood/oil,
@@ -3058,12 +2840,12 @@
dir = 9;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"gP" = (
/obj/structure/table,
/obj/item/storage/box/syringes,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"gQ" = (
/obj/structure/table,
/obj/item/disk/data/demo{
@@ -3071,41 +2853,34 @@
pixel_y = -1
},
/obj/item/paper/djstation{
- info = "Наконец-то мы наткнулись на это, Катерина больше не будет смотреть мимо меня в пользу другой компании! Эксперимент 432-A показывает невероятную скорость клеточной регенерации, и я утверждаю, что мы, наконец, преодолели великую границу между жизнью и смерть — настоящее биологическое бессмертие!
Конечно, агрессивное поведение — неуместный побочный эффект, но в конце концов это всего лишь кошка. Я уверен, что нескольких кошачьих лакомств с седативными добавками будет достаточно, чтобы подготовиться к вскрытию .";
- name = "Experiment 432-A"
+ info = "Наконец-то мы сделали это, теперь Катерина больше не будет смотреть мимо меня в пользу кого другого! Эксперимент 432-A показывает невероятную скорость клеточной регенерации, и я утверждаю, что мы, наконец, преодолели великую грань между жизнью и смертью — истинное биологическое бессмертие!
Конечно, агрессивное поведение — неуместный побочный эффект, но в конце концов это всего лишь кошка. Я уверен, что нескольких кошачьих лакомств с седативными добавками будет достаточно, чтобы подготовиться к вскрытию.";
+ name = "Эксперимент 432-A";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"gR" = (
/mob/living/simple_animal/hostile/carp,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
-"gS" = (
-/obj/effect/landmark/tiles/damageturf,
-/obj/effect/decal/cleanable/dirt,
-/obj/item/stack/cable_coil/cut{
- amount = 1
- },
-/turf/simulated/floor/plating,
-/area/derelict/annex)
"gT" = (
/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
+ icon_state = "4-8"
},
+/obj/structure/spider/stickyweb,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/arrival)
"gU" = (
/obj/item/clothing/under/retro/engineering,
/obj/item/clothing/under/retro/engineering,
/obj/structure/closet,
+/obj/item/circuitboard/smes/vintage,
+/obj/item/multitool,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"gV" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/glass/rag,
@@ -3126,17 +2901,6 @@
icon_state = "grimy"
},
/area/derelict/crew_quarters)
-"gX" = (
-/obj/structure/table/reinforced,
-/obj/item/wrench,
-/obj/machinery/light/spot{
- dir = 4;
- tag = "icon-tube1 (EAST)"
- },
-/turf/simulated/floor/plasteel{
- icon_state = "grimy"
- },
-/area/derelict/crew_quarters)
"gY" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -3151,7 +2915,7 @@
/obj/item/shard{
icon_state = "small"
},
-/turf/template_noop,
+/turf/space,
/area/template_noop)
"gZ" = (
/obj/structure/window/reinforced{
@@ -3161,38 +2925,36 @@
dir = 1;
icon_state = "whiteredfull"
},
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "whiteredfull");
- icon_state = "4-i"
- },
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/dining)
"ha" = (
/obj/item/twohanded/required/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"hb" = (
/obj/machinery/light/spot,
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/arrival)
+/area/derelict/security)
"hc" = (
/obj/item/storage/box/cups,
/obj/structure/table,
/turf/simulated/floor/plasteel{
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"hd" = (
/obj/structure/reagent_dispensers/water_cooler,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "darkred"
},
-/area/derelict/arrival)
+/area/derelict/security)
"he" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -3201,22 +2963,14 @@
dir = 8;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"hf" = (
/obj/structure/chair/office/light{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
-"hg" = (
-/obj/structure/computerframe,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- dir = 6;
- icon_state = "purple"
- },
-/area/derelict/annex)
+/area/derelict/rnd)
"hi" = (
/obj/effect/landmark/tiles/burnturf,
/obj/structure/table/reinforced,
@@ -3229,30 +2983,31 @@
dir = 10;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hj" = (
/obj/structure/table/reinforced,
/obj/item/paper/djstation{
- info = "Это уже пятый раз за месяц, когда мне приходится заменять кабель к чертовой цепи блокировки. Это плохо, конденсатор постоянно выходит из строя, а чертовым системам требуется почти неделя для цикла и перезагрузки, но теперь капитан дышит мне в спину из-за его дурацкого душа и комиссара Григора. Микаил говорил мне, что лицо этого человека так покраснело, когда вспыхнул свет, что можно было увидеть, как он светится в темноте.
Если бы он думал это было плохо, ну, если бы я не установил блокировку в столовой, мы бы неделю сидели в темноте.
Раствэн говорит, что мы должны получить новую партию кабелей, хотя я не уверен, что у нас когда-нибудь будет достаточно припасов, чтобы это место функционировало должным образом.";
- name = "отчет об тех. обслухивании"
+ info = "Это уже пятый раз за месяц, когда мне приходится заменять кабель у чертовой сети блокировки шлюзов. Это плохо, конденсатор постоянно выходит из строя, а чертовым системам требуется почти неделя для прохода по всей станции и перезагрузки. А теперь еще и капитан дышит мне в спину из-за его дурацкой душевой и комиссара Григора. Микаил говорил мне, что лицо этого человека так покраснело, когда вспыхнул свет, что можно было увидеть, как он светится в темноте.
Если бы он думал это было плохо, ну, если бы я не установил блокировку в столовой, мы бы неделю сидели в темноте.
Раствэн говорит, что мы должны получить новую партию кабелей, хотя я не уверен, что у нас когда-нибудь будет достаточно припасов, чтобы это место функционировало должным образом.";
+ name = "отчет об тех. обслухивании";
+ language = "Neo-Russkiya"
},
/obj/structure/cable{
icon_state = "4-8"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hk" = (
/obj/structure/cable{
icon_state = "1-2"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hl" = (
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hm" = (
/obj/item/twohanded/required/kirbyplants,
/turf/simulated/floor/plasteel{
@@ -3268,17 +3023,17 @@
/area/derelict/crew_quarters)
"ho" = (
/obj/structure/table/reinforced,
-/obj/item/storage/box/drinkingglasses,
/obj/structure/sign/poster/contraband/random{
pixel_x = 32
},
+/obj/machinery/chem_dispenser/beer,
/turf/simulated/floor/plasteel{
icon_state = "grimy"
},
/area/derelict/crew_quarters)
"hq" = (
/obj/item/stack/ore/uranium,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"hr" = (
/obj/machinery/power/solar{
@@ -3294,74 +3049,66 @@
},
/area/space/nearstation)
"hs" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "2-8"
+/obj/effect/decal/cleanable/dust,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "purple"
},
-/turf/template_noop,
-/area/template_noop)
+/area/derelict/rnd)
"ht" = (
/obj/structure/sign/directions/security{
dir = 1;
pixel_y = 7
},
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/arrival)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/security)
"hu" = (
/obj/machinery/door/airlock/security/glass{
- name = "Security Wing"
+ name = "Security Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
icon_state = "ramptop";
tag = "icon-stage_stairs"
},
-/area/derelict/arrival)
+/area/derelict/security)
"hv" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/door/airlock/security/glass{
- name = "Security Wing"
+ name = "Security Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
icon_state = "ramptop";
tag = "icon-stage_stairs"
},
-/area/derelict/arrival)
+/area/derelict/security)
"hw" = (
/obj/structure/sink{
dir = 8;
pixel_x = -12;
pixel_y = 2
},
+/obj/structure/sign/nosmoking_1{
+ pixel_x = -32
+ },
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"hx" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "purple"
},
-/area/derelict/annex)
-"hy" = (
-/obj/structure/table,
-/obj/item/paper_bin,
-/obj/item/pen,
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plasteel{
- dir = 6;
- icon_state = "purple"
- },
-/area/derelict/annex)
+/area/derelict/rnd)
"hz" = (
/obj/effect/landmark/tiles/damageturf,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/annex)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/engineer_area)
"hA" = (
/obj/structure/table/reinforced,
/obj/item/flashlight,
@@ -3370,65 +3117,72 @@
dir = 10;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hB" = (
/obj/effect/landmark/tiles/burnturf,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hC" = (
/obj/structure/chair/stool,
/obj/structure/cable{
icon_state = "2-4"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hD" = (
-/obj/machinery/computer/monitor,
/obj/structure/cable{
d2 = 8;
icon_state = "0-8"
},
+/obj/machinery/computer/monitor{
+ icon = 'icons/obj/machines/computer3.dmi';
+ icon_screen = "power_oldframe";
+ icon_state = "frame-eng";
+ name = "Grid Power Monitoring Computer"
+ },
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hE" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/door/airlock/public/glass{
- name = "Eastern Annex"
+ name = "Eastern Annex";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
icon_state = "stage_stairs";
tag = "icon-stage_stairs"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hF" = (
/obj/structure/sign/barsign,
/turf/simulated/wall/shuttle{
icon_state = "swall4"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hG" = (
/turf/simulated/wall/shuttle{
icon_state = "swall8";
tag = "icon-swall12"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hH" = (
/obj/machinery/door/airlock/public/glass{
- name = "Eastern Annex"
+ name = "Eastern Annex";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
icon_state = "stage_stairs";
tag = "icon-stage_stairs"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hI" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
@@ -3442,7 +3196,7 @@
dir = 9;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"hJ" = (
/obj/structure/closet/crate{
icon_state = "crateopen";
@@ -3453,13 +3207,13 @@
dir = 1;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"hK" = (
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"hL" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -3468,37 +3222,40 @@
dir = 1;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"hM" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/vending/cigarette/free{
- slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.")
+ slogan_list = list("Just remember! No capitalist.","Best enjoyed with Vodka!.","Smoke!","Nine out of ten USSP scientists agree, smoking reduces stress!","There's no cigarette like a Russian cigarette!","Cigarettes! Now with 100% less capitalism.")
},
+/obj/effect/decal/cleanable/cobweb2,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"hN" = (
-/obj/structure/sink{
+/obj/structure/cable{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/obj/machinery/power/apc/noalarm{
dir = 8;
- pixel_x = -12;
- pixel_y = 2
+ start_charge = 0;
+ pixel_x = -32;
+ req_access = list(130)
},
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"hP" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hQ" = (
/obj/structure/cable{
icon_state = "2-8"
@@ -3508,60 +3265,70 @@
icon_state = "1-2"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hR" = (
-/obj/machinery/computer/atmos_alert,
+/obj/machinery/computer/atmos_alert{
+ icon = 'icons/obj/machines/computer3.dmi'
+ },
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"hS" = (
+/obj/effect/decal/cleanable/dirt,
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "1-4";
+ tag = "90Curve"
},
-/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hT" = (
/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "1-2";
+ tag = ""
+ },
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hU" = (
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hV" = (
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
/obj/item/paper/djstation{
- info = "Отец Грегор,
Вы должны меня простить, но я не могу получить ваш заказ на одну из тех 'перевертышей вуали', о которых вы просили. Я правда не уверен, что вы планировали с ней делать , дело духовенства не мое, но Восток поспешил отменить ваш заказ после того, как мы потеряли последнюю партию.
Ребята еще не оправились от головной боли с прошлого раза, а Хома жалуется, что он видит синие огни всякий раз, когда закрывает глаза.
Я не из тех, кто задает вопросы человеку Божию, но умоляю вас, пожалуйста, не пытайтесь больше заказывать эти артефакты. Они прокляты, и за ними, кажется, следуют всевозможные демоны.
- Андрей Восточович, Supply Technician";
- name = "Мои извинения, отец"
+ info = "Отец Грегор,
Вы должны меня простить, но я не могу получить ваш заказ на одну из тех 'перевертышей вуали', о которых вы просили. По правде говоря, я не представляю, что вы планировали с ней делать, но дела духовенства не мои. Однако Восток поспешил отменить ваш заказ после того, как мы потеряли последний заказ.
Ребята еще не оправились от головной боли с прошлого раза, а Хома жалуется, что он видит синие огни всякий раз, когда закрывает глаза.
Я не из тех, кто задает вопросы человеку Божию, но умоляю вас, пожалуйста, не пытайтесь больше заказывать эти артефакты. Они прокляты, и за ними, кажется, следуют всевозможные демоны.
- Андрей Восточович, заведующий по обеспечению";
+ name = "простите, отец";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hW" = (
/obj/structure/table,
-/obj/item/flashlight/lamp,
+/obj/item/flashlight/lamp{
+ on = 0
+ },
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"hX" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"hY" = (
/turf/simulated/floor/plasteel,
/area/derelict/arrival)
@@ -3569,9 +3336,9 @@
/obj/structure/cable{
icon_state = "1-2"
},
-/obj/item/trash/spentcasing,
+/obj/item/spentcasing,
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"ia" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/sign/poster/contraband/random{
@@ -3581,43 +3348,129 @@
dir = 4;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"ib" = (
/obj/machinery/light/spot{
dir = 8;
tag = "icon-tube1 (WEST)"
},
-/obj/structure/closet/l3closet/scientist,
-/obj/item/clothing/glasses/science,
-/turf/simulated/floor/plasteel{
- dir = 9;
- icon_state = "purple"
+/obj/structure/closet/secure_closet{
+ req_access = list(131);
+ name = "Reagents locker"
},
-/area/derelict/annex)
+/obj/item/reagent_containers/glass/bottle/sugar{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/sulfur{
+ pixel_x = 5;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/bromine{
+ pixel_x = -3
+ },
+/obj/item/reagent_containers/glass/bottle/aluminum{
+ pixel_x = 4
+ },
+/obj/item/reagent_containers/glass/bottle/silver{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/sodium{
+ pixel_x = 5;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/chlorine{
+ pixel_x = -3
+ },
+/obj/item/reagent_containers/glass/bottle/carbon{
+ pixel_x = 5
+ },
+/obj/item/reagent_containers/glass/bottle/sacid{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/silicon{
+ pixel_x = 5;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/ethanol{
+ pixel_x = -3
+ },
+/obj/item/reagent_containers/glass/bottle/copper{
+ pixel_x = 5
+ },
+/obj/item/reagent_containers/glass/bottle/potassium{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/radium{
+ pixel_x = 5;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/fluorine{
+ pixel_x = -3
+ },
+/obj/item/reagent_containers/glass/bottle/hydrogen{
+ pixel_x = 5
+ },
+/obj/item/reagent_containers/glass/bottle/lithium{
+ pixel_x = 5;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/iron{
+ pixel_x = 5
+ },
+/obj/item/reagent_containers/glass/bottle/iodine{
+ pixel_x = -3
+ },
+/obj/item/reagent_containers/glass/bottle/phosphorus{
+ pixel_x = -5;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/oxygen{
+ pixel_x = 6;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/mercury{
+ pixel_x = -5
+ },
+/obj/item/reagent_containers/glass/bottle/nitrogen{
+ pixel_x = 6
+ },
+/turf/simulated/floor/plasteel{
+ dir = 9;
+ icon_state = "purple"
+ },
+/area/derelict/rnd)
"ic" = (
/obj/structure/table/reinforced,
/obj/item/clipboard,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"id" = (
/obj/structure/chair/office/light,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"ie" = (
-/obj/structure/closet/secure_closet/chemical,
+/obj/structure/closet/secure_closet/chemical{
+ req_access = list(131)
+ },
/obj/item/paper/djstation{
- info = "Примитивное изображение плачущего яйца, на которое наступил сапог, нацарапано на правом поле листа.
Вхахахахаха! Вахвахва! Настоящий яйцеголовый! Да насрать на твоих котов или на 'syence', если ты напишешь Шефу, я расскажу этой суке Катерине о твоем увлечении к твему маленькому парню
Кроме того, почему ты подписываешься на бумаге? Я рядом, ублюдок, я знаю, что записка твоя для твоего парня. Как только я ее увижу, ты пишешь девчачье письмо, как будто я твой любовник, может быть, если бы ты проводил меньше времени в углу с кошкой, ты был бы настоящим мужчиной? Конечно, ты все равно выглядел бы как верблюжье дерьмо прилипшее к сапогу Тоттого!";
- name = "дорогой слюнтяй"
+ info = "
Вахвахва! Нытик, ты настоящий яйцеголовый! Да насрать мне на твоих котов или на 'новуку', если ты напишешь начальству, я расскажу этой суке Катерине о том, что слютяй в неё втухался.
Кроме того, нахера ты пишешь на бумаге? Я в соседнем крыле, мудила. Я понял, что это писанина от огузка, как только увидел бумагу. Ты пишешь девчачье письмецо, как будто я твой любовник, может быть, если бы ты проводил меньше времени в углу с кошкой, ты стал бы настоящим мужиком? Хотя ты все равно выглядел бы как верблюжье дерьмо прилипшее к сапогу Тотского!";
+ name = "дорогой слюнтяй";
+ desc = "Примитивное изображение плачущего яйца, на которое наступил сапог, нацарапано на правом поле листа";
+ language = "Neo-Russkiya"
},
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"if" = (
/obj/structure/grille,
/obj/structure/window/full/shuttle,
-/turf/simulated/floor/plating,
+/turf/simulated/floor/plating/airless,
/area/derelict/annex)
"ig" = (
/obj/effect/landmark/tiles/damageturf,
@@ -3626,22 +3479,19 @@
/area/derelict/annex)
"ih" = (
/obj/item/stack/ore/iron,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"ii" = (
-/turf/template_noop,
+/turf/space,
/area/derelict/annex)
"ij" = (
/obj/machinery/recharge_station,
/obj/effect/decal/cleanable/blood/oil,
-/obj/structure/cable{
- icon_state = "1-4"
- },
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ik" = (
/obj/structure/rack,
/obj/item/clothing/head/helmet/space/syndicate/black/engie{
@@ -3652,40 +3502,44 @@
desc = "This spacesuit is emblazoned with the emblem of the USSP. Glory to Space Russia!";
name = "Cosmonaut Engineering Suit"
},
+/obj/item/storage/box/flare,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"il" = (
/obj/structure/sign/poster/contraband/communist_state,
-/turf/simulated/wall/mineral/titanium/nodecon/nodiagonal,
-/area/derelict/crew_quarters)
+/turf/simulated/wall/mineral/titanium/nodiagonal,
+/area/derelict/church)
"im" = (
/obj/structure/cable{
- icon_state = "1-2"
+ d2 = 8;
+ icon_state = "0-8"
},
-/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "chapel"
+/turf/simulated/floor/engine{
+ name = "vacuum floor";
+ nitrogen = 0.01;
+ oxygen = 0.01
},
-/area/derelict/crew_quarters)
+/area/derelict/annex)
"in" = (
-/obj/item/trash/spentcasing{
- icon_state = "s-casing"
+/obj/structure/cable{
+ icon_state = "1-2"
},
+/obj/item/spentcasing/pistol,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "chapel"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"io" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "chapel"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"ip" = (
/obj/structure/table,
/obj/item/storage/fancy/candle_box,
@@ -3694,28 +3548,39 @@
dir = 4;
icon_state = "chapel"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"iq" = (
/obj/item/stack/tile,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
+"is" = (
+/obj/machinery/camera{
+ c_tag = "Лобби 2";
+ network = list("USSP")
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "redblue"
+ },
+/area/derelict/rnd)
"iv" = (
+/obj/item/flag/ussp,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"iw" = (
/obj/effect/decal/cleanable/blood/drip,
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"ix" = (
/obj/effect/decal/cleanable/blood/splatter,
/obj/item/trash/spentcasing{
icon_state = "s-casing"
},
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"iy" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -3731,20 +3596,17 @@
dir = 4;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"iA" = (
-/obj/structure/closet/crate/can,
-/obj/effect/spawner/lootdrop/maintenance,
-/obj/item/paper/crumpled{
- info = "Эта записка была перечеркнута столько раз, что трудно разобрать ее содержание.
Катерина,
Глаза твои как бриллианты,
Добыты с недр Cygni-A.
Мое сердце тоскует по тебе,
По твоей нежной красоте
Бля блять нет это плохо.
Твой голос отрада для ушей,
Терзает меня своими нежными очертаниями.
Никогда раньше я не знал, оно как
Прикосновение,
Прикосновение!
Прикосновение ангелького голоса
заметка для себя: занимайся наукой, поэзия не моя сильная сторона.";
- name = "любовная поэма"
- },
/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/secure_closet/research_reagents{
+ req_access = list(131)
+ },
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"iB" = (
/obj/structure/table/reinforced,
/obj/item/storage/fancy/vials,
@@ -3754,7 +3616,7 @@
/turf/simulated/floor/plasteel{
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"iC" = (
/obj/structure/table/reinforced,
/obj/item/reagent_containers/glass/beaker{
@@ -3771,18 +3633,7 @@
dir = 6;
icon_state = "purple"
},
-/area/derelict/annex)
-"iD" = (
-/turf/simulated/floor/engine{
- name = "vacuum floor";
- nitrogen = 0.01;
- oxygen = 0.01
- },
-/turf/simulated/wall/mineral/titanium/nodecon/tileblend{
- fixed_underlay = list("icon" = 'icons/turf/floors.dmi', "icon_state" = "engine");
- icon_state = "4-i"
- },
-/area/derelict/annex)
+/area/derelict/rnd)
"iE" = (
/turf/simulated/floor/engine{
name = "vacuum floor";
@@ -3794,56 +3645,69 @@
/obj/item/shard{
icon_state = "medium"
},
-/turf/template_noop,
-/area/derelict/annex)
-"iH" = (
-/obj/structure/closet/secure_closet/engineering_welding,
-/turf/simulated/floor/plasteel{
- dir = 10;
- icon_state = "caution"
- },
+/turf/space,
/area/derelict/annex)
"iI" = (
/obj/structure/closet/firecloset,
+/obj/item/storage/toolbox/emergency/old,
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"iJ" = (
+/obj/effect/decal/cleanable/blood/splatter,
+/obj/effect/decal/cleanable/dust,
+/obj/machinery/power/apc/noalarm{
+ dir = 8;
+ start_charge = 0;
+ pixel_x = -32;
+ req_access = list(130)
+ },
/obj/structure/cable{
- icon_state = "1-2"
+ d2 = 4;
+ icon_state = "0-4"
},
-/obj/effect/decal/cleanable/blood/splatter,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "chapel"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"iK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/simulated/floor/plasteel{
icon_state = "chapel"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"iL" = (
-/obj/item/trash/spentcasing,
+/obj/item/spentcasing,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"iM" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "chapel"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"iN" = (
/obj/structure/cable,
/turf/simulated/floor/plasteel/airless{
icon_state = "solarpanel"
},
/area/space/nearstation)
+"iR" = (
+/obj/structure/grille,
+/obj/structure/window/full/shuttle,
+/turf/simulated/floor/plating/airless,
+/area/derelict/garden)
"iS" = (
/obj/structure/closet/crate,
/obj/effect/spawner/lootdrop/maintenance/double,
@@ -3854,27 +3718,33 @@
dir = 9;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"iT" = (
/obj/structure/closet/crate/trashcart,
/turf/simulated/floor/plasteel{
dir = 1;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"iU" = (
/obj/effect/landmark/tiles/burnturf,
+/obj/item/gun/projectile/revolver/nagant/rusted{
+ malf_high_bound = 3;
+ malf_low_bound = 1
+ },
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"iV" = (
+/obj/item/spentcasing/rifle,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"iW" = (
/obj/machinery/door/airlock/science{
- name = "Science Wing"
+ name = "Science Wing";
+ req_access = list(128,129,130,131)
},
/obj/machinery/door/poddoor/impassable{
id_tag = "ruslock";
@@ -3885,13 +3755,14 @@
dir = 8;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"iX" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/door/airlock/science{
- name = "Science Wing"
+ name = "Science Wing";
+ req_access = list(128,129,130,131)
},
/obj/machinery/door/poddoor/impassable{
id_tag = "ruslock";
@@ -3902,11 +3773,11 @@
dir = 4;
icon_state = "purple"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"iY" = (
/obj/structure/lattice,
/obj/item/stack/ore/iron,
-/turf/template_noop,
+/turf/space,
/area/derelict/annex)
"iZ" = (
/obj/effect/landmark/tiles/damageturf,
@@ -3918,57 +3789,55 @@
/area/derelict/annex)
"ja" = (
/obj/structure/lattice,
-/turf/template_noop,
+/turf/space,
/area/derelict/annex)
"jb" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/machinery/door/airlock/engineering{
- name = "Engineering Wing"
+ name = "Engineering Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"jc" = (
/obj/machinery/door/airlock/engineering{
- name = "Engineering Wing"
- },
-/obj/structure/cable{
- icon_state = "1-2"
+ name = "Engineering Wing";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"jd" = (
/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/chair/wood{
- dir = 4
- },
-/turf/simulated/floor/plasteel{
- icon_state = "dark"
+ icon_state = "1-8"
},
-/area/derelict/crew_quarters)
+/turf/simulated/floor/plasteel,
+/area/derelict/common)
"je" = (
/obj/structure/chair/wood{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "1-2";
+ tag = ""
+ },
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"jf" = (
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"jg" = (
/obj/machinery/light/spot{
dir = 4;
@@ -3978,13 +3847,23 @@
/turf/simulated/floor/plasteel{
icon_state = "wood"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"jh" = (
-/turf/template_noop,
-/turf/simulated/wall/mineral/titanium/nodecon/nosmooth{
- icon_state = "swall_f10"
+/obj/item/stack/sheet/mineral/titanium,
+/turf/space,
+/area/template_noop)
+"jj" = (
+/obj/structure/spider/stickyweb,
+/turf/simulated/floor/plasteel{
+ icon_state = "bar"
},
-/area/derelict/annex)
+/area/derelict/dining)
+"jk" = (
+/obj/structure/punching_bag,
+/turf/simulated/floor/plasteel{
+ icon_state = "hydrofloor"
+ },
+/area/derelict/common)
"jm" = (
/obj/machinery/door/airlock/external{
id_tag = "kc13_ussp";
@@ -3994,53 +3873,50 @@
/turf/simulated/floor/plasteel{
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"jn" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel,
/area/derelict/arrival)
"jo" = (
-/obj/item/trash/spentcasing{
- icon_state = "s-casing"
- },
+/obj/effect/decal/cleanable/dust,
+/obj/effect/spawner/lootdrop/spentcasing/pistol,
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"jp" = (
/obj/structure/cable{
icon_state = "1-2"
},
/obj/effect/decal/cleanable/blood/drip,
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"jq" = (
/obj/effect/landmark/tiles/burnturf,
-/obj/item/trash/spentcasing{
- icon_state = "s-casing"
- },
+/obj/item/spentcasing/pistol,
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"jr" = (
/obj/item/twohanded/required/kirbyplants,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "brown"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"js" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 9;
icon_state = "redblue"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"jt" = (
-/obj/item/trash/spentcasing,
+/obj/item/spentcasing,
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "rampbottom";
tag = "icon-stage_stairs"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"ju" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -4049,13 +3925,16 @@
dir = 1;
icon_state = "redblue"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"jv" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "redblue"
+ dir = 9;
+ icon_state = "red"
},
-/area/derelict/annex)
+/area/derelict/arrival)
"jw" = (
/obj/structure/sign/securearea{
desc = "A warning sign which reads 'RADIOACTIVE AREA'";
@@ -4071,7 +3950,7 @@
dir = 5;
icon_state = "redblue"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"jx" = (
/obj/machinery/light/small{
dir = 8
@@ -4080,25 +3959,17 @@
/area/derelict/arrival)
"jy" = (
/obj/structure/window/reinforced,
-/turf/template_noop,
+/turf/space,
/area/derelict/annex)
"jz" = (
/obj/effect/landmark/tiles/damageturf,
/turf/simulated/floor/plating/airless,
/area/derelict/annex)
"jA" = (
+/obj/effect/decal/cleanable/ash,
+/obj/effect/landmark/tiles/damageturf,
/turf/simulated/floor/plating/airless,
/area/derelict/annex)
-"jB" = (
-/turf/simulated/wall/mineral/titanium/nodecon/nosmooth{
- icon_state = "swall_f5"
- },
-/turf/simulated/floor/engine{
- name = "vacuum floor";
- nitrogen = 0.01;
- oxygen = 0.01
- },
-/area/derelict/annex)
"jC" = (
/obj/structure/closet/radiation,
/obj/structure/sign/securearea{
@@ -4115,13 +3986,7 @@
dir = 9;
icon_state = "caution"
},
-/area/derelict/annex)
-"jD" = (
-/turf/simulated/floor/plasteel{
- dir = 1;
- icon_state = "caution"
- },
-/area/derelict/annex)
+/area/derelict/engineer_area)
"jE" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -4130,16 +3995,13 @@
dir = 1;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"jF" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"jG" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
@@ -4147,93 +4009,82 @@
icon_state = "rampbottom";
tag = "icon-stage_stairs"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"jH" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 5;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"jI" = (
/obj/structure/table/wood/fancy,
/obj/item/candle,
/turf/simulated/floor/carpet,
-/area/derelict/crew_quarters)
+/area/derelict/church)
"jJ" = (
/obj/item/stack/cable_coil{
amount = 2
},
-/turf/template_noop,
+/turf/space,
/area/template_noop)
"jK" = (
/obj/structure/lattice/catwalk,
-/turf/template_noop,
+/turf/space,
/area/space/nearstation)
"jL" = (
/obj/effect/decal/warning_stripes/southeastcorner,
/obj/machinery/atmospherics/pipe/simple/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"jN" = (
/obj/structure/window/reinforced,
/obj/machinery/light/small{
pixel_x = 16;
pixel_y = 5
},
-/turf/template_noop,
+/turf/space,
/area/derelict/annex)
"jO" = (
/obj/effect/decal/warning_stripes/south,
/turf/simulated/floor/plasteel{
icon_state = "dark"
},
-/area/derelict/crew_quarters)
+/area/derelict/church)
"jP" = (
/obj/item/solar_assembly,
/turf/simulated/floor/plasteel/airless{
icon_state = "solarpanel"
},
/area/space/nearstation)
-"jS" = (
-/turf/simulated/floor/plasteel{
- icon_state = "derelict9"
- },
-/area/derelict/arrival)
"jT" = (
/turf/simulated/floor/plasteel{
icon_state = "derelict10"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"jU" = (
/obj/effect/decal/cleanable/blood,
/turf/simulated/floor/plasteel{
icon_state = "derelict11"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"jV" = (
/turf/simulated/floor/plasteel{
icon_state = "derelict12"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"jW" = (
/turf/simulated/floor/plasteel{
icon_state = "derelict13"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"jX" = (
-/obj/item/trash/spentcasing{
- icon_state = "762-casing"
- },
/turf/simulated/floor/plasteel{
icon_state = "derelict14"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"jY" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -4244,7 +4095,7 @@
/turf/simulated/floor/plasteel{
icon_state = "derelict15"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"jZ" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4252,7 +4103,7 @@
/turf/simulated/floor/plasteel{
icon_state = "derelict16"
},
-/area/derelict/arrival)
+/area/derelict/dock)
"ka" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4264,10 +4115,11 @@
icon_state = "4-8"
},
/obj/machinery/door/airlock/shuttle{
- name = "Central Annex"
+ name = "Central Annex";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel,
-/area/derelict/arrival)
+/area/derelict/dock)
"kc" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4276,37 +4128,42 @@
dir = 1
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/dock)
"kd" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/church)
"ke" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
-/obj/item/trash/spentcasing{
- icon_state = "762-casing"
- },
+/obj/item/spentcasing/rifle,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/dock)
"kf" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/decal/cleanable/blood/splatter,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/dock)
"kg" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/door/airlock/shuttle{
- name = "Central Annex"
+ name = "Central Annex";
+ req_access = list(128,129,130,131)
},
/obj/effect/decal/cleanable/blood/tracks{
dir = 4
@@ -4315,7 +4172,7 @@
dir = 8
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"kh" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4326,8 +4183,9 @@
/obj/effect/decal/cleanable/blood/tracks{
dir = 8
},
+/obj/effect/decal/cleanable/dust,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"ki" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4343,7 +4201,7 @@
icon_state = "rampbottom";
tag = "icon-stage_stairs"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"kj" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4361,21 +4219,28 @@
dir = 8;
icon_state = "redblue"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"kk" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/warning_stripes/east,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/simulated/floor/plasteel{
dir = 4;
icon_state = "redblue"
},
-/area/derelict/annex)
+/area/derelict/rnd)
"kl" = (
/obj/machinery/door/airlock/external{
- name = "External Airlock"
+ name = "External Airlock";
+ req_access = list(128,129,130,131)
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/rnd)
"km" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
@@ -4386,56 +4251,52 @@
/area/derelict/annex)
"kn" = (
/obj/machinery/door/airlock/external{
- name = "External Airlock"
+ name = "External Airlock";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/engine,
/area/derelict/annex)
"ko" = (
/obj/item/stack/ore/iron,
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/effect/landmark/tiles/damageturf,
/turf/simulated/floor/plating/airless,
/area/derelict/annex)
"kp" = (
/obj/effect/landmark/tiles/damageturf,
/obj/item/stack/ore/slag,
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
/turf/simulated/floor/plating/airless,
/area/derelict/annex)
"kq" = (
+/obj/effect/decal/cleanable/dust,
/obj/structure/cable{
- d2 = 4;
- icon_state = "0-4"
- },
-/turf/simulated/floor/engine{
- name = "vacuum floor";
- nitrogen = 0.01;
- oxygen = 0.01
+ icon_state = "1-8"
},
-/area/derelict/annex)
+/turf/simulated/floor/plasteel,
+/area/derelict/common)
"kr" = (
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-4"
},
-/obj/machinery/door/airlock/external{
- name = "External Airlock"
+/turf/simulated/floor/plasteel{
+ icon_state = "hydrofloor"
},
-/turf/simulated/floor/engine,
-/area/derelict/annex)
+/area/derelict/common)
"ks" = (
-/obj/structure/window/reinforced,
-/obj/structure/window/reinforced{
- dir = 1
- },
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-2"
},
-/obj/effect/decal/cleanable/dirt,
-/turf/simulated/floor/plating,
-/area/derelict/annex)
+/turf/simulated/floor/plasteel,
+/area/derelict/common)
"kt" = (
/obj/machinery/door/airlock/external{
- name = "External Airlock"
- },
-/obj/structure/cable{
- icon_state = "4-8"
+ name = "External Airlock";
+ req_access = list(128,129,130,131)
},
/obj/machinery/door/poddoor/impassable{
id_tag = "ruslock";
@@ -4443,27 +4304,21 @@
name = "Central Annex Lockdown"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ku" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/warning_stripes/west,
/turf/simulated/floor/plasteel{
dir = 8;
icon_state = "caution"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"kv" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
/obj/structure/cable{
icon_state = "2-4"
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/common)
"kw" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4473,7 +4328,7 @@
icon_state = "rampbottom";
tag = "icon-stage_stairs"
},
-/area/derelict/annex)
+/area/derelict/engineer_area)
"kx" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -4484,70 +4339,77 @@
name = "Central Annex Lockdown"
},
/obj/machinery/door/airlock/shuttle{
- name = "Central Annex"
+ name = "Central Annex";
+ req_access = list(128,129,130,131)
},
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/engineer_area)
"ky" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/light/small,
/turf/simulated/floor/plasteel,
-/area/derelict/annex)
+/area/derelict/church)
"kz" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/machinery/door/airlock/shuttle{
- name = "Central Annex"
+ name = "Central Annex";
+ req_access = list(128,129,130,131)
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel,
-/area/derelict/crew_quarters)
+/area/derelict/church)
"kA" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/carpet,
-/area/derelict/crew_quarters)
+/area/derelict/church)
"kB" = (
+/obj/effect/decal/cleanable/dust,
/obj/structure/cable{
- icon_state = "1-8"
+ icon_state = "4-8"
},
/turf/simulated/floor/carpet,
-/area/derelict/crew_quarters)
+/area/derelict/church)
"kC" = (
/obj/structure/cable{
icon_state = "4-8"
},
/turf/simulated/floor/carpet,
-/area/derelict/crew_quarters)
+/area/derelict/church)
"kD" = (
/obj/structure/cable{
icon_state = "4-8"
},
/obj/structure/table/wood/fancy,
-/obj/item/storage/bible{
- layer = 4.1
- },
/obj/item/paper/djstation{
- info = "Я беспокоюсь о Тотстой. Его уже пятый раз за эту неделю отправляют в вытрезвитель, и сколько бы я ни приходил к нему, он может найти Бога только на дне стакана Тунгуской.
0)
- return FALSE
-
- if(!(type in D.viable_mobtypes))
- return -1 //for stupid fucking monkies
-
- return TRUE
-
-
-/mob/proc/ContractDisease(datum/disease/D)
- if(!CanContractDisease(D))
- return 0
- D.Contract(src)
-
-/mob/living/carbon/ContractDisease(datum/disease/D)
- if(!CanContractDisease(D))
- return 0
-
- var/obj/item/clothing/Cl = null
- var/passed = 1
-
- var/head_ch = 100
- var/body_ch = 100
- var/hands_ch = 25
- var/feet_ch = 25
-
- if(D.spread_flags & CONTACT_HANDS)
- head_ch = 0
- body_ch = 0
- hands_ch = 100
- feet_ch = 0
- if(D.spread_flags & CONTACT_FEET)
- head_ch = 0
- body_ch = 0
- hands_ch = 0
- feet_ch = 100
-
- if(prob(15/D.permeability_mod))
- return
-
- if(satiety > 0 && prob(satiety/10)) // positive satiety makes it harder to contract the disease.
- return
-
- var/target_zone = pick(head_ch;1,body_ch;2,hands_ch;3,feet_ch;4)
-
- if(istype(src, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = src
-
- switch(target_zone)
- if(1)
- if(isobj(H.head) && !istype(H.head, /obj/item/paper))
- Cl = H.head
- passed = prob((Cl.permeability_coefficient*100) - 1)
- if(passed && isobj(H.wear_mask))
- Cl = H.wear_mask
- passed = prob((Cl.permeability_coefficient*100) - 1)
- if(2)
- if(isobj(H.wear_suit))
- Cl = H.wear_suit
- passed = prob((Cl.permeability_coefficient*100) - 1)
- if(passed && isobj(slot_w_uniform))
- Cl = slot_w_uniform
- passed = prob((Cl.permeability_coefficient*100) - 1)
- if(3)
- if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS)
- Cl = H.wear_suit
- passed = prob((Cl.permeability_coefficient*100) - 1)
-
- if(passed && isobj(H.gloves))
- Cl = H.gloves
- passed = prob((Cl.permeability_coefficient*100) - 1)
- if(4)
- if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&FEET)
- Cl = H.wear_suit
- passed = prob((Cl.permeability_coefficient*100) - 1)
-
- if(passed && isobj(H.shoes))
- Cl = H.shoes
- passed = prob((Cl.permeability_coefficient*100) - 1)
-
-
- if(!passed && (D.spread_flags & AIRBORNE) && !internal)
- passed = (prob((50*D.permeability_mod) - 1))
-
- if(passed)
- D.Contract(src)
+ for(var/datum/disease/D2 in diseases)
+ if(D2.IsSame(disease_type_or_instance))
+ return TRUE
+ return FALSE
+/mob/proc/CureAllDiseases(need_immunity = TRUE)
+ for(var/datum/disease/D in diseases)
+ D.cure(need_immunity = need_immunity)
/**
- * Forces the mob to contract a virus. If the mob can have viruses. Ignores clothing and other protection
- * Returns TRUE if it succeeds. False if it doesn't
+ * A special checks for this type of mob
*
- * Arguments:
- * * D - the disease the mob will try to contract
+ * Returns:
+ * * TRUE - if can contract disease
+ * * FALSE - otherwise
*/
-//Same as ContractDisease, except never overidden clothes checks
-/mob/proc/ForceContractDisease(datum/disease/D)
- if(!CanContractDisease(D))
- return FALSE
- D.Contract(src)
+/mob/proc/CanContractDisease(datum/disease/D)
return TRUE
-
/mob/living/carbon/human/CanContractDisease(datum/disease/D)
- if((VIRUSIMMUNE in dna.species.species_traits) && !D.bypasses_immunity)
- return 0
+ if((VIRUSIMMUNE in dna.species.species_traits) && !D.ignore_immunity)
+ return FALSE
for(var/thing in D.required_organs)
if(!((locate(thing) in bodyparts) || (locate(thing) in internal_organs)))
- return 0
+ return FALSE
return ..()
-/mob/living/carbon/human/lesser/monkey/CanContractDisease(datum/disease/D)
- . = ..()
- if(. == -1)
- if(D.viable_mobtypes.Find(/mob/living/carbon/human))
- return 1 //this is stupid as fuck but because monkeys are only half the time actually subtypes of humans they need this
+/**
+ * Checking mob's protection against disease D by the chosen method in chosen zone
+ * Returns:
+ * * TRUE - mob has protected from the virus
+ * * FALSE - otherwise
+ */
+/mob/proc/CheckVirusProtection(datum/disease/virus/V, act_type = BITES|CONTACT|AIRBORNE, zone)
+ if(prob(15/V.permeability_mod))
+ return TRUE
+
+ if(satiety > 0 && prob(satiety/10))
+ return TRUE
+
+ //virus must to pass all the checks stated in act_type
+ if((act_type & BITES) && !CheckBitesProtection(V, zone))
+ return FALSE
+
+ if((act_type & CONTACT) && !CheckContactProtection(V, zone))
+ return FALSE
+
+ if((act_type & AIRBORNE) && !CheckAirborneProtection(V, zone))
+ return FALSE
+
+ return TRUE
+
+//Returns TRUE, if mob protected
+/mob/proc/CheckBitesProtection(datum/disease/virus/V, zone)
+ return FALSE
+
+/mob/proc/CheckContactProtection(datum/disease/virus/V, zone)
+ return FALSE
+
+/mob/proc/CheckAirborneProtection(datum/disease/virus/V, zone)
+ return FALSE
+
+/mob/living/CheckBitesProtection(datum/disease/virus/V, zone = BODY_ZONE_CHEST)
+ return ..() || prob(run_armor_check(zone, "melee") / V.permeability_mod)
+
+/mob/living/carbon/human/CheckContactProtection(datum/disease/virus/V, zone)
+ if(..())
+ return TRUE
+
+ var/zone_text
+ if(!zone)
+ zone_text = pick(40; "head", 40; "chest", 10; "l_arm", 10; "l_leg")
+ else
+ if(istype(zone, /obj/item/organ/external))
+ var/obj/item/organ/external/E = zone
+ zone_text = E.limb_name
+ else
+ zone_text = zone
+
+ switch(zone_text)
+ if("head", "eyes", "mouth")
+ if(ClothingVirusProtection(head) || ClothingVirusProtection(wear_mask))
+ return TRUE
+ if("chest", "groin", "tail", "wing")
+ if(ClothingVirusProtection(wear_suit) || ClothingVirusProtection(w_uniform))
+ return TRUE
+ if("l_arm", "r_arm", "l_hand", "r_hand")
+ if(istype(wear_suit) && (wear_suit.body_parts_covered & HANDS) && ClothingVirusProtection(wear_suit))
+ return TRUE
+ if(ClothingVirusProtection(gloves))
+ return TRUE
+ if("l_leg", "r_leg", "l_foot", "r_foot")
+ if(istype(wear_suit) && (wear_suit.body_parts_covered & FEET) && ClothingVirusProtection(wear_suit))
+ return TRUE
+ if(ClothingVirusProtection(shoes))
+ return TRUE
+
+ return FALSE
+
+/mob/living/carbon/human/CheckAirborneProtection(datum/disease/virus/V, zone)
+ if(..())
+ return TRUE
+
+ var/internals_mod = internal ? 1 : 0.2
+ var/permeability_mod = clamp((2 - V.permeability_mod), 0.1, 1)
+ var/mask_protection_mod = 1
+ if(wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH))
+ mask_protection_mod = 0.3
+ if(istype(wear_mask, /obj/item/clothing/mask/breath))
+ mask_protection_mod = 0.4
+ if(istype(wear_mask, /obj/item/clothing/mask/gas))
+ mask_protection_mod = 0.6
+ if(istype(wear_mask, /obj/item/clothing/mask/surgical) || istype(wear_mask, /obj/item/clothing/mask/breath/medical))
+ mask_protection_mod = 0.9
+
+ if(prob(100 * permeability_mod * internals_mod * mask_protection_mod))
+ return TRUE
+
+ return FALSE
+
+/mob/living/carbon/human/proc/ClothingVirusProtection(obj/item/Clothing)
+ //permeability_coefficient == 0.01 => 99% defense; permeability_coefficient == 1 => 0% defense
+ if(istype(Clothing) && prob(100 * (1 - Clothing.permeability_coefficient)))
+ return TRUE
+ return FALSE
diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm
index 3092d82f3e8..e5b2811a226 100644
--- a/code/datums/diseases/_disease.dm
+++ b/code/datums/diseases/_disease.dm
@@ -1,25 +1,8 @@
-
-#define VIRUS_SYMPTOM_LIMIT 6
-
//Visibility Flags
-#define VISIBLE 0
-#define HIDDEN_SCANNER 1
-#define HIDDEN_PANDEMIC 2
-
-//Disease Flags
-#define CURABLE 1
-#define CAN_CARRY 2
-#define CAN_RESIST 4
-
-//Spread Flags
-#define SPECIAL 1
-#define NON_CONTAGIOUS 2
-#define BLOOD 4
-#define CONTACT_FEET 8
-#define CONTACT_HANDS 16
-#define CONTACT_GENERAL 32
-#define AIRBORNE 64
-
+#define VISIBLE 0
+#define HIDDEN_HUD 1 //hidden from huds & medbots
+#define HIDDEN_SCANNER 2 //hidden from health analyzers & stationary body analyzers
+#define HIDDEN_PANDEMIC 4 //hidden from pandemic
//Severity Defines
#define NONTHREAT "No threat"
@@ -29,193 +12,253 @@
#define DANGEROUS "Dangerous!"
#define BIOHAZARD "BIOHAZARD THREAT!"
-
GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
-
/datum/disease
- //Flags
- var/visibility_flags = VISIBLE
- var/disease_flags = CURABLE|CAN_CARRY|CAN_RESIST
- var/spread_flags = AIRBORNE
-
//Fluff
- var/form = "Virus"
- var/name = "No disease"
+ var/form = "Болезнь"
+ var/name = "Unknown"
var/desc = ""
var/agent = "some microbes"
- var/spread_text = ""
- var/cure_text = ""
+ var/cure_text = null
+ var/additional_info = "Болезнь"
//Stages
+
+ /// Current stage of disease
var/stage = 1
- var/max_stages = 0
+ /// Count of stages of disease
+ var/max_stages = 5
+ /// Probability of moving to the next stage for a tick
var/stage_prob = 4
- /// The fraction of stages the virus must at least be at to show up on medical HUDs. Rounded up.
+
+ //Visibility
+ var/visibility_flags = VISIBLE
+ /// If NONTHREAT, not marked on HUD
+ var/severity = NONTHREAT
+
+ /// The fraction of stages the disease must at least be at to show up on medical HUDs. Rounded up.
var/discovery_threshold = 0.5
- /// If TRUE, this virus will show up on medical HUDs. Automatically set when it reaches mid-stage.
+ /// If TRUE, this disease will show up on medical HUDs. Automatically set when it reaches mid-stage.
var/discovered = FALSE
- //Other
- var/list/viable_mobtypes = list() //typepaths of viable mobs
- var/mob/living/carbon/affected_mob = null
- var/list/cures = list() //list of cures if the disease has the CURABLE flag, these are reagent ids
- var/infectivity = 65
- var/cure_chance = 8
- var/carrier = FALSE //If our host is only a carrier
- var/bypasses_immunity = FALSE //Does it skip species virus immunity check? Some things may diseases and not viruses
- var/virus_heal_resistant = FALSE // Some things aren't technically viruses/traditional diseases and should be immune to edge case cure methods, like healing viruses.
- var/permeability_mod = 1
- var/severity = NONTHREAT
- var/list/required_organs = list()
+ //Cure & immunity
+
+ /// Сan the disease be cured
+ var/curable = TRUE
+ /// List of cures if the disease has curable = TRUE, these are reagent ids
+ var/list/cures = list()
+ /// If FASLSE, you need one of any cure from the cures list. Otherwise, you need all the cures from the cure list
var/needs_all_cures = TRUE
- var/list/strain_data = list() //dna_spread special bullshit
+ /// Probability of cure for a tick
+ var/cure_prob = 8
+ /// Immunity can be developed from the disease
+ var/can_immunity = TRUE
+ /// Does it skip VIRUSIMMUNE trait check
+ var/ignore_immunity = FALSE
+ /// Immunity to Anti-Bodies Metabolism symptom
+ var/virus_heal_resistant = FALSE
+ /// Message when cured
+ var/cured_message = "You feel better."
+
+ //Mutations
+
+ /// Probability of mutation if the necessary reagents are in the body
var/mutation_chance = 1
+ /// Necessary reagents
var/list/mutation_reagents = list("mutagen")
+ /// List of diseases in which it can mutate
var/list/possible_mutations
+ //Other
+
+ /// Mob that is suffering from this disease
+ var/mob/living/affected_mob
+ /// Types of infectable mobs
+ var/list/infectable_mobtypes = list(/mob/living/carbon/human)
+ /// Required organs
+ var/list/required_organs = list()
+ /// If TRUE, disease can progress in dead mobs
+ var/can_progress_in_dead = FALSE
+ /// If TRUE, disease can contract dead mobs
+ var/can_contract_dead = FALSE
+ /// If TRUE, host not affected by virus, but can spread it (mostly for viruses)
+ var/carrier = FALSE
+ /// Infectable mob types, that can only be carriers
+ var/list/carrier_mobtypes = list()
+
+
+/datum/disease/New()
+ if(!cure_text)
+ var/reagents = list()
+ for(var/id in cures)
+ var/datum/reagent/R = GLOB.chemical_reagents_list[id]
+ if(istype(R))
+ reagents += R.name
+ cure_text = english_list(reagents, "Неизлечимо", needs_all_cures ? " & " : " or ")
+
/datum/disease/Destroy()
affected_mob = null
GLOB.active_diseases.Remove(src)
return ..()
+
+/**
+ * Main disease process, that executed every tick
+ *
+ * Returns:
+ * * TRUE - if process finished the work properlly
+ * * FALSE - if disease was deleted
+ */
/datum/disease/proc/stage_act()
- var/cure = has_cure()
+ if(!affected_mob)
+ return FALSE
- if(carrier && !cure)
- return TRUE
+ if(affected_mob?.stat == DEAD && !can_progress_in_dead)
+ return FALSE
+ var/cure = has_cure()
stage = min(stage, max_stages)
- if(!cure)
- if(prob(stage_prob))
- stage = min(stage + 1,max_stages)
- if(!discovered && stage >= CEILING(max_stages * discovery_threshold, 1)) // Once we reach a late enough stage, medical HUDs can pick us up even if we regress
- discovered = TRUE
- affected_mob.med_hud_set_status()
+ if(cure)
+ try_reduce_stage()
else
- if(prob(cure_chance))
- stage = max(stage - 1, 1)
+ try_increase_stage()
- if(disease_flags & CURABLE)
- if(cure && prob(cure_chance))
- cure()
- return FALSE
+ if(curable && cure && prob(cure_prob))
+ cure()
+ return FALSE
if(possible_mutations && prob(mutation_chance))
- mutate()
-
+ if(mutate())
+ return FALSE
return TRUE
-/datum/disease/proc/has_cure()
- if(!(disease_flags & CURABLE))
- return 0
+/datum/disease/proc/try_increase_stage()
+ if(prob(stage_prob))
+ stage = min(stage + 1, max_stages)
+ // Once we reach a late enough stage, medical HUDs can pick us up even if we regress
+ if(!discovered && stage >= CEILING(max_stages * discovery_threshold, 1))
+ discovered = TRUE
+ affected_mob.med_hud_set_status()
+/datum/disease/proc/try_reduce_stage()
+ if(prob(cure_prob))
+ stage = max(stage - 1, 1)
+
+/**
+ * Returns the number of reagents from the cures list that are in the body
+ */
+/datum/disease/proc/has_cure()
. = cures.len
for(var/C_id in cures)
- if(!affected_mob.reagents.has_reagent(C_id))
+ if(!affected_mob.reagents?.has_reagent(C_id))
.--
- if(!. || (needs_all_cures && . < cures.len))
+ if(. <= 0 || (needs_all_cures && . < cures.len))
return 0
-/datum/disease/proc/spread(force_spread = 0)
- if(!affected_mob)
- return
- if((spread_flags & SPECIAL || spread_flags & NON_CONTAGIOUS || spread_flags & BLOOD) && !force_spread)
- return
+/datum/disease/proc/cure(id = type, need_immunity = TRUE)
+ if(affected_mob)
+ if(can_immunity && need_immunity && !(id in affected_mob.resistances))
+ affected_mob.resistances += id
+ affected_mob.diseases -= src
+ affected_mob.med_hud_set_status()
+ if(cured_message)
+ to_chat(affected_mob, span_notice(cured_message))
+ qdel(src)
- if(affected_mob.reagents.has_reagent("spaceacillin") || (affected_mob.satiety > 0 && prob(affected_mob.satiety/10)))
- return
- var/spread_range = 1
+/datum/disease/proc/spread()
+ return
- if(force_spread)
- spread_range = force_spread
+/**
+ * Basic checks of the possibility of infecting a mob
+ */
+/datum/disease/proc/CanContract(mob/living/M, act_type, need_protection_check, zone)
+ . = FALSE
+ if(!M.CanContractDisease(src))
+ return FALSE
- if(spread_flags & AIRBORNE)
- spread_range++
+ if(M.stat == DEAD && !can_contract_dead)
+ return FALSE
- var/turf/T = affected_mob.loc
- if(istype(T))
- for(var/mob/living/carbon/C in oview(spread_range, affected_mob))
- var/turf/V = get_turf(C)
- if(V)
- while(TRUE)
- if(V == T)
- C.ContractDisease(src)
- break
- var/turf/Temp = get_step_towards(V, T)
- if(!V.CanAtmosPass(Temp))
- break
- V = Temp
+ if(GetDiseaseID() in M.resistances)
+ return FALSE
-/datum/disease/proc/Contract(mob/M)
- var/datum/disease/D = new type()
- M.viruses += D
- D.affected_mob = M
- GLOB.active_diseases += D //Add it to the active diseases list, now that it's actually in a mob and being processed.
-
- //Copy properties over. This is so edited diseases persist.
- var/list/skipped = list("affected_mob","holder","carrier","stage","type","parent_type","vars","transformed")
- for(var/V in D.vars)
- if(V in skipped)
- continue
- if(istype(D.vars[V],/list))
- var/list/L = vars[V]
- D.vars[V] = L.Copy()
- else
- D.vars[V] = vars[V]
+ if(M.HasDisease(src))
+ return FALSE
+
+ for(var/mobtype in infectable_mobtypes + carrier_mobtypes)
+ if(istype(M, mobtype))
+ . = TRUE
+
+ if(. && need_protection_check && M.CheckVirusProtection(src, act_type, zone))
+ . = FALSE
- D.affected_mob.med_hud_set_status()
return
-/datum/disease/proc/cure(resistance = TRUE)
- if(affected_mob)
- if(disease_flags & CAN_RESIST)
- if(!(type in affected_mob.resistances))
- affected_mob.resistances += type
- remove_virus()
- qdel(src)
+/**
+ * Attempt to infect a mob
+ * Arguments:
+ * * act_type - type of contract. Can be BITES, CONTACT, AIRBORNE or combination of them, for example CONTACT|AIRBORNE
+ * * is_carrier - make this mob a carrier of the virus
+ * * need_protection_check - check mob's clothing, internals, special masks etc
+ * * zone - zone of contact ("l_leg", "head", etc or /obj/item/organ/external)
+ * Returns:
+ * * /datum/disease/D - a new instance of the virus that contract the mob
+ * * FALSE - otherwise
+ */
+/datum/disease/proc/Contract(mob/living/M, act_type, is_carrier = FALSE, need_protection_check = FALSE, zone)
+ if(!CanContract(M, act_type, need_protection_check, zone))
+ return FALSE
+
+ var/datum/disease/D = Copy()
+ M.diseases += D
+ D.affected_mob = M
+ GLOB.active_diseases += D
+ D.carrier = is_carrier
+ D.affected_mob.med_hud_set_status()
+ return D
+
/datum/disease/proc/IsSame(datum/disease/D)
if(src.type == D.type)
- return 1
- return 0
+ return TRUE
+ return FALSE
/datum/disease/proc/Copy()
var/datum/disease/D = new type()
- D.strain_data = strain_data.Copy()
return D
/datum/disease/proc/GetDiseaseID()
return type
-/datum/disease/proc/IsSpreadByTouch()
- if(spread_flags & CONTACT_FEET || spread_flags & CONTACT_HANDS || spread_flags & CONTACT_GENERAL)
- return 1
- return 0
-
-//don't use this proc directly. this should only ever be called by cure() //nope
-/datum/disease/proc/remove_virus()
- affected_mob.viruses -= src //remove the datum from the list
- affected_mob.med_hud_set_status()
-
+/**
+ * Transform a disease into another, if the requirements are met
+ *
+ * Returns:
+ * * TRUE - if mutation was succesful
+ * * FALSE - otherwise
+ */
/datum/disease/proc/mutate()
var/datum/reagents/reagents = affected_mob.reagents
if(!reagents.reagent_list.len)
- return
+ return FALSE
for(var/R in mutation_reagents)
if(!reagents.has_reagent(R))
- return
+ return FALSE
//Here we have all the necessary reagents in affected_mob
var/type = pick(possible_mutations)
if(type)
- remove_virus()
- affected_mob.ForceContractDisease(new type)
+ affected_mob.diseases -= src
+ affected_mob.med_hud_set_status()
+ var/datum/disease/new_disease = new type
+ new_disease.Contract(affected_mob)
qdel(src)
+ return TRUE
diff --git a/code/datums/diseases/anxiety.dm b/code/datums/diseases/anxiety.dm
deleted file mode 100644
index 0d84afeab57..00000000000
--- a/code/datums/diseases/anxiety.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-/datum/disease/anxiety
- name = "Severe Anxiety"
- form = "Infection"
- max_stages = 4
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Ethanol"
- cures = list("ethanol")
- agent = "Excess Lepidopticides"
- viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/lesser/monkey)
- desc = "If left untreated subject will regurgitate butterflies."
- severity = MEDIUM
- possible_mutations = list(/datum/disease/beesease)
-
-/datum/disease/anxiety/stage_act()
- ..()
- switch(stage)
- if(2) //also changes say, see say.dm
- if(prob(5))
- to_chat(affected_mob, "You feel anxious.")
- if(3)
- if(prob(10))
- to_chat(affected_mob, "Your stomach flutters.")
- if(prob(5))
- to_chat(affected_mob, "You feel panicky.")
- if(prob(2))
- to_chat(affected_mob, "You're overtaken with panic!")
- affected_mob.AdjustConfused(rand(4 SECONDS, 6 SECONDS))
- if(4)
- if(prob(10))
- to_chat(affected_mob, "You feel butterflies in your stomach.")
- if(prob(5))
- affected_mob.visible_message("[affected_mob] stumbles around in a panic.", \
- "You have a panic attack!")
- affected_mob.AdjustConfused(rand(12 SECONDS, 16 SECONDS))
- affected_mob.AdjustJitter(rand(12 SECONDS, 16 SECONDS))
- if(prob(2))
- affected_mob.visible_message("[affected_mob] coughs up butterflies!", \
- "You cough up butterflies!")
- new /mob/living/simple_animal/butterfly(affected_mob.loc)
- new /mob/living/simple_animal/butterfly(affected_mob.loc)
- return
diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm
index bdbb0fe4455..4fa7169b8fd 100644
--- a/code/datums/diseases/appendicitis.dm
+++ b/code/datums/diseases/appendicitis.dm
@@ -1,35 +1,150 @@
/datum/disease/appendicitis
form = "Condition"
name = "Appendicitis"
- max_stages = 3
- cure_text = "Surgery"
agent = "Shitty Appendix"
- viable_mobtypes = list(/mob/living/carbon/human)
- permeability_mod = 1
desc = "If left untreated the subject will become very weak, and may vomit often."
- severity = "Dangerous!"
- disease_flags = CAN_CARRY|CAN_RESIST
- spread_flags = NON_CONTAGIOUS
+ cure_text = "Surgery"
+ stage_prob = 2
+ severity = DANGEROUS
+ curable = FALSE
+ can_immunity = FALSE
visibility_flags = HIDDEN_PANDEMIC
required_organs = list(/obj/item/organ/internal/appendix)
- bypasses_immunity = TRUE
+ ignore_immunity = TRUE
virus_heal_resistant = TRUE
+ var/ruptured = FALSE
/datum/disease/appendicitis/stage_act()
- ..()
+ if(!..())
+ return FALSE
+
+ var/mob/living/carbon/human/H = affected_mob
+ if(!istype(H))
+ return
+
+ var/obj/item/organ/internal/appendix/A = H.get_int_organ(/obj/item/organ/internal/appendix)
+ if(!istype(A))
+ cure()
+ return
+
+ if(!A.inflamed)
+ A.inflamed = TRUE
+ A.update_icon()
+
+ if(!ruptured && (A.germ_level >= INFECTION_LEVEL_THREE || A.status & ORGAN_DEAD))
+ rupture(H, A)
+
switch(stage)
- if(1)
- if(prob(5))
- affected_mob.emote("cough")
if(2)
- var/obj/item/organ/internal/appendix/A = affected_mob.get_int_organ(/obj/item/organ/internal/appendix)
- if(A)
- A.inflamed = 1
- A.update_icon()
- if(prob(3))
- to_chat(affected_mob, "You feel a stabbing pain in your abdomen!")
- affected_mob.Stun(rand(4 SECONDS, 6 SECONDS))
- affected_mob.adjustToxLoss(1)
+ if(A.germ_level < INFECTION_LEVEL_ONE)
+ A.germ_level = INFECTION_LEVEL_ONE
+ A.germ_level += rand(1, 4) * H.dna.species.germs_growth_rate
+
+ if(prob(2))
+ H.vomit()
+
+ if(prob(5))
+ A.receive_damage(1, silent = prob(65))
+
if(3)
- if(prob(1))
- affected_mob.vomit(95)
+ if(A.germ_level < INFECTION_LEVEL_ONE)
+ A.germ_level = INFECTION_LEVEL_ONE
+ A.germ_level += rand(2, 6) * H.dna.species.germs_growth_rate
+
+ if(prob(10))
+ A.receive_damage(1, silent = prob(45))
+
+ if(prob(3))
+ H.vomit()
+
+ if(prob(10))
+ H.emote("moan")
+
+ if(prob(5))
+ to_chat(H, span_warning("You feel a stabbing pain in your abdomen!"))
+ H.Stun(rand(2 SECONDS, 4 SECONDS))
+ H.Slowed(10 SECONDS, 5)
+ H.adjustToxLoss(1)
+
+ if(4)
+
+ if(A.germ_level < INFECTION_LEVEL_TWO)
+ A.germ_level = INFECTION_LEVEL_TWO
+ A.germ_level += rand(4, 10) * H.dna.species.germs_growth_rate
+
+ if(prob(10))
+ A.receive_damage(2, silent = 0)
+
+ if(prob(3))
+ H.vomit()
+
+ if(prob(15))
+ H.emote(pick("moan", "cry"))
+
+ if(prob(7))
+ to_chat(H, span_danger("You feel a stabbing pain in your abdomen!"))
+ H.Stun(rand(2 SECONDS, 4 SECONDS))
+ H.Slowed(15 SECONDS, 5)
+ H.adjustToxLoss(3)
+
+ if(5)
+ if(A.germ_level < INFECTION_LEVEL_TWO)
+ A.germ_level = INFECTION_LEVEL_TWO
+ A.germ_level += rand(6, 12) * H.dna.species.germs_growth_rate
+
+ H.adjustToxLoss(0.5)
+ if(H.IsSlowed())
+ H.AdjustSlowedDuration(30 SECONDS, bound_upper = 40 SECONDS)
+ else
+ H.Slowed(30 SECONDS, 5)
+
+ H.damageoverlaytemp = 30
+
+ if(prob(20))
+ A.receive_damage(3, silent = 0)
+
+ if(prob(5))
+ H.vomit()
+
+ if(prob(10))
+ H.emote(pick("moan", "cry"))
+
+ if(prob(8))
+ to_chat(H, span_danger("You feel a stabbing pain in your abdomen!"))
+ H.Stun(rand(2 SECONDS, 4 SECONDS))
+ H.Jitter(10 SECONDS)
+
+
+/datum/disease/appendicitis/proc/rupture(mob/living/carbon/human/H, obj/item/organ/internal/appendix/A)
+ ruptured = TRUE
+ A.necrotize()
+ stage = 5
+
+ var/obj/item/organ/external/parent = H.get_organ(check_zone(A.parent_organ))
+ if(istype(parent))
+ parent.receive_damage(25, used_weapon = "appendix rupture")
+ if(parent.germ_level < INFECTION_LEVEL_TWO)
+ parent.germ_level = INFECTION_LEVEL_TWO
+ for(var/obj/item/organ/internal/O in parent.internal_organs)
+ if(O.germ_level < INFECTION_LEVEL_TWO)
+ O.germ_level = INFECTION_LEVEL_TWO
+ O.receive_damage(10)
+
+ to_chat(H, span_userdanger("You feel a hellish pain in your abdomen, as if something is torn!"))
+ H.Stun(20 SECONDS)
+ H.emote("scream")
+ addtimer(CALLBACK(src, PROC_REF(fall), H, A), 10 SECONDS)
+
+/datum/disease/appendicitis/proc/fall(mob/living/carbon/human/H, obj/item/organ/internal/appendix/A)
+ to_chat(H, span_danger("You feel weakening..."))
+ H.Weaken(10 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(exhausted), H, A), 10 SECONDS)
+
+/datum/disease/appendicitis/proc/exhausted(mob/living/carbon/human/H, obj/item/organ/internal/appendix/A)
+ to_chat(H, span_danger("You feel weakening... Need to sleep"))
+ H.SetSleeping(40 SECONDS)
+ H.Slowed(200 SECONDS, 10)
+
+
+
+
diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm
deleted file mode 100644
index ff9a2408640..00000000000
--- a/code/datums/diseases/beesease.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/datum/disease/beesease
- name = "Beesease"
- form = "Infection"
- max_stages = 4
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Sugar"
- cures = list("sugar")
- agent = "Apidae Infection"
- viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/lesser/monkey)
- desc = "If left untreated subject will regurgitate bees."
- severity = DANGEROUS
- possible_mutations = list(/datum/disease/lycan)
-
-/datum/disease/beesease/stage_act()
- ..()
- switch(stage)
- if(2) //also changes say, see say.dm // no it doesn't, that's horrifyingly snowflakey
- if(prob(2))
- to_chat(affected_mob, "You taste honey in your mouth.")
- if(3)
- if(prob(10))
- to_chat(affected_mob, "Your stomach rumbles.")
- if(prob(2))
- to_chat(affected_mob, "Your stomach stings painfully.")
- if(prob(20))
- affected_mob.adjustToxLoss(2)
- if(4)
- if(prob(10))
- affected_mob.visible_message("[affected_mob] buzzes.", \
- "Your stomach buzzes violently!")
- if(prob(5))
- to_chat(affected_mob, "You feel something moving in your throat.")
- if(prob(1))
- affected_mob.visible_message("[affected_mob] coughs up a swarm of bees!", \
- "You cough up a swarm of bees!")
- new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc)
- //if(5)
- //Plus if you die, you explode into bees
- return
diff --git a/code/datums/diseases/berserker.dm b/code/datums/diseases/berserker.dm
index 81b3ca8cb72..ef2681690b7 100644
--- a/code/datums/diseases/berserker.dm
+++ b/code/datums/diseases/berserker.dm
@@ -1,21 +1,20 @@
/datum/disease/berserker
name = "Berserker"
+ desc = "Swearing, shouting, attacking nearby crew members uncontrollably."
+ agent = "Jagged Crystals"
+ cure_text = "Anti-Psychotics"
max_stages = 2
stage_prob = 5
- spread_text = "Non-Contagious"
- spread_flags = SPECIAL
- cure_text = "Anti-Psychotics"
cures = list("haloperidol")
- agent = "Jagged Crystals"
- cure_chance = 10
- viable_mobtypes = list(/mob/living/carbon/human)
- desc = "Swearing, shouting, attacking nearby crew members uncontrollably."
+ cure_prob = 10
severity = DANGEROUS
- disease_flags = CURABLE
- spread_flags = NON_CONTAGIOUS
+ can_immunity = FALSE
+ visibility_flags = HIDDEN_PANDEMIC
/datum/disease/berserker/stage_act()
- ..()
+ if(!..())
+ return FALSE
+
if(affected_mob.reagents.has_reagent("thc"))
to_chat(affected_mob, "You mellow out.")
cure()
diff --git a/code/datums/diseases/brainrot.dm b/code/datums/diseases/brainrot.dm
deleted file mode 100644
index 167ab190a08..00000000000
--- a/code/datums/diseases/brainrot.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-/datum/disease/brainrot
- name = "Brainrot"
- max_stages = 4
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Mannitol"
- cures = list("mannitol")
- agent = "Cryptococcus Cosmosis"
- viable_mobtypes = list(/mob/living/carbon/human)
- cure_chance = 15//higher chance to cure, since two reagents are required
- desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
- required_organs = list(/obj/item/organ/internal/brain)
- severity = DANGEROUS
- mutation_reagents = list("mutagen", "neurotoxin2")
- possible_mutations = list(/datum/disease/kuru, /datum/disease/advance/preset/mind_restoration/, /datum/disease/transformation/jungle_fever)
-
-/datum/disease/brainrot/stage_act() //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist -ACTUALLY Removed rather than commented out, I don't see it returning - RR
- ..()
-
- switch(stage)
- if(2)
- if(prob(2))
- affected_mob.emote("blink")
- if(prob(2))
- affected_mob.emote("yawn")
- if(prob(2))
- to_chat(affected_mob, "You don't feel like yourself.")
- if(prob(5))
- affected_mob.adjustBrainLoss(1)
- if(3)
- if(prob(2))
- affected_mob.emote("stare")
- if(prob(2))
- affected_mob.emote("drool")
- if(prob(10) && affected_mob.getBrainLoss()<=98)//shouldn't brainpain you to death now
- affected_mob.adjustBrainLoss(2)
- if(prob(2))
- to_chat(affected_mob, "Your try to remember something important...but can't.")
-
- if(4)
- if(prob(2))
- affected_mob.emote("stare")
- if(prob(2))
- affected_mob.emote("drool")
- if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't brainpain you to death now
- affected_mob.adjustBrainLoss(3)
- if(prob(2))
- to_chat(affected_mob, "Strange buzzing fills your head, removing all thoughts.")
- if(prob(3))
- to_chat(affected_mob, "You lose consciousness...")
- affected_mob.visible_message("[affected_mob] suddenly collapses")
- affected_mob.Paralyse(rand(10 SECONDS, 20 SECONDS))
- if(prob(1))
- affected_mob.emote("snore")
- if(prob(15))
- affected_mob.AdjustStuttering(6 SECONDS)
-
- return
diff --git a/code/datums/diseases/cold.dm b/code/datums/diseases/cold.dm
deleted file mode 100644
index 6b05014cc6e..00000000000
--- a/code/datums/diseases/cold.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/datum/disease/cold
- name = "The Cold"
- max_stages = 3
- spread_flags = AIRBORNE
- cure_text = "Rest & Spaceacillin"
- cures = list("spaceacillin")
- agent = "XY-rhinovirus"
- viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/lesser/monkey)
- permeability_mod = 0.5
- desc = "If left untreated the subject will contract the flu."
- severity = MINOR
-
-/datum/disease/cold/stage_act()
- ..()
- switch(stage)
- if(2)
-/*
- if(affected_mob.sleeping && prob(40)) //removed until sleeping is fixed
- to_chat(affected_mob, "You feel better.")
- cure()
- return
-*/
- if(affected_mob.lying && prob(40)) //changed FROM prob(10) until sleeping is fixed
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(1) && prob(5))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(1))
- affected_mob.emote("sneeze")
- if(prob(1))
- affected_mob.emote("cough")
- if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
- if(prob(1))
- to_chat(affected_mob, "Mucous runs down the back of your throat.")
- if(3)
-/*
- if(affected_mob.sleeping && prob(25)) //removed until sleeping is fixed
- to_chat(affected_mob, "You feel better.")
- cure()
- return
-*/
- if(affected_mob.lying && prob(25)) //changed FROM prob(5) until sleeping is fixed
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(1) && prob(1))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(1))
- affected_mob.emote("sneeze")
- if(prob(1))
- affected_mob.emote("cough")
- if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
- if(prob(1))
- to_chat(affected_mob, "Mucous runs down the back of your throat.")
- if(prob(1) && prob(50))
- if(!affected_mob.resistances.Find(/datum/disease/flu))
- var/datum/disease/Flu = new /datum/disease/flu
- affected_mob.ContractDisease(Flu)
- cure()
diff --git a/code/datums/diseases/cold9.dm b/code/datums/diseases/cold9.dm
deleted file mode 100644
index 60af82e6939..00000000000
--- a/code/datums/diseases/cold9.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/datum/disease/cold9
- name = "The Cold"
- max_stages = 3
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Common Cold Anti-bodies & Spaceacillin"
- cures = list("spaceacillin")
- agent = "ICE9-rhinovirus"
- viable_mobtypes = list(/mob/living/carbon/human)
- desc = "If left untreated the subject will slow, as if partly frozen."
- severity = MEDIUM
-
-/datum/disease/cold9/stage_act()
- ..()
- switch(stage)
- if(2)
- affected_mob.bodytemperature -= 10
- if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(1))
- affected_mob.emote("sneeze")
- if(prob(1))
- affected_mob.emote("cough")
- if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
- if(prob(5))
- to_chat(affected_mob, "You feel stiff.")
- if(3)
- affected_mob.bodytemperature -= 20
- if(prob(1))
- affected_mob.emote("sneeze")
- if(prob(1))
- affected_mob.emote("cough")
- if(prob(1))
- to_chat(affected_mob, "Your throat feels sore.")
- if(prob(10))
- to_chat(affected_mob, "You feel stiff.")
diff --git a/code/datums/diseases/critical.dm b/code/datums/diseases/critical.dm
index b9503cbad77..74831e95cc8 100644
--- a/code/datums/diseases/critical.dm
+++ b/code/datums/diseases/critical.dm
@@ -1,6 +1,14 @@
/datum/disease/critical
+ visibility_flags = HIDDEN_PANDEMIC
+ can_immunity = FALSE
+ ignore_immunity = TRUE
+ virus_heal_resistant = TRUE
+ severity = DANGEROUS
/datum/disease/critical/stage_act() //overriden to ensure unique behavior
+ if(affected_mob?.stat == DEAD)
+ return FALSE
+
stage = min(stage, max_stages)
if(prob(stage_prob))
@@ -14,88 +22,74 @@
/datum/disease/critical/has_cure()
for(var/C_id in cures)
if(affected_mob.reagents.has_reagent(C_id))
- if(prob(cure_chance))
+ if(prob(cure_prob))
return TRUE
return FALSE
/datum/disease/critical/shock
name = "Shock"
form = "Medical Emergency"
- spread_text = "The patient is in shock"
+ additional_info = "The patient is in shock"
max_stages = 3
- spread_flags = SPECIAL
- cure_text = "Saline-Glucose Solution"
- cures = list("salglu_solution")
- cure_chance = 10
- viable_mobtypes = list(/mob/living/carbon/human)
stage_prob = 6
- severity = DANGEROUS
- disease_flags = CURABLE
- bypasses_immunity = TRUE
- virus_heal_resistant = TRUE
+ cures = list("salglu_solution")
+ cure_prob = 10
/datum/disease/critical/shock/stage_act()
if(..())
if(affected_mob.health >= 25 && affected_mob.nutrition >= NUTRITION_LEVEL_HYPOGLYCEMIA)
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
switch(stage)
if(1)
if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(8))
affected_mob.emote(pick("shiver", "pale", "moan"))
if(prob(5))
- to_chat(affected_mob, "You feel weak!")
+ to_chat(affected_mob, span_danger("You feel weak!"))
if(2)
if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(8))
affected_mob.emote(pick("shiver", "pale", "moan", "shudder", "tremble"))
if(prob(5))
- to_chat(affected_mob, "You feel absolutely terrible!")
+ to_chat(affected_mob, span_danger("You feel absolutely terrible!"))
if(prob(5))
affected_mob.emote("faint", "collapse", "groan")
if(3)
if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(8))
affected_mob.emote(pick("shudder", "pale", "tremble", "groan", "bshake"))
if(prob(5))
- to_chat(affected_mob, "You feel horrible!")
+ to_chat(affected_mob, span_danger("You feel horrible!"))
if(prob(5))
affected_mob.emote(pick("faint", "collapse", "groan"))
if(prob(7))
- to_chat(affected_mob, "You can't breathe!")
+ to_chat(affected_mob, span_danger("You can't breathe!"))
affected_mob.AdjustLoseBreath(2 SECONDS)
if(prob(5))
var/datum/disease/D = new /datum/disease/critical/heart_failure
- affected_mob.ForceContractDisease(D)
+ D.Contract(affected_mob)
/datum/disease/critical/heart_failure
name = "Cardiac Failure"
form = "Medical Emergency"
- spread_text = "The patient is having a cardiac emergency"
+ additional_info = "The patient is having a cardiac emergency"
max_stages = 3
- spread_flags = SPECIAL
- cure_text = "Atropine, Epinephrine, or Heparin"
+ stage_prob = 5
cures = list("atropine", "epinephrine", "heparin")
- cure_chance = 10
+ cure_prob = 10
needs_all_cures = FALSE
- viable_mobtypes = list(/mob/living/carbon/human)
- stage_prob = 5
- severity = DANGEROUS
- disease_flags = CURABLE
required_organs = list(/obj/item/organ/internal/heart)
- bypasses_immunity = TRUE
- virus_heal_resistant = TRUE
/datum/disease/critical/heart_failure/has_cure()
if(affected_mob.has_status_effect(STATUS_EFFECT_EXERCISED))
@@ -108,27 +102,27 @@
switch(stage)
if(1)
if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(8))
affected_mob.emote(pick("pale", "shudder"))
if(prob(5))
- to_chat(affected_mob, "Your arm hurts!")
+ to_chat(affected_mob, span_danger("Your arm hurts!"))
else if(prob(5))
- to_chat(affected_mob, "Your chest hurts!")
+ to_chat(affected_mob, span_danger("Your chest hurts!"))
if(2)
if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
+ to_chat(affected_mob, span_notice("You feel better."))
cure()
return
if(prob(8))
affected_mob.emote(pick("pale", "groan"))
if(prob(5))
- to_chat(affected_mob, "Your heart lurches in your chest!")
+ to_chat(affected_mob, span_danger("Your heart lurches in your chest!"))
affected_mob.AdjustLoseBreath(2 SECONDS)
if(prob(3))
- to_chat(affected_mob, "Your heart stops beating!")
+ to_chat(affected_mob, span_danger("Your heart stops beating!"))
affected_mob.AdjustLoseBreath(6 SECONDS)
if(prob(5))
affected_mob.emote(pick("faint", "collapse", "groan"))
@@ -143,16 +137,10 @@
/datum/disease/critical/hypoglycemia
name = "Hypoglycemia"
form = "Medical Emergency"
+ additional_info = "The patient has low blood sugar."
max_stages = 3
- spread_flags = SPECIAL
- spread_text = "The patient has low blood sugar."
- cure_text = "Eating or administration of vitamins or nutrients"
- viable_mobtypes = list(/mob/living/carbon/human)
stage_prob = 1
- severity = DANGEROUS
- disease_flags = CURABLE
- bypasses_immunity = TRUE
- virus_heal_resistant = TRUE
+ cure_text = "Eating or administration of vitamins or nutrients"
/datum/disease/critical/hypoglycemia/has_cure()
if(ishuman(affected_mob))
@@ -168,37 +156,37 @@
if(isLivingSSD(affected_mob)) // We don't want AFK people dying from this.
return
if(affected_mob.nutrition > NUTRITION_LEVEL_HYPOGLYCEMIA)
- to_chat(affected_mob, "You feel a lot better!")
+ to_chat(affected_mob, span_notice("You feel a lot better!"))
cure()
return
switch(stage)
if(1)
if(prob(4))
- to_chat(affected_mob, "You feel hungry!")
+ to_chat(affected_mob, span_warning("You feel hungry!"))
if(prob(2))
- to_chat(affected_mob, "You have a headache!")
+ to_chat(affected_mob, span_warning("You have a headache!"))
if(prob(2))
- to_chat(affected_mob, "You feel [pick("anxious", "depressed")]!")
+ to_chat(affected_mob, span_warning("You feel [pick("anxious", "depressed")]!"))
if(2)
if(prob(4))
- to_chat(affected_mob, "You feel like everything is wrong with your life!")
+ to_chat(affected_mob, span_warning("You feel like everything is wrong with your life!"))
if(prob(5))
affected_mob.Slowed(rand(8 SECONDS, 32 SECONDS))
- to_chat(affected_mob, "You feel [pick("tired", "exhausted", "sluggish")].")
+ to_chat(affected_mob, span_warning("You feel [pick("tired", "exhausted", "sluggish")]."))
if(prob(5))
affected_mob.Weaken(12 SECONDS)
affected_mob.Stuttering(20 SECONDS)
- to_chat(affected_mob, "You feel [pick("numb", "confused", "dizzy", "lightheaded")].")
+ to_chat(affected_mob, span_warning("You feel [pick("numb", "confused", "dizzy", "lightheaded")]."))
affected_mob.emote("collapse")
if(3)
if(prob(1))
var/datum/disease/D = new /datum/disease/critical/shock
- affected_mob.ForceContractDisease(D)
+ D.Contract(affected_mob)
if(prob(12))
affected_mob.Weaken(12 SECONDS)
affected_mob.Stuttering(20 SECONDS)
- to_chat(affected_mob, "You feel [pick("numb", "confused", "dizzy", "lightheaded")].")
+ to_chat(affected_mob, span_warning("You feel [pick("numb", "confused", "dizzy", "lightheaded")]."))
affected_mob.emote("collapse")
if(prob(12))
- to_chat(affected_mob, "You feel [pick("tired", "exhausted", "sluggish")].")
+ to_chat(affected_mob, span_warning("You feel [pick("tired", "exhausted", "sluggish")]."))
affected_mob.Slowed(rand(8 SECONDS, 32 SECONDS))
diff --git a/code/datums/diseases/fake_gbs.dm b/code/datums/diseases/fake_gbs.dm
deleted file mode 100644
index 699fc2d2567..00000000000
--- a/code/datums/diseases/fake_gbs.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/datum/disease/fake_gbs
- name = "GBS"
- max_stages = 5
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Diphenhydramine & Sulfur"
- cures = list("diphenhydramine","sulfur")
- agent = "Gravitokinetic Bipotential SADS-"
- viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/lesser/monkey)
- desc = "If left untreated death will occur."
- severity = BIOHAZARD
-
-/datum/disease/fake_gbs/stage_act()
- ..()
- switch(stage)
- if(2)
- if(prob(1))
- affected_mob.emote("sneeze")
- if(3)
- if(prob(5))
- affected_mob.emote("cough")
- else if(prob(5))
- affected_mob.emote("gasp")
- if(prob(10))
- to_chat(affected_mob, "You're starting to feel very weak...")
- if(4)
- if(prob(10))
- affected_mob.emote("cough")
-
- if(5)
- if(prob(10))
- affected_mob.emote("cough")
diff --git a/code/datums/diseases/flu.dm b/code/datums/diseases/flu.dm
deleted file mode 100644
index e9feee5094c..00000000000
--- a/code/datums/diseases/flu.dm
+++ /dev/null
@@ -1,52 +0,0 @@
-/datum/disease/flu
- name = "The Flu"
- max_stages = 3
- spread_text = "Airborne"
- cure_text = "Spaceacillin"
- cures = list("spaceacillin")
- cure_chance = 10
- agent = "H13N1 flu virion"
- viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/lesser/monkey)
- permeability_mod = 0.75
- desc = "If left untreated the subject will feel quite unwell."
- severity = MEDIUM
-
-/datum/disease/flu/stage_act()
- ..()
- switch(stage)
- if(2)
- if(affected_mob.lying && prob(20))
- to_chat(affected_mob, "You feel better.")
- stage--
- return
- if(prob(1))
- affected_mob.emote("sneeze")
- if(prob(1))
- affected_mob.emote("cough")
- if(prob(1))
- to_chat(affected_mob, "Your muscles ache.")
- if(prob(20))
- affected_mob.take_organ_damage(1)
- if(prob(1))
- to_chat(affected_mob, "Your stomach hurts.")
- if(prob(20))
- affected_mob.adjustToxLoss(1)
-
- if(3)
- if(affected_mob.lying && prob(15))
- to_chat(affected_mob, "You feel better.")
- stage--
- return
- if(prob(1))
- affected_mob.emote("sneeze")
- if(prob(1))
- affected_mob.emote("cough")
- if(prob(1))
- to_chat(affected_mob, "Your muscles ache.")
- if(prob(20))
- affected_mob.take_organ_damage(1)
- if(prob(1))
- to_chat(affected_mob, "Your stomach hurts.")
- if(prob(20))
- affected_mob.adjustToxLoss(1)
- return
diff --git a/code/datums/diseases/food_poisoning.dm b/code/datums/diseases/food_poisoning.dm
index dfa58264b97..334279bb5e7 100644
--- a/code/datums/diseases/food_poisoning.dm
+++ b/code/datums/diseases/food_poisoning.dm
@@ -1,72 +1,62 @@
/datum/disease/food_poisoning
name = "Food Poisoning"
+ agent = "Salmonella"
+ desc = "Nausea, sickness, and vomitting."
max_stages = 3
stage_prob = 5
- spread_text = "Non-Contagious"
- spread_flags = SPECIAL
- cure_text = "Sleep"
- agent = "Salmonella"
+ cure_text = "Proper diet & sleep"
cures = list("chicken_soup")
- cure_chance = 10
- viable_mobtypes = list(/mob/living/carbon/human)
- desc = "Nausea, sickness, and vomitting."
+ cure_prob = 100 //override in has_cure()
severity = MINOR
- disease_flags = CURABLE
- spread_flags = NON_CONTAGIOUS
+ can_immunity = FALSE
+ ignore_immunity = TRUE
virus_heal_resistant = TRUE
- possible_mutations = list(/datum/disease/tuberculosis)
+ visibility_flags = HIDDEN_PANDEMIC
+ possible_mutations = list(/datum/disease/virus/tuberculosis)
/datum/disease/food_poisoning/stage_act()
- ..()
- if(affected_mob.IsSleeping() && prob(33))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
+ if(!..())
+ return FALSE
+
switch(stage)
if(1)
if(prob(5))
- to_chat(affected_mob, "Your stomach feels weird.")
+ to_chat(affected_mob, span_danger("Your stomach feels weird."))
if(prob(5))
- to_chat(affected_mob, "You feel queasy.")
+ to_chat(affected_mob, span_danger("You feel queasy."))
if(2)
- if(affected_mob.IsSleeping() && prob(40))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
if(prob(10))
affected_mob.emote("groan")
if(prob(5))
- to_chat(affected_mob, "Your stomach aches.")
+ to_chat(affected_mob, span_danger("Your stomach aches."))
if(prob(5))
- to_chat(affected_mob, "You feel nauseous.")
+ to_chat(affected_mob, span_danger("You feel nauseous."))
if(3)
- if(affected_mob.IsSleeping() && prob(25))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(1) && prob(10))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
if(prob(10))
affected_mob.emote("moan")
if(prob(10))
affected_mob.emote("groan")
if(prob(1))
- to_chat(affected_mob, "Your stomach hurts.")
+ to_chat(affected_mob, span_danger("Your stomach hurts."))
if(prob(1))
- to_chat(affected_mob, "You feel sick.")
+ to_chat(affected_mob, span_danger("You feel sick."))
if(prob(5))
if(affected_mob.nutrition > 10)
- affected_mob.visible_message("[affected_mob] vomits on the floor profusely!")
+ affected_mob.visible_message(span_danger("[affected_mob] vomits on the floor profusely!"))
affected_mob.fakevomit(no_text = 1)
affected_mob.adjust_nutrition(-rand(3,5))
else
- to_chat(affected_mob, "Your stomach lurches painfully!")
- affected_mob.visible_message("[affected_mob] gags and retches!")
+ to_chat(affected_mob, span_danger("Your stomach lurches painfully!"))
+ affected_mob.visible_message(span_danger("[affected_mob] gags and retches!"))
affected_mob.Stun(rand(4 SECONDS, 8 SECONDS))
affected_mob.Weaken(rand(4 SECONDS, 8 SECONDS))
+
+/datum/disease/food_poisoning/has_cure()
+ if(..())
+ if(affected_mob.IsSleeping())
+ return prob(80 - 15 * stage)
+ return prob(8)
+ else
+ if(affected_mob.IsSleeping())
+ return prob(30 - 7.5 * stage)
+ return prob(1) && prob(50)
diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm
deleted file mode 100644
index 19d4c287427..00000000000
--- a/code/datums/diseases/gbs.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/datum/disease/gbs
- name = "GBS"
- max_stages = 5
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Diphenhydramine & Sulfur"
- cures = list("diphenhydramine","sulfur")
- cure_chance = 15//higher chance to cure, since two reagents are required
- agent = "Gravitokinetic Bipotential SADS+"
- viable_mobtypes = list(/mob/living/carbon/human)
- disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
- permeability_mod = 1
- severity = BIOHAZARD
-
-/datum/disease/gbs/stage_act()
- ..()
- switch(stage)
- if(2)
- if(prob(45))
- affected_mob.adjustToxLoss(5)
- if(prob(1))
- affected_mob.emote("sneeze")
- if(3)
- if(prob(5))
- affected_mob.emote("cough")
- else if(prob(5))
- affected_mob.emote("gasp")
- if(prob(10))
- to_chat(affected_mob, "You're starting to feel very weak...")
- if(4)
- if(prob(10))
- affected_mob.emote("cough")
- affected_mob.adjustToxLoss(5)
- if(5)
- to_chat(affected_mob, "Your body feels as if it's trying to rip itself open...")
- if(prob(50))
- affected_mob.delayed_gib()
- else
- return
-
-/datum/disease/gbs/curable
- name = "Non-Contagious GBS"
- stage_prob = 5
- spread_text = "Non-Contagious"
- spread_flags = SPECIAL
- cure_text = "Cryoxadone"
- cures = list("cryoxadone")
- cure_chance = 10
- agent = "gibbis"
- spread_flags = NON_CONTAGIOUS
- disease_flags = CURABLE
diff --git a/code/datums/diseases/kingstons.dm b/code/datums/diseases/kingstons.dm
deleted file mode 100644
index 34a2951a546..00000000000
--- a/code/datums/diseases/kingstons.dm
+++ /dev/null
@@ -1,100 +0,0 @@
-/datum/disease/kingstons
- name = "Kingstons Syndrome"
- max_stages = 4
- spread_text = "Airborne"
- cure_text = "Milk"
- cures = list("milk")
- cure_chance = 50
- agent = "Nya Virus"
- viable_mobtypes = list(/mob/living/carbon/human)
- permeability_mod = 0.75
- desc = "If left untreated the subject will turn into a feline. In felines it has... OTHER... effects."
- severity = DANGEROUS
- mutation_reagents = list("mutagen", "radium")
- possible_mutations = list(/datum/disease/kingstons_advanced)
-
-/datum/disease/kingstons/stage_act()
- ..()
- switch(stage)
- if(1)
- if(prob(10))
- if(istajaran(affected_mob))
- to_chat(affected_mob, "You feel good.")
- else
- to_chat(affected_mob, "You feel like playing with string.")
- if(2)
- if(prob(10))
- if(istajaran(affected_mob))
- to_chat(affected_mob, "Something in your throat itches.")
- else
- to_chat(affected_mob, "You NEED to find a mouse.")
- if(3)
- if(prob(10))
- if(istajaran(affected_mob))
- to_chat(affected_mob, "You feel something in your throat!")
- affected_mob.emote("cough")
- else
- affected_mob.say(pick(list("Mew", "Meow!", "Nya!~")))
- if(4)
- if(prob(5))
- if(istajaran(affected_mob))
- affected_mob.visible_message("[affected_mob] coughs up a hairball!", \
- "You cough up a hairball!")
- affected_mob.Stun(10 SECONDS)
- else
- affected_mob.visible_message("[affected_mob]'s form contorts into something more feline!", \
- "YOU TURN INTO A TAJARAN!")
- var/mob/living/carbon/human/catface = affected_mob
- catface.set_species(/datum/species/tajaran, retain_damage = TRUE)
-
-
-/datum/disease/kingstons_advanced //this used to be directly a subtype of kingstons, which sounds nice, but it ment that it would *turn you into a tarjaran always and have normal kingstons stage act* Don't make virusus subtypes unless the base virus does nothing.
- name = "Advanced Kingstons Syndrome"
- max_stages = 4
- spread_text = "Airborne"
- cure_text = "Plasma"
- cures = list("plasma")
- cure_chance = 50
- agent = "AMB45DR Bacteria"
- viable_mobtypes = list(/mob/living/carbon/human)
- permeability_mod = 0.75
- desc = "If left untreated the subject will mutate to a different species."
- severity = BIOHAZARD
- var/list/virspecies = list(/datum/species/human, /datum/species/tajaran, /datum/species/unathi,/datum/species/skrell, /datum/species/vulpkanin, /datum/species/diona) //no karma races sorrys.
- var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay")
- var/datum/species/chosentype
- var/chosensuff
- possible_mutations = null
-
-/datum/disease/kingstons_advanced/New()
- chosentype = pick(virspecies)
- chosensuff = pick(virsuffix)
-
- name = "[initial(chosentype.name)] [chosensuff]"
-
-/datum/disease/kingstons_advanced/stage_act()
- ..()
- if(ishuman(affected_mob))
- var/mob/living/carbon/human/twisted = affected_mob
- switch(stage)
- if(1)
- if(prob(10))
- to_chat(twisted, "You feel awkward.")
- if(2)
- if(prob(10))
- to_chat(twisted, "You itch.")
- if(3)
- if(prob(10))
- to_chat(twisted, "Your skin starts to flake!")
-
- if(4)
- if(prob(5))
- if(!istype(twisted.dna.species, chosentype))
- twisted.visible_message("[twisted]'s skin splits and form contorts!", \
- "Your body mutates into a [initial(chosentype.name)]!")
- twisted.set_species(chosentype, retain_damage = TRUE)
- else
- twisted.visible_message("[twisted] scratches at thier skin!", \
- "You scratch your skin to try not to itch!")
- twisted.adjustBruteLoss(-5)
- twisted.adjustStaminaLoss(5)
diff --git a/code/datums/diseases/kuru.dm b/code/datums/diseases/kuru.dm
index 3091e2bc12e..ed4c4bce1ab 100644
--- a/code/datums/diseases/kuru.dm
+++ b/code/datums/diseases/kuru.dm
@@ -1,22 +1,20 @@
/datum/disease/kuru
- form = "Disease"
name = "Space Kuru"
- max_stages = 4
- stage_prob = 5
- spread_text = "Non-Contagious"
- spread_flags = SPECIAL
- cure_text = "Incurable"
agent = "Prions"
- viable_mobtypes = list(/mob/living/carbon/human)
desc = "Uncontrollable laughing."
+ max_stages = 4
+ stage_prob = 5
severity = BIOHAZARD
- spread_flags = NON_CONTAGIOUS
- disease_flags = CAN_CARRY
- bypasses_immunity = TRUE //Kuru is a prion disorder, not a virus
+ visibility_flags = HIDDEN_PANDEMIC
+ curable = FALSE
+ can_immunity = FALSE
+ ignore_immunity = TRUE //Kuru is a prion disorder, not a virus
virus_heal_resistant = TRUE
/datum/disease/kuru/stage_act()
- ..()
+ if(!..())
+ return FALSE
+
switch(stage)
if(1)
if(prob(50))
@@ -25,22 +23,22 @@
affected_mob.Jitter(50 SECONDS)
if(2)
if(prob(50))
- affected_mob.visible_message("[affected_mob] laughs uncontrollably!")
+ affected_mob.visible_message(span_danger("[affected_mob] laughs uncontrollably!"))
affected_mob.Weaken(20 SECONDS)
affected_mob.Jitter(500 SECONDS)
if(3)
if(prob(25))
- to_chat(affected_mob, "You feel like you are about to drop dead!")
- to_chat(affected_mob, "Your body convulses painfully!")
+ to_chat(affected_mob, span_danger("You feel like you are about to drop dead!"))
+ to_chat(affected_mob, span_danger("Your body convulses painfully!"))
affected_mob.adjustBruteLoss(5)
affected_mob.adjustOxyLoss(5)
affected_mob.Weaken(20 SECONDS)
affected_mob.Jitter(500 SECONDS)
- affected_mob.visible_message("[affected_mob] laughs uncontrollably!")
+ affected_mob.visible_message(span_danger("[affected_mob] laughs uncontrollably!"))
if(4)
if(prob(25))
- to_chat(affected_mob, "You feel like you are going to die!")
+ to_chat(affected_mob, span_danger("You feel like you are going to die!"))
affected_mob.adjustOxyLoss(75)
affected_mob.adjustBruteLoss(75)
affected_mob.Weaken(20 SECONDS)
- affected_mob.visible_message("[affected_mob] laughs uncontrollably!")
+ affected_mob.visible_message(span_danger("[affected_mob] laughs uncontrollably!"))
diff --git a/code/datums/diseases/lycancoughy.dm b/code/datums/diseases/lycancoughy.dm
deleted file mode 100644
index ebd649adc0d..00000000000
--- a/code/datums/diseases/lycancoughy.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/datum/disease/lycan
- name = "Lycancoughy"
- form = "Infection"
- max_stages = 4
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Ethanol"
- cures = list("ethanol")
- agent = "Excess Snuggles"
- viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/lesser/monkey)
- desc = "If left untreated subject will regurgitate... puppies."
- severity = MEDIUM
- var/barklimit = 0
-
-/datum/disease/lycan/stage_act()
- ..()
- switch(stage)
- if(2) //also changes say, see say.dm
- if(prob(5))
- to_chat(affected_mob, "You itch.")
- affected_mob.emote("cough")
- if(3)
- if(prob(10))
- to_chat(affected_mob, "You hear faint barking.")
- if(prob(5))
- to_chat(affected_mob, "You crave meat.")
- affected_mob.emote("cough")
- if(prob(2))
- to_chat(affected_mob, "Your stomach growls!")
- if(4)
- if(prob(10))
- to_chat(affected_mob, "Your stomach barks?!")
- if(prob(5))
- affected_mob.visible_message("[affected_mob] howls!", \
- "You howl!")
- affected_mob.AdjustConfused(rand(12 SECONDS, 16 SECONDS))
- if(prob(3) && barklimit <= 10)
- var/list/puppytype = list(/mob/living/simple_animal/pet/dog/corgi/puppy, /mob/living/simple_animal/pet/dog/pug, /mob/living/simple_animal/pet/dog/fox)
- var/mob/living/puppypicked = pick(puppytype)
- affected_mob.visible_message("[affected_mob] coughs up [initial(puppypicked.name)]!", \
- "You cough up [initial(puppypicked.name)]?!")
- new puppypicked(affected_mob.loc)
- new puppypicked(affected_mob.loc)
- barklimit ++
- if(prob(1))
- var/list/plushtype = list(/obj/item/toy/plushie/orange_fox, /obj/item/toy/plushie/corgi, /obj/item/toy/plushie/robo_corgi, /obj/item/toy/plushie/pink_fox)
- var/obj/item/toy/plushie/coughfox = pick(plushtype)
- new coughfox(affected_mob.loc)
- affected_mob.visible_message("[affected_mob] coughs up a [initial(coughfox.name)]!", \
- "You cough [initial(coughfox.name)] up ?!")
-
- affected_mob.emote("cough")
- affected_mob.adjustBruteLoss(5)
- return
diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm
deleted file mode 100644
index dd1d062cbf7..00000000000
--- a/code/datums/diseases/magnitis.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-/datum/disease/magnitis
- name = "Magnitis"
- max_stages = 4
- spread_text = "Airborne"
- cure_text = "Iron"
- cures = list("iron")
- agent = "Fukkos Miracos"
- viable_mobtypes = list(/mob/living/carbon/human)
- disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
- permeability_mod = 0.75
- desc = "This disease disrupts the magnetic field of your body, making it act as if a powerful magnet. Injections of iron help stabilize the field."
- severity = MEDIUM
-
-/datum/disease/magnitis/stage_act()
- ..()
- switch(stage)
- if(2)
- if(prob(2))
- to_chat(affected_mob, "You feel a slight shock course through your body.")
- if(prob(2))
- for(var/obj/M in orange(2,affected_mob))
- if(!M.anchored && (M.flags & CONDUCT))
- step_towards(M,affected_mob)
- for(var/mob/living/silicon/S in orange(2,affected_mob))
- if(istype(S, /mob/living/silicon/ai)) continue
- step_towards(S,affected_mob)
- if(3)
- if(prob(2))
- to_chat(affected_mob, "You feel a strong shock course through your body.")
- if(prob(2))
- to_chat(affected_mob, "You feel like clowning around.")
- if(prob(4))
- for(var/obj/M in orange(4,affected_mob))
- if(!M.anchored && (M.flags & CONDUCT))
- var/i
- var/iter = rand(1,2)
- for(i=0,iYou feel a powerful shock course through your body.")
- if(prob(2))
- to_chat(affected_mob, "You query upon the nature of miracles.")
- if(prob(8))
- for(var/obj/M in orange(6,affected_mob))
- if(!M.anchored && (M.flags & CONDUCT))
- var/i
- var/iter = rand(1,3)
- for(i=0,iYou feel a little silly.")
- if(2)
- if(prob(10))
- to_chat(affected_mob, "You start seeing rainbows.")
- if(3)
- if(prob(10))
- to_chat(affected_mob, "Your thoughts are interrupted by a loud HONK!")
- if(4)
- if(prob(5))
- affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
-
-
-/datum/disease/pierrot_throat/advanced
- name = "Advanced Pierrot's Throat"
- spread_text = "Airborne"
- cure_text = "Banana products, especially banana bread."
- cures = list("banana")
- cure_chance = 75
- agent = "H0NI<42.B4n4 Virus"
- viable_mobtypes = list(/mob/living/carbon/human)
- permeability_mod = 0.75
- desc = "If left untreated the subject will probably drive others to insanity and go insane themselves."
- severity = DANGEROUS
- possible_mutations = null
-
-/datum/disease/pierrot_throat/advanced/stage_act()
- ..()
- switch(stage)
- if(1)
- if(prob(10))
- to_chat(affected_mob, "You feel very silly.")
- if(prob(5))
- to_chat(affected_mob, "You feel like making a joke.")
- if(2)
- if(prob(10))
- to_chat(affected_mob, "You don't just start seeing rainbows... YOU ARE RAINBOWS!")
- if(3)
- if(prob(10))
- to_chat(affected_mob, "Your thoughts are interrupted by a loud HONK!")
- affected_mob << 'sound/items/airhorn.ogg'
- if(4)
- if(prob(5))
- affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) )
-
- if(!istype(affected_mob.wear_mask, /obj/item/clothing/mask/gas/clown_hat/nodrop))
- affected_mob.drop_item_ground(affected_mob.wear_mask, force = TRUE)
- affected_mob.equip_to_slot(new /obj/item/clothing/mask/gas/clown_hat/nodrop(src), slot_wear_mask)
diff --git a/code/datums/diseases/retrovirus.dm b/code/datums/diseases/retrovirus.dm
deleted file mode 100644
index 5873733902d..00000000000
--- a/code/datums/diseases/retrovirus.dm
+++ /dev/null
@@ -1,83 +0,0 @@
-/datum/disease/dna_retrovirus
- name = "Retrovirus"
- max_stages = 4
- spread_text = "Contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Rest or an injection of mutadone"
- cure_chance = 6
- agent = ""
- viable_mobtypes = list(/mob/living/carbon/human)
- desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
- severity = DANGEROUS
- permeability_mod = 0.4
- stage_prob = 2
- var/SE
- var/UI
- var/restcure = 0
-
-
-/datum/disease/dna_retrovirus/New()
- ..()
- agent = "Virus class [pick("A","B","C","D","E","F")][pick("A","B","C","D","E","F")]-[rand(50,300)]"
- if(prob(40))
- cures = list("mutadone")
- else
- restcure = 1
-
-
-/datum/disease/dna_retrovirus/stage_act()
- ..()
- switch(stage)
- if(1)
- if(restcure)
- if(affected_mob.lying && prob(30))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(8))
- to_chat(affected_mob, "Your head hurts.")
- if(prob(9))
- to_chat(affected_mob, "You feel a tingling sensation in your chest.")
- if(prob(9))
- to_chat(affected_mob, "You feel angry.")
- if(2)
- if(restcure)
- if(affected_mob.lying && prob(20))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(8))
- to_chat(affected_mob, "Your skin feels loose.")
- if(prob(10))
- to_chat(affected_mob, "You feel very strange.")
- if(prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head!")
- affected_mob.Paralyse(4 SECONDS)
- if(prob(4))
- to_chat(affected_mob, "Your stomach churns.")
- if(3)
- if(restcure)
- if(affected_mob.lying && prob(20))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(10))
- to_chat(affected_mob, "Your entire body vibrates.")
-
- if(prob(35))
- if(prob(50))
- scramble(1, affected_mob, rand(15, 45))
- else
- scramble(0, affected_mob, rand(15, 45))
-
- if(4)
- if(restcure)
- if(affected_mob.lying && prob(5))
- to_chat(affected_mob, "You feel better.")
- cure()
- return
- if(prob(60))
- if(prob(50))
- scramble(1, affected_mob, rand(15, 45))
- else
- scramble(0, affected_mob, rand(15, 45))
diff --git a/code/datums/diseases/rhumba_beat.dm b/code/datums/diseases/rhumba_beat.dm
deleted file mode 100644
index 1ba2270008b..00000000000
--- a/code/datums/diseases/rhumba_beat.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/datum/disease/rhumba_beat
- name = "The Rhumba Beat"
- max_stages = 5
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- cure_text = "Chick Chicky Boom!"
- cures = list("plasma")
- agent = "Unknown"
- viable_mobtypes = list(/mob/living/carbon/human)
- permeability_mod = 1
- severity = BIOHAZARD
-
-/datum/disease/rhumba_beat/stage_act()
- ..()
- if(affected_mob.ckey == "rosham")
- cure()
- return
- switch(stage)
- if(2)
- if(prob(45))
- affected_mob.adjustToxLoss(5)
- if(prob(1))
- to_chat(affected_mob, "You feel strange...")
- if(3)
- if(prob(5))
- to_chat(affected_mob, "You feel the urge to dance...")
- else if(prob(5))
- affected_mob.emote("gasp")
- else if(prob(10))
- to_chat(affected_mob, "You feel the need to chick chicky boom...")
- if(4)
- if(prob(10))
- affected_mob.emote("gasp")
- to_chat(affected_mob, "You feel a burning beat inside...")
- if(prob(20))
- affected_mob.adjustToxLoss(5)
- if(5)
- to_chat(affected_mob, "Your body is unable to contain the Rhumba Beat...")
- if(prob(50))
- affected_mob.gib()
diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm
deleted file mode 100644
index 181ee3f2669..00000000000
--- a/code/datums/diseases/transformation.dm
+++ /dev/null
@@ -1,256 +0,0 @@
-/datum/disease/transformation
- name = "Transformation"
- max_stages = 5
- spread_text = "Acute"
- spread_flags = SPECIAL
- cure_text = "A coder's love (theoretical)."
- agent = "Shenanigans"
- viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/alien)
- severity = HARMFUL
- stage_prob = 10
- visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
- disease_flags = CURABLE
- var/list/stage1 = list("You feel unremarkable.")
- var/list/stage2 = list("You feel boring.")
- var/list/stage3 = list("You feel utterly plain.")
- var/list/stage4 = list("You feel white bread.")
- var/list/stage5 = list("Oh the humanity!")
- var/new_form = /mob/living/carbon/human
- var/is_new_mind = FALSE
-
-/datum/disease/transformation/stage_act()
- ..()
- switch(stage)
- if(1)
- if(prob(stage_prob) && stage1)
- to_chat(affected_mob, pick(stage1))
- if(2)
- if(prob(stage_prob) && stage2)
- to_chat(affected_mob, pick(stage2))
- if(3)
- if(prob(stage_prob*2) && stage3)
- to_chat(affected_mob, pick(stage3))
- if(4)
- if(prob(stage_prob*2) && stage4)
- to_chat(affected_mob, pick(stage4))
- if(5)
- do_disease_transformation(affected_mob)
-
-/datum/disease/transformation/proc/do_disease_transformation(mob/living/affected_mob)
- if(istype(affected_mob, /mob/living/carbon) && affected_mob.stat != DEAD)
- if(stage5)
- to_chat(affected_mob, pick(stage5))
- if(jobban_isbanned(affected_mob, new_form))
- affected_mob.death(1)
- return
- if(affected_mob.notransform)
- return
- affected_mob.notransform = 1
- affected_mob.canmove = 0
- affected_mob.icon = null
- affected_mob.overlays.Cut()
- affected_mob.invisibility = INVISIBILITY_ABSTRACT
- for(var/obj/item/W in affected_mob)
- if(istype(W, /obj/item/implant))
- qdel(W)
- continue
- affected_mob.drop_item_ground(W) //Если вещь снимается - снимаем
- if(isobj(affected_mob.loc))
- var/obj/O = affected_mob.loc
- O.force_eject_occupant(affected_mob)
- var/mob/living/new_mob = new new_form(affected_mob.loc)
- if(istype(new_mob))
- new_mob.a_intent = "harm"
- if(affected_mob.mind)
- affected_mob.mind.transfer_to(new_mob)
- if(is_new_mind)
- new_mob.mind.wipe_memory()
- else
- new_mob.key = affected_mob.key
- qdel(affected_mob)
-
-
-
-/datum/disease/transformation/jungle_fever
- name = "Jungle Fever"
- cure_text = "Bananas"
- cures = list("banana")
- spread_text = "Monkey Bites"
- spread_flags = SPECIAL
- viable_mobtypes = list(/mob/living/carbon/human)
- permeability_mod = 1
- cure_chance = 1
- disease_flags = CAN_CARRY|CAN_RESIST
- desc = "Monkeys with this disease will bite humans, causing humans to mutate into a monkey."
- severity = BIOHAZARD
- stage_prob = 4
- visibility_flags = 0
- agent = "Kongey Vibrion M-909"
- new_form = /mob/living/carbon/human/lesser/monkey
- is_new_mind = TRUE
-
- stage1 = null
- stage2 = null
- stage3 = null
- stage4 = list("Your back hurts.", "You breathe through your mouth.",
- "You have a craving for bananas.", "Your mind feels clouded.")
- stage5 = list("You feel like monkeying around.")
-
-/datum/disease/transformation/jungle_fever/do_disease_transformation(mob/living/carbon/human/affected_mob)
- if(!issmall(affected_mob))
- affected_mob.monkeyize()
-
-/datum/disease/transformation/jungle_fever/stage_act()
- ..()
- switch(stage)
- if(2)
- if(prob(2))
- to_chat(affected_mob, "Your [pick("back", "arm", "leg", "elbow", "head")] itches.")
- if(3)
- if(prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head.")
- affected_mob.AdjustConfused(20 SECONDS)
- if(4)
- if(prob(3))
- affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh."))
-
-
-/datum/disease/transformation/robot
-
- name = "Robotic Transformation"
- cure_text = "An injection of copper."
- cures = list("copper")
- cure_chance = 5
- agent = "R2D2 Nanomachines"
- desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg."
- severity = DANGEROUS
- visibility_flags = 0
- new_form = /mob/living/silicon/robot
- is_new_mind = TRUE
-
- stage1 = null
- stage2 = list("Your joints feel stiff.", "Beep...boop..")
- stage3 = list("Your joints feel very stiff.", "Your skin feels loose.", "You can feel something move...inside.")
- stage4 = list("Your skin feels very loose.", "You can feel... something...inside you.")
- stage5 = list("Your skin feels as if it's about to burst off!")
-
-
-/datum/disease/transformation/robot/stage_act()
- ..()
- switch(stage)
- if(3)
- if(prob(8))
- affected_mob.say(pick("Beep, boop", "beep, beep!", "Boop...bop"))
- if(prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head.")
- affected_mob.Paralyse(4 SECONDS)
- if(4)
- if(prob(20))
- affected_mob.say(pick("beep, beep!", "Boop bop boop beep.", "kkkiiiill mmme", "I wwwaaannntt tttoo dddiiieeee..."))
-
-
-/datum/disease/transformation/xeno
-
- name = "Xenomorph Transformation"
- cure_text = "Spaceacillin & Glycerol"
- cures = list("spaceacillin", "glycerol")
- cure_chance = 5
- agent = "Rip-LEY Alien Microbes"
- desc = "This disease changes the victim into a xenomorph."
- severity = BIOHAZARD
- visibility_flags = 0
- stage1 = null
- stage2 = list("Your throat feels scratchy.", "Kill...")
- stage3 = list("Your throat feels very scratchy.", "Your skin feels tight.", "You can feel something move...inside.")
- stage4 = list("Your skin feels very tight.", "Your blood boils!", "You can feel... something...inside you.")
- stage5 = list("Теперь вы ксеноморф.\n\
- Вы чувствуете боль от превращения! Вы желаете укусить того, кто с вами это сделал, благо, память вас не покинула и вы всё помните.")
- new_form = null
-
-/datum/disease/transformation/xeno/New()
- new_form = pick(/mob/living/carbon/alien/humanoid/hunter, /mob/living/carbon/alien/humanoid/drone/no_queen, /mob/living/carbon/alien/humanoid/sentinel)
-
-/datum/disease/transformation/xeno/stage_act()
- ..()
- switch(stage)
- if(3)
- if(prob(4))
- to_chat(affected_mob, "You feel a stabbing pain in your head.")
- affected_mob.Paralyse(4 SECONDS)
- if(4)
- if(prob(20))
- affected_mob.say(pick("You look delicious.", "Going to... devour you...", "Hsssshhhhh!"))
-
-
-/datum/disease/transformation/slime
- name = "Advanced Mutation Transformation"
- cure_text = "frost oil"
- cures = list("frostoil")
- cure_chance = 80
- agent = "Advanced Mutation Toxin"
- desc = "This highly concentrated extract converts anything into more of itself."
- severity = BIOHAZARD
- visibility_flags = 0
- stage1 = list("You don't feel very well.")
- stage2 = list("Your skin feels a little slimy.")
- stage3 = list("Your appendages are melting away.", "Your limbs begin to lose their shape.")
- stage4 = list("You are turning into a slime.")
- stage5 = list("You have become a slime.")
- new_form = /mob/living/simple_animal/slime/random
-
-/datum/disease/transformation/slime/stage_act()
- ..()
- switch(stage)
- if(1)
- if(ishuman(affected_mob))
- var/mob/living/carbon/human/H = affected_mob
- if(isslimeperson(H))
- stage = 5
- if(3)
- if(ishuman(affected_mob))
- var/mob/living/carbon/human/human = affected_mob
- if(!isslimeperson(human))
- human.set_species(/datum/species/slime)
-
-/datum/disease/transformation/corgi
- name = "The Barkening"
- cure_text = "Death"
- cures = list("adminordrazine")
- agent = "Fell Doge Majicks"
- desc = "This disease transforms the victim into a corgi."
- visibility_flags = 0
- stage1 = list("BARK.")
- stage2 = list("You feel the need to wear silly hats.")
- stage3 = list("Must... eat... chocolate....", "YAP")
- stage4 = list("Visions of washing machines assail your mind!")
- stage5 = list("AUUUUUU!!!")
- new_form = /mob/living/simple_animal/pet/dog/corgi
- is_new_mind = TRUE
-
-/datum/disease/transformation/corgi/stage_act()
- ..()
- switch(stage)
- if(3)
- if(prob(8))
- affected_mob.say(pick("YAP", "Woof!"))
- if(4)
- if(prob(20))
- affected_mob.say(pick("Bark!", "AUUUUUU"))
-
-/datum/disease/transformation/morph
- name = "Gluttony's Blessing"
- cure_text = "nothing"
- cures = list("adminordrazine")
- agent = "Gluttony's Blessing"
- desc = "A 'gift' from somewhere terrible."
- stage_prob = 20
- severity = BIOHAZARD
- visibility_flags = 0
- stage1 = list("Your stomach rumbles.")
- stage2 = list("Your skin feels saggy.")
- stage3 = list("Your appendages are melting away.", "Your limbs begin to lose their shape.")
- stage4 = list("You're ravenous.")
- stage5 = list("ТЕПЕРЬ ВЫ МОРФ! \n \
- Хоть Вы и трансформировались в отвратительную зелёную жижу, но это не повлияло на Ваше сознание \
- и память. Вы не являетесь антагонистом.")
- new_form = /mob/living/simple_animal/hostile/morph
diff --git a/code/datums/diseases/tuberculosis.dm b/code/datums/diseases/tuberculosis.dm
deleted file mode 100644
index 970cc22914e..00000000000
--- a/code/datums/diseases/tuberculosis.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-/datum/disease/tuberculosis
- form = "Disease"
- name = "Fungal tuberculosis"
- max_stages = 5
- spread_text = "Airborne"
- cure_text = "Spaceacillin & salbutamol"
- cures = list("spaceacillin", "salbutamol")
- agent = "Fungal Tubercle bacillus Cosmosis"
- viable_mobtypes = list(/mob/living/carbon/human)
- cure_chance = 5//like hell are you getting out of hell
- desc = "A rare highly transmittable virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue."
- required_organs = list(/obj/item/organ/internal/lungs)
- severity = DANGEROUS
- bypasses_immunity = TRUE //Fungal and bacterial in nature; also infects the lungs
-
-/datum/disease/tuberculosis/stage_act() //it begins
- ..()
- switch(stage)
- if(2)
- if(prob(2))
- affected_mob.emote("cough")
- to_chat(affected_mob, "Your chest hurts.")
- if(prob(2))
- to_chat(affected_mob, "Your stomach violently rumbles!")
- if(prob(5))
- to_chat(affected_mob, "You feel a cold sweat form.")
- if(4)
- if(prob(2))
- to_chat(affected_mob, "You see four of everything")
- affected_mob.Dizzy(10 SECONDS)
- if(prob(2))
- to_chat(affected_mob, "You feel a sharp pain from your lower chest!")
- affected_mob.adjustOxyLoss(5)
- affected_mob.emote("gasp")
- if(prob(10))
- to_chat(affected_mob, "You feel air escape from your lungs painfully.")
- affected_mob.adjustOxyLoss(25)
- affected_mob.emote("gasp")
- if(5)
- if(prob(2))
- to_chat(affected_mob, "[pick("You feel your heart slowing...", "You relax and slow your heartbeat.")]")
- affected_mob.adjustStaminaLoss(70)
- if(prob(10))
- affected_mob.adjustStaminaLoss(100)
- affected_mob.visible_message("[affected_mob] faints!", "You surrender yourself and feel at peace...")
- affected_mob.AdjustSleeping(10 SECONDS)
- if(prob(2))
- to_chat(affected_mob, "You feel your mind relax and your thoughts drift!")
- affected_mob.AdjustConfused(16 SECONDS, bound_lower = 0, bound_upper = 200 SECONDS)
- if(prob(10))
- affected_mob.vomit(20)
- if(prob(3))
- to_chat(affected_mob, "[pick("Your stomach silently rumbles...", "Your stomach seizes up and falls limp, muscles dead and lifeless.", "You could eat a crayon")]")
- affected_mob.overeatduration = max(affected_mob.overeatduration - 100, 0)
- affected_mob.adjust_nutrition(-100)
- if(prob(15))
- to_chat(affected_mob, "[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit", "You feel like taking off some clothes...")]")
- affected_mob.bodytemperature += 40
- return
diff --git a/code/datums/diseases/vampire.dm b/code/datums/diseases/vampire.dm
index e51f34796ac..29b90816d3d 100644
--- a/code/datums/diseases/vampire.dm
+++ b/code/datums/diseases/vampire.dm
@@ -1,20 +1,18 @@
/datum/disease/vampire
name = "Grave Fever"
- max_stages = 3
- stage_prob = 5
- spread_text = "Non-Contagious"
- spread_flags = SPECIAL
- cure_text = "Antibiotics"
- cures = list("spaceacillin")
agent = "Grave Dust"
- cure_chance = 20
- viable_mobtypes = list(/mob/living/carbon/human)
+ max_stages = 4
+ stage_prob = 5
+ //TODO: Something with chaplain & cure
+ cures = list("garlic")
+ cure_prob = 8
severity = DANGEROUS
- disease_flags = CURABLE
- spread_flags = NON_CONTAGIOUS
+ can_immunity = FALSE
/datum/disease/vampire/stage_act()
- ..()
+ if(!..())
+ return FALSE
+
var/toxdamage = stage * 2
var/stuntime = stage * 2
@@ -24,10 +22,10 @@
if(prob(15))
if(prob(33))
- to_chat(affected_mob, "You feel sickly and weak.")
+ to_chat(affected_mob, span_danger("You feel sickly and weak."))
affected_mob.Slowed(6 SECONDS)
affected_mob.adjustToxLoss(toxdamage)
if(prob(5))
- to_chat(affected_mob, "Your joints ache horribly!")
+ to_chat(affected_mob, span_danger("Your joints ache horribly!"))
affected_mob.Weaken(stuntime STATUS_EFFECT_CONSTANT)
diff --git a/code/datums/diseases/viruses/_virus.dm b/code/datums/diseases/viruses/_virus.dm
new file mode 100644
index 00000000000..1057fc7a33b
--- /dev/null
+++ b/code/datums/diseases/viruses/_virus.dm
@@ -0,0 +1,89 @@
+//Spread Flags
+#define NON_CONTAGIOUS 0 //virus can't spread
+#define BITES 1 //virus can spread with bites
+#define BLOOD 2 //virus can spread with infected blood
+#define CONTACT 4 //virus can spread with any touch
+#define AIRBORNE 8 //virus spreads through the air
+
+/datum/disease/virus
+ form = "Вирус"
+ carrier_mobtypes = list(/mob/living/simple_animal/mouse)
+ var/spread_flags = NON_CONTAGIOUS
+
+ ///affects how often the virus will try to spread. The more the better. In range [0-100]
+ var/infectivity = 65
+ ///affects how well the virus will pass through the protection. The more the better. In range (0-2]
+ var/permeability_mod = 1
+
+/datum/disease/virus/New()
+ ..()
+ additional_info = spread_text()
+
+/**
+ * Main virus process, that executed every tick
+ *
+ * Returns:
+ * * TRUE - if process finished the work properlly
+ * * FALSE - if don't need to call a child proc
+ */
+/datum/disease/virus/stage_act()
+ if(prob(infectivity))
+ spread()
+
+ . = ..()
+
+ if(!. || carrier || (affected_mob.type in carrier_mobtypes))
+ return FALSE
+
+ return TRUE
+
+/datum/disease/virus/try_increase_stage()
+ if(prob(affected_mob.reagents?.has_reagent("spaceacillin") ? stage_prob/2 : stage_prob))
+ stage = min(stage + 1,max_stages)
+ if(!discovered && stage >= CEILING(max_stages * discovery_threshold, 1)) // Once we reach a late enough stage, medical HUDs can pick us up even if we regress
+ discovered = TRUE
+ affected_mob.med_hud_set_status()
+
+/datum/disease/virus/spread(force_spread = 0)
+ if(!affected_mob)
+ return
+
+ if((spread_flags <= BLOOD) && !force_spread)
+ return
+
+ if(affected_mob.reagents?.has_reagent("spaceacillin") || (affected_mob.satiety > 0 && prob(affected_mob.satiety/10)))
+ return
+
+ var/spread_range = force_spread ? force_spread : 1
+
+ if(spread_flags & AIRBORNE)
+ spread_range++
+
+ var/turf/T = affected_mob.loc
+ if(istype(T))
+ for(var/mob/living/C in oview(spread_range, affected_mob))
+ var/turf/V = get_turf(C)
+ if(V)
+ while(TRUE)
+ if(V == T)
+ var/a_type = (spread_range == 1) ? CONTACT : CONTACT|AIRBORNE
+ Contract(C, act_type = a_type, need_protection_check = TRUE)
+ break
+ var/turf/Temp = get_step_towards(V, T)
+ if(!V.CanAtmosPass(Temp))
+ break
+ V = Temp
+
+/datum/disease/virus/proc/spread_text()
+ var/list/spread = list()
+ if(!spread_flags)
+ spread += "Не заразный"
+ if(spread_flags & BITES)
+ spread += "Распространяемый через укусы"
+ if(spread_flags & BLOOD)
+ spread += "Распространяемый через кровь"
+ if(spread_flags & CONTACT)
+ spread += "Контактный"
+ if(spread_flags & AIRBORNE)
+ spread += "Воздушно-капельный"
+ return english_list(spread, "Неизвестен", " и ")
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/viruses/advance/advance.dm
similarity index 59%
rename from code/datums/diseases/advance/advance.dm
rename to code/datums/diseases/viruses/advance/advance.dm
index de99208c2ca..2e85700833f 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/viruses/advance/advance.dm
@@ -3,10 +3,11 @@
Advance Disease is a system for Virologist to Engineer their own disease with symptoms that have effects and properties
which add onto the overall disease.
- If you need help with creating new symptoms or expanding the advance disease, ask for Giacom on #coderbus.
-
*/
+#define VIRUS_SYMPTOM_LIMIT 6
+#define VIRUS_MAX_SYMPTOM_LEVEL 6
+
// The order goes from easy to cure to hard to cure.
GLOBAL_LIST_INIT(advance_cures, list(
"sodiumchloride", "sugar", "orangejuice",
@@ -23,15 +24,13 @@ GLOBAL_LIST_EMPTY(archive_diseases)
*/
-/datum/disease/advance
+/datum/disease/virus/advance
name = "Unknown" // We will always let our Virologist name our disease.
desc = "Спроектированная болезнь, может содержать сразу несколько симптомов."
- form = "Улучшенная болезнь" // Will let med-scanners know that this disease was engineered.
+ form = "Продвинутая болезнь" // Will let med-scanners know that this disease was engineered.
agent = "advance microbes"
max_stages = 5
- spread_text = "Unknown"
- viable_mobtypes = list(/mob/living/carbon/human)
// NEW VARS
@@ -39,21 +38,22 @@ GLOBAL_LIST_EMPTY(archive_diseases)
var/id = ""
var/processing = 0
-/datum/disease/advance/New()
+/datum/disease/virus/advance/New()
if(!symptoms || !symptoms.len)
- symptoms = GenerateSymptoms(0, 2)
+ symptoms = GenerateSymptoms(1, 2)
AssignProperties(GenerateProperties())
id = GetDiseaseID()
+ ..()
-/datum/disease/advance/Destroy()
+/datum/disease/virus/advance/Destroy()
if(processing)
for(var/datum/symptom/S in symptoms)
S.End(src)
return ..()
// Randomly pick a symptom to activate.
-/datum/disease/advance/stage_act()
+/datum/disease/virus/advance/stage_act()
if(!..())
return FALSE
if(symptoms && symptoms.len)
@@ -70,9 +70,8 @@ GLOBAL_LIST_EMPTY(archive_diseases)
return TRUE
// Compares type then ID.
-/datum/disease/advance/IsSame(datum/disease/advance/D)
-
- if(!(istype(D, /datum/disease/advance)))
+/datum/disease/virus/advance/IsSame(datum/disease/virus/advance/D)
+ if(!(istype(D, /datum/disease/virus/advance)))
return FALSE
if(GetDiseaseID() != D.GetDiseaseID())
@@ -80,19 +79,16 @@ GLOBAL_LIST_EMPTY(archive_diseases)
return TRUE
// To add special resistances.
-/datum/disease/advance/cure(resistance = TRUE)
- if(affected_mob)
- var/id = "[GetDiseaseID()]"
- if(resistance && !(id in affected_mob.resistances))
- affected_mob.resistances[id] = id
- remove_virus()
- qdel(src) //delete the datum to stop it processing
+/datum/disease/virus/advance/cure(id, need_immunity)
+ ..(GetDiseaseID(), need_immunity)
// Returns the advance disease with a different reference memory.
-/datum/disease/advance/Copy()
- var/datum/disease/advance/copy = new
- var/list/skipped = list("symptoms","affected_mob","holder","carrier","stage","type","parent_type","vars","transformed")
- for(var/V in vars - skipped)
+/datum/disease/virus/advance/Copy()
+ var/datum/disease/virus/advance/copy = new
+ var/list/required_vars = list(
+ "name","severity","id","visibility_flags","spread_flags", "additional_info",
+ "stage_prob","cures","cure_prob","cure_text", "permeability_mod")
+ for(var/V in required_vars)
if(istype(vars[V], /list))
var/list/L = vars[V]
copy.vars[V] = L.Copy()
@@ -104,20 +100,20 @@ GLOBAL_LIST_EMPTY(archive_diseases)
return copy
// Mix the symptoms of two diseases (the src and the argument)
-/datum/disease/advance/proc/Mix(datum/disease/advance/D)
+/datum/disease/virus/advance/proc/Mix(datum/disease/virus/advance/D)
if(!(IsSame(D)))
var/list/possible_symptoms = shuffle(D.symptoms)
for(var/datum/symptom/S in possible_symptoms)
AddSymptom(new S.type)
-/datum/disease/advance/proc/HasSymptom(datum/symptom/S)
+/datum/disease/virus/advance/proc/HasSymptom(datum/symptom/S)
for(var/datum/symptom/symp in symptoms)
if(symp.id == S.id)
- return 1
- return 0
+ return TRUE
+ return FALSE
// Will generate new unique symptoms, use this if there are none. Returns a list of symptoms that were generated.
-/datum/disease/advance/proc/GenerateSymptoms(level_min, level_max, amount_get = 0)
+/datum/disease/virus/advance/proc/GenerateSymptoms(level_min = 1, level_max = VIRUS_MAX_SYMPTOM_LEVEL, count_of_symptoms = 0, override_symptoms = FALSE)
var/list/generated = list() // Symptoms we generated.
@@ -126,31 +122,31 @@ GLOBAL_LIST_EMPTY(archive_diseases)
for(var/symp in GLOB.list_symptoms)
var/datum/symptom/S = new symp
if(S.level >= level_min && S.level <= level_max)
- if(!HasSymptom(S))
+ if(!HasSymptom(S) || override_symptoms)
possible_symptoms += S
if(!possible_symptoms.len)
return generated
- // Random chance to get more than one symptom
- var/number_of = amount_get
- if(!amount_get)
- number_of = 1
- while(prob(20))
- number_of += 1
+ var/N = 1
+ if(count_of_symptoms)
+ N = count_of_symptoms
+ else
+ while(prob(20) && N < VIRUS_SYMPTOM_LIMIT)
+ N++
- for(var/i = 1; number_of >= i && possible_symptoms.len; i++)
+ for(var/i = 1; i <= N && possible_symptoms.len; i++)
generated += pick_n_take(possible_symptoms)
return generated
-/datum/disease/advance/proc/Refresh(var/update_mutations = TRUE, var/reset_name = FALSE)
- AssignProperties(GenerateProperties())
+/datum/disease/virus/advance/proc/Refresh(reset_name = FALSE, update_properties = TRUE)
+ if(update_properties)
+ AssignProperties(GenerateProperties())
id = GetDiseaseID()
- var/datum/disease/advance/A = GLOB.archive_diseases[id]
- if(update_mutations)
- UpdateMutationsProps(A)
+ var/datum/disease/virus/advance/A = GLOB.archive_diseases[id]
+ UpdateMutationsProps(A)
if(A)
name = A.name
@@ -159,17 +155,17 @@ GLOBAL_LIST_EMPTY(archive_diseases)
name = "Unknown"
AddToArchive()
-/datum/disease/advance/proc/AddToArchive()
+/datum/disease/virus/advance/proc/AddToArchive()
GLOB.archive_diseases[id] = Copy()
-/datum/disease/advance/proc/UpdateMutationsProps(var/datum/disease/advance/A)
- var/datum/disease/advance/AA = A ? A : new
+/datum/disease/virus/advance/proc/UpdateMutationsProps(datum/disease/virus/advance/A)
+ var/datum/disease/virus/advance/AA = A ? A : new
mutation_reagents = AA.mutation_reagents.Copy()
possible_mutations = AA.possible_mutations?.Copy()
//Generate disease properties based on the effects. Returns an associated list.
-/datum/disease/advance/proc/GenerateProperties()
+/datum/disease/virus/advance/proc/GenerateProperties()
if(!symptoms || !symptoms.len)
CRASH("We did not have any symptoms before generating properties.")
@@ -187,76 +183,66 @@ GLOBAL_LIST_EMPTY(archive_diseases)
return properties
// Assign the properties that are in the list.
-/datum/disease/advance/proc/AssignProperties(list/properties = list())
-
+/datum/disease/virus/advance/proc/AssignProperties(list/properties = list())
if(properties && properties.len)
+ // stealth
switch(properties["stealth"])
+ if(1)
+ visibility_flags = HIDDEN_HUD
if(2)
- visibility_flags = HIDDEN_SCANNER
+ visibility_flags = HIDDEN_HUD|HIDDEN_SCANNER
if(3 to INFINITY)
- visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
+ visibility_flags = HIDDEN_HUD|HIDDEN_SCANNER|HIDDEN_PANDEMIC
else
visibility_flags = VISIBLE
- // The more symptoms we have, the less transmittable it is but some symptoms can make up for it.
- SetSpread(clamp(2 ** (properties["transmittable"] - symptoms.len), BLOOD, AIRBORNE))
- permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
- cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20
- stage_prob = max(properties["stage_speed"], 2)
- SetSeverity(properties["severity"])
- GenerateCure(properties)
+ // transmittable
+ switch(properties["transmittable"] - round(symptoms.len/2))
+ if(-INFINITY to 1)
+ spread_flags = BLOOD
+ if(2 to 3)
+ spread_flags = CONTACT
+ if(4 to INFINITY)
+ spread_flags = AIRBORNE
+ additional_info = spread_text()
+ permeability_mod = clamp((0.25 * properties["transmittable"]), 0.2, 2)
+
+ //stage speed
+ stage_prob = clamp(max(1.3 * sqrtor0(properties["stage_speed"] + 11), properties["stage_speed"]), 1, 40)
+
+ //severity
+ switch(properties["severity"])
+ if(-INFINITY to 0)
+ severity = NONTHREAT
+ if(1)
+ severity = MINOR
+ if(2)
+ severity = MEDIUM
+ if(3)
+ severity = HARMFUL
+ if(4)
+ severity = DANGEROUS
+ if(5 to INFINITY)
+ severity = BIOHAZARD
+
+ //resistance
+ cure_prob = clamp(15 - properties["resistance"], 5, 40)
+ GenerateCure(properties["resistance"])
else
CRASH("Our properties were empty or null!")
-
-// Assign the spread type and give it the correct description.
-/datum/disease/advance/proc/SetSpread(spread_id)
- switch(spread_id)
- if(NON_CONTAGIOUS)
- spread_text = "None"
- if(SPECIAL)
- spread_text = "None"
- if(CONTACT_GENERAL, CONTACT_HANDS, CONTACT_FEET)
- spread_text = "On contact"
- if(AIRBORNE)
- spread_text = "Airborne"
- if(BLOOD)
- spread_text = "Blood"
-
- spread_flags = spread_id
-
-/datum/disease/advance/proc/SetSeverity(level_sev)
-
- switch(level_sev)
-
- if(-INFINITY to 0)
- severity = NONTHREAT
- if(1)
- severity = MINOR
- if(2)
- severity = MEDIUM
- if(3)
- severity = HARMFUL
- if(4)
- severity = DANGEROUS
- if(5 to INFINITY)
- severity = BIOHAZARD
- else
- severity = "Unknown"
-
-
+//TODO: доделать эту хуйню
// Will generate a random cure, the less resistance the symptoms have, the harder the cure.
-/datum/disease/advance/proc/GenerateCure(list/properties = list())
- if(properties && properties.len)
- var/res = round(clamp(properties["resistance"] - (symptoms.len / 2), 1, GLOB.advance_cures.len))
+/datum/disease/virus/advance/proc/GenerateCure(resistance)
+ var/res = round(clamp(resistance - (symptoms.len / 2), 1, GLOB.advance_cures.len))
- // Get the cure name from the cure_id
- var/datum/reagent/D = GLOB.chemical_reagents_list[GLOB.advance_cures[res]]
- cures = list(GLOB.advance_cures[res])
- cure_text = D.name
+ // Get the cure name from the cure_id
+ var/datum/reagent/D = GLOB.chemical_reagents_list[GLOB.advance_cures[res]]
+ cures = list(GLOB.advance_cures[res])
+ cure_text = D.name
// Randomly generate a symptom, has a chance to lose or gain a symptom.
-/datum/disease/advance/proc/Evolve(min_level, max_level)
+/datum/disease/virus/advance/proc/Evolve(min_level, max_level)
var/s = safepick(GenerateSymptoms(min_level, max_level, 1))
if(s)
AddSymptom(s)
@@ -264,7 +250,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
return
// Randomly remove a symptom.
-/datum/disease/advance/proc/Devolve()
+/datum/disease/virus/advance/proc/Devolve()
if(symptoms.len > 1)
var/s = safepick(symptoms)
if(s)
@@ -273,12 +259,12 @@ GLOBAL_LIST_EMPTY(archive_diseases)
return
// Name the disease.
-/datum/disease/advance/proc/AssignName(name = "Unknown")
+/datum/disease/virus/advance/proc/AssignName(name = "Unknown")
src.name = name
return
// Return a unique ID of the disease.
-/datum/disease/advance/GetDiseaseID()
+/datum/disease/virus/advance/GetDiseaseID()
var/list/L = list()
for(var/datum/symptom/S in symptoms)
L += S.id
@@ -287,7 +273,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
// Add a symptom, if it is over the limit (with a small chance to be able to go over)
// we take a random symptom away and add the new one.
-/datum/disease/advance/proc/AddSymptom(datum/symptom/S)
+/datum/disease/virus/advance/proc/AddSymptom(datum/symptom/S)
if(HasSymptom(S))
return
@@ -300,10 +286,15 @@ GLOBAL_LIST_EMPTY(archive_diseases)
return
// Simply removes the symptom.
-/datum/disease/advance/proc/RemoveSymptom(datum/symptom/S)
+/datum/disease/virus/advance/proc/RemoveSymptom(datum/symptom/S)
symptoms -= S
return
+/datum/disease/virus/advance/CanContract(mob/living/M, act_type, need_protection_check, zone)
+ . = ..()
+ if(count_by_type(M.diseases, /datum/disease/virus/advance) > 0)
+ . = FALSE
+
/*
Static Procs
@@ -315,7 +306,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
var/list/diseases = list()
- for(var/datum/disease/advance/A in D_list)
+ for(var/datum/disease/virus/advance/A in D_list)
diseases += A.Copy()
if(!diseases.len)
@@ -329,15 +320,15 @@ GLOBAL_LIST_EMPTY(archive_diseases)
i++
- var/datum/disease/advance/D1 = pick(diseases)
+ var/datum/disease/virus/advance/D1 = pick(diseases)
diseases -= D1
- var/datum/disease/advance/D2 = pick(diseases)
+ var/datum/disease/virus/advance/D2 = pick(diseases)
D2.Mix(D1)
// Should be only 1 entry left, but if not let's only return a single entry
// to_chat(world, "END MIXING!!!!!")
- var/datum/disease/advance/to_return = pick(diseases)
+ var/datum/disease/virus/advance/to_return = pick(diseases)
to_return.Refresh(reset_name = TRUE)
return to_return
@@ -345,7 +336,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
if(data)
var/list/preserve = list()
if(istype(data) && data["viruses"])
- for(var/datum/disease/A in data["viruses"])
+ for(var/datum/disease/virus/A in data["viruses"])
preserve += A.Copy()
R.data = data.Copy()
if(preserve.len)
@@ -358,7 +349,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
var/i = VIRUS_SYMPTOM_LIMIT
- var/datum/disease/advance/D = new
+ var/datum/disease/virus/advance/D = new
D.Refresh()
D.symptoms = list()
@@ -387,7 +378,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
D.AssignName(new_name)
D.Refresh()
- for(var/datum/disease/advance/AD in GLOB.active_diseases)
+ for(var/datum/disease/virus/advance/AD in GLOB.active_diseases)
AD.Refresh()
for(var/thing in shuffle(GLOB.human_list))
@@ -395,7 +386,7 @@ GLOBAL_LIST_EMPTY(archive_diseases)
if(H.stat == DEAD || !is_station_level(H.z))
continue
if(!H.HasDisease(D))
- H.ForceContractDisease(D)
+ D.Contract(H)
break
var/list/name_symptoms = list()
@@ -403,30 +394,42 @@ GLOBAL_LIST_EMPTY(archive_diseases)
name_symptoms += S.name
message_admins("[key_name_admin(user)] has triggered a custom virus outbreak of [D.name]! It has these symptoms: [english_list(name_symptoms)]")
+/**
+ * Creates and returns a random virus with properties independent of symptoms properties
+ */
+/proc/CreateRandomVirus(level_min = 1, level_max = VIRUS_MAX_SYMPTOM_LEVEL, count_of_symptoms = 6,
+ resistance, stealth, stage_rate, transmittable, severity)
+
+ var/datum/disease/virus/advance/A = new
+ A.name = capitalize(pick(GLOB.adjectives)) + " " + capitalize(pick(GLOB.nouns + GLOB.verbs))
+ A.symptoms = A.GenerateSymptoms(count_of_symptoms = rand(4, 6), override_symptoms = TRUE)
+ A.AssignProperties(list("resistance" = resistance, "stealth" = stealth, "stage_rate" = stage_rate, "transmittable" = transmittable, "severity" = severity))
+ A.Refresh(update_properties = FALSE)
+ return A
-/datum/disease/advance/proc/totalStageSpeed()
+/datum/disease/virus/advance/proc/totalStageSpeed()
var/total_stage_speed = 0
for(var/i in symptoms)
var/datum/symptom/S = i
total_stage_speed += S.stage_speed
return total_stage_speed
-/datum/disease/advance/proc/totalStealth()
+/datum/disease/virus/advance/proc/totalStealth()
var/total_stealth = 0
for(var/i in symptoms)
var/datum/symptom/S = i
total_stealth += S.stealth
return total_stealth
-/datum/disease/advance/proc/totalResistance()
+/datum/disease/virus/advance/proc/totalResistance()
var/total_resistance = 0
for(var/i in symptoms)
var/datum/symptom/S = i
total_resistance += S.resistance
return total_resistance
-/datum/disease/advance/proc/totalTransmittable()
+/datum/disease/virus/advance/proc/totalTransmittable()
var/total_transmittable = 0
for(var/i in symptoms)
var/datum/symptom/S = i
diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/viruses/advance/presets.dm
similarity index 63%
rename from code/datums/diseases/advance/presets.dm
rename to code/datums/diseases/viruses/advance/presets.dm
index 872ce088871..42b0701f6e4 100644
--- a/code/datums/diseases/advance/presets.dm
+++ b/code/datums/diseases/viruses/advance/presets.dm
@@ -1,107 +1,107 @@
// Cold
-/datum/disease/advance/preset/cold
- name = "Cold"
+/datum/disease/virus/advance/preset/sneezing
+ name = "Sneezing"
symptoms = list(new/datum/symptom/sneeze)
// Flu
-/datum/disease/advance/preset/flu
- name = "Flu"
+/datum/disease/virus/advance/preset/cough
+ name = "Cough"
symptoms = list(new/datum/symptom/cough)
// Voice Changing
-/datum/disease/advance/preset/voice_change
+/datum/disease/virus/advance/preset/voice_change
name = "Epiglottis Mutation"
symptoms = list(new/datum/symptom/voice_change)
// Toxin Filter
-/datum/disease/advance/preset/heal
+/datum/disease/virus/advance/preset/heal
name = "Liver Enhancer"
symptoms = list(new/datum/symptom/heal)
- possible_mutations = list(/datum/disease/advance/preset/advanced_regeneration, /datum/disease/advance/preset/cold/)
+ possible_mutations = list(/datum/disease/virus/advance/preset/advanced_regeneration, /datum/disease/virus/advance/preset/sneezing)
// Hullucigen
-/datum/disease/advance/preset/hullucigen
+/datum/disease/virus/advance/preset/hullucigen
name = "Reality Impairment"
symptoms = list(new/datum/symptom/hallucigen)
- possible_mutations = list(/datum/disease/brainrot, /datum/disease/advance/preset/sensory_restoration)
+ possible_mutations = list(/datum/disease/virus/brainrot, /datum/disease/virus/advance/preset/sensory_restoration)
// Sensory Restoration
-/datum/disease/advance/preset/sensory_restoration
+/datum/disease/virus/advance/preset/sensory_restoration
name = "Reality Enhancer"
symptoms = list(new/datum/symptom/sensory_restoration)
// Mind Restoration
-/datum/disease/advance/preset/mind_restoration
+/datum/disease/virus/advance/preset/mind_restoration
name = "Reality Purifier"
symptoms = list(new/datum/symptom/mind_restoration)
// Toxic Filter + Toxic Compensation + Viral Evolutionary Acceleration
-/datum/disease/advance/preset/advanced_regeneration
+/datum/disease/virus/advance/preset/advanced_regeneration
name = "Advanced Neogenesis"
symptoms = list(new/datum/symptom/heal, new/datum/symptom/damage_converter, new/datum/symptom/viralevolution)
// Necrotizing Fasciitis + Viral Self-Adaptation + Eternal Youth + Dizziness
-/datum/disease/advance/preset/stealth_necrosis
+/datum/disease/virus/advance/preset/stealth_necrosis
name = "Necroeyrosis"
symptoms = list(new/datum/symptom/flesh_eating, new/datum/symptom/viraladaptation, new/datum/symptom/youth, new/datum/symptom/dizzy)
mutation_reagents = list("mutagen", "histamine")
- possible_mutations = list(/datum/disease/transformation/xeno)
+ possible_mutations = list(/datum/disease/virus/transformation/xeno)
//Facial Hypertrichosis + Voice Change + Itching
-/datum/disease/advance/preset/pre_kingstons
+/datum/disease/virus/advance/preset/pre_kingstons
name = "Neverlasting Stranger"
symptoms = list(new/datum/symptom/beard, new/datum/symptom/voice_change, new/datum/symptom/itching)
mutation_reagents = list("mutagen", "radium")
- possible_mutations = list(/datum/disease/kingstons)
+ possible_mutations = list(/datum/disease/virus/kingstons)
//Pacifist Syndrome
-/datum/disease/advance/preset/love
+/datum/disease/virus/advance/preset/love
name = "Pacifist Syndrome"
symptoms = list(new/datum/symptom/love)
//Uncontrollable Aggression
-/datum/disease/advance/preset/aggression
+/datum/disease/virus/advance/preset/aggression
name = "Uncontrollable Aggression"
symptoms = list(new/datum/symptom/aggression)
//Uncontrollable Actions
-/datum/disease/advance/preset/obsession
+/datum/disease/virus/advance/preset/obsession
name = "Uncontrollable Actions"
symptoms = list(new/datum/symptom/obsession)
//Topographical Cretinism
-/datum/disease/advance/preset/confusion
+/datum/disease/virus/advance/preset/confusion
name = "Topographical Cretinism"
symptoms = list(new/datum/symptom/confusion)
//Fragile Bones Syndrome
-/datum/disease/advance/preset/bones
+/datum/disease/virus/advance/preset/bones
name = "Fragile Bones Syndrome"
symptoms = list(new/datum/symptom/bones)
//Limb Rejection
-/datum/disease/advance/preset/limb_throw
+/datum/disease/virus/advance/preset/limb_throw
name = "Limb Rejection"
symptoms = list(new/datum/symptom/limb_throw)
//Uncontrolled Laughter Effect
-/datum/disease/advance/preset/laugh
+/datum/disease/virus/advance/preset/laugh
name = "Uncontrolled Laughter Effect"
symptoms = list(new/datum/symptom/laugh)
//Groaning Syndrome
-/datum/disease/advance/preset/moan
+/datum/disease/virus/advance/preset/moan
name = "Groaning Syndrome"
symptoms = list(new/datum/symptom/moan)
//Toxification syndrome
-/datum/disease/advance/preset/infection
+/datum/disease/virus/advance/preset/infection
name = "Toxification syndrome"
symptoms = list(new/datum/symptom/infection)
// Uncontrolled Laughter Effect + Groaning Syndrome + Hullucigen
-/datum/disease/advance/preset/pre_loyalty
+/datum/disease/virus/advance/preset/pre_loyalty
name = "Merry sufferer"
symptoms = list(new/datum/symptom/laugh, new/datum/symptom/moan, new/datum/symptom/hallucigen)
mutation_reagents = list("love")
- possible_mutations = list(/datum/disease/loyalty)
+ possible_mutations = list(/datum/disease/virus/loyalty)
diff --git a/code/datums/diseases/advance/symptoms/beard.dm b/code/datums/diseases/viruses/advance/symptoms/beard.dm
similarity index 83%
rename from code/datums/diseases/advance/symptoms/beard.dm
rename to code/datums/diseases/viruses/advance/symptoms/beard.dm
index 26b6e9e4096..16e0113bdfe 100644
--- a/code/datums/diseases/advance/symptoms/beard.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/beard.dm
@@ -25,7 +25,7 @@ BONUS
level = 4
severity = 1
-/datum/symptom/beard/Activate(datum/disease/advance/A)
+/datum/symptom/beard/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
@@ -34,17 +34,17 @@ BONUS
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
switch(A.stage)
if(1, 2)
- to_chat(H, "Your chin itches.")
+ to_chat(H, span_warning("Your chin itches."))
if(head_organ.f_style == "Shaved")
head_organ.f_style = "Jensen Beard"
H.update_fhair()
if(3, 4)
- to_chat(H, "You feel tough.")
+ to_chat(H, span_warning("You feel tough."))
if(!(head_organ.f_style == "Dwarf Beard") && !(head_organ.f_style == "Very Long Beard") && !(head_organ.f_style == "Full Beard"))
head_organ.f_style = "Full Beard"
H.update_fhair()
else
- to_chat(H, "You feel manly!")
+ to_chat(H, span_warning("You feel manly!"))
if(!(head_organ.f_style == "Dwarf Beard") && !(head_organ.f_style == "Very Long Beard"))
head_organ.f_style = pick("Dwarf Beard", "Very Long Beard")
H.update_fhair()
diff --git a/code/datums/diseases/advance/symptoms/blood.dm b/code/datums/diseases/viruses/advance/symptoms/blood.dm
similarity index 79%
rename from code/datums/diseases/advance/symptoms/blood.dm
rename to code/datums/diseases/viruses/advance/symptoms/blood.dm
index 4ebb8b582df..87878e6f154 100644
--- a/code/datums/diseases/advance/symptoms/blood.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/blood.dm
@@ -24,16 +24,16 @@ Bonus
level = 5
var/check = FALSE
-/datum/symptom/blood/Activate(datum/disease/advance/A)
+/datum/symptom/blood/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/M = A.affected_mob
if(prob(SYMPTOM_ACTIVATION_PROB))
switch(A.stage)
if(3,4)
- to_chat(M, "You feel hungry")
+ to_chat(M, span_notice("You feel hungry"))
if(5)
if(prob(10))
- to_chat(M, "You can hear own heartbeat")
+ to_chat(M, span_notice("You can hear own heartbeat"))
check = TRUE
if(check == TRUE && (M.blood_volume < BLOOD_VOLUME_NORMAL) && !(NO_BLOOD in M.dna.species.species_traits))
M.blood_volume += 0.4
diff --git a/code/datums/diseases/advance/symptoms/bones.dm b/code/datums/diseases/viruses/advance/symptoms/bones.dm
similarity index 94%
rename from code/datums/diseases/advance/symptoms/bones.dm
rename to code/datums/diseases/viruses/advance/symptoms/bones.dm
index 83de1b8c5ee..b5186c34a9f 100644
--- a/code/datums/diseases/advance/symptoms/bones.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/bones.dm
@@ -20,7 +20,7 @@ Fragile Bones Syndrome
var/fragile_bones_chance = 3
var/done = FALSE
-/datum/symptom/bones/Activate(datum/disease/advance/A)
+/datum/symptom/bones/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/carbon/human/M = A.affected_mob
if(prob(SYMPTOM_ACTIVATION_PROB * 4))
@@ -62,7 +62,7 @@ Fragile Bones Syndrome
return
-/datum/symptom/bones/End(datum/disease/advance/A)
+/datum/symptom/bones/End(datum/disease/virus/advance/A)
var/mob/living/carbon/human/M = A.affected_mob
M.dna.species.bonefragility /= bonefragility_multiplier
M.dna.species.fragile_bones_chance -= fragile_bones_chance
diff --git a/code/datums/diseases/advance/symptoms/booze.dm b/code/datums/diseases/viruses/advance/symptoms/booze.dm
similarity index 74%
rename from code/datums/diseases/advance/symptoms/booze.dm
rename to code/datums/diseases/viruses/advance/symptoms/booze.dm
index 93111d5e76a..d7542908eb4 100644
--- a/code/datums/diseases/advance/symptoms/booze.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/booze.dm
@@ -24,7 +24,7 @@ Bonus
transmittable = -2
level = 3
-/datum/symptom/booze/Activate(datum/disease/advance/A)
+/datum/symptom/booze/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 2))
var/mob/living/M = A.affected_mob
@@ -33,5 +33,5 @@ Bonus
M.reagents.add_reagent(pick("rum", "vodka", "whiskey", "ale", "cider", "mead", "tequila", "wine", "beer"), 5) //somewhat safe drinks
else
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
- to_chat(M, "[pick("You feel warmth.", "You feel joyful.", "You relax for a moment")]") //span class notice because this is a drunkeness. Epic mind games ensues
+ to_chat(M, span_notice(pick("You feel warmth.", "You feel joyful.", "You relax for a moment"))) //span class notice because this is a drunkeness. Epic mind games ensues
return
diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/viruses/advance/symptoms/choking.dm
similarity index 64%
rename from code/datums/diseases/advance/symptoms/choking.dm
rename to code/datums/diseases/viruses/advance/symptoms/choking.dm
index ab5bfbb0358..2dcb01e9c0d 100644
--- a/code/datums/diseases/advance/symptoms/choking.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/choking.dm
@@ -26,29 +26,29 @@ Bonus
level = 3
severity = 3
-/datum/symptom/choking/Activate(datum/disease/advance/A)
+/datum/symptom/choking/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2)
- to_chat(M, "[pick("You're having difficulty breathing.", "Your breathing becomes heavy.")]")
+ to_chat(M, span_warning(pick("You're having difficulty breathing.", "Your breathing becomes heavy.")))
if(3, 4)
- to_chat(M, "[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]")
+ to_chat(M, span_warning("[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]"))
Choke_stage_3_4(M, A)
M.emote("gasp")
else
- to_chat(M, "[pick("You're choking!", "You can't breathe!")]")
+ to_chat(M, span_userdanger(pick("You're choking!", "You can't breathe!")))
Choke(M, A)
M.emote("gasp")
return
-/datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/advance/A)
+/datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/virus/advance/A)
var/get_damage = sqrtor0(21+A.totalStageSpeed()*0.5)+sqrtor0(16+A.totalStealth())
M.adjustOxyLoss(get_damage)
return 1
-/datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A)
+/datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/virus/advance/A)
var/get_damage = sqrtor0(21+A.totalStageSpeed()*0.5)+sqrtor0(16+A.totalStealth()*5)
M.adjustOxyLoss(get_damage)
return 1
diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/viruses/advance/symptoms/confusion.dm
similarity index 74%
rename from code/datums/diseases/advance/symptoms/confusion.dm
rename to code/datums/diseases/viruses/advance/symptoms/confusion.dm
index 3d7fd4dd5b6..d0f430f3cba 100644
--- a/code/datums/diseases/advance/symptoms/confusion.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/confusion.dm
@@ -27,16 +27,16 @@ Bonus
severity = 2
-/datum/symptom/confusion/Activate(datum/disease/advance/A)
+/datum/symptom/confusion/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(1, 2, 3, 4)
if(prob(SYMPTOM_ACTIVATION_PROB))
- to_chat(M, "[pick("Your head hurts.", "Your mind blanks for a moment.")]")
+ to_chat(M, span_warning(pick("Your head hurts.", "Your mind blanks for a moment.")))
else
if(prob(SYMPTOM_ACTIVATION_PROB * 3))
- to_chat(M, "You can't think straight!")
+ to_chat(M, span_userdanger("You can't think straight!"))
M.AdjustConfused(20 SECONDS, bound_lower = 0, bound_upper = 200 SECONDS)
M.Disoriented(1)
diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/viruses/advance/symptoms/cough.dm
similarity index 79%
rename from code/datums/diseases/advance/symptoms/cough.dm
rename to code/datums/diseases/viruses/advance/symptoms/cough.dm
index d9a0e3b008b..d6c24d72008 100644
--- a/code/datums/diseases/advance/symptoms/cough.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/cough.dm
@@ -26,13 +26,13 @@ BONUS
level = 1
severity = 1
-/datum/symptom/cough/Activate(datum/disease/advance/A)
+/datum/symptom/cough/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2, 3)
- to_chat(M, "[pick("You swallow excess mucus.", "You lightly cough.")]")
+ to_chat(M, span_notice(pick("You swallow excess mucus.", "You lightly cough.")))
else
M.emote("cough")
var/obj/item/I = M.get_active_hand()
diff --git a/code/datums/diseases/advance/symptoms/damage_converter.dm b/code/datums/diseases/viruses/advance/symptoms/damage_converter.dm
similarity index 90%
rename from code/datums/diseases/advance/symptoms/damage_converter.dm
rename to code/datums/diseases/viruses/advance/symptoms/damage_converter.dm
index 94826f4cbde..cf713948ffe 100644
--- a/code/datums/diseases/advance/symptoms/damage_converter.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/damage_converter.dm
@@ -25,7 +25,7 @@ Bonus
transmittable = -2
level = 4
-/datum/symptom/damage_converter/Activate(datum/disease/advance/A)
+/datum/symptom/damage_converter/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 10))
var/mob/living/M = A.affected_mob
@@ -48,10 +48,9 @@ Bonus
var/healed = 0
for(var/obj/item/organ/external/E in parts)
healed += min(E.brute_dam, get_damage) + min(E.burn_dam, get_damage)
- E.heal_damage(get_damage, get_damage, 0, 0)
+ E.heal_damage(get_damage, get_damage, updating_health = TRUE)
M.adjustToxLoss(healed)
-
else
if(M.getFireLoss() > 0 || M.getBruteLoss() > 0)
M.adjustFireLoss(-get_damage)
diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/viruses/advance/symptoms/deafness.dm
similarity index 65%
rename from code/datums/diseases/advance/symptoms/deafness.dm
rename to code/datums/diseases/viruses/advance/symptoms/deafness.dm
index 7d9184ec7b9..381fe5a9be3 100644
--- a/code/datums/diseases/advance/symptoms/deafness.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/deafness.dm
@@ -26,19 +26,19 @@ Bonus
level = 4
severity = 3
-/datum/symptom/deafness/Activate(datum/disease/advance/A)
+/datum/symptom/deafness/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(3, 4)
- to_chat(M, "[pick("You hear a ringing in your ear.", "Your ears pop.")]")
+ to_chat(M, span_warning(pick("You hear a ringing in your ear.", "Your ears pop.")))
if(5)
if(!(DEAF in M.mutations))
- to_chat(M, "Your ears pop and begin ringing loudly!")
+ to_chat(M, span_userdanger("Your ears pop and begin ringing loudly!"))
M.BecomeDeaf()
spawn(200)
if(M)
- to_chat(M, "The ringing in your ears fades...")
+ to_chat(M, span_warning("The ringing in your ears fades..."))
M.CureDeaf()
return
diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/viruses/advance/symptoms/dizzy.dm
similarity index 64%
rename from code/datums/diseases/advance/symptoms/dizzy.dm
rename to code/datums/diseases/viruses/advance/symptoms/dizzy.dm
index 730e2a8591a..70bcf6d340a 100644
--- a/code/datums/diseases/advance/symptoms/dizzy.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/dizzy.dm
@@ -26,14 +26,14 @@ Bonus
level = 4
severity = 2
-/datum/symptom/dizzy/Activate(datum/disease/advance/A)
+/datum/symptom/dizzy/Activate(datum/disease/virus/advance/A)
..()
- if(prob(SYMPTOM_ACTIVATION_PROB))
+ if(prob(SYMPTOM_ACTIVATION_PROB*5))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2, 3, 4)
- to_chat(M, "[pick("You feel dizzy.", "Your head spins.")]")
+ to_chat(M, span_warning(pick("You feel dizzy.", "Your head spins.")))
else
- to_chat(M, "A wave of dizziness washes over you!")
- M.Dizzy(10 SECONDS)
+ to_chat(M, span_userdanger("A wave of dizziness washes over you!"))
+ M.Dizzy(15 SECONDS)
return
diff --git a/code/datums/diseases/advance/symptoms/epinephrine.dm b/code/datums/diseases/viruses/advance/symptoms/epinephrine.dm
similarity index 83%
rename from code/datums/diseases/advance/symptoms/epinephrine.dm
rename to code/datums/diseases/viruses/advance/symptoms/epinephrine.dm
index e1dd2822f76..18389cc3407 100644
--- a/code/datums/diseases/advance/symptoms/epinephrine.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/epinephrine.dm
@@ -24,14 +24,14 @@ Bonus
transmittable = -2
level = 5
-/datum/symptom/epinephrine/Activate(datum/disease/advance/A)
+/datum/symptom/epinephrine/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/M = A.affected_mob
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
switch(A.stage)
if(5)
if(prob(10))
- to_chat(M, "[pick("Your body feels tough.", "You are feeling on edge.")]")
+ to_chat(M, span_notice(pick("Your body feels tough.", "You are feeling on edge.")))
if(A.stage > 4 && M.health <= HEALTH_THRESHOLD_CRIT)
M.reagents.add_reagent("epinephrine", 0.5)
if(M.reagents.get_reagent_amount("epinephrine") > 20)
diff --git a/code/datums/diseases/advance/symptoms/fever.dm b/code/datums/diseases/viruses/advance/symptoms/fever.dm
similarity index 76%
rename from code/datums/diseases/advance/symptoms/fever.dm
rename to code/datums/diseases/viruses/advance/symptoms/fever.dm
index 9d29d237693..cd097eadb6c 100644
--- a/code/datums/diseases/advance/symptoms/fever.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/fever.dm
@@ -26,17 +26,17 @@ Bonus
level = 2
severity = 2
-/datum/symptom/fever/Activate(datum/disease/advance/A)
+/datum/symptom/fever/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/carbon/M = A.affected_mob
- to_chat(M, "[pick("You feel hot.", "You feel like you're burning.")]")
+ to_chat(M, span_warning(pick("You feel hot.", "You feel like you're burning.")))
if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT)
Heat(M, A)
return
-/datum/symptom/fever/proc/Heat(mob/living/M, datum/disease/advance/A)
+/datum/symptom/fever/proc/Heat(mob/living/M, datum/disease/virus/advance/A)
var/get_heat = (sqrtor0(21+A.totalTransmittable()*2))+(sqrtor0(20+A.totalStageSpeed()*3))
M.bodytemperature = min(M.bodytemperature + (get_heat * A.stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1)
return 1
diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/viruses/advance/symptoms/fire.dm
similarity index 75%
rename from code/datums/diseases/advance/symptoms/fire.dm
rename to code/datums/diseases/viruses/advance/symptoms/fire.dm
index 2f79cc55a46..9b443be6ae9 100644
--- a/code/datums/diseases/advance/symptoms/fire.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/fire.dm
@@ -26,32 +26,32 @@ Bonus
level = 6
severity = 5
-/datum/symptom/fire/Activate(datum/disease/advance/A)
+/datum/symptom/fire/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(3)
- to_chat(M, "[pick("You feel hot.", "You hear a crackling noise.", "You smell smoke.")]")
+ to_chat(M, span_warning(pick("You feel hot.", "You hear a crackling noise.", "You smell smoke.")))
if(4)
Firestacks_stage_4(M, A)
M.IgniteMob()
- to_chat(M, "Your skin bursts into flames!")
+ to_chat(M, span_userdanger("Your skin bursts into flames!"))
M.emote("scream")
if(5)
Firestacks_stage_5(M, A)
M.IgniteMob()
- to_chat(M, "Your skin erupts into an inferno!")
+ to_chat(M, span_userdanger("Your skin erupts into an inferno!"))
M.emote("scream")
return
-/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A)
+/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/virus/advance/A)
var/get_stacks = max((sqrtor0(20 + A.totalStageSpeed() * 2)) - (sqrtor0(16 + A.totalStealth())), 1)
M.adjust_fire_stacks(get_stacks)
M.adjustFireLoss(get_stacks * 0.5)
return 1
-/datum/symptom/fire/proc/Firestacks_stage_5(mob/living/M, datum/disease/advance/A)
+/datum/symptom/fire/proc/Firestacks_stage_5(mob/living/M, datum/disease/virus/advance/A)
var/get_stacks = max((sqrtor0(20 + A.totalStageSpeed() * 3))-(sqrtor0(16 + A.totalStealth())), 1)
M.adjust_fire_stacks(get_stacks)
M.adjustFireLoss(get_stacks)
diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/viruses/advance/symptoms/flesh_eating.dm
similarity index 66%
rename from code/datums/diseases/advance/symptoms/flesh_eating.dm
rename to code/datums/diseases/viruses/advance/symptoms/flesh_eating.dm
index 1cef07340b9..e85aa1b8bc9 100644
--- a/code/datums/diseases/advance/symptoms/flesh_eating.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/flesh_eating.dm
@@ -26,19 +26,19 @@ Bonus
level = 6
severity = 5
-/datum/symptom/flesh_eating/Activate(datum/disease/advance/A)
+/datum/symptom/flesh_eating/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(2,3)
- to_chat(M, "[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]")
+ to_chat(M, span_warning(pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")))
if(4,5)
- to_chat(M, "[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]")
+ to_chat(M, span_userdanger(pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")))
Flesheat(M, A)
return
-/datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A)
+/datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/virus/advance/A)
var/get_damage = ((sqrtor0(16-A.totalStealth()))*5)
M.adjustBruteLoss(get_damage)
return 1
diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/viruses/advance/symptoms/hallucigen.dm
similarity index 52%
rename from code/datums/diseases/advance/symptoms/hallucigen.dm
rename to code/datums/diseases/viruses/advance/symptoms/hallucigen.dm
index 4bd438a7258..c98767a4c7e 100644
--- a/code/datums/diseases/advance/symptoms/hallucigen.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/hallucigen.dm
@@ -26,17 +26,17 @@ Bonus
level = 5
severity = 3
-/datum/symptom/hallucigen/Activate(datum/disease/advance/A)
+/datum/symptom/hallucigen/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(1, 2)
- to_chat(M, "[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whispher with no source.", "Your head aches.")]")
+ to_chat(M, span_warning(pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whispher with no source.", "Your head aches.")))
if(3, 4)
- to_chat(M, "[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]")
+ to_chat(M, span_warning("[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]"))
else
- to_chat(M, "[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]")
+ to_chat(M, span_userdanger(pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")))
M.AdjustHallucinate(5 SECONDS)
M.last_hallucinator_log = name
diff --git a/code/datums/diseases/advance/symptoms/headache.dm b/code/datums/diseases/viruses/advance/symptoms/headache.dm
similarity index 75%
rename from code/datums/diseases/advance/symptoms/headache.dm
rename to code/datums/diseases/viruses/advance/symptoms/headache.dm
index 0cf33f93797..95e641686c1 100644
--- a/code/datums/diseases/advance/symptoms/headache.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/headache.dm
@@ -27,9 +27,9 @@ BONUS
level = 1
severity = 1
-/datum/symptom/headache/Activate(datum/disease/advance/A)
+/datum/symptom/headache/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
- to_chat(M, "[pick("Your head hurts.", "Your head starts pounding.")]")
+ to_chat(M, span_warning(pick("Your head hurts.", "Your head starts pounding.")))
return
diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/viruses/advance/symptoms/heal.dm
similarity index 60%
rename from code/datums/diseases/advance/symptoms/heal.dm
rename to code/datums/diseases/viruses/advance/symptoms/heal.dm
index 62df49f4f2c..b23f5df519d 100644
--- a/code/datums/diseases/advance/symptoms/heal.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/heal.dm
@@ -25,7 +25,7 @@ Bonus
transmittable = -4
level = 6
-/datum/symptom/heal/Activate(datum/disease/advance/A)
+/datum/symptom/heal/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 10))
var/mob/living/M = A.affected_mob
@@ -34,7 +34,7 @@ Bonus
Heal(M, A)
return
-/datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/advance/A)
+/datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/virus/advance/A)
var/get_damage = (sqrtor0(20+A.totalStageSpeed())*(1+rand()))
M.adjustToxLoss(-get_damage)
return 1
@@ -67,9 +67,9 @@ Bonus
level = 3
var/list/cured_diseases = list()
-/datum/symptom/heal/metabolism/Heal(mob/living/M, datum/disease/advance/A)
+/datum/symptom/heal/metabolism/Heal(mob/living/M, datum/disease/virus/advance/A)
var/cured = 0
- for(var/thing in M.viruses)
+ for(var/thing in M.diseases)
var/datum/disease/D = thing
if(D.virus_heal_resistant)
continue
@@ -78,9 +78,9 @@ Bonus
cured_diseases += D.GetDiseaseID()
D.cure()
if(cured)
- to_chat(M, "You feel much better.")
+ to_chat(M, span_notice("You feel much better."))
-/datum/symptom/heal/metabolism/End(datum/disease/advance/A)
+/datum/symptom/heal/metabolism/End(datum/disease/virus/advance/A)
// Remove all the diseases we cured.
var/mob/living/M = A.affected_mob
if(istype(M))
@@ -88,7 +88,7 @@ Bonus
for(var/res in M.resistances)
if(res in cured_diseases)
M.resistances -= res
- to_chat(M, "You feel weaker.")
+ to_chat(M, span_warning("You feel weaker."))
/*
//////////////////////////////////////
@@ -118,47 +118,10 @@ Bonus
level = 3
var/longevity = 30
-/datum/symptom/heal/longevity/Heal(mob/living/M, datum/disease/advance/A)
+/datum/symptom/heal/longevity/Heal(mob/living/M, datum/disease/virus/advance/A)
longevity -= 1
if(!longevity)
A.cure()
-/datum/symptom/heal/longevity/Start(datum/disease/advance/A)
+/datum/symptom/heal/longevity/Start(datum/disease/virus/advance/A)
longevity = rand(initial(longevity) - 5, initial(longevity) + 5)
-
-/*
-/*
-//////////////////////////////////////
-
- DNA Restoration
-
- Not well hidden.
- Lowers resistance minorly.
- Does not affect stage speed.
- Decreases transmittablity greatly.
- Very high level.
-
-Bonus
- Heals brain damage, treats radiation, cleans SE of non-power mutations.
-
-//////////////////////////////////////
-*/
-
-/datum/symptom/heal/dna
-
- name = "Deoxyribonucleic Acid Restoration"
- stealth = -1
- resistance = -1
- stage_speed = 0
- transmittable = -3
- level = 5
-
-/datum/symptom/heal/dna/Heal(mob/living/carbon/M, datum/disease/advance/A)
- var/amt_healed = (sqrtor0(20+A.totalStageSpeed()*(3+rand())))-(sqrtor0(16+A.totalStealth()*rand()))
- M.adjustBrainLoss(-amt_healed)
- //Non-power mutations, excluding race, so the virus does not force monkey -> human transformations.
- var/list/unclean_mutations = (not_good_mutations|bad_mutations) - mutations_list[RACEMUT]
- M.dna.remove_mutation_group(unclean_mutations)
- M.radiation = max(M.radiation - 3, 0)
- return 1
-*/
diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/viruses/advance/symptoms/itching.dm
similarity index 76%
rename from code/datums/diseases/advance/symptoms/itching.dm
rename to code/datums/diseases/viruses/advance/symptoms/itching.dm
index 74f95fa91f0..bc6cc11ffad 100644
--- a/code/datums/diseases/advance/symptoms/itching.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/itching.dm
@@ -27,9 +27,9 @@ BONUS
level = 1
severity = 1
-/datum/symptom/itching/Activate(datum/disease/advance/A)
+/datum/symptom/itching/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
- to_chat(M, "Your [pick("back", "arm", "leg", "elbow", "head")] itches.")
+ to_chat(M, span_warning("Your [pick("back", "arm", "leg", "elbow", "head")] itches."))
return
diff --git a/code/datums/diseases/advance/symptoms/laugh.dm b/code/datums/diseases/viruses/advance/symptoms/laugh.dm
similarity index 92%
rename from code/datums/diseases/advance/symptoms/laugh.dm
rename to code/datums/diseases/viruses/advance/symptoms/laugh.dm
index 8da9ebc416d..c3a878ba7ac 100644
--- a/code/datums/diseases/advance/symptoms/laugh.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/laugh.dm
@@ -17,7 +17,7 @@ Uncontrolled Laughter Effect
level = 2
severity = 1
-/datum/symptom/laugh/Activate(datum/disease/advance/A)
+/datum/symptom/laugh/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 2))
var/mob/living/M = A.affected_mob
diff --git a/code/datums/diseases/advance/symptoms/limb_throw.dm b/code/datums/diseases/viruses/advance/symptoms/limb_throw.dm
similarity index 76%
rename from code/datums/diseases/advance/symptoms/limb_throw.dm
rename to code/datums/diseases/viruses/advance/symptoms/limb_throw.dm
index 41723cb0785..5a56fd0dde3 100644
--- a/code/datums/diseases/advance/symptoms/limb_throw.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/limb_throw.dm
@@ -18,13 +18,13 @@ Limb Rejection
severity = 4
var/spell_learned = FALSE
-/datum/symptom/limb_throw/Activate(datum/disease/advance/A)
+/datum/symptom/limb_throw/Activate(datum/disease/virus/advance/A)
if(!spell_learned && A.stage >= 4)
A.affected_mob.mind?.AddSpell(new /obj/effect/proc_holder/spell/limb_throw)
spell_learned = TRUE
return
-/datum/symptom/limb_throw/End(datum/disease/advance/A)
+/datum/symptom/limb_throw/End(datum/disease/virus/advance/A)
A.affected_mob.mind?.RemoveSpell(/obj/effect/proc_holder/spell/limb_throw)
spell_learned = FALSE
return
@@ -38,8 +38,8 @@ Limb Rejection
need_active_overlay = TRUE
invocation = ""
- selection_activated_message = "Your prepare to throw a limb!! Left-click to cast at a target!"
- selection_deactivated_message = "You decided not to throw a limb...for now."
+ selection_activated_message = span_notice("Your prepare to throw a limb!! Left-click to cast at a target!")
+ selection_deactivated_message = span_notice("You decided not to throw a limb...for now.")
action_icon_state = "limb_throw"
action_background_icon_state = "bg_changeling"
@@ -62,16 +62,16 @@ Limb Rejection
var/obj/item/organ/external/limb = H.bodyparts_by_name[H.zone_selected]
if(!istype(limb))
- to_chat(H, "You don't have the selected body part!")
+ to_chat(H, span_alert("You don't have the selected body part!"))
return FALSE
if(limb.vital)
- to_chat(H, "You still need [limb]!")
+ to_chat(H, span_alert("You still need [limb]!"))
return FALSE
for(var/obj/item/organ/internal/organ in limb.internal_organs)
if(organ.vital)
- to_chat(H, "You still need [organ]!")
+ to_chat(H, span_alert("You still need [organ]!"))
return FALSE
var/obj/item/projectile/limb/limb_projectile = new(user.loc, limb)
diff --git a/code/datums/diseases/advance/symptoms/love.dm b/code/datums/diseases/viruses/advance/symptoms/love.dm
similarity index 93%
rename from code/datums/diseases/advance/symptoms/love.dm
rename to code/datums/diseases/viruses/advance/symptoms/love.dm
index 1913cf8aa42..ff03537bf6c 100644
--- a/code/datums/diseases/advance/symptoms/love.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/love.dm
@@ -17,7 +17,7 @@ Pacifist Syndrome
level = 3
severity = 0
-/datum/symptom/love/Activate(datum/disease/advance/A)
+/datum/symptom/love/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/M = A.affected_mob
if(prob(SYMPTOM_ACTIVATION_PROB * 3))
diff --git a/code/datums/diseases/advance/symptoms/moan.dm b/code/datums/diseases/viruses/advance/symptoms/moan.dm
similarity index 78%
rename from code/datums/diseases/advance/symptoms/moan.dm
rename to code/datums/diseases/viruses/advance/symptoms/moan.dm
index c84a0413cae..f4439b4826b 100644
--- a/code/datums/diseases/advance/symptoms/moan.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/moan.dm
@@ -17,7 +17,7 @@ Groaning Syndrome
level = 2
severity = 1
-/datum/symptom/moan/Activate(datum/disease/advance/A)
+/datum/symptom/moan/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 2))
var/mob/living/M = A.affected_mob
@@ -25,9 +25,14 @@ Groaning Syndrome
if(1, 2, 3)
to_chat(M, span_notice("Your muscles spasm, making you want to moan"))
else
- M.emote("moan")
+ if(prob(50))
+ M.emote("moan")
+ else
+ M.say(pick("Ммм...", "Ах...", "Ох..."))
+
if(prob(1))
M.emote("blush")
+
var/obj/item/I = M.get_active_hand()
if(I && I.w_class == 1)
M.drop_from_active_hand()
diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/viruses/advance/symptoms/oxygen.dm
similarity index 76%
rename from code/datums/diseases/advance/symptoms/oxygen.dm
rename to code/datums/diseases/viruses/advance/symptoms/oxygen.dm
index 371b55c7664..a8d26de3e53 100644
--- a/code/datums/diseases/advance/symptoms/oxygen.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/oxygen.dm
@@ -25,7 +25,7 @@ Bonus
transmittable = -4
level = 6
-/datum/symptom/oxygen/Activate(datum/disease/advance/A)
+/datum/symptom/oxygen/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
var/mob/living/M = A.affected_mob
@@ -35,5 +35,5 @@ Bonus
M.reagents.add_reagent("salbutamol", 20)
else
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
- to_chat(M, "[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]")
+ to_chat(M, span_notice(pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")))
return
diff --git a/code/datums/diseases/advance/symptoms/painkiller.dm b/code/datums/diseases/viruses/advance/symptoms/painkiller.dm
similarity index 67%
rename from code/datums/diseases/advance/symptoms/painkiller.dm
rename to code/datums/diseases/viruses/advance/symptoms/painkiller.dm
index 53c5f4934ed..5c152d1b6b9 100644
--- a/code/datums/diseases/advance/symptoms/painkiller.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/painkiller.dm
@@ -24,7 +24,7 @@ Bonus
transmittable = -2
level = 6
-/datum/symptom/painkiller/Activate(datum/disease/advance/A)
+/datum/symptom/painkiller/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/M = A.affected_mob
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
@@ -34,10 +34,10 @@ Bonus
if(2, 3)
M.Slowed(40 SECONDS)
M.Confused(80 SECONDS)
- to_chat(M, "[pick("Something feels very wrong about your body.", "You have hard time controlling own body", "You can't feel your body.")]")
+ to_chat(M, span_danger(pick("Something feels very wrong about your body.", "You have hard time controlling own body", "You can't feel your body.")))
if(4, 5)
if(prob(10))
- to_chat(M, "[pick("Your body feels numb.", "You realize you feel nothing.", "You can't feel your body.")]")
+ to_chat(M, span_notice(pick("Your body feels numb.", "You realize you feel nothing.", "You can't feel your body.")))
if(M.reagents.get_reagent_amount("hydrocodone") < 2 && M.getToxLoss() < 13 && A.stage > 4)
M.reagents.add_reagent("hydrocodone", 0.5)
return
diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/viruses/advance/symptoms/sensory.dm
similarity index 81%
rename from code/datums/diseases/advance/symptoms/sensory.dm
rename to code/datums/diseases/viruses/advance/symptoms/sensory.dm
index 34ea5dd59d1..699f91a85f8 100644
--- a/code/datums/diseases/advance/symptoms/sensory.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/sensory.dm
@@ -25,7 +25,7 @@ Bonus
level = 5
severity = 0
-/datum/symptom/mind_restoration/Activate(datum/disease/advance/A)
+/datum/symptom/mind_restoration/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 3))
var/mob/living/M = A.affected_mob
@@ -54,7 +54,7 @@ Bonus
transmittable = -4
level = 4
-/datum/symptom/sensory_restoration/Activate(datum/disease/advance/A)
+/datum/symptom/sensory_restoration/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
var/mob/living/M = A.affected_mob
@@ -64,4 +64,4 @@ Bonus
M.reagents.add_reagent("oculine", 20)
else
if(prob(SYMPTOM_ACTIVATION_PROB * 5))
- to_chat(M, "[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your hearing feels more acute.")]")
+ to_chat(M, span_notice(pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your hearing feels more acute.")))
diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/viruses/advance/symptoms/shedding.dm
similarity index 75%
rename from code/datums/diseases/advance/symptoms/shedding.dm
rename to code/datums/diseases/viruses/advance/symptoms/shedding.dm
index 6586b267355..eadaab577b8 100644
--- a/code/datums/diseases/advance/symptoms/shedding.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/shedding.dm
@@ -25,24 +25,24 @@ BONUS
level = 4
severity = 1
-/datum/symptom/shedding/Activate(datum/disease/advance/A)
+/datum/symptom/shedding/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
- to_chat(M, "[pick("Your scalp itches.", "Your skin feels flakey.")]")
+ to_chat(M, span_warning(pick("Your scalp itches.", "Your skin feels flakey.")))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
switch(A.stage)
if(3, 4)
if(!(head_organ.h_style == "Bald") && !(head_organ.h_style == "Balding Hair"))
- to_chat(H, "Your hair starts to fall out in clumps...")
+ to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
spawn(50)
head_organ.h_style = "Balding Hair"
H.update_hair()
if(5)
if(!(head_organ.f_style == "Shaved") || !(head_organ.h_style == "Bald"))
- to_chat(H, "Your hair starts to fall out in clumps...")
+ to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
spawn(50)
head_organ.f_style = "Shaved"
head_organ.h_style = "Bald"
diff --git a/code/datums/diseases/advance/symptoms/shivering.dm b/code/datums/diseases/viruses/advance/symptoms/shivering.dm
similarity index 83%
rename from code/datums/diseases/advance/symptoms/shivering.dm
rename to code/datums/diseases/viruses/advance/symptoms/shivering.dm
index 1fcc586897b..1c2d8ace7af 100644
--- a/code/datums/diseases/advance/symptoms/shivering.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/shivering.dm
@@ -26,16 +26,16 @@ Bonus
level = 2
severity = 2
-/datum/symptom/shivering/Activate(datum/disease/advance/A)
+/datum/symptom/shivering/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/carbon/M = A.affected_mob
- to_chat(M, "[pick("You feel cold.", "You start shivering.")]")
+ to_chat(M, span_warning(pick("You feel cold.", "You start shivering.")))
if(M.bodytemperature > BODYTEMP_COLD_DAMAGE_LIMIT)
Chill(M, A)
return
-/datum/symptom/shivering/proc/Chill(mob/living/M, datum/disease/advance/A)
+/datum/symptom/shivering/proc/Chill(mob/living/M, datum/disease/virus/advance/A)
var/get_cold = (sqrtor0(16+A.totalStealth()*2))+(sqrtor0(21+A.totalResistance()*2))
M.bodytemperature = max(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1)
return 1
diff --git a/code/datums/diseases/advance/symptoms/skin.dm b/code/datums/diseases/viruses/advance/symptoms/skin.dm
similarity index 77%
rename from code/datums/diseases/advance/symptoms/skin.dm
rename to code/datums/diseases/viruses/advance/symptoms/skin.dm
index b24ce2cc5a1..da589365b70 100644
--- a/code/datums/diseases/advance/symptoms/skin.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/skin.dm
@@ -25,7 +25,7 @@ BONUS
level = 4
severity = 1
-/datum/symptom/vitiligo/Activate(datum/disease/advance/A)
+/datum/symptom/vitiligo/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
@@ -38,7 +38,7 @@ BONUS
H.s_tone = -85
H.update_body()
else
- H.visible_message("[H] looks a bit pale...", "Your skin suddenly appears lighter...")
+ H.visible_message(span_warning("[H] looks a bit pale..."), span_notice("Your skin suddenly appears lighter..."))
return
@@ -70,7 +70,7 @@ BONUS
level = 4
severity = 1
-/datum/symptom/revitiligo/Activate(datum/disease/advance/A)
+/datum/symptom/revitiligo/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
@@ -83,6 +83,6 @@ BONUS
H.s_tone = 85
H.update_body()
else
- H.visible_message("[H] looks a bit dark...", "Your skin suddenly appears darker...")
+ H.visible_message(span_warning("[H] looks a bit dark..."), span_warning("Your skin suddenly appears darker..."))
return
diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/viruses/advance/symptoms/sneeze.dm
similarity index 90%
rename from code/datums/diseases/advance/symptoms/sneeze.dm
rename to code/datums/diseases/viruses/advance/symptoms/sneeze.dm
index 71acf2faab5..a7030ed9a3c 100644
--- a/code/datums/diseases/advance/symptoms/sneeze.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/sneeze.dm
@@ -27,7 +27,7 @@ Bonus
level = 1
severity = 1
-/datum/symptom/sneeze/Activate(datum/disease/advance/A)
+/datum/symptom/sneeze/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/viruses/advance/symptoms/symptoms.dm
similarity index 82%
rename from code/datums/diseases/advance/symptoms/symptoms.dm
rename to code/datums/diseases/viruses/advance/symptoms/symptoms.dm
index dc8023310ad..253f2b8956a 100644
--- a/code/datums/diseases/advance/symptoms/symptoms.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/symptoms.dm
@@ -18,13 +18,13 @@ GLOBAL_LIST_INIT(list_symptoms, subtypesof(/datum/symptom))
var/id = ""
// Called when processing of the advance disease, which holds this symptom, starts.
-/datum/symptom/proc/Start(datum/disease/advance/A)
+/datum/symptom/proc/Start(datum/disease/virus/advance/A)
return
// Called when the advance disease is going to be deleted or when the advance disease stops processing.
-/datum/symptom/proc/End(datum/disease/advance/A)
+/datum/symptom/proc/End(datum/disease/virus/advance/A)
return
-/datum/symptom/proc/Activate(datum/disease/advance/A)
+/datum/symptom/proc/Activate(datum/disease/virus/advance/A)
return
diff --git a/code/datums/diseases/advance/symptoms/toxification.dm b/code/datums/diseases/viruses/advance/symptoms/toxification.dm
similarity index 86%
rename from code/datums/diseases/advance/symptoms/toxification.dm
rename to code/datums/diseases/viruses/advance/symptoms/toxification.dm
index de92181056c..0c1d0116189 100644
--- a/code/datums/diseases/advance/symptoms/toxification.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/toxification.dm
@@ -18,13 +18,13 @@ Toxification syndrome
severity = 5
var/germs_multiplier = 1
-/datum/symptom/infection/Start(datum/disease/advance/A)
+/datum/symptom/infection/Start(datum/disease/virus/advance/A)
var/mob/living/carbon/human/H = A.affected_mob
if(istype(H))
germs_multiplier = 6 + sqrtor0(25 + A.totalTransmittable()) //~~10 on average
H.dna.species.germs_growth_rate *= germs_multiplier
-/datum/symptom/infection/Activate(datum/disease/advance/A)
+/datum/symptom/infection/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/carbon/human/M = A.affected_mob
@@ -44,7 +44,7 @@ Toxification syndrome
O.germ_level = INFECTION_LEVEL_ONE
return
-/datum/symptom/infection/End(datum/disease/advance/A)
+/datum/symptom/infection/End(datum/disease/virus/advance/A)
var/mob/living/carbon/human/H = A.affected_mob
if(germs_multiplier)
H.dna.species.germs_growth_rate /= germs_multiplier
diff --git a/code/datums/diseases/advance/symptoms/uncotrollable.dm b/code/datums/diseases/viruses/advance/symptoms/uncotrollable.dm
similarity index 97%
rename from code/datums/diseases/advance/symptoms/uncotrollable.dm
rename to code/datums/diseases/viruses/advance/symptoms/uncotrollable.dm
index 8dc9e283d4e..68bb45c6501 100644
--- a/code/datums/diseases/advance/symptoms/uncotrollable.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/uncotrollable.dm
@@ -17,7 +17,7 @@ Uncontrollable Aggression
level = 6
severity = 4
-/datum/symptom/aggression/Activate(datum/disease/advance/A)
+/datum/symptom/aggression/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/carbon/human/aggressor = A.affected_mob
if(!istype(aggressor))
@@ -116,7 +116,7 @@ Uncontrollable Actions
level = 6
severity = 4
-/datum/symptom/obsession/Activate(datum/disease/advance/A)
+/datum/symptom/obsession/Activate(datum/disease/virus/advance/A)
..()
var/mob/living/carbon/human/possesed = A.affected_mob
if(!istype(possesed))
diff --git a/code/datums/diseases/advance/symptoms/viral.dm b/code/datums/diseases/viruses/advance/symptoms/viral.dm
similarity index 68%
rename from code/datums/diseases/advance/symptoms/viral.dm
rename to code/datums/diseases/viruses/advance/symptoms/viral.dm
index 082b726ea4f..d2e59e2c953 100644
--- a/code/datums/diseases/advance/symptoms/viral.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/viral.dm
@@ -22,15 +22,15 @@ BONUS
transmittable = 0
level = 3
-/datum/symptom/viraladaptation/Activate(datum/disease/advance/A)
+/datum/symptom/viraladaptation/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1)
- to_chat(M, "You feel off, but no different from before.")
+ to_chat(M, span_notice("You feel off, but no different from before."))
if(5)
- to_chat(M, "You feel better, but nothing interesting happens.")
+ to_chat(M, span_notice("You feel better, but nothing interesting happens."))
/*
//////////////////////////////////////
@@ -56,12 +56,12 @@ BONUS
transmittable = 3
level = 3
-/datum/symptom/viraladaptation/Activate(datum/disease/advance/A)
+/datum/symptom/viraladaptation/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1)
- to_chat(M, "You feel better, but no different from before.")
+ to_chat(M, span_notice("You feel better, but no different from before."))
if(5)
- to_chat(M, "You feel off, but nothing interesting happens.")
+ to_chat(M, span_notice("You feel off, but nothing interesting happens."))
diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/viruses/advance/symptoms/vision.dm
similarity index 75%
rename from code/datums/diseases/advance/symptoms/vision.dm
rename to code/datums/diseases/viruses/advance/symptoms/vision.dm
index 6e58faf5837..9f7f329d39d 100644
--- a/code/datums/diseases/advance/symptoms/vision.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/vision.dm
@@ -26,7 +26,7 @@ Bonus
level = 5
severity = 4
-/datum/symptom/visionloss/Activate(datum/disease/advance/A)
+/datum/symptom/visionloss/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/carbon/M = A.affected_mob
@@ -35,13 +35,13 @@ Bonus
return
switch(A.stage)
if(1, 2)
- to_chat(M, "Your eyes itch.")
+ to_chat(M, span_warning("Your eyes itch."))
if(3, 4)
- to_chat(M, "Your eyes burn!")
+ to_chat(M, span_warning("Your eyes burn!"))
M.EyeBlurry(40 SECONDS)
eyes.receive_damage(1)
else
- to_chat(M, "Your eyes burn horrificly!")
+ to_chat(M, span_userdanger("Your eyes burn horrificly!"))
M.EyeBlurry(60 SECONDS)
eyes.receive_damage(5)
if(eyes.damage >= 10)
@@ -50,4 +50,4 @@ Bonus
if(!(BLINDNESS in M.mutations))
M.mutations |= BLINDNESS
M.update_blind_effects()
- to_chat(M, "You go blind!")
+ to_chat(M, span_userdanger("You go blind!"))
diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/viruses/advance/symptoms/voice_change.dm
similarity index 80%
rename from code/datums/diseases/advance/symptoms/voice_change.dm
rename to code/datums/diseases/viruses/advance/symptoms/voice_change.dm
index 202c00ef23f..54e0686956d 100644
--- a/code/datums/diseases/advance/symptoms/voice_change.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/voice_change.dm
@@ -26,14 +26,14 @@ Bonus
level = 6
severity = 2
-/datum/symptom/voice_change/Activate(datum/disease/advance/A)
+/datum/symptom/voice_change/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(1, 2, 3, 4)
- to_chat(M, "[pick("Your throat hurts.", "You clear your throat.")]")
+ to_chat(M, span_warning(pick("Your throat hurts.", "You clear your throat.")))
else
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -42,7 +42,7 @@ Bonus
return
-/datum/symptom/voice_change/End(datum/disease/advance/A)
+/datum/symptom/voice_change/End(datum/disease/virus/advance/A)
..()
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/H = A.affected_mob
diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/viruses/advance/symptoms/vomit.dm
similarity index 91%
rename from code/datums/diseases/advance/symptoms/vomit.dm
rename to code/datums/diseases/viruses/advance/symptoms/vomit.dm
index 571bcb66e53..1387543d0fd 100644
--- a/code/datums/diseases/advance/symptoms/vomit.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/vomit.dm
@@ -30,13 +30,13 @@ Bonus
level = 3
severity = 4
-/datum/symptom/vomit/Activate(datum/disease/advance/A)
+/datum/symptom/vomit/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB / 2))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2, 3, 4)
- to_chat(M, "[pick("You feel nauseous.", "You feel like you're going to throw up!")]")
+ to_chat(M, span_warning(pick("You feel nauseous.", "You feel like you're going to throw up!")))
else
Vomit(M)
diff --git a/code/datums/diseases/advance/symptoms/weakness.dm b/code/datums/diseases/viruses/advance/symptoms/weakness.dm
similarity index 54%
rename from code/datums/diseases/advance/symptoms/weakness.dm
rename to code/datums/diseases/viruses/advance/symptoms/weakness.dm
index 614aa38e0f9..9837694cdae 100644
--- a/code/datums/diseases/advance/symptoms/weakness.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/weakness.dm
@@ -26,20 +26,20 @@ Bonus
level = 3
severity = 3
-/datum/symptom/weakness/Activate(datum/disease/advance/A)
+/datum/symptom/weakness/Activate(datum/disease/virus/advance/A)
..()
- if(prob(SYMPTOM_ACTIVATION_PROB))
+ if(prob(SYMPTOM_ACTIVATION_PROB*2))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2)
- to_chat(M, "[pick("You feel weak.", "You feel lazy.")]")
+ to_chat(M, span_warning(pick("You feel weak.", "You feel lazy.")))
if(3, 4)
- to_chat(M, "[pick("You feel very frail.", "You think you might faint.")]")
+ to_chat(M, span_warning("[pick("You feel very frail.", "You think you might faint.")]"))
M.adjustStaminaLoss(15)
else
- to_chat(M, "[pick("You feel tremendously weak!", "Your body trembles as exhaustion creeps over you.")]")
+ to_chat(M, span_userdanger(pick("You feel tremendously weak!", "Your body trembles as exhaustion creeps over you.")))
M.adjustStaminaLoss(30)
if(M.getStaminaLoss() > 60 && !M.stat)
- M.visible_message("[M] faints!", "You swoon and faint...")
+ M.visible_message(span_warning("[M] faints!"), span_userdanger("You swoon and faint..."))
M.AdjustSleeping(10 SECONDS)
return
diff --git a/code/datums/diseases/advance/symptoms/weight.dm b/code/datums/diseases/viruses/advance/symptoms/weight.dm
similarity index 67%
rename from code/datums/diseases/advance/symptoms/weight.dm
rename to code/datums/diseases/viruses/advance/symptoms/weight.dm
index 46a6c8f2162..2532c47deb9 100644
--- a/code/datums/diseases/advance/symptoms/weight.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/weight.dm
@@ -27,14 +27,14 @@ Bonus
level = 3
severity = 1
-/datum/symptom/weight_loss/Activate(datum/disease/advance/A)
+/datum/symptom/weight_loss/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2, 3, 4)
- to_chat(M, "[pick("You feel hungry.", "You crave for food.")]")
+ to_chat(M, span_warning(pick("You feel hungry.", "You crave for food.")))
else
- to_chat(M, "[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]")
+ to_chat(M, span_warning("[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]"))
M.overeatduration = max(M.overeatduration - 100, 0)
M.adjust_nutrition(-100)
diff --git a/code/datums/diseases/advance/symptoms/youth.dm b/code/datums/diseases/viruses/advance/symptoms/youth.dm
similarity index 65%
rename from code/datums/diseases/advance/symptoms/youth.dm
rename to code/datums/diseases/viruses/advance/symptoms/youth.dm
index 81f88aa29cb..73b64657765 100644
--- a/code/datums/diseases/advance/symptoms/youth.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/youth.dm
@@ -25,7 +25,7 @@ BONUS
transmittable = -4
level = 5
-/datum/symptom/youth/Activate(datum/disease/advance/A)
+/datum/symptom/youth/Activate(datum/disease/virus/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB * 2))
var/mob/living/M = A.affected_mob
@@ -35,22 +35,22 @@ BONUS
if(1)
if(H.age > 41)
H.age = 41
- to_chat(H, "You haven't had this much energy in years!")
+ to_chat(H, span_notice("You haven't had this much energy in years!"))
if(2)
if(H.age > 36)
H.age = 36
- to_chat(H, "You're suddenly in a good mood.")
+ to_chat(H, span_notice("You're suddenly in a good mood."))
if(3)
if(H.age > 31)
H.age = 31
- to_chat(H, "You begin to feel more lithe.")
+ to_chat(H, span_notice("You begin to feel more lithe."))
if(4)
if(H.age > 26)
H.age = 26
- to_chat(H, "You feel reinvigorated.")
+ to_chat(H, span_notice("You feel reinvigorated."))
if(5)
if(H.age > 21)
H.age = 21
- to_chat(H, "You feel like you can take on the world!")
+ to_chat(H, span_notice("You feel like you can take on the world!"))
return
diff --git a/code/datums/diseases/viruses/anxiety.dm b/code/datums/diseases/viruses/anxiety.dm
new file mode 100644
index 00000000000..a910f0cfc60
--- /dev/null
+++ b/code/datums/diseases/viruses/anxiety.dm
@@ -0,0 +1,45 @@
+/datum/disease/virus/anxiety
+ name = "Severe Anxiety"
+ form = "Infection"
+ agent = "Excess Lepidopticides"
+ desc = "If left untreated subject will regurgitate butterflies."
+ max_stages = 4
+ spread_flags = CONTACT
+ cures = list("ethanol")
+ severity = MEDIUM
+ possible_mutations = list(/datum/disease/virus/beesease)
+
+/datum/disease/virus/anxiety/stage_act()
+ if(!..())
+ return FALSE
+ switch(stage)
+ if(2)
+ if(prob(5))
+ to_chat(affected_mob, span_notice("You feel anxious."))
+ if(prob(5))
+ affected_mob.AdjustJitter(5 SECONDS)
+ if(3)
+ if(prob(10))
+ to_chat(affected_mob, span_notice("Your stomach flutters."))
+ if(prob(5))
+ to_chat(affected_mob, span_notice("You feel panicky."))
+ if(prob(5))
+ to_chat(affected_mob, span_danger("You're overtaken with panic!"))
+ affected_mob.AdjustJitter(10 SECONDS, bound_upper = 20 SECONDS)
+ affected_mob.AdjustStuttering(10 SECONDS, bound_upper = 20 SECONDS)
+ if(4)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("You feel butterflies in your stomach."))
+ if(prob(5))
+ affected_mob.visible_message(span_danger("[affected_mob] stumbles around in a panic."), \
+ span_userdanger("You have a panic attack!"))
+ affected_mob.AdjustConfused(rand(6 SECONDS, 12 SECONDS), bound_upper = 20 SECONDS)
+ affected_mob.AdjustJitter(rand(20 SECONDS, 40 SECONDS), bound_upper = 50 SECONDS)
+ affected_mob.AdjustStuttering(rand(20 SECONDS, 40 SECONDS), bound_upper = 50 SECONDS)
+ if(prob(3))
+ affected_mob.visible_message(span_danger("[affected_mob] coughs up butterflies!"), \
+ span_userdanger("You cough up butterflies!"))
+ affected_mob.Stun(rand(5 SECONDS, 10 SECONDS))
+ new /mob/living/simple_animal/butterfly(affected_mob.loc)
+ new /mob/living/simple_animal/butterfly(affected_mob.loc)
+ return
diff --git a/code/datums/diseases/viruses/beesease.dm b/code/datums/diseases/viruses/beesease.dm
new file mode 100644
index 00000000000..a71351ea199
--- /dev/null
+++ b/code/datums/diseases/viruses/beesease.dm
@@ -0,0 +1,59 @@
+/datum/disease/virus/beesease
+ name = "Beesease"
+ form = "Infection"
+ agent = "Apidae Infection"
+ desc = "If left untreated subject will turn into a beehive."
+ max_stages = 4
+ stage_prob = 2
+ can_progress_in_dead = TRUE
+ discovery_threshold = 0.9
+ spread_flags = CONTACT
+ cures = list("sugar")
+ severity = DANGEROUS
+ possible_mutations = list(/datum/disease/virus/lycan)
+ var/bees_spawned = 0
+
+/datum/disease/virus/beesease/stage_act()
+ if(!..())
+ return FALSE
+ if(affected_mob.stat != DEAD)
+ switch(stage)
+ if(2)
+ if(prob(10))
+ to_chat(affected_mob, span_notice("You taste honey in your mouth."))
+ if(prob(1))
+ bee_stinging()
+ if(3)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("Your stomach rumbles."))
+ affected_mob.adjustBruteLoss(2)
+ if(prob(7))
+ bee_stinging()
+ if(4)
+ if(prob(10))
+ affected_mob.visible_message(span_danger("[affected_mob] buzzes."), \
+ span_userdanger("Your stomach buzzes violently!"))
+ if(prob(5))
+ to_chat(affected_mob, span_danger("You feel something moving in your throat."))
+ if(prob(12))
+ bee_stinging()
+
+ if(prob(5 * stage))
+ playsound(get_turf(affected_mob.loc), pick('sound/creatures/bee3.ogg', 'sound/creatures/bee4.ogg'), (stage*stage)*6.25, 1)
+
+ if(stage == max_stages && prob(3) && bees_spawned < 10)
+ affected_mob.visible_message(span_danger("Swarm of bees flies out of a [affected_mob]'s mouth!"),
+ span_userdanger("Swarm of bees flies out of your mouth!"))
+ affected_mob.adjustBruteLoss(3)
+ for(var/i = 0, i < 3, i++)
+ var/mob/living/simple_animal/hostile/poison/bees/new_bee = new(affected_mob.loc)
+ new_bee.beegent = new /datum/reagent/bee_venom_beesease
+
+ bees_spawned++
+
+/datum/disease/virus/beesease/proc/bee_stinging()
+ to_chat(affected_mob, span_danger("Your stomach stings painfully."))
+ affected_mob.Slowed(3 SECONDS, 10)
+ var/datum/reagent/bee_venom_beesease/R = new
+ R.volume = 5
+ affected_mob.reagents.add_reagent(R.id, R.volume)
diff --git a/code/datums/diseases/viruses/brainrot.dm b/code/datums/diseases/viruses/brainrot.dm
new file mode 100644
index 00000000000..efd3f76e1d9
--- /dev/null
+++ b/code/datums/diseases/viruses/brainrot.dm
@@ -0,0 +1,52 @@
+/datum/disease/virus/brainrot
+ name = "Brainrot"
+ agent = "Cryptococcus Cosmosis"
+ desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
+ max_stages = 4
+ spread_flags = CONTACT
+ cures = list("mannitol")
+ cure_prob = 15
+ required_organs = list(/obj/item/organ/internal/brain)
+ severity = DANGEROUS
+ mutation_reagents = list("mutagen", "neurotoxin2")
+ possible_mutations = list(/datum/disease/kuru, /datum/disease/virus/advance/preset/mind_restoration, /datum/disease/virus/transformation/jungle_fever)
+
+/datum/disease/virus/brainrot/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(2)
+ if(prob(3))
+ affected_mob.emote("blink")
+ if(prob(4))
+ affected_mob.emote("yawn")
+ if(prob(7))
+ to_chat(affected_mob, span_danger("You don't feel like yourself."))
+ if(prob(15) && affected_mob.getBrainLoss()<=98)
+ affected_mob.adjustBrainLoss(1)
+ if(3)
+ if(prob(5))
+ affected_mob.emote("stare")
+ if(prob(5))
+ affected_mob.emote("drool")
+ if(prob(7))
+ to_chat(affected_mob, span_danger("You don't feel like yourself."))
+ if(prob(25) && affected_mob.getBrainLoss()<=97)
+ affected_mob.adjustBrainLoss(2)
+ to_chat(affected_mob, span_danger("Your try to remember something important...but can't."))
+
+ if(4)
+ if(prob(7))
+ affected_mob.emote("stare")
+ if(prob(7))
+ affected_mob.emote("drool")
+ if(prob(30) && affected_mob.getBrainLoss()<=97)
+ affected_mob.adjustBrainLoss(2)
+ if(prob(30))
+ to_chat(affected_mob, span_danger("Strange buzzing fills your head, removing all thoughts."))
+ if(prob(4))
+ affected_mob.visible_message(span_warning("[affected_mob] suddenly collapses"), span_danger("You lose consciousness..."))
+ affected_mob.Paralyse(rand(10 SECONDS, 20 SECONDS))
+ if(prob(10))
+ affected_mob.AdjustStuttering(30 SECONDS, bound_upper = 30 SECONDS)
diff --git a/code/datums/diseases/viruses/cold.dm b/code/datums/diseases/viruses/cold.dm
new file mode 100644
index 00000000000..4501158108e
--- /dev/null
+++ b/code/datums/diseases/viruses/cold.dm
@@ -0,0 +1,49 @@
+/datum/disease/virus/cold
+ name = "The Cold"
+ agent = "XY-rhinovirus"
+ desc = "If left untreated the subject will contract the flu."
+ max_stages = 3
+ spread_flags = AIRBORNE
+ visibility_flags = HIDDEN_HUD
+ cure_text = "Rest & Spaceacillin"
+ cures = list("spaceacillin")
+ cure_prob = 30
+ permeability_mod = 0.5
+ severity = MINOR
+
+/datum/disease/virus/cold/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(2, 3)
+ if(prob(stage))
+ affected_mob.emote("sneeze")
+ if(prob(stage))
+ affected_mob.emote("cough")
+ if(prob(stage))
+ to_chat(affected_mob, span_danger("Your throat feels sore."))
+ if(prob(stage))
+ to_chat(affected_mob, span_danger("Mucous runs down the back of your throat."))
+ if(3)
+ if(prob(1) && prob(50))
+ if(!affected_mob.resistances.Find(/datum/disease/virus/flu))
+ var/datum/disease/virus/flu/Flu = new
+ Flu.Contract(affected_mob)
+ cure()
+
+/datum/disease/virus/cold/has_cure()
+ //if has spaceacillin
+ if(..())
+ if(affected_mob.IsSleeping())
+ return TRUE
+ if(affected_mob.lying)
+ return prob(33)
+ return prob(1)
+ //if not
+ else
+ if(affected_mob.IsSleeping())
+ return prob(20)
+ if(affected_mob.lying)
+ return prob(7)
+ return FALSE
diff --git a/code/datums/diseases/viruses/flu.dm b/code/datums/diseases/viruses/flu.dm
new file mode 100644
index 00000000000..3f1dc2f86e0
--- /dev/null
+++ b/code/datums/diseases/viruses/flu.dm
@@ -0,0 +1,47 @@
+/datum/disease/virus/flu
+ name = "The Flu"
+ agent = "H13N1 flu virion"
+ desc = "If left untreated the subject will feel quite unwell."
+ max_stages = 3
+ spread_flags = AIRBORNE
+ visibility_flags = HIDDEN_HUD
+ cure_text = "Rest & Spaceacillin"
+ cures = list("spaceacillin")
+ cure_prob = 30
+ permeability_mod = 0.75
+ severity = MEDIUM
+
+/datum/disease/virus/flu/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(2, 3)
+ if(prob(stage))
+ affected_mob.emote("sneeze")
+ if(prob(stage))
+ affected_mob.emote("cough")
+ if(prob(stage))
+ to_chat(affected_mob, span_danger("Your muscles ache"))
+ affected_mob.take_organ_damage(1)
+ if(prob(stage))
+ to_chat(affected_mob, span_danger("Your stomach hurts."))
+ affected_mob.adjustToxLoss(1)
+ return
+
+/datum/disease/virus/flu/has_cure()
+ //if has spaceacillin
+ if(..())
+ if(affected_mob.IsSleeping())
+ return TRUE
+ if(affected_mob.lying)
+ return prob(33)
+ return prob(1)
+ //if not
+ else
+ if(affected_mob.IsSleeping())
+ return prob(20)
+ if(affected_mob.lying)
+ return prob(7)
+ return FALSE
+
diff --git a/code/datums/diseases/fluspanish.dm b/code/datums/diseases/viruses/fluspanish.dm
similarity index 55%
rename from code/datums/diseases/fluspanish.dm
rename to code/datums/diseases/viruses/fluspanish.dm
index b348934c7aa..a9ece081675 100644
--- a/code/datums/diseases/fluspanish.dm
+++ b/code/datums/diseases/viruses/fluspanish.dm
@@ -1,18 +1,19 @@
-/datum/disease/fluspanish
- name = "Spanish inquisition Flu"
+/datum/disease/virus/fluspanish
+ name = "Spanish Inquisition Flu"
+ agent = "1nqu1s1t10n flu virion"
+ desc = "If left untreated the subject will burn to death for being a heretic."
max_stages = 3
- spread_text = "Airborne"
+ spread_flags = AIRBORNE
cure_text = "Spaceacillin & Anti-bodies to the common flu"
cures = list("spaceacillin")
- cure_chance = 10
- agent = "1nqu1s1t10n flu virion"
- viable_mobtypes = list(/mob/living/carbon/human)
+ cure_prob = 10
permeability_mod = 0.75
- desc = "If left untreated the subject will burn to death for being a heretic."
severity = DANGEROUS
-/datum/disease/fluspanish/stage_act()
- ..()
+/datum/disease/virus/fluspanish/stage_act()
+ if(!..())
+ return FALSE
+
switch(stage)
if(2)
affected_mob.bodytemperature += 10
@@ -21,7 +22,7 @@
if(prob(5))
affected_mob.emote("cough")
if(prob(1))
- to_chat(affected_mob, "You're burning in your own skin!")
+ to_chat(affected_mob, span_danger("You're burning in your own skin!"))
affected_mob.take_organ_damage(0,5)
if(3)
@@ -31,6 +32,17 @@
if(prob(5))
affected_mob.emote("cough")
if(prob(5))
- to_chat(affected_mob, "You're burning in your own skin!")
+ to_chat(affected_mob, span_danger("You're burning in your own skin!"))
affected_mob.take_organ_damage(0,5)
return
+
+/datum/disease/virus/fluspanish/has_cure()
+ //if has spaceacillin
+ if(..())
+ if(affected_mob.resistances.Find(/datum/disease/virus/flu))
+ return TRUE
+ else
+ return prob(1)
+ //if not
+ else
+ return FALSE
diff --git a/code/datums/diseases/viruses/gbs.dm b/code/datums/diseases/viruses/gbs.dm
new file mode 100644
index 00000000000..6cd70b97350
--- /dev/null
+++ b/code/datums/diseases/viruses/gbs.dm
@@ -0,0 +1,69 @@
+/datum/disease/virus/gbs
+ name = "GBS"
+ agent = "Gravitokinetic Bipotential SADS+"
+ spread_flags = CONTACT
+ cures = list("diphenhydramine","sulfur")
+ cure_prob = 15
+ severity = BIOHAZARD
+
+/datum/disease/virus/gbs/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(2)
+ if(prob(45))
+ affected_mob.adjustToxLoss(5)
+ if(prob(1))
+ affected_mob.emote("sneeze")
+ if(3)
+ if(prob(5))
+ affected_mob.emote("cough")
+ else if(prob(5))
+ affected_mob.emote("gasp")
+ if(prob(10))
+ to_chat(affected_mob, span_danger("You're starting to feel very weak..."))
+ if(4)
+ if(prob(10))
+ affected_mob.emote("cough")
+ affected_mob.adjustToxLoss(5)
+ if(5)
+ to_chat(affected_mob, span_userdanger("Your body feels as if it's trying to rip itself open..."))
+ if(prob(50))
+ affected_mob.delayed_gib()
+
+/datum/disease/virus/gbs/non_con
+ name = "Non-Contagious GBS"
+ agent = "gibbis"
+ spread_flags = NON_CONTAGIOUS
+ cures = list("cryoxadone")
+ cure_prob = 10
+ can_immunity = FALSE
+
+/datum/disease/virus/fake_gbs
+ name = "GBS"
+ desc = "If left untreated death will occur."
+ agent = "Gravitokinetic Bipotential SADS-"
+ spread_flags = CONTACT
+ cures = list("diphenhydramine","sulfur")
+ cure_prob = 15
+ severity = BIOHAZARD
+
+/datum/disease/virus/fake_gbs/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(2)
+ if(prob(1))
+ affected_mob.emote("sneeze")
+ if(3)
+ if(prob(5))
+ affected_mob.emote("cough")
+ else if(prob(5))
+ affected_mob.emote("gasp")
+ if(prob(10))
+ to_chat(affected_mob, span_danger("You're starting to feel very weak..."))
+ if(4, 5)
+ if(prob(10))
+ affected_mob.emote("cough")
diff --git a/code/datums/diseases/viruses/kingstons.dm b/code/datums/diseases/viruses/kingstons.dm
new file mode 100644
index 00000000000..c3f1dd722f3
--- /dev/null
+++ b/code/datums/diseases/viruses/kingstons.dm
@@ -0,0 +1,144 @@
+/datum/disease/virus/kingstons
+ name = "Kingstons Syndrome"
+ agent = "Nya Virus"
+ desc = "If left untreated the subject will turn into a feline. In felines it has... OTHER... effects."
+ max_stages = 4
+ spread_flags = AIRBORNE
+ cures = list("milk")
+ cure_prob = 50
+ permeability_mod = 0.75
+ severity = DANGEROUS
+ mutation_reagents = list("mutagen", "radium")
+ possible_mutations = list(/datum/disease/virus/kingstons_advanced)
+
+/datum/disease/virus/kingstons/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(1)
+ if(prob(10))
+ if(istajaran(affected_mob))
+ to_chat(affected_mob, span_notice("You feel good."))
+ else
+ to_chat(affected_mob, span_notice("You feel like playing with string."))
+
+ if(2)
+ if(prob(10))
+ if(istajaran(affected_mob))
+ to_chat(affected_mob, span_danger("Something in your throat itches."))
+ else
+ to_chat(affected_mob, span_danger("You NEED to find a mouse."))
+
+ if(3)
+ if(prob(10))
+ if(istajaran(affected_mob))
+ to_chat(affected_mob, span_danger("You feel something in your throat!"))
+ affected_mob.emote("cough")
+ else
+ if(prob(50))
+ affected_mob.say(pick(list("Mew", "Meow!", "Nya!~")))
+ else
+ affected_mob.emote("purrs")
+
+ if(4)
+ if(istajaran(affected_mob))
+ if(prob(5))
+ affected_mob.visible_message(span_danger("[affected_mob] coughs up a hairball!"), \
+ span_userdanger("You cough up a hairball!"))
+ affected_mob.Stun(10 SECONDS)
+ else
+ if(prob(30))
+ affected_mob.emote("purrs")
+ if(prob(5))
+ affected_mob.visible_message(span_danger("[affected_mob]'s form contorts into something more feline!"), \
+ span_userdanger("YOU TURN INTO A TAJARAN!"))
+ var/mob/living/carbon/human/catface = affected_mob
+ catface?.set_species(/datum/species/tajaran, retain_damage = TRUE)
+
+
+/datum/disease/virus/kingstons_advanced
+ name = "Advanced Kingstons Syndrome"
+ agent = "AMB45DR Bacteria"
+ desc = "If left untreated the subject will mutate to a different species."
+ max_stages = 4
+ spread_flags = AIRBORNE
+ cures = list("plasma")
+ cure_prob = 50
+ permeability_mod = 0.75
+ severity = BIOHAZARD
+ var/list/virspecies = list(/datum/species/human, /datum/species/tajaran, /datum/species/unathi,/datum/species/skrell, /datum/species/vulpkanin, /datum/species/diona)
+ var/list/virsuffix = list("pox", "rot", "flu", "cough", "-gitis", "cold", "rash", "itch", "decay")
+ var/datum/species/chosentype
+ var/chosensuff
+ possible_mutations = null
+
+/datum/disease/virus/kingstons_advanced/New()
+ ..()
+ chosentype = pick(virspecies)
+ chosensuff = pick(virsuffix)
+
+ name = "[initial(chosentype.name)] [chosensuff]"
+
+/datum/disease/virus/kingstons_advanced/Copy()
+ var/datum/disease/virus/kingstons_advanced/KA = ..()
+ KA.chosentype = chosentype
+ KA.chosensuff = chosensuff
+ KA.name = name
+ return KA
+
+/datum/disease/virus/kingstons_advanced/stage_act()
+ if(!..())
+ return FALSE
+
+ if(ishuman(affected_mob))
+ var/mob/living/carbon/human/H = affected_mob
+ switch(stage)
+ if(1)
+ if(prob(10))
+ to_chat(H, span_notice("You feel awkward."))
+ if(2, 3)
+ if(prob(7) && !istype(H.dna.species, chosentype))
+ make_sound(H)
+ if(2)
+ if(prob(10))
+ to_chat(H, span_danger("You itch."))
+ if(3)
+ if(prob(10))
+ to_chat(H, span_danger("Your skin starts to flake!"))
+ if(4)
+ if(!istype(H.dna.species, chosentype))
+ if(prob(30))
+ make_sound(H)
+ if(prob(5))
+ H.visible_message(span_danger("[H]'s skin splits and form contorts!"), \
+ span_userdanger("Your body mutates into a [initial(chosentype.name)]!"))
+ H.set_species(chosentype, retain_damage = TRUE)
+ else
+ if(prob(5))
+ H.visible_message(span_danger("[H] scratches at thier skin!"), \
+ span_userdanger("You scratch your skin to try not to itch!"))
+ H.adjustBruteLoss(5)
+ affected_mob.Stun(rand(2 SECONDS, 4 SECONDS))
+
+// Костыли, систему эмоутов переписывать лень. Она ужасна. У расовых эмоутов проверка на расу, поэтому так просто их не заюзать
+/datum/disease/virus/kingstons_advanced/proc/make_sound(mob/living/carbon/human/H)
+ if(!istype(H))
+ return
+
+ switch(chosentype)
+ if(/datum/species/tajaran)
+ H.custom_emote(m_type = EMOTE_SOUND, message = "мурчит")
+ playsound(H.loc, 'sound/voice/cat_purr.ogg', 80, 1, frequency = H.get_age_pitch())
+ if(/datum/species/unathi)
+ H.custom_emote(m_type = EMOTE_SOUND, message = "шипит")
+ playsound(H.loc, 'sound/effects/unathihiss.ogg', 50, 1, frequency = H.get_age_pitch())
+ if(/datum/species/skrell)
+ H.custom_emote(m_type = EMOTE_SOUND, message = "издает трель")
+ playsound(H.loc, 'sound/effects/warble.ogg', 50, 1, frequency = H.get_age_pitch())
+ if(/datum/species/vulpkanin)
+ H.custom_emote(m_type = EMOTE_SOUND, message = "воет")
+ playsound(H.loc, 'sound/goonstation/voice/howl.ogg', 100, 1, frequency = H.get_age_pitch())
+ if(/datum/species/diona)
+ H.custom_emote(m_type = EMOTE_SOUND, message = "скрипит")
+ playsound(H.loc, 'sound/voice/dionatalk1.ogg', 50, 1, frequency = H.get_age_pitch())
diff --git a/code/datums/diseases/loyalty_syndrome.dm b/code/datums/diseases/viruses/loyalty_syndrome.dm
similarity index 71%
rename from code/datums/diseases/loyalty_syndrome.dm
rename to code/datums/diseases/viruses/loyalty_syndrome.dm
index e6f37c2ac9a..d7e0688edf9 100644
--- a/code/datums/diseases/loyalty_syndrome.dm
+++ b/code/datums/diseases/viruses/loyalty_syndrome.dm
@@ -1,17 +1,17 @@
#define STAGE_TIME 60
-/datum/disease/loyalty
+/datum/disease/virus/loyalty
name = "Loyalty Syndrome"
+ agent = "Halomonas minomae"
+ desc = "A disease that causes acute mass insanity for a certain person, as well as various obsessions"
max_stages = 5
- spread_text = "On contact"
- spread_flags = CONTACT_GENERAL
- disease_flags = CAN_CARRY|CURABLE
+ spread_flags = CONTACT
+ permeability_mod = 0.8
+ can_immunity = FALSE
cure_text = "Anti-Psychotics"
cures = list("haloperidol")
- cure_chance = 5
- agent = "Halomonas minomae"
- viable_mobtypes = list(/mob/living/carbon/human)
- visibility_flags = HIDDEN_SCANNER
+ cure_prob = 8
+ visibility_flags = HIDDEN_HUD
severity = DANGEROUS
var/is_master = FALSE
var/mob/living/carbon/human/master
@@ -23,37 +23,49 @@
var/need_meating_message = FALSE
var/need_master_death_message = FALSE
-/datum/disease/loyalty/New(var/mob/living/carbon/human/new_master)
+/datum/disease/virus/loyalty/New(var/mob/living/carbon/human/new_master)
+ ..()
if(new_master)
master = new_master
else
is_master = TRUE
-/datum/disease/loyalty/Contract(mob/M)
+/datum/disease/virus/loyalty/Contract(mob/living/M, act_type, is_carrier = FALSE, need_protection_check = FALSE, zone)
+ if(!CanContract(M, act_type, need_protection_check, zone))
+ return FALSE
+
var/mob/living/carbon/human/new_master = is_master ? affected_mob : master
- var/datum/disease/loyalty/copy = new(new_master)
+ var/datum/disease/virus/loyalty/copy = new(new_master)
+
+ //recontract cured master
+ if(new_master == M)
+ copy.is_master = TRUE
- M.viruses += copy
+ M.diseases += copy
copy.affected_mob = M
GLOB.active_diseases += copy
+ copy.carrier = is_carrier
copy.affected_mob.med_hud_set_status()
+ return copy
-/datum/disease/loyalty/stage_act()
- ..()
+/datum/disease/virus/loyalty/stage_act()
+ if(!..())
+ return FALSE
if(affected_mob && !is_master && master && stage >= 4)
var/message = ""
var/health_change = 0
var/see_master = FALSE
+ if(QDELETED(master))
+ if(need_master_death_message)
+ death_of_master(span_cultlarge("Внезапно всё ваше тело пронзает боль от осознания одной мысли. \n[span_reallybig("[master] больше нет с нами")]"))
+ return FALSE
+
if(master.stat == DEAD)
if(need_master_death_message)
- affected_mob.emote("scream")
- to_chat(affected_mob, span_cultlarge("Внезапно всё ваше тело пронзает боль от осознания одной мысли. \n[span_reallybig("[master] мертв[genderize_ru(master.gender, "", "а", "о", "ы")]!")]"))
- need_master_death_message = FALSE
- affected_mob.adjustBrainLoss(50)
- addtimer(CALLBACK(affected_mob, TYPE_PROC_REF(/mob/living/carbon/human, emote), "cry"), rand(3, 10) SECONDS)
- return
+ death_of_master(span_cultlarge("Внезапно всё ваше тело пронзает боль от осознания одной мысли. \n[span_reallybig("[master] мертв[genderize_ru(master.gender, "", "а", "о", "ы")]!")]"))
+ return FALSE
else
need_master_death_message = TRUE
@@ -121,17 +133,18 @@
span_userdanger("Странный голос [pick("ужасающе вопит", "жалобно стонет", "кричит")] [get_direction("где-то на ", "e")]!!")), rand(2, 20) SECONDS)
health_change = round(timer/(4 * STAGE_TIME), 0.25) //1 - ∞ toxins
- if(timer <= STAGE_TIME)
- affected_mob.adjustOxyLoss(health_change)
- affected_mob.adjustBruteLoss(health_change)
- affected_mob.adjustFireLoss(health_change)
- affected_mob.adjustToxLoss(health_change)
+ if(affected_mob.z == master.z)
+ if(timer <= STAGE_TIME)
+ affected_mob.adjustOxyLoss(health_change)
+ affected_mob.adjustBruteLoss(health_change)
+ affected_mob.adjustFireLoss(health_change)
+ affected_mob.adjustToxLoss(health_change)
if(message != "")
affected_mob.say(message)
say_timer = 0
return
-/datum/disease/loyalty/proc/get_direction(var/begin="", var/ending = "")
+/datum/disease/virus/loyalty/proc/get_direction(var/begin="", var/ending = "")
if(affected_mob.z == master.z)
. = begin
. += dir2rustext(get_dir(affected_mob.loc, master.loc))
@@ -139,9 +152,15 @@
else
. = "где-то далеко отсюда"
-/datum/disease/loyalty/Copy()
+/datum/disease/virus/loyalty/Copy()
var/mob/living/carbon/human/new_master = is_master ? affected_mob : master
- var/datum/disease/loyalty/copy = new(new_master)
+ var/datum/disease/virus/loyalty/copy = new(new_master)
return copy
+/datum/disease/virus/loyalty/proc/death_of_master(message)
+ affected_mob.emote("scream")
+ to_chat(affected_mob, message)
+ need_master_death_message = FALSE
+ affected_mob.adjustBrainLoss(50)
+ addtimer(CALLBACK(affected_mob, TYPE_PROC_REF(/mob/living/carbon/human, emote), "cry"), rand(3, 10) SECONDS)
#undef STAGE_TIME
diff --git a/code/datums/diseases/viruses/lycancoughy.dm b/code/datums/diseases/viruses/lycancoughy.dm
new file mode 100644
index 00000000000..81b5194ee4b
--- /dev/null
+++ b/code/datums/diseases/viruses/lycancoughy.dm
@@ -0,0 +1,57 @@
+/datum/disease/virus/lycan
+ name = "Lycancoughy"
+ form = "Infection"
+ agent = "Excess Snuggles"
+ desc = "If left untreated subject will regurgitate... puppies."
+ max_stages = 4
+ spread_flags = CONTACT
+ cures = list("ethanol")
+ severity = DANGEROUS
+ var/barklimit = 0
+
+/datum/disease/virus/lycan/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(2)
+ if(prob(5))
+ to_chat(affected_mob, span_notice("You itch."))
+ affected_mob.emote("cough")
+ if(3)
+ if(prob(10))
+ to_chat(affected_mob, span_notice("You hear faint barking."))
+ if(prob(5))
+ to_chat(affected_mob, span_notice("You crave meat."))
+ affected_mob.emote("cough")
+ if(prob(2))
+ to_chat(affected_mob, span_danger("Your stomach growls!"))
+ if(4)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("Your stomach barks?!"))
+ if(prob(5))
+ affected_mob.visible_message(span_danger("[affected_mob] howls!"), \
+ span_userdanger("You howl!"))
+ affected_mob.AdjustConfused(rand(12 SECONDS, 16 SECONDS))
+ if(prob(3) && barklimit <= 10)
+ var/list/puppytype = list(
+ /mob/living/simple_animal/pet/dog/corgi/puppy,
+ /mob/living/simple_animal/pet/dog/pug,
+ /mob/living/simple_animal/pet/dog/fox)
+
+ var/mob/living/puppypicked = pick(puppytype)
+ affected_mob.visible_message(span_danger("[affected_mob] coughs up [initial(puppypicked.name)]!"), \
+ span_userdanger("You cough up [initial(puppypicked.name)]?!"))
+ new puppypicked(affected_mob.loc)
+ new puppypicked(affected_mob.loc)
+ barklimit ++
+ if(prob(1))
+ var/list/plushtype = list(/obj/item/toy/plushie/orange_fox, /obj/item/toy/plushie/corgi, /obj/item/toy/plushie/robo_corgi, /obj/item/toy/plushie/pink_fox)
+ var/obj/item/toy/plushie/coughfox = pick(plushtype)
+ new coughfox(affected_mob.loc)
+ affected_mob.visible_message(span_danger("[affected_mob] coughs up a [initial(coughfox.name)]!"), \
+ span_userdanger("You cough [initial(coughfox.name)] up ?!"))
+ if(prob(50))
+ affected_mob.emote("cough")
+ affected_mob.adjustBruteLoss(5)
+ return
diff --git a/code/datums/diseases/viruses/magnitis.dm b/code/datums/diseases/viruses/magnitis.dm
new file mode 100644
index 00000000000..1dcbaa508f3
--- /dev/null
+++ b/code/datums/diseases/viruses/magnitis.dm
@@ -0,0 +1,65 @@
+/datum/disease/virus/magnitis
+ name = "Magnitis"
+ agent = "Nanobots Fukkos Miracos"
+ desc = "This disease disrupts the magnetic field of your body, making it act as if a powerful magnet. Injections of iron help stabilize the field."
+ max_stages = 4
+ visibility_flags = HIDDEN_HUD
+ spread_flags = AIRBORNE
+ cure_text = "Iron for the living, nanopaste for robots"
+ cures = list("iron")
+ infectable_mobtypes = list(/mob/living/carbon/human, /mob/living/silicon/robot, /mob/living/simple_animal/pet/dog/corgi/borgi)
+ ignore_immunity = TRUE
+ permeability_mod = 0.75
+ severity = MEDIUM
+
+/datum/disease/virus/magnitis/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(2)
+ if(prob(2))
+ to_chat(affected_mob, span_danger("You feel a slight shock course through your body."))
+ if(prob(2))
+ move_obj(2, 1)
+ move_mobs(2, 1)
+ if(3)
+ if(prob(3))
+ to_chat(affected_mob, span_danger("You feel a strong shock course through your body."))
+ if(prob(3))
+ to_chat(affected_mob, span_danger("You feel like clowning around."))
+ if(prob(4))
+ move_obj(4, rand(1, 2))
+ move_mobs(4, rand(1, 2))
+ if(4)
+ if(prob(5))
+ to_chat(affected_mob, span_danger("You feel a powerful shock course through your body."))
+ if(prob(5))
+ to_chat(affected_mob, span_danger("You query upon the nature of miracles."))
+ if(prob(8))
+ move_obj(6, rand(1, 3))
+ move_mobs(6, rand(1, 3))
+
+/datum/disease/virus/magnitis/proc/move_obj(range, iter)
+ playsound(get_turf(affected_mob.loc), 'sound/effects/magnitis.ogg', 100, 1)
+ for(var/obj/M in orange(range, affected_mob))
+ if(!M.anchored && (M.flags & CONDUCT))
+ var/i
+ for(i = 0, i < iter, i++)
+ step_towards(M, affected_mob)
+
+/datum/disease/virus/magnitis/proc/move_mobs(range, iter)
+ for(var/mob/living/L in orange(range, affected_mob))
+ if(istype(L, /mob/living/silicon/robot) || \
+ istype(L, /mob/living/simple_animal/pet/dog/corgi/borgi) || \
+ ismachineperson(L))
+
+ var/i
+ for(i = 0, i < iter, i++)
+ step_towards(L, affected_mob)
+
+//machinepersons cures with nanopaste, applied at any bodypart
+/datum/disease/virus/magnitis/has_cure()
+ return ismachineperson(affected_mob) ? FALSE : ..()
+
+
diff --git a/code/datums/diseases/viruses/pierrot_throat.dm b/code/datums/diseases/viruses/pierrot_throat.dm
new file mode 100644
index 00000000000..d580caca851
--- /dev/null
+++ b/code/datums/diseases/viruses/pierrot_throat.dm
@@ -0,0 +1,60 @@
+/datum/disease/virus/pierrot_throat
+ name = "Pierrot's Throat"
+ agent = "H0NI<42 Virus"
+ desc = "If left untreated the subject will probably drive others to insanity."
+ max_stages = 4
+ spread_flags = AIRBORNE
+ cures = list("banana")
+ cure_prob = 75
+ permeability_mod = 0.75
+ severity = MEDIUM
+ possible_mutations = list(/datum/disease/virus/pierrot_throat/advanced, /datum/disease/virus/wizarditis)
+
+/datum/disease/virus/pierrot_throat/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(1)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("You feel a little silly."))
+ if(2)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("You start seeing rainbows."))
+ if(3)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("Your thoughts are interrupted by a loud HONK!"))
+ if(4)
+ if(prob(5))
+ affected_mob.say(pick(list("ХОНК!", "Хонк!", "Хонк.", "Хонк?", "Хонк!!", "Хонк?!", "Хонк...")))
+
+
+/datum/disease/virus/pierrot_throat/advanced
+ name = "Advanced Pierrot's Throat"
+ agent = "H0NI<42.B4n4 Virus"
+ desc = "If left untreated the subject will probably drive others to insanity and go insane themselves."
+ severity = DANGEROUS
+ possible_mutations = null
+
+/datum/disease/virus/pierrot_throat/advanced/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(1)
+ if(prob(5))
+ to_chat(affected_mob, span_danger("You feel like making a joke."))
+ if(2)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("You don't just start seeing rainbows... YOU ARE RAINBOWS!"))
+ if(3)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("Your thoughts are interrupted by a loud HONK!"))
+ affected_mob << 'sound/items/airhorn.ogg'
+ if(4)
+ if(prob(5))
+ affected_mob.say(pick(list("ХОНК!", "Хонк!", "Хонк.", "Хонк?", "Хонк!!", "Хонк?!", "Хонк...")))
+
+ if(!istype(affected_mob.wear_mask, /obj/item/clothing/mask/gas/clown_hat/nodrop))
+ affected_mob.drop_item_ground(affected_mob.wear_mask, force = TRUE)
+ affected_mob.equip_to_slot(new /obj/item/clothing/mask/gas/clown_hat/nodrop(src), slot_wear_mask)
diff --git a/code/datums/diseases/viruses/retrovirus.dm b/code/datums/diseases/viruses/retrovirus.dm
new file mode 100644
index 00000000000..0a860e80fe9
--- /dev/null
+++ b/code/datums/diseases/viruses/retrovirus.dm
@@ -0,0 +1,68 @@
+/// Just dont use this virus :)
+/datum/disease/virus/dna_retrovirus
+ name = "Retrovirus"
+ agent = ""
+ desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
+ stage_prob = 2
+ max_stages = 4
+ spread_flags = CONTACT
+ cure_text = "Rest or an injection of mutadone"
+ cure_prob = 6
+ severity = DANGEROUS
+ permeability_mod = 0.4
+
+
+/datum/disease/virus/dna_retrovirus/New()
+ ..()
+ agent = "Virus class [pick("A","B","C","D","E","F")][pick("A","B","C","D","E","F")]-[rand(50,300)]"
+ //else cure is rest
+ if(prob(40))
+ cures = list("mutadone")
+
+
+/datum/disease/virus/dna_retrovirus/stage_act()
+ if(!..())
+ return FALSE
+
+ switch(stage)
+ if(1)
+ if(prob(8))
+ to_chat(affected_mob, span_danger("Your head hurts."))
+ if(prob(9))
+ to_chat(affected_mob, span_notice("You feel a tingling sensation in your chest."))
+ if(prob(9))
+ to_chat(affected_mob, span_danger("You feel angry."))
+
+ if(2)
+ if(prob(8))
+ to_chat(affected_mob, span_danger("Your skin feels loose."))
+ if(prob(10))
+ to_chat(affected_mob, span_danger("You feel very strange."))
+ if(prob(4))
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head!"))
+ affected_mob.Paralyse(4 SECONDS)
+ if(prob(4))
+ to_chat(affected_mob, span_danger("Your stomach churns."))
+
+ if(3)
+ if(prob(10))
+ to_chat(affected_mob, span_danger("Your entire body vibrates."))
+
+ if(prob(35))
+ scramble(pick(0,1), affected_mob, rand(15, 45))
+
+ if(4)
+ if(prob(60))
+ scramble(pick(0,1), affected_mob, rand(15, 45))
+
+/datum/disease/virus/dna_retrovirus/has_cure()
+ if(cures.len)
+ return ..()
+ else
+ if(affected_mob.IsSleeping())
+ return TRUE
+ if(affected_mob.lying)
+ return prob(33)
+ return FALSE
+
+
diff --git a/code/datums/diseases/viruses/rhumba_beat.dm b/code/datums/diseases/viruses/rhumba_beat.dm
new file mode 100644
index 00000000000..26f50431488
--- /dev/null
+++ b/code/datums/diseases/viruses/rhumba_beat.dm
@@ -0,0 +1,41 @@
+//meme copy of GBS
+/datum/disease/virus/rhumba_beat
+ name = "The Rhumba Beat"
+ agent = "Unknown"
+ max_stages = 5
+ spread_flags = CONTACT
+ cure_text = "Chick Chicky Boom!"
+ cures = list("plasma")
+ severity = BIOHAZARD
+
+/datum/disease/virus/rhumba_beat/stage_act()
+ if(!..())
+ return FALSE
+
+ if(affected_mob.ckey == "rosham")
+ cure()
+ return
+
+ switch(stage)
+ if(2)
+ if(prob(45))
+ affected_mob.adjustToxLoss(5)
+ if(prob(1))
+ to_chat(affected_mob, span_danger("You feel strange..."))
+ if(3)
+ if(prob(5))
+ to_chat(affected_mob, span_danger("You feel the urge to dance..."))
+ else if(prob(5))
+ affected_mob.emote("gasp")
+ else if(prob(10))
+ to_chat(affected_mob, span_danger("You feel the need to chick chicky boom..."))
+ if(4)
+ if(prob(10))
+ affected_mob.emote("gasp")
+ to_chat(affected_mob, span_danger("You feel a burning beat inside..."))
+ if(prob(20))
+ affected_mob.adjustToxLoss(5)
+ if(5)
+ to_chat(affected_mob, span_userdanger("Your body is unable to contain the Rhumba Beat..."))
+ if(prob(50))
+ affected_mob.gib()
diff --git a/code/datums/diseases/viruses/transformation.dm b/code/datums/diseases/viruses/transformation.dm
new file mode 100644
index 00000000000..4cce03f8116
--- /dev/null
+++ b/code/datums/diseases/viruses/transformation.dm
@@ -0,0 +1,268 @@
+/datum/disease/virus/transformation
+ name = "Transformation"
+ stage_prob = 10
+ max_stages = 5
+ spread_flags = NON_CONTAGIOUS
+ severity = DANGEROUS
+ can_immunity = FALSE
+ infectable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/alien)
+ var/list/stage1
+ var/list/stage2
+ var/list/stage3
+ var/list/stage4
+ var/list/stage5
+ var/list/transform_message
+ var/new_form
+ var/is_new_mind = FALSE
+ var/transformed = FALSE
+ var/cure_after_transform = TRUE
+
+/datum/disease/virus/transformation/stage_act()
+ if(!..() || !affected_mob)
+ return FALSE
+
+ switch(stage)
+ if(1)
+ if(prob(stage_prob) && stage1)
+ to_chat(affected_mob, pick(stage1))
+ if(2)
+ if(prob(stage_prob) && stage2)
+ to_chat(affected_mob, pick(stage2))
+ if(3)
+ if(prob(stage_prob*2) && stage3)
+ to_chat(affected_mob, pick(stage3))
+ if(4)
+ if(prob(stage_prob*2) && stage4)
+ to_chat(affected_mob, pick(stage4))
+ if(5)
+ if(prob(stage_prob*2) && stage5)
+ to_chat(affected_mob, pick(stage5))
+ if(!transformed)
+ if(transform_message)
+ to_chat(affected_mob, pick(transform_message))
+ do_disease_transformation()
+ if(cure_after_transform)
+ cure()
+
+/datum/disease/virus/transformation/proc/do_disease_transformation()
+ if(istype(affected_mob) && new_form)
+ if(jobban_isbanned(affected_mob, new_form))
+ affected_mob.death(1)
+ return
+
+ if(affected_mob.notransform)
+ return
+
+ affected_mob.notransform = 1
+ affected_mob.canmove = 0
+ affected_mob.icon = null
+ affected_mob.overlays.Cut()
+ affected_mob.invisibility = INVISIBILITY_ABSTRACT
+
+ for(var/obj/item/W in affected_mob)
+ if(istype(W, /obj/item/implant))
+ qdel(W)
+ continue
+ affected_mob.drop_item_ground(W) //Если вещь снимается - снимаем
+
+ if(isobj(affected_mob.loc))
+ var/obj/O = affected_mob.loc
+ O.force_eject_occupant(affected_mob)
+
+ var/mob/living/new_mob = new new_form(affected_mob.loc)
+ if(istype(new_mob))
+ new_mob.a_intent = "harm"
+ if(affected_mob.mind)
+ affected_mob.mind.transfer_to(new_mob)
+ if(is_new_mind)
+ new_mob.mind.wipe_memory()
+ else
+ new_mob.key = affected_mob.key
+
+ qdel(affected_mob)
+ transformed = TRUE
+ return new_mob
+
+/datum/disease/virus/transformation/jungle_fever
+ name = "Jungle Fever"
+ agent = "Kongey Vibrion M-909"
+ desc = "Monkeys with this disease will bite humans, causing humans to mutate into a monkey."
+ stage_prob = 2
+ cure_prob = 5
+ cures = list("banana")
+ spread_flags = BITES
+ infectable_mobtypes = list(/mob/living/carbon/human)
+ severity = BIOHAZARD
+ cure_after_transform = FALSE
+ stage1 = null
+ stage2 = null
+ stage3 = null
+ stage4 = list(span_warning("Your back hurts."), span_warning("You breathe through your mouth."),
+ span_warning("You have a craving for bananas."), span_warning("Your mind feels clouded."))
+ stage5 = list(span_warning("You feel like monkeying around."))
+ new_form = /mob/living/carbon/human/lesser/monkey
+
+/datum/disease/virus/transformation/jungle_fever/do_disease_transformation()
+ var/mob/living/carbon/human/H = affected_mob
+ if(!istype(H))
+ return
+ if(!issmall(H))
+ if(istype(H.dna.species.primitive_form))
+ H.monkeyize()
+ transformed = TRUE
+ else
+ var/mob/living/new_mob = ..()
+ var/datum/disease/virus/transformation/jungle_fever/D = Contract(new_mob)
+ D?.stage = 5
+ D.transformed = TRUE
+ else
+ transformed = TRUE
+
+/datum/disease/virus/transformation/jungle_fever/stage_act()
+ if(!..() || !affected_mob)
+ return FALSE
+
+ switch(stage)
+ if(2)
+ if(prob(2))
+ to_chat(affected_mob, span_notice("Your [pick("back", "arm", "leg", "elbow", "head")] itches."))
+ if(3)
+ if(prob(4))
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head."))
+ affected_mob.AdjustConfused(20 SECONDS)
+ if(4, 5)
+ if(prob(4))
+ affected_mob.say(pick("Иииик, уку уку!", "Иии-ииик!", "Ииии!", "Ун, ун."))
+
+/datum/disease/virus/transformation/robot
+ name = "Robotic Transformation"
+ agent = "R2D2 Nanomachines"
+ desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg."
+ cures = list("copper")
+ cure_prob = 5
+ is_new_mind = TRUE
+ stage1 = null
+ stage2 = list(span_notice("Your joints feel stiff."), span_danger("Beep...boop.."))
+ stage3 = list(span_danger("Your joints feel very stiff."), span_notice("Your skin feels loose."), span_danger("You can feel something move...inside."))
+ stage4 = list(span_danger("Your skin feels very loose."), span_danger("You can feel... something...inside you."))
+ transform_message = list(span_danger("Your skin feels as if it's about to burst off!"))
+ new_form = /mob/living/silicon/robot
+
+/datum/disease/virus/transformation/robot/stage_act()
+ if(!..() || !affected_mob)
+ return FALSE
+
+ switch(stage)
+ if(3)
+ if(prob(8))
+ affected_mob.say(pick("Beep, boop", "beep, beep!", "Boop...bop"))
+ if(prob(4))
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head."))
+ affected_mob.Paralyse(4 SECONDS)
+ if(4)
+ if(prob(20))
+ affected_mob.say(pick("beep, beep!", "Boop bop boop beep.", "kkkiiiill mmme", "I wwwaaannntt tttoo dddiiieeee..."))
+
+
+/datum/disease/virus/transformation/xeno
+ name = "Xenomorph Transformation"
+ agent = "Rip-LEY Alien Microbes"
+ desc = "This disease changes the victim into a xenomorph."
+ cures = list("spaceacillin", "glycerol")
+ cure_prob = 5
+ stage1 = null
+ stage2 = list("Your throat feels scratchy.", span_danger("Kill..."))
+ stage3 = list(span_danger("Your throat feels very scratchy."), "Your skin feels tight.", span_danger("You can feel something move...inside."))
+ stage4 = list(span_danger("Your skin feels very tight."), span_danger("Your blood boils!"), span_danger("You can feel... something...inside you."))
+ transform_message = list(span_danger("Теперь вы ксеноморф.\n\
+ Вы чувствуете боль от превращения! Вы желаете укусить того, кто с вами это сделал, благо, память вас не покинула и вы всё помните."))
+ new_form = null
+
+/datum/disease/virus/transformation/xeno/New()
+ ..()
+ new_form = pick(/mob/living/carbon/alien/humanoid/hunter, /mob/living/carbon/alien/humanoid/drone/no_queen, /mob/living/carbon/alien/humanoid/sentinel)
+
+/datum/disease/virus/transformation/xeno/stage_act()
+ if(!..() || !affected_mob)
+ return FALSE
+
+ switch(stage)
+ if(3)
+ if(prob(4))
+ to_chat(affected_mob, span_danger("You feel a stabbing pain in your head."))
+ affected_mob.Paralyse(4 SECONDS)
+ if(4)
+ if(prob(20))
+ affected_mob.say(pick("You look delicious.", "Going to... devour you...", "Hsssshhhhh!"))
+
+
+/datum/disease/virus/transformation/slime
+ name = "Advanced Mutation Transformation"
+ agent = "Advanced Mutation Toxin"
+ desc = "This highly concentrated extract converts anything into more of itself."
+ cures = list("frostoil")
+ cure_prob = 80
+ stage1 = list(span_notice("You don't feel very well."))
+ stage2 = list(span_notice("Your skin feels a little slimy."))
+ stage3 = list(span_danger("Your appendages are melting away."), span_danger("Your limbs begin to lose their shape."))
+ stage4 = list(span_danger("You are turning into a slime."))
+ transform_message = list(span_danger("You have become a slime."))
+ new_form = /mob/living/simple_animal/slime/random
+
+/datum/disease/virus/transformation/slime/stage_act()
+ if(!..() || !affected_mob)
+ return FALSE
+
+ switch(stage)
+ if(1)
+ if(ishuman(affected_mob))
+ var/mob/living/carbon/human/H = affected_mob
+ if(isslimeperson(H))
+ stage = 5
+ if(3)
+ if(ishuman(affected_mob))
+ var/mob/living/carbon/human/human = affected_mob
+ if(!isslimeperson(human))
+ human.set_species(/datum/species/slime)
+
+/datum/disease/virus/transformation/corgi
+ name = "The Barkening"
+ agent = "Fell Doge Majicks"
+ desc = "This disease transforms the victim into a corgi."
+ cure_text = "Death"
+ cures = list("adminordrazine")
+ stage1 = list(span_notice("BARK."))
+ stage2 = list(span_notice("You feel the need to wear silly hats."))
+ stage3 = list(span_danger("Must... eat... chocolate...."), span_danger("YAP"))
+ stage4 = list(span_danger("Visions of washing machines assail your mind!"))
+ transform_message = list(span_danger("AUUUUUU!!!"))
+ new_form = /mob/living/simple_animal/pet/dog/corgi
+ is_new_mind = TRUE
+
+/datum/disease/virus/transformation/corgi/stage_act()
+ if(!..() || !affected_mob)
+ return FALSE
+
+ switch(stage)
+ if(3)
+ if(prob(8))
+ affected_mob.say(pick("YAP", "Woof!"))
+ if(4)
+ if(prob(20))
+ affected_mob.say(pick("Bark!", "AUUUUUU"))
+
+/datum/disease/virus/transformation/morph
+ name = "Gluttony's Blessing"
+ agent = "Gluttony's Blessing"
+ desc = "A 'gift' from somewhere terrible."
+ cure_text = "Nothing"
+ cures = list("adminordrazine")
+ stage_prob = 20
+ stage1 = list(span_notice("Your stomach rumbles."))
+ stage2 = list(span_notice("Your skin feels saggy."))
+ stage3 = list(span_danger("Your appendages are melting away."), span_danger("Your limbs begin to lose their shape."))
+ stage4 = list(span_danger("You're ravenous."))
+ transform_message = list(span_danger("ТЕПЕРЬ ВЫ МОРФ! \n \
+ Хоть Вы и трансформировались в отвратительную зелёную жижу, но это не повлияло на Ваше сознание \
+ и память. Вы не являетесь антагонистом."))
+ new_form = /mob/living/simple_animal/hostile/morph
diff --git a/code/datums/diseases/viruses/tuberculosis.dm b/code/datums/diseases/viruses/tuberculosis.dm
new file mode 100644
index 00000000000..ee8cdaf6581
--- /dev/null
+++ b/code/datums/diseases/viruses/tuberculosis.dm
@@ -0,0 +1,59 @@
+/datum/disease/virus/tuberculosis
+ form = "Disease"
+ name = "Fungal Tuberculosis"
+ agent = "Fungal Tubercle bacillus Cosmosis"
+ desc = "A rare highly transmittable virulent virus. Few samples exist, rumoured to be carefully grown and cultured by clandestine bio-weapon specialists. Causes fever, blood vomiting, lung damage, weight loss, and fatigue."
+ spread_flags = AIRBORNE
+ cures = list("spaceacillin", "salbutamol")
+ cure_prob = 5
+ required_organs = list(/obj/item/organ/internal/lungs)
+ severity = DANGEROUS
+ ignore_immunity = TRUE
+
+/datum/disease/virus/tuberculosis/stage_act()
+ if(!..())
+ return FALSE
+
+ var/mob/living/carbon/human/H = affected_mob
+ switch(stage)
+ if(2, 3)
+ if(prob(2))
+ H.emote("cough")
+ to_chat(H, span_danger("Your chest hurts."))
+ if(prob(2))
+ to_chat(H, span_danger("Your stomach violently rumbles!"))
+ if(prob(5))
+ to_chat(H, span_danger("You feel a cold sweat form."))
+ if(4)
+ if(prob(2))
+ to_chat(H, span_userdanger("You see four of everything"))
+ H.Dizzy(10 SECONDS)
+ if(prob(2))
+ to_chat(H, span_danger("You feel a sharp pain from your lower chest!"))
+ H.adjustOxyLoss(5)
+ H.emote("gasp")
+ if(prob(10))
+ to_chat(H, span_danger("You feel air escape from your lungs painfully."))
+ H.adjustOxyLoss(25)
+ H.emote("gasp")
+ if(5)
+ if(prob(2))
+ to_chat(H, span_userdanger("[pick("You feel your heart slowing...", "You relax and slow your heartbeat.")]"))
+ H.adjustStaminaLoss(70)
+ if(prob(10))
+ H.adjustStaminaLoss(100)
+ H.visible_message(span_warning("[H] faints!"), span_userdanger("You surrender yourself and feel at peace..."))
+ H.AdjustSleeping(10 SECONDS)
+ if(prob(2))
+ to_chat(H, span_userdanger("You feel your mind relax and your thoughts drift!"))
+ H.AdjustConfused(16 SECONDS, bound_lower = 0, bound_upper = 200 SECONDS)
+ if(prob(10))
+ H.vomit(20)
+ if(prob(3))
+ to_chat(H, span_warning("[pick("Your stomach silently rumbles...", "Your stomach seizes up and falls limp, muscles dead and lifeless.", "You could eat a crayon")]"))
+ H.overeatduration = max(H.overeatduration - 100, 0)
+ H.adjust_nutrition(-100)
+ if(prob(15))
+ to_chat(H, span_danger("[pick("You feel uncomfortably hot...", "You feel like unzipping your jumpsuit", "You feel like taking off some clothes...")]"))
+ H.bodytemperature += 40
+ return
diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/viruses/wizarditis.dm
similarity index 60%
rename from code/datums/diseases/wizarditis.dm
rename to code/datums/diseases/viruses/wizarditis.dm
index b270b01e07b..2e846ee7b0e 100644
--- a/code/datums/diseases/wizarditis.dm
+++ b/code/datums/diseases/viruses/wizarditis.dm
@@ -1,15 +1,13 @@
-/datum/disease/wizarditis
+/datum/disease/virus/wizarditis
name = "Wizarditis"
+ agent = "Rincewindus Vulgaris"
+ desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of dementia, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition."
max_stages = 4
- spread_text = "Airborne"
- cure_text = "The Manly Dorf"
+ visibility_flags = HIDDEN_HUD
+ spread_flags = AIRBORNE
cures = list("manlydorf")
- cure_chance = 100
- agent = "Rincewindus Vulgaris"
- viable_mobtypes = list(/mob/living/carbon/human)
- disease_flags = CAN_CARRY|CAN_RESIST|CURABLE
+ cure_prob = 100
permeability_mod = 0.75
- desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of dementia, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition."
severity = HARMFUL
required_organs = list(/obj/item/organ/external/head)
@@ -23,70 +21,69 @@ TARCOL MINTI ZHERI - forcewall
STI KALY - blind
*/
-/datum/disease/wizarditis/stage_act()
- ..()
+/datum/disease/virus/wizarditis/stage_act()
+ if(!..())
+ return FALSE
switch(stage)
if(2)
- if(prob(1)&&prob(50))
+ if(prob(5))
affected_mob.say(pick("You shall not pass!", "Expeliarmus!", "By Merlins beard!", "Feel the power of the Dark Side!"))
- if(prob(1)&&prob(50))
- to_chat(affected_mob, "You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")].")
+ if(prob(3))
+ to_chat(affected_mob, span_danger("You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")]."))
if(3)
- if(prob(1)&&prob(50))
+ if(prob(2))
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!", "STI KALY!", "TARCOL MINTI ZHERI!"))
- if(prob(1)&&prob(50))
- to_chat(affected_mob, "You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")].")
+ if(prob(6))
+ to_chat(affected_mob, span_danger("You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")]."))
if(4)
-
- if(prob(1))
+ if(prob(3))
affected_mob.say(pick("NEC CANTIO!","AULIE OXIN FIERA!","STI KALY!","EI NATH!"))
- return
- if(prob(1)&&prob(50))
- to_chat(affected_mob, "You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")].")
- spawn_wizard_clothes(50)
- if(prob(1)&&prob(1))
+ if(prob(1))
+ to_chat(affected_mob, span_danger("You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")]."))
+ spawn_wizard_clothes()
+ if(prob(1))
teleport()
return
-/datum/disease/wizarditis/proc/spawn_wizard_clothes(chance = 0)
- if(istype(affected_mob, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = affected_mob
- if(prob(chance))
+/datum/disease/virus/wizarditis/proc/spawn_wizard_clothes()
+ var/mob/living/carbon/human/H = affected_mob
+ switch(pick("head", "robe", "sandal", "staff"))
+
+ if("head")
if(!istype(H.head, /obj/item/clothing/head/wizard))
if(!H.drop_item_ground(H.head))
qdel(H.head)
H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), slot_head)
- return
- if(prob(chance))
+ return
+
+ if("robe")
if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe))
if(!H.drop_item_ground(H.wear_suit))
qdel(H.wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), slot_wear_suit)
- return
- if(prob(chance))
+ return
+
+ if("sandal")
if(!istype(H.shoes, /obj/item/clothing/shoes/sandal))
if(!H.drop_item_ground(H.shoes))
qdel(H.shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes)
- return
- else
- var/mob/living/carbon/H = affected_mob
- if(prob(chance))
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes)
+ return
+
+ if("staff")
if(!istype(H.r_hand, /obj/item/twohanded/staff))
H.drop_r_hand()
- H.put_in_r_hand( new /obj/item/twohanded/staff(H) )
- return
- return
-
+ H.put_in_r_hand(new /obj/item/twohanded/staff(H))
+ return
-/datum/disease/wizarditis/proc/teleport()
+/datum/disease/virus/wizarditis/proc/teleport()
var/list/theareas = get_areas_in_range(80, affected_mob)
for(var/area/space/S in theareas)
theareas -= S
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index 786f60f6449..72069c3082b 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -26,7 +26,8 @@ GLOBAL_LIST_INIT(huds, list( \
ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),\
ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden(),\
TAIPAN_HUD = new/datum/atom_hud/antag(),\
- ANTAG_HUD_THIEF = new/datum/atom_hud/antag/hidden()\
+ ANTAG_HUD_THIEF = new/datum/atom_hud/antag/hidden(),\
+ THOUGHTS_HUD = new/datum/atom_hud/thoughts()\
))
/datum/atom_hud
diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index 7506edfa2fc..5068b75c7b9 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -126,7 +126,7 @@
/obj/item/grenade/plastic/x4 = 2,
/obj/item/reagent_containers/hypospray/combat/nanites = 1,
/obj/item/gun/projectile/revolver = 1,
- /obj/item/ammo_box/a357 = 1
+ /obj/item/ammo_box/speedloader/a357 = 1
)
implants = list(/obj/item/implant/dust)
can_be_admin_equipped = FALSE
@@ -165,7 +165,7 @@
/obj/item/grenade/plastic/x4 = 2,
/obj/item/reagent_containers/hypospray/combat/nanites = 1,
/obj/item/gun/projectile/revolver = 1,
- /obj/item/ammo_box/a357 = 1
+ /obj/item/ammo_box/speedloader/a357 = 1
)
can_be_admin_equipped = TRUE
@@ -397,7 +397,7 @@
/obj/item/flashlight/seclite = 1,
/obj/item/reagent_containers/hypospray/combat/nanites = 1,
/obj/item/grenade/plastic/x4 = 1,
- /obj/item/ammo_box/a357 = 1
+ /obj/item/ammo_box/speedloader/a357 = 1
)
implants = list(/obj/item/implant/mindshield/ert)
@@ -809,7 +809,7 @@
/obj/item/storage/box/soviet = 1,
/obj/item/lighter/zippo = 1,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1,
- /obj/item/ammo_box/a357 = 2
+ /obj/item/ammo_box/speedloader/a357 = 2
)
/datum/outfit/admin/soviet/officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -876,7 +876,7 @@
backpack_contents = list(
/obj/item/storage/box/soviet = 1,
/obj/item/gun/projectile/revolver/mateba = 1,
- /obj/item/ammo_box/a357 = 2,
+ /obj/item/ammo_box/speedloader/a357 = 2,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1,
/obj/item/lighter/zippo = 1
)
@@ -910,7 +910,7 @@
l_pocket = /obj/item/melee/classic_baton/telescopic
backpack_contents = list(
/obj/item/storage/box/soviet = 1,
- /obj/item/ammo_box/a357 = 3
+ /obj/item/ammo_box/speedloader/a357 = 3
)
/datum/outfit/admin/soviet/admiral/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
@@ -1212,7 +1212,7 @@
shoes = /obj/item/clothing/shoes/black
head = /obj/item/clothing/head/det_hat
glasses = /obj/item/clothing/glasses/thermal/monocle
- l_pocket = /obj/item/ammo_box/a357
+ l_pocket = /obj/item/ammo_box/speedloader/a357
r_hand = /obj/item/gun/projectile/automatic/proto
/datum/outfit/admin/tournament_chef //Steven Seagal FTW
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index 9256653daf6..84fef61d34a 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -181,13 +181,13 @@
name = "Abandoned Teleporter"
description = "An old teleporter, seemingly part of what used to be a larger satellite."
-/datum/map_template/ruin/space/blowntcommsat
- id = "blowntcommsat"
- suffix = "blowntcommsat.dmm"
- name = "Blown-out Telecommunications Satellite"
- description = "The remains of an old telecommunications satellite once utilised by NanoTrasen. It lays derelict, with quite a few pieces missing."
- cost = 5 // This is a chonky boy
- allow_duplicates = FALSE // Absolutely huge, also has its own APC and the area isnt set to allow many
+/datum/map_template/ruin/space/spaceprison
+ id = "spaceprison"
+ suffix = "spaceprison.dmm"
+ name = "Space Prison"
+ description = "This is an abandoned space prison. It looks like it was stormed and many things were stolen."
+ cost = 3
+ allow_duplicates = FALSE
/datum/map_template/ruin/space/clownmime
id = "clownmime"
diff --git a/code/datums/spells/bloodcrawl.dm b/code/datums/spells/bloodcrawl.dm
index 5ba00b54327..daa4b4a9b3a 100644
--- a/code/datums/spells/bloodcrawl.dm
+++ b/code/datums/spells/bloodcrawl.dm
@@ -88,7 +88,7 @@
/obj/effect/proc_holder/spell/bloodcrawl/proc/block_hands(mob/living/carbon/user)
if(user.l_hand || user.r_hand)
- to_chat(user, "You may not hold items while blood crawling!")
+ to_chat(user, span_warning("You may not hold items while blood crawling!"))
return FALSE
var/obj/item/bloodcrawl/left_hand = new(user)
@@ -113,61 +113,61 @@
flick(animation_state, src) // Setting the icon_state to the animation has timing issues and can cause frame skips
-/obj/effect/proc_holder/spell/bloodcrawl/proc/sink_animation(atom/target, mob/living/user)
+/obj/effect/proc_holder/spell/bloodcrawl/proc/sink_animation(atom/enter_point, mob/living/user)
var/turf/mob_loc = get_turf(user)
- visible_message("[user] sinks into [target].")
+ visible_message(span_danger("[user] sinks into [enter_point]."))
playsound(mob_loc, 'sound/misc/enter_blood.ogg', 100, TRUE, -1)
new /obj/effect/temp_visual/dir_setting/bloodcrawl(mob_loc, user.dir, "jaunt")
-/obj/effect/proc_holder/spell/bloodcrawl/proc/handle_consumption(mob/living/L, mob/living/victim, atom/A, obj/effect/dummy/slaughter/holder)
- if(!HAS_TRAIT(L, TRAIT_BLOODCRAWL_EAT))
+/obj/effect/proc_holder/spell/bloodcrawl/proc/handle_consumption(mob/living/user, mob/living/victim, atom/enter_point, obj/effect/dummy/slaughter/holder)
+ if(!HAS_TRAIT(user, TRAIT_BLOODCRAWL_EAT))
return
if(!istype(victim))
return
if(victim.stat == CONSCIOUS)
- A.visible_message("[victim] kicks free of [A] just before entering it!")
- L.stop_pulling()
+ enter_point.visible_message(span_warning("[victim] kicks free of [enter_point] just before entering it!"))
+ user.stop_pulling()
return
victim.forceMove(holder)
victim.emote("scream")
- A.visible_message("[L] drags [victim] into [A]!")
- L.stop_pulling()
- to_chat(L, "You begin to feast on [victim]. You can not move while you are doing this.")
- A.visible_message("Loud eating sounds come from the blood...")
+ enter_point.visible_message(span_warning("[user] drags [victim] into [enter_point]!"))
+ user.stop_pulling()
+ to_chat(user, "You begin to feast on [victim]. You can not move while you are doing this.")
+ enter_point.visible_message(span_warning("Loud eating sounds come from the blood..."))
var/sound
- if(isslaughterdemon(L))
- var/mob/living/simple_animal/demon/slaughter/SD = L
- sound = SD.feast_sound
+ if(isslaughterdemon(user))
+ var/mob/living/simple_animal/demon/slaughter/demon = user
+ sound = demon.feast_sound
else
sound = 'sound/misc/demon_consume.ogg'
for(var/i in 1 to 3)
- playsound(get_turf(L), sound, 100, 1)
+ playsound(get_turf(user), sound, 100, TRUE)
sleep(3 SECONDS)
if(!victim)
- to_chat(L, "You happily devour... nothing? Your meal vanished at some point!")
+ to_chat(user, span_danger("You happily devour... nothing? Your meal vanished at some point!"))
return
if(ishuman(victim) || isrobot(victim))
- to_chat(L, "You devour [victim]. Your health is fully restored.")
- L.adjustBruteLoss(-1000)
- L.adjustFireLoss(-1000)
- L.adjustOxyLoss(-1000)
- L.adjustToxLoss(-1000)
+ to_chat(user, span_warning("You devour [victim]. Your health is fully restored."))
+ user.adjustBruteLoss(-1000)
+ user.adjustFireLoss(-1000)
+ user.adjustOxyLoss(-1000)
+ user.adjustToxLoss(-1000)
else
- to_chat(L, "You devour [victim], but this measly meal barely sates your appetite!")
- L.adjustBruteLoss(-25)
- L.adjustFireLoss(-25)
+ to_chat(user, span_warning("You devour [victim], but this measly meal barely sates your appetite!"))
+ user.adjustBruteLoss(-25)
+ user.adjustFireLoss(-25)
- if(isslaughterdemon(L))
- var/mob/living/simple_animal/demon/slaughter/demon = L
+ if(isslaughterdemon(user))
+ var/mob/living/simple_animal/demon/slaughter/demon = user
demon.devoured++
- to_chat(victim, "You feel teeth sink into your flesh, and the--")
+ to_chat(victim, span_userdanger("You feel teeth sink into your flesh, and the--"))
var/obj/item/organ/internal/regenerative_core/legion/core = victim.get_int_organ(/obj/item/organ/internal/regenerative_core/legion)
if(core)
core.remove(victim)
@@ -177,126 +177,126 @@
demon.consumed_mobs.Add(victim)
//ADD_TRAIT(victim, TRAIT_UNREVIVABLE, "demon")
if(ishuman(victim))
- var/mob/living/carbon/human/H = victim
- if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under))
- var/obj/item/clothing/under/U = H.w_uniform
- U.sensor_mode = SENSOR_OFF
+ var/mob/living/carbon/human/h_victim = victim
+ if(h_victim.w_uniform && istype(h_victim.w_uniform, /obj/item/clothing/under))
+ var/obj/item/clothing/under/uniform = h_victim.w_uniform
+ uniform.sensor_mode = SENSOR_OFF
else
victim.ghostize()
qdel(victim)
-/obj/effect/proc_holder/spell/bloodcrawl/proc/post_phase_in(mob/living/L, obj/effect/dummy/slaughter/holder)
- L.notransform = FALSE
+/obj/effect/proc_holder/spell/bloodcrawl/proc/post_phase_in(mob/living/user, obj/effect/dummy/slaughter/holder)
+ user.notransform = FALSE
-/obj/effect/proc_holder/spell/bloodcrawl/proc/phaseout(obj/effect/decal/cleanable/B, mob/living/L)
+/obj/effect/proc_holder/spell/bloodcrawl/proc/phaseout(obj/effect/decal/cleanable/enter_point, mob/living/carbon/user)
- if(iscarbon(L) && !block_hands(L))
+ if(istype(user) && !block_hands(user))
return FALSE
- L.notransform = TRUE
- INVOKE_ASYNC(src, PROC_REF(async_phase), B, L)
+ user.notransform = TRUE
+ INVOKE_ASYNC(src, PROC_REF(async_phase), enter_point, user)
return TRUE
-/obj/effect/proc_holder/spell/bloodcrawl/proc/async_phase(obj/effect/decal/cleanable/B, mob/living/L)
- var/turf/mobloc = get_turf(L)
- sink_animation(B, L)
+/obj/effect/proc_holder/spell/bloodcrawl/proc/async_phase(obj/effect/decal/cleanable/enter_point, mob/living/user)
+ var/turf/mobloc = get_turf(user)
+ sink_animation(enter_point, user)
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(mobloc)
- L.forceMove(holder)
- L.ExtinguishMob()
- handle_consumption(L, L.pulling, B, holder)
- post_phase_in(L, holder)
+ user.forceMove(holder)
+ user.ExtinguishMob()
+ handle_consumption(user, user.pulling, enter_point, holder)
+ post_phase_in(user, holder)
-/obj/effect/proc_holder/spell/bloodcrawl/proc/rise_animation(turf/tele_loc, mob/living/L, atom/A)
- new /obj/effect/temp_visual/dir_setting/bloodcrawl(tele_loc, L.dir, "jauntup")
- if(prob(25) && isdemon(L))
+/obj/effect/proc_holder/spell/bloodcrawl/proc/rise_animation(turf/tele_loc, mob/living/user, atom/exit_point)
+ new /obj/effect/temp_visual/dir_setting/bloodcrawl(tele_loc, user.dir, "jauntup")
+ if(prob(25) && isdemon(user))
var/list/voice = list('sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/i_see_you1.ogg')
- playsound(tele_loc, pick(voice),50, 1, -1)
- A.visible_message("[L] rises out of [A]!")
- playsound(get_turf(tele_loc), 'sound/misc/exit_blood.ogg', 100, 1, -1)
+ playsound(tele_loc, pick(voice), 50, TRUE, -1)
+ exit_point.visible_message(span_warning("[user] rises out of [exit_point]!"))
+ playsound(get_turf(tele_loc), 'sound/misc/exit_blood.ogg', 100, TRUE, -1)
-/obj/effect/proc_holder/spell/bloodcrawl/proc/unblock_hands(mob/living/carbon/C)
- if(!istype(C))
+/obj/effect/proc_holder/spell/bloodcrawl/proc/unblock_hands(mob/living/carbon/user)
+ if(!istype(user))
return
- for(var/obj/item/bloodcrawl/BC in C)
- qdel(BC)
+ for(var/obj/item/bloodcrawl/item in user)
+ qdel(item)
-/obj/effect/proc_holder/spell/bloodcrawl/proc/rise_message(atom/A)
- A.visible_message("[A] starts to bubble...")
+/obj/effect/proc_holder/spell/bloodcrawl/proc/rise_message(atom/exit_point)
+ exit_point.visible_message(span_warning("[exit_point] starts to bubble..."))
-/obj/effect/proc_holder/spell/bloodcrawl/proc/post_phase_out(atom/A, mob/living/L)
- if(isslaughterdemon(L))
- var/mob/living/simple_animal/demon/slaughter/S = L
- S.speed = 0
- S.boost = world.time + 6 SECONDS
- L.color = A.color
- addtimer(VARSET_CALLBACK(L, color, null), 6 SECONDS)
+/obj/effect/proc_holder/spell/bloodcrawl/proc/post_phase_out(atom/exit_point, mob/living/user)
+ if(isslaughterdemon(user))
+ var/mob/living/simple_animal/demon/slaughter/demon = user
+ demon.speed = 0
+ demon.boost = world.time + 6 SECONDS
+ user.color = exit_point.color
+ addtimer(VARSET_CALLBACK(user, color, null), 6 SECONDS)
-/obj/effect/proc_holder/spell/bloodcrawl/proc/phasein(atom/A, mob/living/L)
+/obj/effect/proc_holder/spell/bloodcrawl/proc/phasein(atom/enter_point, mob/living/user)
- if(L.notransform)
- to_chat(L, "Finish eating first!")
+ if(user.notransform)
+ to_chat(user, span_warning("Finish eating first!"))
return FALSE
- rise_message(A)
- if(!do_after(L, 2 SECONDS, target = A))
+ rise_message(enter_point)
+ if(!do_after(user, 2 SECONDS, target = enter_point))
return FALSE
- if(!A)
+ if(!enter_point)
return FALSE
- var/turf/tele_loc = isturf(A) ? A : A.loc
- var/holder = L.loc
- L.forceMove(tele_loc)
- L.client.eye = L
+ var/turf/tele_loc = isturf(enter_point) ? enter_point : enter_point.loc
+ var/holder = user.loc
+ user.forceMove(tele_loc)
+ user.client.eye = user
- rise_animation(tele_loc, L, A)
+ rise_animation(tele_loc, user, enter_point)
- unblock_hands(L)
+ unblock_hands(user)
QDEL_NULL(holder)
- post_phase_out(A, L)
+ post_phase_out(enter_point, user)
return TRUE
-/*/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl
+/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl
name = "Shadow Crawl"
desc = "Use darkness to phase out of existence."
- allowed_type = /turf
action_background_icon_state = "shadow_demon_bg"
action_icon_state = "shadow_crawl"
+ allowed_type = /turf
/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/valid_target(turf/target, user)
return target.get_lumcount() < 0.2
-/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/rise_message(atom/A)
+/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/rise_message(atom/exit_point)
return
-/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/rise_animation(turf/tele_loc, mob/living/L, atom/A)
- new /obj/effect/temp_visual/dir_setting/bloodcrawl(get_turf(L), L.dir, "shadowwalk_appear")
+/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/rise_animation(turf/tele_loc, mob/living/user, atom/exit_point)
+ new /obj/effect/temp_visual/dir_setting/bloodcrawl(get_turf(user), user.dir, "shadowwalk_appear")
-/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/handle_consumption(mob/living/L, mob/living/victim, atom/A, obj/effect/dummy/slaughter/holder)
+/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/handle_consumption(mob/living/L, mob/living/victim, atom/enter_point, obj/effect/dummy/slaughter/holder)
return
-/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/sink_animation(atom/A, mob/living/L)
- A.visible_message("[L] sinks into the shadows...")
- new /obj/effect/temp_visual/dir_setting/bloodcrawl(get_turf(L), L.dir, "shadowwalk_disappear")
+/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/sink_animation(atom/enter_point, mob/living/user)
+ enter_point.visible_message(span_danger("[user] sinks into the shadows..."))
+ new /obj/effect/temp_visual/dir_setting/bloodcrawl(get_turf(user), user.dir, "shadowwalk_disappear")
-/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/post_phase_in(mob/living/L, obj/effect/dummy/slaughter/holder)
+/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/post_phase_in(mob/living/user, obj/effect/dummy/slaughter/holder)
..()
- if(!istype(L, /mob/living/simple_animal/demon/shadow))
+ if(!istype(user, /mob/living/simple_animal/demon/shadow))
return
- var/mob/living/simple_animal/demon/shadow/S = L
- S.RegisterSignal(holder, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/simple_animal/demon/shadow, check_darkness))*/
+ var/mob/living/simple_animal/demon/shadow/demon = user
+ demon.RegisterSignal(holder, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/simple_animal/demon/shadow, check_darkness))
diff --git a/code/datums/spells/cluwne.dm b/code/datums/spells/cluwne.dm
index 9f8eb038aee..6e4aec12ed8 100644
--- a/code/datums/spells/cluwne.dm
+++ b/code/datums/spells/cluwne.dm
@@ -13,11 +13,14 @@
/mob/living/carbon/human/proc/makeCluwne()
- to_chat(src, "You feel funny.")
if(!get_int_organ(/obj/item/organ/internal/brain/cluwne))
var/obj/item/organ/internal/brain/cluwne/idiot_brain = new
+ internal_organs |= idiot_brain //Well, everything's for recursion prevention.
idiot_brain.insert(src, make_cluwne = 0)
idiot_brain.dna = dna.Clone()
+ else
+ return
+ to_chat(src, span_danger("You feel funny."))
setBrainLoss(80, use_brain_mod = FALSE)
set_nutrition(9000)
overeatduration = 9000
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index c019258fd8a..2095f7a07ff 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -457,23 +457,23 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY
/datum/supply_packs/security/armory/buckshotammo
name = "Buckshot Ammo Crate"
- contains = list(/obj/item/ammo_box/shotgun/buck,
- /obj/item/storage/box/buck,
- /obj/item/storage/box/buck,
- /obj/item/storage/box/buck,
- /obj/item/storage/box/buck,
- /obj/item/storage/box/buck)
+ contains = list(/obj/item/ammo_box/speedloader/shotgun/buck,
+ /obj/item/ammo_box/shotgun/buck,
+ /obj/item/ammo_box/shotgun/buck,
+ /obj/item/ammo_box/shotgun/buck,
+ /obj/item/ammo_box/shotgun/buck,
+ /obj/item/ammo_box/shotgun/buck)
cost = 45
containername = "buckshot ammo crate"
/datum/supply_packs/security/armory/slugammo
name = "Slug Ammo Crate"
- contains = list(/obj/item/ammo_box/shotgun,
- /obj/item/storage/box/slug,
- /obj/item/storage/box/slug,
- /obj/item/storage/box/slug,
- /obj/item/storage/box/slug,
- /obj/item/storage/box/slug)
+ contains = list(/obj/item/ammo_box/speedloader/shotgun,
+ /obj/item/ammo_box/shotgun,
+ /obj/item/ammo_box/shotgun,
+ /obj/item/ammo_box/shotgun,
+ /obj/item/ammo_box/shotgun,
+ /obj/item/ammo_box/shotgun)
cost = 45
containername = "slug ammo crate"
@@ -975,8 +975,10 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY
/datum/supply_packs/medical/virus
name = "Virus Crate"
- contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion,
+ contains = list(/obj/item/reagent_containers/glass/bottle/flu,
/obj/item/reagent_containers/glass/bottle/cold,
+ /obj/item/reagent_containers/glass/bottle/sneezing,
+ /obj/item/reagent_containers/glass/bottle/cough,
/obj/item/reagent_containers/glass/bottle/epiglottis_virion,
/obj/item/reagent_containers/glass/bottle/liver_enhance_virion,
/obj/item/reagent_containers/glass/bottle/fake_gbs,
diff --git a/code/datums/syndiesupplypacks.dm b/code/datums/syndiesupplypacks.dm
index 8d68b4744bc..f3d3bea66a9 100644
--- a/code/datums/syndiesupplypacks.dm
+++ b/code/datums/syndiesupplypacks.dm
@@ -386,12 +386,12 @@ GLOBAL_LIST_INIT(all_syndie_supply_groups, list(SYNDIE_SUPPLY_EMERGENCY,SYNDIE_S
/datum/syndie_supply_packs/security/armory/a357
name = "Syndicate .357 Revolver - Speedloader's"
- contains = list(/obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357)
+ contains = list(/obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357)
cost = 1750
containername = ".357 Revolver - Speedloader's crate"
@@ -844,8 +844,10 @@ GLOBAL_LIST_INIT(all_syndie_supply_groups, list(SYNDIE_SUPPLY_EMERGENCY,SYNDIE_S
/datum/syndie_supply_packs/medical/virus
name = "Virus Crate"
- contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion,
+ contains = list(/obj/item/reagent_containers/glass/bottle/flu,
/obj/item/reagent_containers/glass/bottle/cold,
+ /obj/item/reagent_containers/glass/bottle/sneezing,
+ /obj/item/reagent_containers/glass/bottle/cough,
/obj/item/reagent_containers/glass/bottle/epiglottis_virion,
/obj/item/reagent_containers/glass/bottle/liver_enhance_virion,
/obj/item/reagent_containers/glass/bottle/fake_gbs,
@@ -2167,8 +2169,8 @@ GLOBAL_LIST_INIT(all_syndie_supply_groups, list(SYNDIE_SUPPLY_EMERGENCY,SYNDIE_S
/datum/syndie_supply_packs/syndicate_special/payday
name = "Syndicate 'PayDay' Bundle"
contains = list(/obj/item/gun/projectile/revolver, // 13TC
- /obj/item/ammo_box/a357, // 3TC
- /obj/item/ammo_box/a357, // 3TC
+ /obj/item/ammo_box/speedloader/a357, // 3TC
+ /obj/item/ammo_box/speedloader/a357, // 3TC
/obj/item/card/emag, // 6TC
/obj/item/jammer, // 5TC
/obj/item/card/id/syndicate, // 2TC
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index ef3ec9f1dba..8ec24f75ed4 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -573,7 +573,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
desc = "The result of the work of scientists on mixing an experimental stable mutagen with the core of a pyroclastic anomaly. Gives the user the opportunity to become a slime and heat himself up."
reference = "AEXT"
item = /obj/item/anomaly_extract
- cost = 3
+ cost = 10
race = list("Slime People")
//Plasmaman
diff --git a/code/game/area/ss13_areas.dm b/code/game/area/ss13_areas.dm
index a5f1892a648..3956f1226ff 100644
--- a/code/game/area/ss13_areas.dm
+++ b/code/game/area/ss13_areas.dm
@@ -1801,6 +1801,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "\improper Surgery 2"
icon_state = "surgery2"
+/area/medical/surgery/theatre
+ name = "\improper Surgery Theatre"
+ icon_state = "surgery_theatre"
+
/area/medical/surgeryobs
name = "\improper Surgery Observation"
icon_state = "surgery"
diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm
index 1a5c0f33804..5d6e174f176 100644
--- a/code/game/data_huds.dm
+++ b/code/game/data_huds.dm
@@ -58,6 +58,9 @@
/datum/atom_hud/data/hydroponic
hud_icons = list(PLANT_NUTRIENT_HUD, PLANT_WATER_HUD, PLANT_STATUS_HUD, PLANT_HEALTH_HUD, PLANT_TOXIN_HUD, PLANT_PEST_HUD, PLANT_WEED_HUD)
+/datum/atom_hud/thoughts
+ hud_icons = list(THOUGHT_HUD)
+
/* MED/SEC/DIAG HUD HOOKS */
/*
@@ -73,7 +76,7 @@
/// Whether the carbon mob is currently in crit.
// Even though "crit" does not realistically happen for non-humans..
/mob/living/carbon/proc/is_in_crit()
- for(var/thing in viruses)
+ for(var/thing in diseases)
var/datum/disease/D = thing
if(istype(D, /datum/disease/critical))
return TRUE
@@ -87,12 +90,12 @@
return FALSE
/// Whether a virus worthy displaying on the HUD is present.
-/mob/living/carbon/proc/has_virus()
- for(var/thing in viruses)
+/mob/living/proc/has_virus()
+ for(var/thing in diseases)
var/datum/disease/D = thing
if(!D.discovered) // Early-stage viruses should not show up on med HUD (though health analywers can still pick them up)
continue
- if((!(D.visibility_flags & HIDDEN_SCANNER)) && (D.severity != NONTHREAT))
+ if((!(D.visibility_flags & HIDDEN_HUD)) && (D.severity != NONTHREAT))
return TRUE
return FALSE
@@ -173,6 +176,8 @@
var/image/holder = hud_list[STATUS_HUD]
if(stat == DEAD)
holder.icon_state = "huddead"
+ else if(has_virus())
+ holder.icon_state = "hudill"
else
holder.icon_state = "hudhealthy"
@@ -468,6 +473,37 @@
return
holder.icon_state = "hudweed[RoundPlantBar(weedlevel/10)]"
+/*~~~~~~~~~~~~~~~~~~
+ TELEPATHY HUD
+~~~~~~~~~~~~~~~~~~*/
+
+/mob/living/proc/thoughts_hud_set(thoughts, say_test = -1)
+ if(!src)
+ return
+ if(!(client?.prefs.toggles & PREFTOGGLE_SHOW_TYPING))
+ var/image/holder = hud_list[THOUGHT_HUD]
+ if(thoughts)
+ if(!typing)
+ holder.icon_state = "hudthoughtstyping"
+ typing = TRUE
+ else if(say_test > -1)
+ holder.icon_state = "hudthoughts-[say_test]"
+ addtimer(CALLBACK(src, PROC_REF(thoughts_hud_set), FALSE), 3 SECONDS)
+ if(!thoughts && typing)
+ holder.icon_state = ""
+ typing = FALSE
+
+/datum/atom_hud/thoughts/proc/manage_hud(mob/user, perception)
+ if(!user)
+ return
+ user.thoughtsHUD += perception
+ if(user.thoughtsHUD && !(user in hudusers))
+ add_hud_to(user)
+ add_to_hud(user)
+ else if(!user.thoughtsHUD && (user in hudusers))
+ remove_hud_from(user)
+ remove_from_hud(user)
+
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I'll just put this somewhere near the end...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
diff --git a/code/game/dna/genes/vg_powers.dm b/code/game/dna/genes/vg_powers.dm
index 865635d4024..94113f688aa 100644
--- a/code/game/dna/genes/vg_powers.dm
+++ b/code/game/dna/genes/vg_powers.dm
@@ -199,15 +199,17 @@
/datum/dna/gene/basic/grant_spell/remotetalk/activate(mob/living/M, connected, flags)
..()
+ var/datum/atom_hud/thoughts/hud = GLOB.huds[THOUGHTS_HUD]
M.AddSpell(new /obj/effect/proc_holder/spell/mindscan(null))
+ hud.manage_hud(M, THOUGHTS_HUD_PRECISE)
-
-/datum/dna/gene/basic/grant_spell/remotetalk/deactivate(mob/user)
+/datum/dna/gene/basic/grant_spell/remotetalk/deactivate(mob/living/user)
..()
+ var/datum/atom_hud/thoughts/hud = GLOB.huds[THOUGHTS_HUD]
for(var/obj/effect/proc_holder/spell/S in user.mob_spell_list)
if(istype(S, /obj/effect/proc_holder/spell/mindscan))
user.RemoveSpell(S)
-
+ hud.manage_hud(user, THOUGHTS_HUD_DISPERSE)
/obj/effect/proc_holder/spell/remotetalk
name = "Project Mind"
@@ -223,19 +225,27 @@
return new /datum/spell_targeting/telepathic
-/obj/effect/proc_holder/spell/remotetalk/cast(list/targets, mob/user = usr)
+/obj/effect/proc_holder/spell/remotetalk/cast(list/targets, mob/living/carbon/human/user = usr)
if(!ishuman(user))
return
if(user.mind?.miming) // Dont let mimes telepathically talk
to_chat(user,"You can't communicate without breaking your vow of silence.")
return
- var/say = input("What do you wish to say") as text|null
- if(!say || usr.stat)
- return
- say = strip_html(say)
- say = pencode_to_html(say, usr, format = 0, fields = 0)
-
for(var/mob/living/target in targets)
+ var/datum/atom_hud/thoughts/hud = GLOB.huds[THOUGHTS_HUD]
+ hud.manage_hud(target, THOUGHTS_HUD_PRECISE)
+ user.hud_typing = 1
+ user.thoughts_hud_set(TRUE)
+ var/say = input("What do you wish to say") as text|null
+ user.hud_typing = 0
+ if(!say || usr.stat)
+ hud.manage_hud(target, THOUGHTS_HUD_DISPERSE)
+ user.thoughts_hud_set(FALSE)
+ return
+ user.thoughts_hud_set(TRUE, say_test(say))
+ addtimer(CALLBACK(hud, TYPE_PROC_REF(/datum/atom_hud/thoughts/, manage_hud), target, THOUGHTS_HUD_DISPERSE), 3 SECONDS)
+ say = strip_html(say)
+ say = pencode_to_html(say, usr, format = 0, fields = 0)
log_say("(TPATH to [key_name(target)]) [say]", user)
user.create_log(SAY_LOG, "Telepathically said '[say]' using [src]", target)
if(target.dna?.GetSEState(GLOB.remotetalkblock))
@@ -250,7 +260,7 @@
/obj/effect/proc_holder/spell/mindscan
name = "Scan Mind"
desc = "Offer people a chance to share their thoughts!"
- base_cooldown = 0
+ base_cooldown = 45 SECONDS
clothes_req = FALSE
stat_allowed = CONSCIOUS
action_icon_state = "genetic_mindscan"
@@ -265,20 +275,23 @@
if(!ishuman(user))
return
for(var/mob/living/target in targets)
+ var/datum/atom_hud/thoughts/hud = GLOB.huds[THOUGHTS_HUD]
var/message = "You feel your mind expand briefly... (Click to send a message.)"
if(target.dna?.GetSEState(GLOB.remotetalkblock))
message = "You feel [user.real_name] request a response from you... (Click here to project mind.)"
user.show_message("You offer your mind to [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"].")
target.show_message("[message]")
available_targets += target
- addtimer(CALLBACK(src, PROC_REF(removeAvailability), target), 100)
+ hud.manage_hud(target, THOUGHTS_HUD_PRECISE)
+ addtimer(CALLBACK(src, PROC_REF(removeAvailability), target), 45 SECONDS)
/obj/effect/proc_holder/spell/mindscan/proc/removeAvailability(mob/living/target)
if(target in available_targets)
+ var/datum/atom_hud/thoughts/hud = GLOB.huds[THOUGHTS_HUD]
available_targets -= target
- if(!(target in available_targets))
- target.show_message("You feel the sensation fade...")
+ hud.manage_hud(target, THOUGHTS_HUD_DISPERSE)
+ target.show_message("You feel the sensation fade...")
/obj/effect/proc_holder/spell/mindscan/Topic(href, href_list)
@@ -291,10 +304,14 @@
var/mob/living/target = locateUID(href_list["target"])
if(!(target in available_targets))
return
- available_targets -= target
+ target.hud_typing = 1
+ target.thoughts_hud_set(TRUE)
var/say = input("What do you wish to say") as text|null
- if(!say)
+ target.hud_typing = 0
+ if(!say || target.stat)
+ target.thoughts_hud_set(FALSE)
return
+ target.thoughts_hud_set(TRUE, say_test(say))
say = strip_html(say)
say = pencode_to_html(say, target, format = 0, fields = 0)
user.create_log(SAY_LOG, "Telepathically responded '[say]' using [src]", target)
@@ -309,7 +326,8 @@
/obj/effect/proc_holder/spell/mindscan/Destroy()
- available_targets.Cut()
+ for(var/mob/living/target in available_targets)
+ removeAvailability(target)
return ..()
diff --git a/code/game/gamemodes/clockwork/cogscarab.dm b/code/game/gamemodes/clockwork/cogscarab.dm
index e86a1903482..e63a0771375 100644
--- a/code/game/gamemodes/clockwork/cogscarab.dm
+++ b/code/game/gamemodes/clockwork/cogscarab.dm
@@ -119,7 +119,7 @@
adjustBruteLoss(2)
else
wind_up_timer -= seconds
- hud_used.wind_up_timer?.icon_state = "windup_display-[6-(round(wind_up_timer, wind_up_icon_segment) / wind_up_icon_segment)]"
+ hud_used?.wind_up_timer?.icon_state = "windup_display-[6-(round(wind_up_timer, wind_up_icon_segment) / wind_up_icon_segment)]"
//rounds to 30 and divides by 30. if timer full, 6 - 5, state 1. from 1 to 6.
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 31ddd80a140..1d95b3a76c8 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -346,7 +346,7 @@ structure_check() searches for nearby cultist structures required for the invoca
for(var/obj/item/organ/external/E in H.bodyparts)
E.mend_fracture()
E.internal_bleeding = FALSE
- for(var/datum/disease/critical/crit in H.viruses) // cure all crit conditions
+ for(var/datum/disease/critical/crit in H.diseases) // cure all crit conditions
crit.cure()
H.uncuff()
diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm
index d17447171cc..62b1ba62cb1 100644
--- a/code/game/gamemodes/miniantags/abduction/gland.dm
+++ b/code/game/gamemodes/miniantags/abduction/gland.dm
@@ -219,33 +219,13 @@
/obj/item/organ/internal/heart/gland/viral/activate()
to_chat(owner, "You feel sick.")
- var/datum/disease/advance/rand_virus = random_virus(rand(2, 6), 6)
- rand_virus.carrier = TRUE
- var/datum/disease/advance/check = locate() in owner.viruses
- if(check)
- check.cure(resistance = FALSE)
- owner.ForceContractDisease(rand_virus)
-
-/obj/item/organ/internal/heart/gland/viral/proc/random_virus(max_symptoms, max_level)
- if(max_symptoms > VIRUS_SYMPTOM_LIMIT)
- max_symptoms = VIRUS_SYMPTOM_LIMIT
- var/datum/disease/advance/A = new
- var/list/datum/symptom/possible_symptoms = list()
- for(var/symptom in subtypesof(/datum/symptom))
- var/datum/symptom/S = symptom
- if(initial(S.level) > max_level)
- continue
- if(initial(S.level) <= 0) //unobtainable symptoms
- continue
- possible_symptoms += S
- for(var/i in 1 to max_symptoms)
- var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms)
- if(chosen_symptom)
- var/datum/symptom/S = new chosen_symptom
- A.symptoms += S
- A.Refresh() //just in case someone already made and named the same disease
- return A
-
+ var/datum/disease/virus/advance/new_virus
+ new_virus = CreateRandomVirus(count_of_symptoms = rand(4, 6), resistance = rand(0,11), stealth = pick(0,0,1,1,2),
+ stage_rate = rand(-11,5), transmittable = rand(2,9), severity = rand(0,5))
+ var/datum/disease/virus/advance/old_virus = locate() in owner.diseases
+ if(old_virus)
+ old_virus.cure(need_immunity = FALSE)
+ new_virus.Contract(owner, is_carrier = TRUE)
/obj/item/organ/internal/heart/gland/emp //TODO : Replace with something more interesting
origin_tech = "materials=4;biotech=4;magnets=6;abductor=3"
diff --git a/code/game/gamemodes/miniantags/demons/demon.dm b/code/game/gamemodes/miniantags/demons/demon.dm
new file mode 100644
index 00000000000..5255e63708f
--- /dev/null
+++ b/code/game/gamemodes/miniantags/demons/demon.dm
@@ -0,0 +1,112 @@
+/mob/living/simple_animal/demon
+ name = "a generic demon"
+ desc = "you shouldnt be reading this, file a github report"
+ speak_emote = list("gurgles")
+ emote_hear = list("wails","screeches")
+ tts_seed = "Mannoroth"
+ response_help = "thinks better of touching"
+ response_disarm = "flails at"
+ response_harm = "punches"
+ speed = 1
+ a_intent = INTENT_HARM
+ stop_automated_movement = TRUE
+ status_flags = CANPUSH
+ attack_sound = 'sound/misc/demon_attack1.ogg'
+ death_sound = 'sound/misc/demon_dies.ogg'
+ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
+ minbodytemp = 0
+ maxbodytemp = INFINITY
+ faction = list("demon")
+ attacktext = "неистово терзает"
+ maxHealth = 200
+ health = 200
+ environment_smash = ENVIRONMENT_SMASH_STRUCTURES
+ obj_damage = 50
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ see_in_dark = 8
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
+ del_on_death = TRUE
+ var/vialspawned = FALSE
+ var/playstyle_string
+ var/datum/action/innate/demon/whisper/whisper_action
+
+
+/mob/living/simple_animal/demon/Initialize(mapload)
+ . = ..()
+ whisper_action = new()
+ whisper_action.Grant(src)
+ addtimer(CALLBACK(src, PROC_REF(attempt_objectives)), 5 SECONDS)
+
+
+/mob/living/simple_animal/demon/Destroy()
+ if(whisper_action)
+ whisper_action = null
+ return ..()
+
+
+/datum/action/innate/demon/whisper
+ name = "Demonic Whisper"
+ button_icon_state = "cult_comms"
+ background_icon_state = "bg_demon"
+
+
+/datum/action/innate/demon/whisper/proc/choose_targets(mob/user = usr)//yes i am copying from telepathy..hush...
+ var/list/validtargets = list()
+ for(var/mob/living/target in (view(user.client.view) - user))
+ if(target && target.mind && target.stat != DEAD)
+ validtargets += target
+
+ if(!length(validtargets))
+ to_chat(usr, span_warning("There are no valid targets!"))
+ return
+
+ var/mob/living/target = input("Choose the target to talk to.", "Targeting") as null|mob in validtargets
+ return target
+
+
+/datum/action/innate/demon/whisper/Activate()
+ var/mob/living/choice = choose_targets()
+ if(!choice)
+ return
+
+ var/msg = stripped_input(usr, "What do you wish to tell [choice]?", null, "")
+ if(!(msg))
+ return
+
+ add_say_logs(usr, msg, choice, "SLAUGHTER")
+ to_chat(usr, span_info("You whisper to [choice]: [msg]"))
+ to_chat(choice, "[span_deadsay("Suddenly a strange, demonic voice resonates in your head... ")][span_danger(" [msg]")]")
+ for(var/mob/dead/observer/G in GLOB.player_list)
+ G.show_message("Demonic message from [usr] ([ghost_follow_link(usr, ghost=G)]) to [choice] ([ghost_follow_link(choice, ghost=G)]): [msg]")
+
+
+/obj/item/organ/internal/heart/demon
+ name = "demon heart"
+ desc = "Still it beats furiously, emanating an aura of utter hate."
+ icon = 'icons/obj/surgery.dmi'
+ icon_state = "demon_heart"
+ origin_tech = "combat=5;biotech=7"
+
+
+/obj/item/organ/internal/heart/demon/update_icon()
+ return //always beating visually
+
+
+/obj/item/organ/internal/heart/demon/prepare_eat()
+ return // Just so people don't accidentally waste it
+
+
+/obj/item/organ/internal/heart/demon/Stop()
+ return // Always beating.
+
+
+/obj/item/organ/internal/heart/demon/attack_self(mob/living/user)
+ user.visible_message(span_warning("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!"), \
+ span_danger("An unnatural hunger consumes you. You raise [src] to your mouth and devour it!"))
+ playsound(user, 'sound/misc/demon_consume.ogg', 50, TRUE)
+
+
+/mob/living/simple_animal/demon/proc/attempt_objectives()
+ return mind
+
diff --git a/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm b/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm
new file mode 100644
index 00000000000..75c2436b2f4
--- /dev/null
+++ b/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm
@@ -0,0 +1,298 @@
+/mob/living/simple_animal/demon/shadow
+ name = "shadow demon"
+ desc = "A creature that's barely tangible, you can feel its gaze piercing you"
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "shadow_demon"
+ icon_living = "shadow_demon"
+ speed = 0
+ maxHealth = 300
+ health = 300
+ move_resist = MOVE_FORCE_STRONG
+ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE // so they can tell where the darkness is
+ loot = list(/obj/item/organ/internal/heart/demon/shadow)
+ var/thrown_alert = FALSE
+ var/wrapping = FALSE
+ var/list/wrapped_victims
+ playstyle_string = "You are the Shadow Demon, a terrible creature from another existence. You have only two desires to survive and to lurk and ambush careless preys. \
+ You may use the Shadow Crawl ability when near the dark spots, appearing and dissapearing from the station at will. \
+ Your Shadow Grapple ability allows you to pull living preys or to push yourself to the other objects. Also extinguishes all light sources at the area of impact. \
+ You can wrap dead humanoid bodies by attacking them, use Alt+Click on the shadow cocoon afterwards to lure more victims. \
+ You move quickly and regenerate fast in the shadows, but any light source will hurt you to the death. STAY AWAY FROM THE LIGHT! "
+
+
+/mob/living/simple_animal/demon/shadow/Initialize(mapload)
+ . = ..()
+ remove_from_all_data_huds()
+ AddSpell(new /obj/effect/proc_holder/spell/fireball/shadow_grapple)
+ var/obj/effect/proc_holder/spell/bloodcrawl/shadow_crawl/crawl = new
+ AddSpell(crawl)
+ whisper_action.button_icon_state = "shadow_whisper"
+ whisper_action.background_icon_state = "shadow_demon_bg"
+ if(istype(loc, /obj/effect/dummy/slaughter))
+ crawl.phased = TRUE
+ RegisterSignal(loc, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/simple_animal/demon/shadow, check_darkness))
+ RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(check_darkness))
+
+
+/mob/living/simple_animal/demon/shadow/Life(seconds, times_fired)
+ . = ..()
+ var/lum_count = check_darkness()
+ var/damage_mod = istype(loc, /obj/effect/dummy/slaughter) ? 0.5 : 1
+ if(lum_count > 0.2)
+ adjustBruteLoss(30 * damage_mod) // 20 seconds in light and you are done
+ SEND_SOUND(src, sound('sound/weapons/sear.ogg'))
+ to_chat(src, span_dangerbigger("The light scalds you!"))
+ else
+ adjustBruteLoss(-30)
+
+
+/mob/living/simple_animal/demon/shadow/proc/check_darkness()
+ var/turf/source_turf = get_turf(src)
+ var/lum_count = source_turf.get_lumcount()
+ if(lum_count > 0.2)
+ if(!thrown_alert)
+ thrown_alert = TRUE
+ throw_alert("light", /obj/screen/alert/lightexposure)
+ animate(src, alpha = 255, time = 0.5 SECONDS)
+ speed = initial(speed)
+ else
+ if(thrown_alert)
+ thrown_alert = FALSE
+ clear_alert("light")
+ animate(src, alpha = 125, time = 0.5 SECONDS)
+ speed = -0.3
+ return lum_count
+
+
+/mob/living/simple_animal/demon/shadow/UnarmedAttack(atom/target)
+ if(!ishuman(target))
+ if(isitem(target))
+ target.extinguish_light(TRUE)
+ return ..()
+
+ var/mob/living/carbon/human/h_target = target
+ if(h_target.stat != DEAD)
+ return ..()
+
+ if(isLivingSSD(h_target) && client.send_ssd_warning(h_target)) //Similar to revenants, only wrap SSD targets if you've accepted the SSD warning
+ return
+
+ if(wrapping)
+ to_chat(src, span_notice("We are already wrapping something."))
+ return
+
+ visible_message(span_danger("[src] begins wrapping [h_target] in shadowy threads."))
+ wrapping = TRUE
+ if(!do_after(src, 4 SECONDS, FALSE, target = h_target))
+ wrapping = FALSE
+ return
+
+ h_target.visible_message(span_warning("[src] envelops [h_target] into an ethereal cocoon, and darkness begins to creep from it."))
+ var/obj/structure/shadowcocoon/cocoon = new(get_turf(h_target))
+ h_target.extinguish_light(TRUE) // may as well be safe
+ h_target.forceMove(cocoon)
+ wrapping = FALSE
+
+ if(!h_target.mind)
+ return
+
+ if(!wrapped_victims)
+ wrapped_victims = list()
+ var/human_UID = h_target.UID()
+ if(!(human_UID in wrapped_victims))
+ wrapped_victims += human_UID
+
+
+/obj/structure/shadowcocoon
+ name = "shadowy cocoon"
+ desc = "Something wrapped in what seems to be manifested darkness. Its surface distorts unnaturally, and it emanates deep shadows."
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "shadowcocoon"
+ light_power = -4
+ light_range = 6
+ max_integrity = 100
+ light_color = "#ddd6cf"
+ anchored = TRUE
+ /// Amount of SSobj ticks (Roughly 2 seconds) since the last hallucination proc'd
+ var/time_since_last_hallucination = 0
+ /// Will we play hallucination sounds or not
+ var/silent = TRUE
+
+
+/obj/structure/shadowcocoon/Initialize(mapload)
+ . = ..()
+ START_PROCESSING(SSobj, src)
+
+
+/obj/structure/shadowcocoon/process()
+ time_since_last_hallucination++
+ for(var/atom/to_darken in range(4, src))
+ if(prob(60) || !length(to_darken.light_sources))
+ continue
+ if(iswelder(to_darken) && length(to_darken.light_sources))
+ to_darken.visible_message(span_notice("The shadows swarm around and overwhelm the flame of [to_darken]."))
+ to_darken.extinguish_light(TRUE)
+ if(!silent && time_since_last_hallucination >= rand(8, 12))
+ playsound(src, pick('sound/items/deconstruct.ogg', 'sound/weapons/handcuffs.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/boltsup.ogg', 'sound/effects/eleczap.ogg', get_sfx("bodyfall"), get_sfx("gunshot"), 'sound/weapons/egloves.ogg'), 50)
+ time_since_last_hallucination = 0
+
+
+/obj/structure/shadowcocoon/AltClick(mob/user)
+ if(!isdemon(user))
+ return ..()
+ if(silent)
+ to_chat(user, span_notice("You twist and change your trapped victim in [src] to lure in more prey."))
+ silent = FALSE
+ return
+ to_chat(user, span_notice("The tendrils from [src] snap back to their orignal form."))
+ silent = TRUE
+
+
+/obj/structure/shadowcocoon/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = NONE)
+ if(damage_type != BURN) //I unashamedly stole this from spider cocoon code
+ return
+ playsound(loc, 'sound/items/welder.ogg', 100, TRUE)
+
+
+/obj/structure/shadowcocoon/obj_destruction()
+ visible_message(span_danger("[src] splits open, and the shadows dancing around it fade."))
+ return ..()
+
+
+/obj/structure/shadowcocoon/Destroy()
+ for(var/atom/movable/AM in contents)
+ AM.forceMove(loc)
+ return..()
+
+
+/mob/living/simple_animal/demon/shadow/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
+ if(isliving(AM)) // when a living creature is thrown at it, dont knock it back
+ return
+ ..()
+
+
+/obj/effect/proc_holder/spell/fireball/shadow_grapple
+ name = "Shadow Grapple"
+ desc = "Fire one of your hands, if it hits a person it pulls them in. If you hit a structure you get pulled to the structure."
+ panel = "Demon"
+ action_background_icon_state = "shadow_demon_bg"
+ action_icon_state = "shadow_grapple"
+ invocation_type = "none"
+ invocation = null
+ sound = null
+ need_active_overlay = TRUE
+ human_req = FALSE
+ selection_activated_message = span_notice("You raise your hand, full of demonic energy! Left-click to cast at a target!")
+ selection_deactivated_message = span_notice("You re-absorb the energy...for now.")
+ base_cooldown = 10 SECONDS
+ fireball_type = /obj/item/projectile/magic/shadow_hand
+
+
+/obj/effect/proc_holder/spell/fireball/shadow_grapple/update_icon()
+ return
+
+
+/obj/item/projectile/magic/shadow_hand
+ name = "shadow hand"
+ icon_state = "shadow_hand"
+ plane = FLOOR_PLANE
+ speed = 1
+ var/hit = FALSE
+
+
+/obj/item/projectile/magic/shadow_hand/fire(setAngle)
+ if(firer)
+ firer.Beam(src, icon_state = "grabber_beam", time = INFINITY, maxdistance = INFINITY, beam_sleep_time = 1, beam_type = /obj/effect/ebeam/floor)
+ return ..()
+
+
+/obj/item/projectile/magic/shadow_hand/on_hit(atom/target, blocked, hit_zone)
+ if(hit)
+ return
+ hit = TRUE // to prevent double hits from the pull
+ . = ..()
+ for(var/atom/extinguish_target in range(2, src))
+ extinguish_target.extinguish_light(TRUE)
+ if(isliving(target))
+ var/mob/living/l_target = target
+ l_target.Immobilize(4 SECONDS)
+ l_target.apply_damage(40, BRUTE, BODY_ZONE_CHEST)
+ l_target.throw_at(get_step(firer, get_dir(firer, target)), 50, 10)
+ else
+ firer.throw_at(get_step(target, get_dir(target, firer)), 50, 10)
+
+
+/obj/effect/ebeam/floor
+ plane = FLOOR_PLANE
+
+
+/obj/item/organ/internal/heart/demon/shadow
+ name = "heart of darkness"
+ desc = "It still beats furiously, emitting an aura of fear."
+ color = COLOR_BLACK
+
+
+/obj/item/organ/internal/heart/demon/shadow/attack_self(mob/living/user)
+ . = ..()
+ user.drop_from_active_hand()
+ insert(user)
+
+
+/obj/item/organ/internal/heart/demon/shadow/insert(mob/living/carbon/M, special = 0)
+ . = ..()
+ if(M.mind)
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/fireball/shadow_grapple)
+
+
+/obj/item/organ/internal/heart/demon/shadow/remove(mob/living/carbon/M, special = 0)
+ ..()
+ if(M.mind)
+ M.mind.RemoveSpell(/obj/effect/proc_holder/spell/fireball/shadow_grapple)
+
+
+/mob/living/simple_animal/demon/shadow/attempt_objectives()
+ if(!..())
+ return
+
+ to_chat(src, playstyle_string)
+ to_chat(src, span_notice("You are not currently in the same plane of existence as the station. Use the shadow crawl action near any dark spot."))
+ src << 'sound/misc/demon_dies.ogg'
+ if(vialspawned)
+ return
+
+ var/datum/objective/wrap/wrap_objective = new
+ var/datum/objective/survive/survive_objective = new
+ SSticker.mode.traitors |= mind
+ wrap_objective.owner = mind
+ survive_objective.owner = mind
+ mind.objectives += wrap_objective
+ mind.objectives += survive_objective
+ mind.announce_objectives()
+
+
+/datum/objective/wrap
+ name = "Wrap"
+ needs_target = FALSE
+ target_amount = 10
+
+
+/datum/objective/wrap/New(text, datum/team/team_to_join)
+ target_amount = rand(10,20)
+ explanation_text = "Ambush those who dare to challenge the shadows. Wrap at least [target_amount] mortals."
+ ..()
+
+
+/datum/objective/wrap/check_completion()
+ var/wrap_count = 0
+ for(var/datum/mind/player in get_owners())
+ if(!istype(player.current, /mob/living/simple_animal/demon/shadow) || QDELETED(player.current))
+ continue
+
+ var/mob/living/simple_animal/demon/shadow/demon = player.current
+ if(!demon.wrapped_victims || !length(demon.wrapped_victims))
+ continue
+
+ wrap_count += length(demon.wrapped_victims)
+
+ return wrap_count >= target_amount
+
diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/demons/slaughter_demon/slaughter_demon.dm
similarity index 56%
rename from code/game/gamemodes/miniantags/slaughter/slaughter.dm
rename to code/game/gamemodes/miniantags/demons/slaughter_demon/slaughter_demon.dm
index 87f2e5adcb8..40f57007b59 100644
--- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm
+++ b/code/game/gamemodes/miniantags/demons/slaughter_demon/slaughter_demon.dm
@@ -1,48 +1,3 @@
-//////////////////The Monster
-/mob/living/simple_animal/demon
- name = "a generic demon"
- desc = "you shouldnt be reading this, file a github report"
- speak_emote = list("gurgles")
- emote_hear = list("wails","screeches")
- tts_seed = "Mannoroth"
- response_help = "thinks better of touching"
- response_disarm = "flails at"
- response_harm = "punches"
- speed = 1
- a_intent = INTENT_HARM
- stop_automated_movement = TRUE
- status_flags = CANPUSH
- attack_sound = 'sound/misc/demon_attack1.ogg'
- death_sound = 'sound/misc/demon_dies.ogg'
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = INFINITY
- faction = list("demon")
- attacktext = "неистово терзает"
- maxHealth = 200
- health = 200
- environment_smash = ENVIRONMENT_SMASH_STRUCTURES
- obj_damage = 50
- melee_damage_lower = 30
- melee_damage_upper = 30
- see_in_dark = 8
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- del_on_death = TRUE
- var/datum/action/innate/demon/whisper/whisper_action
-
-
-/mob/living/simple_animal/demon/Initialize(mapload)
- . = ..()
- whisper_action = new()
- whisper_action.Grant(src)
-
-
-/mob/living/simple_animal/demon/Destroy()
- if(whisper_action)
- whisper_action = null
- return ..()
-
-
/mob/living/simple_animal/demon/slaughter
name = "slaughter demon"
real_name = "slaughter demon"
@@ -52,7 +7,7 @@
icon_state = "daemon"
icon_living = "daemon"
deathmessage = "screams in anger as it collapses into a puddle of viscera!"
- loot = list(/obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic, /obj/item/organ/internal/heart/demon)
+ loot = list(/obj/effect/decal/cleanable/blood/innards, /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic, /obj/item/organ/internal/heart/demon/slaughter)
var/feast_sound = 'sound/misc/demon_consume.ogg'
var/boost = 0
var/devoured = 0
@@ -62,9 +17,8 @@
var/cooldown = 0
var/gorecooldown = 0
- var/vialspawned = FALSE
- var/playstyle_string = "You are the Slaughter Demon, a terrible creature from another existence. You have a single desire: to kill. \
+ playstyle_string = "You are the Slaughter Demon, a terrible creature from another existence. You have a single desire: to kill. \
You may use the blood crawl icon when on blood pools to travel through them, appearing and dissapearing from the station at will. \
Pulling a dead or critical mob while you enter a pool will pull them in with you, allowing you to feast. \
You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. "
@@ -73,12 +27,11 @@
/mob/living/simple_animal/demon/slaughter/Initialize(mapload)
. = ..()
remove_from_all_data_huds()
- ADD_TRAIT(src, TRAIT_BLOODCRAWL_EAT, "bloodcrawl_eat")
+ ADD_TRAIT(src, TRAIT_BLOODCRAWL_EAT, TRAIT_BLOODCRAWL_EAT)
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
AddSpell(bloodspell)
if(istype(loc, /obj/effect/dummy/slaughter))
bloodspell.phased = TRUE
- addtimer(CALLBACK(src, PROC_REF(attempt_objectives)), 5 SECONDS)
/mob/living/simple_animal/demon/slaughter/Destroy()
@@ -96,22 +49,25 @@
speed = 0
-/mob/living/simple_animal/demon/slaughter/proc/attempt_objectives()
- if(mind)
- to_chat(src, src.playstyle_string)
- to_chat(src, "You are not currently in the same plane of existence as the station. Use the blood crawl action at a blood pool to manifest.")
- src << 'sound/misc/demon_dies.ogg'
- if(!(vialspawned))
- var/datum/objective/slaughter/objective = new
- var/datum/objective/demonFluff/fluffObjective = new
- SSticker.mode.traitors |= mind
- objective.owner = mind
- fluffObjective.owner = mind
- //Paradise Port:I added the objective for one spawned like this
- mind.objectives += objective
- mind.objectives += fluffObjective
- to_chat(src, "Objective #[1]: [objective.explanation_text]")
- to_chat(src, "Objective #[2]: [fluffObjective.explanation_text]")
+/mob/living/simple_animal/demon/slaughter/attempt_objectives()
+ if(!..())
+ return
+
+ to_chat(src, playstyle_string)
+ to_chat(src, span_notice("You are not currently in the same plane of existence as the station. Use the blood crawl action at a blood pool to manifest."))
+ src << 'sound/misc/demon_dies.ogg'
+ if(vialspawned)
+ return
+
+ var/datum/objective/slaughter/objective = new
+ var/datum/objective/demonFluff/fluffObjective = new
+ SSticker.mode.traitors |= mind
+ objective.owner = mind
+ fluffObjective.owner = mind
+ //Paradise Port:I added the objective for one spawned like this
+ mind.objectives += objective
+ mind.objectives += fluffObjective
+ mind.announce_objectives()
/obj/effect/decal/cleanable/blood/innards
@@ -121,14 +77,9 @@
desc = "A repulsive pile of guts and gore."
-
/mob/living/simple_animal/demon/slaughter/proc/release_consumed(mob/living/M)
M.forceMove(get_turf(src))
-/mob/living/simple_animal/demon/slaughter/phasein()
- . = ..()
- speed = 0
- boost = world.time + 60
// Cult slaughter demon
/mob/living/simple_animal/demon/slaughter/cult //Summoned as part of the cult objective "Bring the Slaughter"
@@ -146,6 +97,11 @@
to emerge from it. You are fast, powerful, and almost invincible. By dragging a dead or unconscious body into a blood pool with you, you will consume it after a time and fully regain \
your health. You may use the ability 'Sense Victims' in your Cultist tab to locate a random, living heretic."
+
+/mob/living/simple_animal/demon/slaughter/cult/attempt_objectives()
+ return
+
+
/obj/effect/proc_holder/spell/sense_victims
name = "Sense Victims"
desc = "Sense the location of heretics"
@@ -169,13 +125,13 @@
/obj/effect/proc_holder/spell/sense_victims/cast(list/targets, mob/user)
var/mob/living/victim = targets[1]
- to_chat(victim, "You feel an awful sense of being watched...")
+ to_chat(victim, span_userdanger("You feel an awful sense of being watched..."))
victim.Stun(6 SECONDS) //HUE
var/area/A = get_area(victim)
if(!A)
- to_chat(user, "You could not locate any sapient heretics for the Slaughter.")
+ to_chat(user, span_warning("You could not locate any sapient heretics for the Slaughter."))
return
- to_chat(user, "You sense a terrified soul at [A]. Show [A.p_them()] the error of [A.p_their()] ways.")
+ to_chat(user, span_danger("You sense a terrified soul at [A]. Show [A.p_them()] the error of [A.p_their()] ways."))
/mob/living/simple_animal/demon/slaughter/cult/Initialize(mapload)
@@ -183,13 +139,13 @@
spawn(0.5 SECONDS)
var/list/demon_candidates = SSghost_spawns.poll_candidates("Do you want to play as a slaughter demon?", ROLE_DEMON, TRUE, 10 SECONDS, source = /mob/living/simple_animal/demon/slaughter/cult)
if(!demon_candidates.len)
- visible_message("[src] disappears in a flash of red light!")
+ visible_message(span_warning("[src] disappears in a flash of red light!"))
qdel(src)
return
var/mob/M = pick(demon_candidates)
var/mob/living/simple_animal/demon/slaughter/cult/S = src
if(!M || !M.client)
- visible_message("[src] disappears in a flash of red light!")
+ visible_message(span_warning("[src] disappears in a flash of red light!"))
qdel(src)
return
var/client/C = M.client
@@ -207,75 +163,17 @@
S.mind.objectives += new_objective
to_chat(S, "Objective #[1]: [new_objective.explanation_text]")
-////////////////////The Powers
-
-//Paradise Port: I added this because..SPOOPY DEMON IN YOUR BRAIN
-
-
-/datum/action/innate/demon/whisper
- name = "Demonic Whisper"
- button_icon_state = "cult_comms"
- background_icon_state = "bg_demon"
-
-/datum/action/innate/demon/whisper/IsAvailable()
- return ..()
-
-/datum/action/innate/demon/whisper/proc/choose_targets(mob/user = usr)//yes i am copying from telepathy..hush...
- var/list/validtargets = list()
- for(var/mob/living/M in view(user.client.maxview(), get_turf(user)))
- if(M && M.mind && M.stat != DEAD)
- if(M == user)
- continue
- validtargets += M
-
- if(!validtargets.len)
- to_chat(usr, "There are no valid targets!")
- return
-
- var/mob/living/target = input("Choose the target to talk to.", "Targeting") as null|mob in validtargets
- return target
-
-/datum/action/innate/demon/whisper/Activate()
- var/mob/living/choice = choose_targets()
- if(!choice)
- return
-
- var/msg = stripped_input(usr, "What do you wish to tell [choice]?", null, "")
- if(!(msg))
- return
- add_say_logs(usr, msg, choice, "SLAUGHTER")
- to_chat(usr, "You whisper to [choice]: [msg]")
- to_chat(choice, "Suddenly a strange, demonic voice resonates in your head... [msg]")
- for(var/mob/dead/observer/G in GLOB.player_list)
- G.show_message("Demonic message from [usr] ([ghost_follow_link(usr, ghost=G)]) to [choice] ([ghost_follow_link(choice, ghost=G)]): [msg]")
-
-
-//////////The Loot
-
-//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
-/obj/item/organ/internal/heart/demon
- name = "demon heart"
- desc = "Still it beats furiously, emanating an aura of utter hate."
- icon = 'icons/obj/surgery.dmi'
- icon_state = "demon_heart"
- origin_tech = "combat=5;biotech=7"
-
-/obj/item/organ/internal/heart/demon/update_icon()
- return //always beating visually
-
-/obj/item/organ/internal/heart/demon/prepare_eat()
- return // Just so people don't accidentally waste it
-
-/obj/item/organ/internal/heart/demon/attack_self(mob/living/user)
- user.visible_message("[user] raises [src] to [user.p_their()] mouth and tears into it with [user.p_their()] teeth!", \
- "An unnatural hunger consumes you. You raise [src] to your mouth and devour it!")
- playsound(user, 'sound/misc/demon_consume.ogg', 50, 1)
+/**
+ * The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl.
+ */
+/obj/item/organ/internal/heart/demon/slaughter/attack_self(mob/living/user)
+ ..()
// Eating the heart for the first time. Gives basic bloodcrawling. This is the only time we need to insert the heart.
if(!HAS_TRAIT(user, TRAIT_BLOODCRAWL))
- user.visible_message("[user]'s eyes flare a deep crimson!", \
- "You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!")
+ user.visible_message(span_warning("[user]'s eyes flare a deep crimson!"), \
+ span_userdanger("You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!"))
ADD_TRAIT(user, TRAIT_BLOODCRAWL, "bloodcrawl")
user.drop_from_active_hand()
insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E.
@@ -283,31 +181,33 @@
// Eating a 2nd heart. Gives the ability to drag people into blood and eat them.
if(HAS_TRAIT(user, TRAIT_BLOODCRAWL))
- to_chat(user, "You feel differ- CONSUME THEM! ")
- ADD_TRAIT(user, TRAIT_BLOODCRAWL_EAT, "bloodcrawl_eat")
+ to_chat(user, "You feel differ-[span_warning(" CONSUME THEM! ")]")
+ ADD_TRAIT(user, TRAIT_BLOODCRAWL_EAT, TRAIT_BLOODCRAWL_EAT)
qdel(src) // Replacing their demon heart with another demon heart is pointless, just delete this one and return.
return TRUE
// Eating any more than 2 demon hearts does nothing.
- to_chat(user, "...and you don't feel any different.")
+ to_chat(user, span_warning("...and you don't feel any different."))
qdel(src)
-/obj/item/organ/internal/heart/demon/insert(mob/living/carbon/M, special = 0)
+
+/obj/item/organ/internal/heart/demon/slaughter/insert(mob/living/carbon/M, special = 0)
. = ..()
if(M.mind)
M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null))
-/obj/item/organ/internal/heart/demon/remove(mob/living/carbon/M, special = 0)
+
+/obj/item/organ/internal/heart/demon/slaughter/remove(mob/living/carbon/M, special = 0)
..()
if(M.mind)
- REMOVE_TRAIT(M, TRAIT_BLOODCRAWL, "bloodcrawl")
- REMOVE_TRAIT(M, TRAIT_BLOODCRAWL_EAT, "bloodcrawl_eat")
+ REMOVE_TRAIT(M, TRAIT_BLOODCRAWL, TRAIT_BLOODCRAWL)
+ REMOVE_TRAIT(M, TRAIT_BLOODCRAWL_EAT, TRAIT_BLOODCRAWL_EAT)
M.mind.RemoveSpell(/obj/effect/proc_holder/spell/bloodcrawl)
-/obj/item/organ/internal/heart/demon/Stop()
- return 0 // Always beating.
-
+/**
+ * LAUGHTER DEMON
+ */
/mob/living/simple_animal/demon/slaughter/laughter
// The laughter demon! It's everyone's best friend! It just wants to hug
// them so much, it wants to hug everyone at once!
@@ -333,11 +233,11 @@
loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"})
-/mob/living/simple_animal/demon/slaughter/release_consumed(mob/living/M)
+/mob/living/simple_animal/demon/slaughter/laughter/release_consumed(mob/living/M)
if(M.revive())
M.grab_ghost(force = TRUE)
playsound(get_turf(src), feast_sound, 50, 1, -1)
- to_chat(M, "You leave [src]'s warm embrace, and feel ready to take on the world.")
+ to_chat(M, span_clown("You leave [src]'s warm embrace, and feel ready to take on the world."))
..(M)
diff --git a/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm b/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm
index 3cde6533423..0abfe850e58 100644
--- a/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm
+++ b/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm
@@ -72,16 +72,7 @@
playsound(get_turf(parent_atom),'sound/effects/explosion1.ogg', 200, 1)
victim.ex_act(3)
victim.Weaken(6 SECONDS)
- if(ishuman(victim))
- dead_legs(victim)
- victim.adjustBruteLoss(40)
+ victim.adjustBruteLoss(20)
is_exploded = TRUE
UnregisterFromParent()
-/datum/component/guardian_mine/proc/dead_legs(mob/living/carbon/human/human)
- var/obj/item/organ/external/l = human.get_organ("l_leg")
- var/obj/item/organ/external/r = human.get_organ("r_leg")
- if(l && prob(50))
- l.droplimb(0, DROPLIMB_SHARP)
- if(r && prob(50))
- r.droplimb(0, DROPLIMB_SHARP)
diff --git a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
deleted file mode 100644
index 109b33bcd7d..00000000000
--- a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm
+++ /dev/null
@@ -1,172 +0,0 @@
-//Travel through pools of blood. Slaughter Demon powers for everyone!
-/mob/living/proc/phaseout(var/obj/effect/decal/cleanable/B)
-
- if(iscarbon(src))
- var/mob/living/carbon/C = src
- if(C.l_hand || C.r_hand)
- to_chat(C, "You may not hold items while blood crawling!")
- return 0
- var/obj/item/bloodcrawl/B1 = new(C)
- var/obj/item/bloodcrawl/B2 = new(C)
- B1.icon_state = "bloodhand_left"
- B2.icon_state = "bloodhand_right"
- C.put_in_hands(B1)
- C.put_in_hands(B2)
- C.regenerate_icons()
-
- var/mob/living/kidnapped = null
- var/turf/mobloc = get_turf(loc)
- notransform = TRUE
- spawn(0)
- visible_message("[src] sinks into [B].")
- playsound(get_turf(src), 'sound/misc/enter_blood.ogg', 100, 1, -1)
- var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(mobloc)
- var/atom/movable/overlay/animation = new /atom/movable/overlay(mobloc)
- animation.name = "odd blood"
- animation.density = 0
- animation.anchored = 1
- animation.icon = 'icons/mob/mob.dmi'
- animation.icon_state = "jaunt"
- animation.layer = 5
- animation.master = holder
- animation.dir = dir
-
- ExtinguishMob()
- if(pulling && HAS_TRAIT(src, TRAIT_BLOODCRAWL_EAT))
- if(isliving(pulling))
- var/mob/living/victim = pulling
- if(victim.stat == CONSCIOUS)
- visible_message("[victim] kicks free of [B] just before entering it!")
- stop_pulling()
- else
- victim.forceMove(holder)//holder
- victim.emote("scream")
- visible_message("[src] drags [victim] into [B]!")
- kidnapped = victim
- stop_pulling()
- flick("jaunt",animation)
-
- src.holder = holder
- forceMove(holder)
-
- if(kidnapped)
- to_chat(src, "You begin to feast on [kidnapped]. You can not move while you are doing this.")
- visible_message("Loud eating sounds come from the blood...")
- sleep(6)
- if(animation)
- qdel(animation)
- var/sound
- if(issimulatedturf(src))
- var/mob/living/simple_animal/demon/slaughter/SD = src
- sound = SD.feast_sound
- else
- sound = 'sound/misc/demon_consume.ogg'
-
- for(var/i in 1 to 3)
- playsound(get_turf(src), sound, 100, 1)
- sleep(30)
- if(kidnapped)
- to_chat(src, "You devour [kidnapped]. Your health is fully restored.")
- adjustBruteLoss(-1000)
- adjustFireLoss(-1000)
- adjustOxyLoss(-1000)
- adjustToxLoss(-1000)
-
- if(isslaughterdemon(src)) //rason, do not want humans to get this
- var/mob/living/simple_animal/demon/slaughter/demon = src
- demon.devoured++
- to_chat(kidnapped, "You feel teeth sink into your flesh, and the--")
- kidnapped.adjustBruteLoss(1000)
- kidnapped.forceMove(src)
- demon.consumed_mobs.Add(kidnapped)
- if(ishuman(kidnapped))
- var/mob/living/carbon/human/H = kidnapped
- if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under))
- var/obj/item/clothing/under/U = H.w_uniform
- U.sensor_mode = SENSOR_OFF
- else
- kidnapped.ghostize()
- qdel(kidnapped)
- else
- to_chat(src, "You happily devour... nothing? Your meal vanished at some point!")
- else
- sleep(6)
- if(animation)
- qdel(animation)
- notransform = 0
- return 1
-
-/obj/item/bloodcrawl
- name = "blood crawl"
- desc = "You are unable to hold anything while in this form."
- icon = 'icons/effects/blood.dmi'
- flags = NODROP|ABSTRACT
-
-/mob/living/proc/phasein(var/obj/effect/decal/cleanable/B)
-
- if(notransform)
- to_chat(src, "Finish eating first!")
- return 0
- B.visible_message("[B] starts to bubble...")
- if(!do_after(src, 20, target = B))
- return
- if(!B)
- return
- forceMove(B.loc)
- client.eye = src
-
- var/atom/movable/overlay/animation = new /atom/movable/overlay( B.loc )
- animation.name = "odd blood"
- animation.density = 0
- animation.anchored = 1
- animation.icon = 'icons/mob/mob.dmi'
- animation.icon_state = "jauntup" //Paradise Port:I reversed the jaunt animation so it looks like its rising up
- animation.layer = 5
- animation.master = B.loc
- animation.dir = dir
-
- if(prob(25) && isslaughterdemon(src))
- var/list/voice = list('sound/hallucinations/behind_you1.ogg','sound/hallucinations/im_here1.ogg','sound/hallucinations/turn_around1.ogg','sound/hallucinations/i_see_you1.ogg')
- playsound(get_turf(src), pick(voice),50, 1, -1)
- visible_message("\The [src] rises out of \the [B]!")
- playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
-
- flick("jauntup",animation)
- QDEL_NULL(holder)
-
- if(iscarbon(src))
- var/mob/living/carbon/C = src
- for(var/obj/item/bloodcrawl/BC in C)
- C.flags = null
- C.temporarily_remove_item_from_inventory(BC)
- qdel(BC)
-
- var/oldcolor = color
- color = B.color
- sleep(6)//wait for animation to finish
- if(animation)
- qdel(animation)
- spawn(30)
- color = oldcolor
- return 1
-
-/obj/effect/dummy/slaughter //Can't use the wizard one, blocked by jaunt/slow
- name = "odd blood"
- icon = 'icons/effects/effects.dmi'
- icon_state = "nothing"
- density = 0
- anchored = 1
- invisibility = 60
- resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
-
-/obj/effect/dummy/slaughter/relaymove(mob/user, direction)
- forceMove(get_step(src,direction))
-
-/obj/effect/dummy/slaughter/ex_act()
- return
-
-/obj/effect/dummy/slaughter/bullet_act()
- return
-
-/obj/effect/dummy/slaughter/singularity_act()
- return
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index abc84313786..41fbbd19447 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -283,6 +283,8 @@ GLOBAL_VAR(bomb_set)
attack_hand(user)
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
add_fingerprint(user)
if(!panel_open)
return ui_interact(user)
diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm
index 1862f5f1ab0..fc6ae4dbd87 100644
--- a/code/game/gamemodes/shadowling/shadowling_items.dm
+++ b/code/game/gamemodes/shadowling/shadowling_items.dm
@@ -25,7 +25,7 @@
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
heat_protection = null //You didn't expect a light-sensitive creature to have heat resistance, did you?
max_heat_protection_temperature = null
- armor = list(melee = 25, bullet = 0, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 100, fire = 100, acid = 100)
+ armor = list(melee = 25, bullet = 25, laser = 0, energy = 10, bomb = 25, bio = 100, rad = 100, fire = 100, acid = 100)
flags = ABSTRACT | NODROP | THICKMATERIAL | STOPSPRESSUREDMAGE
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 31d4dc467db..dedbd45392d 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -517,6 +517,14 @@
category = "Summons"
limit = 3
+/datum/spellbook_entry/item/shadowbottle
+ name = "Bottle of Shadows"
+ desc = "A bottle of pure darkness, the smell of which will attract extradimensional beings when broken. Be careful though, the kinds of creatures summoned from the shadows are indiscriminate in their killing, and you yourself may become a victim."
+ item_path = /obj/item/antag_spawner/slaughter_demon/shadow
+ category = "Summons"
+ limit = 3
+ cost = 1 //Unless you blackout the station this ain't going to do much, wizard doesn't get NV, still dies easily to a group of 2 and it doesn't eat bodies.
+
/datum/spellbook_entry/item/mayhembottle
name = "Mayhem in a Bottle"
desc = "A magically infused bottle of blood, the scent of which will drive anyone nearby into a murderous frenzy."
@@ -650,6 +658,11 @@
for(var/datum/spellbook_entry/item/hugbottle/HB in entries)
if(!isnull(HB.limit))
HB.limit++
+ else if(istype(O, /obj/item/antag_spawner/slaughter_demon/shadow))
+ uses += 1
+ for(var/datum/spellbook_entry/item/shadowbottle/SB in entries)
+ if(!isnull(SB.limit))
+ SB.limit++
else
uses += 2
for(var/datum/spellbook_entry/item/bloodbottle/BB in entries)
diff --git a/code/game/gamemodes/wizard/wizloadouts.dm b/code/game/gamemodes/wizard/wizloadouts.dm
index 9637cfbfe69..283f7ba03ce 100644
--- a/code/game/gamemodes/wizard/wizloadouts.dm
+++ b/code/game/gamemodes/wizard/wizloadouts.dm
@@ -80,10 +80,10 @@
You will likely need to scavenge additional ammo or weapons aboard the station.
\
Provides a .357 Revolver, 4 speedloaders of ammo, Ethereal Jaunt, Blink, Summon Item, No Clothes, and Bind Soul, with a unique outfit."
items_path = list(/obj/item/gun/projectile/revolver,
- /obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357,
- /obj/item/ammo_box/a357,
+ /obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357,
+ /obj/item/ammo_box/speedloader/a357,
/obj/item/clothing/under/syndicate
)
spells_path = list(/obj/effect/proc_holder/spell/ethereal_jaunt,
diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm
index c14472cc8d4..f4c5e63fcac 100644
--- a/code/game/machinery/Freezer.dm
+++ b/code/game/machinery/Freezer.dm
@@ -107,6 +107,9 @@
attack_hand(user)
/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
+
if(panel_open)
to_chat(user, span_notice("Сначала закройте панель техобслуживания."))
return
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 148f49c5e9a..3e6bad4728b 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -133,6 +133,9 @@
if(stat & (NOPOWER|BROKEN))
return
+ if(..())
+ return TRUE
+
if(panel_open)
to_chat(user, span_notice("Close the maintenance panel first."))
return
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index cb86e413a0a..354de75e424 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -139,6 +139,9 @@
ui_interact(user)
/obj/machinery/bodyscanner/attack_hand(user)
+ if(..())
+ return TRUE
+
if(stat & (NOPOWER|BROKEN))
return
@@ -222,9 +225,9 @@
occupantData["maxHealth"] = occupant.maxHealth
var/found_disease = FALSE
- for(var/thing in occupant.viruses)
+ for(var/thing in occupant.diseases)
var/datum/disease/D = thing
- if(D.visibility_flags & HIDDEN_SCANNER || D.visibility_flags & HIDDEN_PANDEMIC)
+ if(D.visibility_flags & HIDDEN_SCANNER)
continue
if(istype(D, /datum/disease/critical))
continue
@@ -388,9 +391,9 @@
dat += "[occupant.health > 50 ? "" : ""]\tHealth %: [occupant.health], ([t1])
"
var/found_disease = FALSE
- for(var/thing in occupant.viruses)
+ for(var/thing in occupant.diseases)
var/datum/disease/D = thing
- if(D.visibility_flags & HIDDEN_SCANNER || D.visibility_flags & HIDDEN_PANDEMIC)
+ if(D.visibility_flags & HIDDEN_SCANNER)
continue
found_disease = TRUE
break
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index f4fa9203463..22f655ddba0 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -281,6 +281,9 @@ update_flag
return ui_interact(user)
/obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
return ui_interact(user)
diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm
index 1223fbdbae6..e5987d8076f 100644
--- a/code/game/machinery/atmoalter/pump.dm
+++ b/code/game/machinery/atmoalter/pump.dm
@@ -115,6 +115,9 @@
return attack_hand(user)
/obj/machinery/portable_atmospherics/pump/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index 09c5a6c88c6..5d1b6f5a3ee 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -109,6 +109,9 @@
return attack_hand(user)
/obj/machinery/portable_atmospherics/scrubber/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
return
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 237621e32a6..ab1b604cd3f 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -550,7 +550,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
missing_organs.Cut()
occupant.SetLoseBreath(0) // Stop friggin' dying, gosh damn
occupant.setOxyLoss(0)
- for(var/datum/disease/critical/crit in occupant.viruses)
+ for(var/datum/disease/critical/crit in occupant.diseases)
crit.cure()
occupant.forceMove(T)
occupant.update_body()
diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm
index 29f17890f68..28e44640f1e 100644
--- a/code/game/machinery/computer/aifixer.dm
+++ b/code/game/machinery/computer/aifixer.dm
@@ -26,6 +26,8 @@
ui_interact(user)
/obj/machinery/computer/aifixer/attack_hand(var/mob/user as mob)
+ if(..())
+ return TRUE
ui_interact(user)
/obj/machinery/computer/aifixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 3d2b1b3e0c7..52e81a8e665 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -20,6 +20,9 @@
return ..()
/obj/machinery/computer/atmos_alert/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/machinery/computer/brigcells.dm b/code/game/machinery/computer/brigcells.dm
index 5e0bca438a7..774e89761b6 100644
--- a/code/game/machinery/computer/brigcells.dm
+++ b/code/game/machinery/computer/brigcells.dm
@@ -17,6 +17,10 @@
/obj/machinery/computer/brigcells/attack_hand(mob/user)
if(stat & (BROKEN|NOPOWER))
return
+
+ if(..())
+ return TRUE
+
if(!allowed(user))
to_chat(user, span_warning("Access denied."))
return
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 78468dc100b..ca1d0963340 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -716,6 +716,17 @@
SC.can_order_contraband = C.contraband_enabled
qdel(src)
+/obj/structure/computerframe/abductor/drop_computer_parts()
+ var/location = drop_location()
+ new /obj/item/stack/sheet/mineral/abductor(location, 4)
+ if(circuit)
+ circuit.forceMove(location)
+ circuit = null
+ if(state >= STATE_WIRES)
+ new /obj/item/stack/cable_coil(location, 5)
+ if(state == STATE_GLASS)
+ new /obj/item/stack/sheet/glass(location, 2)
+
#undef STATE_EMPTY
#undef STATE_CIRCUIT
#undef STATE_NOWIRES
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 96769c44a18..c54a11f2445 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -117,6 +117,9 @@
return attack_hand(user)
/obj/machinery/computer/cloning/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
+
user.set_machine(src)
add_fingerprint(user)
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index ff61e860bea..220a32ed5fb 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -24,6 +24,10 @@
/obj/machinery/computer/crew/attack_hand(mob/user)
if(stat & (BROKEN|NOPOWER))
return
+
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm
index f8ec9853b0f..f648b951825 100644
--- a/code/game/machinery/computer/law.dm
+++ b/code/game/machinery/computer/law.dm
@@ -54,6 +54,9 @@
to_chat(usr, "The upload computer is broken!")
return
+ if(..())
+ return TRUE
+
src.current = select_active_ai(user)
if(!src.current)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 87973705e49..25f073ec8a2 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -146,7 +146,7 @@
data["virus"] = list()
for(var/D in typesof(/datum/disease))
var/datum/disease/DS = new D(0)
- if(istype(DS, /datum/disease/advance))
+ if(istype(DS, /datum/disease/virus/advance))
continue
if(!DS.desc)
continue
@@ -218,7 +218,7 @@
var/list/payload = list(
name = D.name,
max_stages = D.max_stages,
- spread_text = D.spread_text,
+ spread_text = D.additional_info,
cure = D.cure_text || "None",
desc = D.desc,
severity = D.severity
diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm
index 647b15587d1..983e4b5e006 100644
--- a/code/game/machinery/computer/pod_tracking_console.dm
+++ b/code/game/machinery/computer/pod_tracking_console.dm
@@ -11,6 +11,9 @@
return attack_hand(user)
/obj/machinery/computer/podtracker/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm
index d71f4ea2c47..c8e7dae6b74 100644
--- a/code/game/machinery/computer/power.dm
+++ b/code/game/machinery/computer/power.dm
@@ -70,6 +70,10 @@
/obj/machinery/computer/monitor/attack_hand(mob/user)
if(stat & (BROKEN|NOPOWER))
return
+
+ if(..())
+ return TRUE
+
add_fingerprint(user)
// Update the powernet
powernet = find_powernet()
diff --git a/code/game/machinery/computer/salvage_ship.dm b/code/game/machinery/computer/salvage_ship.dm
index 28623d27c6e..dff1a929f40 100644
--- a/code/game/machinery/computer/salvage_ship.dm
+++ b/code/game/machinery/computer/salvage_ship.dm
@@ -42,6 +42,9 @@
return attack_hand(user)
/obj/machinery/computer/salvage_ship/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
+
if(!allowed(user))
to_chat(user, span_warning("Access Denied"))
playsound(src, pick('sound/machines/button.ogg', 'sound/machines/button_alternate.ogg', 'sound/machines/button_meloboom.ogg'), 20)
diff --git a/code/game/machinery/computer/sm_monitor.dm b/code/game/machinery/computer/sm_monitor.dm
index 1df2bfec2ab..966fe4b6b3f 100644
--- a/code/game/machinery/computer/sm_monitor.dm
+++ b/code/game/machinery/computer/sm_monitor.dm
@@ -22,6 +22,10 @@
/obj/machinery/computer/sm_monitor/attack_hand(mob/user)
if(stat & (BROKEN|NOPOWER))
return
+
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 886e3e02a9d..2037e71744c 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -29,6 +29,10 @@
/obj/machinery/computer/station_alert/attack_hand(mob/user)
if(stat & (BROKEN|NOPOWER))
return
+
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/machinery/computer/store.dm b/code/game/machinery/computer/store.dm
index edb667f2287..aac67d05f97 100644
--- a/code/game/machinery/computer/store.dm
+++ b/code/game/machinery/computer/store.dm
@@ -23,6 +23,9 @@
if(stat & (BROKEN|NOPOWER))
return
+ if(..())
+ return TRUE
+
var/balance=0
if(user.mind)
if(user.mind.initial_account)
diff --git a/code/game/machinery/computer/syndie_cargo.dm b/code/game/machinery/computer/syndie_cargo.dm
index 28990d4c3a9..1c5f967f282 100644
--- a/code/game/machinery/computer/syndie_cargo.dm
+++ b/code/game/machinery/computer/syndie_cargo.dm
@@ -506,6 +506,9 @@ GLOBAL_LIST_INIT(data_storages, list()) //list of all cargo console data storage
/obj/machinery/computer/syndie_supplycomp/attack_hand(var/mob/user as mob)
+ if(..())
+ return TRUE
+
if(!allowed(user) && !isobserver(user))
to_chat(user, span_warning("Access denied."))
playsound(src, pick('sound/machines/button.ogg', 'sound/machines/button_alternate.ogg', 'sound/machines/button_meloboom.ogg'), 20)
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 925a8ff89b5..f5c148e8dc0 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -196,6 +196,9 @@
ui_interact(user)
/obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
if(user == occupant)
return
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index a90e1a79f6b..70d13408ebf 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -5,9 +5,9 @@
icon_state = "doorctrl"
power_channel = ENVIRON
var/id = null
- var/safety_z_check = 1
- var/normaldoorcontrol = 0
- var/desiredstate = 0 // Zero is closed, 1 is open.
+ var/safety_z_check = TRUE
+ var/normaldoorcontrol = FALSE
+ var/desiredstate = FALSE // FALSE is closed, TRUE is open.
var/specialfunctions = 1
/*
Bitflag, 1= open
@@ -18,35 +18,27 @@
*/
- var/exposedwires = 0
- var/wires = 3
- /*
- Bitflag, 1=checkID
- 2=Network Access
- */
-
+ var/exposedwires = FALSE
+ var/wireless = FALSE
anchored = 1.0
use_power = IDLE_POWER_USE
idle_power_usage = 2
active_power_usage = 4
-/obj/machinery/door_control/alt
- icon_state = "altdoorctrl"
-
-/obj/machinery/door_control/attack_ai(mob/user as mob)
- if(wires & 2)
+/obj/machinery/door_control/attack_ai(mob/user)
+ if(!wireless)
return attack_hand(user)
else
to_chat(user, "Error, no route to host.")
-/obj/machinery/door_control/attackby(obj/item/W, mob/user as mob, params)
+/obj/machinery/door_control/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/detective_scanner))
return
return ..()
/obj/machinery/door_control/emag_act(user as mob)
if(!emagged)
- emagged = 1
+ emagged = TRUE
req_access = list()
playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
@@ -59,7 +51,7 @@
if(!istype(id, /list))
id = list(id)
-/obj/machinery/door_control/proc/do_main_action(mob/user as mob)
+/obj/machinery/door_control/proc/do_main_action(mob/user)
if(normaldoorcontrol)
for(var/obj/machinery/door/airlock/D in GLOB.airlocks)
if(safety_z_check && D.z != z || !(D.id_tag in id))
@@ -71,24 +63,24 @@
else
spawn(0)
D.close()
- if(desiredstate == 1)
+ if(desiredstate)
if(specialfunctions & IDSCAN)
- D.aiDisabledIdScanner = 1
+ D.aiDisabledIdScanner = TRUE
if(specialfunctions & BOLTS)
D.lock()
if(specialfunctions & SHOCK)
D.electrify(-1)
if(specialfunctions & SAFE)
- D.safe = 0
+ D.safe = FALSE
else
if(specialfunctions & IDSCAN)
- D.aiDisabledIdScanner = 0
+ D.aiDisabledIdScanner = FALSE
if(specialfunctions & BOLTS)
D.unlock()
if(specialfunctions & SHOCK)
D.electrify(0)
if(specialfunctions & SAFE)
- D.safe = 1
+ D.safe = TRUE
else
for(var/obj/machinery/door/poddoor/M in GLOB.airlocks)
@@ -103,12 +95,12 @@
desiredstate = !desiredstate
-/obj/machinery/door_control/attack_hand(mob/user as mob)
+/obj/machinery/door_control/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (NOPOWER|BROKEN))
return
- if(!allowed(user) && (wires & 1) && !user.can_advanced_admin_interact())
+ if(!allowed(user) && !user.can_advanced_admin_interact())
to_chat(user, span_warning("Access Denied."))
flick("[initial(icon_state)]-denied",src)
playsound(src, pick('sound/machines/button.ogg', 'sound/machines/button_alternate.ogg', 'sound/machines/button_meloboom.ogg'), 20)
@@ -130,3 +122,11 @@
icon_state = "[initial(icon_state)]-p"
else
icon_state = initial(icon_state)
+
+/obj/machinery/door_control/secure //Use icon_state = "altdoorctrl" if you just want cool icon for your button on map. This button is created for Admin-zones.
+ icon_state = "altdoorctrl"
+ wireless = TRUE
+
+/obj/machinery/door_control/secure/emag_act(user)
+ to_chat(user, span_notice("The electronic systems in this device are far too advanced for your primitive hacking peripherals."))
+ return
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 2e78d541c1d..2a4e3aebee2 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1305,6 +1305,9 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/emag_act(mob/user)
+ if(!hackable)
+ to_chat(user, span_notice("The electronic systems in this door are far too advanced for your primitive hacking peripherals."))
+ return
if(!operating && density && arePowerSystemsOn() && !emagged)
add_attack_logs(user, src, "emagged ([locked ? "bolted" : "not bolted"])")
operating = TRUE
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 52407d24dd4..70c0f45a55c 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -310,16 +310,13 @@
assemblytype = /obj/structure/door_assembly/door_assembly_centcom
normal_integrity = 1000
security_level = 6
+ hackable = FALSE
/obj/machinery/door/airlock/centcom/attack_hand(mob/user)
. = ..()
if(user.a_intent == INTENT_HARM && ishuman(user) && user.dna.species.obj_damage)
return
-/obj/machinery/door/airlock/centcom/emag_act(mob/user)
- to_chat(user, span_notice("The electronic systems in this door are far too advanced for your primitive hacking peripherals."))
- return
-
/////////////////////////////////
/*
Vault Airlocks
@@ -364,10 +361,7 @@
explosion_block = 2
normal_integrity = 1000
security_level = 6
-
-/obj/machinery/door/airlock/hatch/syndicate/command/emag_act(mob/user)
- to_chat(user, span_notice("The electronic systems in this door are far too advanced for your primitive hacking peripherals."))
- return
+ hackable = FALSE
/obj/machinery/door/airlock/hatch/syndicate/vault
name = "syndicate vault hatch"
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 11a55f62b16..ddfa68c2964 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -39,6 +39,8 @@
//Whether nonstandard door sounds (cmag laughter) are off cooldown.
var/sound_ready = TRUE
var/sound_cooldown = 1 SECONDS
+ //Emag vulnerability.
+ var/hackable = TRUE
/obj/machinery/door/New()
..()
@@ -316,13 +318,16 @@
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
/obj/machinery/door/emag_act(mob/user)
+ if(!hackable)
+ to_chat(user, span_notice("The electronic systems in this door are far too advanced for your primitive hacking peripherals."))
+ return
if(density)
add_attack_logs(user, src, "emagged ([locked ? "bolted" : "not bolted"])")
flick("door_spark", src)
sleep(6)
open()
- emagged = 1
- return 1
+ emagged = TRUE
+ return TRUE
/obj/machinery/door/cmag_act(mob/user)
if(!density)
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index cd97b901d25..d3643b8c8a2 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -24,10 +24,7 @@
name = "reinforced blast door"
desc = "A heavy duty blast door that opens mechanically. Looks even tougher than usual."
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
-
-/obj/machinery/door/poddoor/impassable/emag_act(mob/user)
- to_chat(user, span_notice("The electronic systems in this door are far too advanced for your primitive hacking peripherals."))
- return
+ hackable = FALSE
/obj/machinery/door/poddoor/Bumped(atom/movable/moving_atom)
SEND_SIGNAL(src, COMSIG_ATOM_BUMPED, moving_atom)
diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm
index 2777c93cc1b..d617ed9f0c4 100644
--- a/code/game/machinery/doors/shutters.dm
+++ b/code/game/machinery/doors/shutters.dm
@@ -10,10 +10,13 @@
/obj/machinery/door/poddoor/shutters/invincible
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ hackable = FALSE
/obj/machinery/door/poddoor/shutters/preopen
icon_state = "open"
density = FALSE
opacity = 0
+
/obj/machinery/door/poddoor/shutters/preopen/invincible
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
+ hackable = FALSE
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 8910f71684c..a9fcf27dd2c 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -282,11 +282,9 @@ Class Procs:
if(ishuman(user))
var/mob/living/carbon/human/H = user
- if(H.getBrainLoss() >= 60)
+ if(!H.check_brain_for_complex_interactions())
visible_message(span_warning("[H] stares cluelessly at [src] and drools."))
- return TRUE
- else if(prob(H.getBrainLoss()))
- to_chat(user, span_warning("You momentarily forget how to use [src]."))
+ to_chat(H, span_warning("You momentarily forget how to use [src]."))
return TRUE
if(panel_open)
diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm
index 75a2d867602..24a33fc43b0 100644
--- a/code/game/machinery/syndicatebomb.dm
+++ b/code/game/machinery/syndicatebomb.dm
@@ -204,6 +204,9 @@
interact(user)
/obj/machinery/syndicatebomb/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
interact(user)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 58031f9fc9b..a9402b0cba8 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -71,6 +71,8 @@
attack_hand(user)
/obj/machinery/computer/teleporter/attack_hand(mob/user)
+ if(..())
+ return TRUE
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index 6b615922bff..929c4bc02bf 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -141,6 +141,8 @@
ui_interact(user)
/obj/machinery/turretid/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
ui_interact(user)
/obj/machinery/turretid/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index e7c263ddb7c..af4ec6e9e80 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -454,6 +454,9 @@
if(stat & (BROKEN|NOPOWER))
return
+ if(..())
+ return TRUE
+
if(src.seconds_electrified != 0)
if(src.shock(user, 100))
add_fingerprint(user)
@@ -2268,13 +2271,13 @@
/obj/item/flashlight/seclite = 4,
/obj/item/restraints/legcuffs/bola/energy = 8,
- /obj/item/storage/box/slug = 4,
- /obj/item/storage/box/buck = 4,
- /obj/item/storage/box/rubbershot = 4,
+ /obj/item/ammo_box/shotgun = 4,
+ /obj/item/ammo_box/shotgun/buck = 4,
+ /obj/item/ammo_box/shotgun/rubbershot = 4,
/obj/item/ammo_casing/shotgun/stunslug = 35,
/obj/item/ammo_casing/shotgun/ion = 14,
/obj/item/ammo_casing/shotgun/laserslug = 35,
- /obj/item/ammo_box/shotgun/universal = 8,
+ /obj/item/ammo_box/speedloader/shotgun/universal = 8,
/obj/item/ammo_box/magazine/lr30mag = 12,
/obj/item/ammo_box/magazine/enforcer = 8,
@@ -2312,10 +2315,10 @@
/obj/item/gun/projectile/automatic/wt550 = 3,
/obj/item/ammo_box/magazine/wt550m9 = 6,
/obj/item/gun/projectile/shotgun/riot = 6,
- /obj/item/storage/box/rubbershot = 6,
- /obj/item/storage/box/beanbag = 4,
- /obj/item/storage/box/tranquilizer = 4,
- /obj/item/ammo_box/shotgun/universal = 4,
+ /obj/item/ammo_box/shotgun/rubbershot = 6,
+ /obj/item/ammo_box/shotgun/beanbag = 4,
+ /obj/item/ammo_box/shotgun/tranquilizer = 4,
+ /obj/item/ammo_box/speedloader/shotgun/universal = 4,
/obj/item/gun/projectile/automatic/sfg = 3,
/obj/item/ammo_box/magazine/sfg9mm = 6
)
@@ -2341,10 +2344,10 @@
/obj/item/gun/energy/immolator/multi = 2,
/obj/item/gun/energy/gun/nuclear = 3,
/obj/item/gun/projectile/shotgun/automatic/combat = 3,
- /obj/item/storage/box/slug = 4,
- /obj/item/storage/box/buck = 4,
- /obj/item/storage/box/dragonsbreath = 2,
- /obj/item/ammo_box/shotgun/universal = 4,
+ /obj/item/ammo_box/shotgun = 4,
+ /obj/item/ammo_box/shotgun/buck = 4,
+ /obj/item/ammo_box/shotgun/dragonsbreath = 2,
+ /obj/item/ammo_box/speedloader/shotgun/universal = 4,
/obj/item/storage/lockbox/t4 = 3,
/obj/item/grenade/smokebomb = 3,
/obj/item/grenade/frag = 4
@@ -2369,8 +2372,8 @@
/obj/item/gun/projectile/automatic/pistol/enforcer = 6,
/obj/item/storage/box/barrier = 2,
/obj/item/gun/projectile/shotgun/riot = 1,
- /obj/item/storage/box/rubbershot = 3,
- /obj/item/ammo_box/shotgun/universal = 4,
+ /obj/item/ammo_box/shotgun/rubbershot = 3,
+ /obj/item/ammo_box/speedloader/shotgun/universal = 4,
/obj/item/gun/energy/dominator/sibyl = 2
)
contraband = list(/obj/item/storage/fancy/donut_box = 2)
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 7a78c035c6d..ee3a3aa15ad 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -14,6 +14,9 @@
return attack_hand(user)
/obj/machinery/computer/mecha/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 6107b7e4c9c..60554071d70 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -374,8 +374,8 @@
/obj/item/melee/classic_baton/telescopic = 100,
/obj/item/gun/projectile/shotgun/automatic/combat = 150,
/obj/item/gun/projectile/shotgun/automatic/dual_tube = 100,
- /obj/item/storage/box/buck = 150,
- /obj/item/ammo_box/shotgun/buck = 100,
+ /obj/item/ammo_box/shotgun/buck = 150,
+ /obj/item/ammo_box/speedloader/shotgun/buck = 100,
/obj/item/grenade/clusterbuster = 100,
/obj/item/grenade/clusterbuster/teargas = 50,
/obj/item/grenade/clusterbuster/n2o = 50)
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index 11b8c9d9e75..1d10d0f7d51 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -243,6 +243,7 @@
A.power_light = FALSE
A.power_environ = FALSE
A.always_unpowered = FALSE
+ A.valid_territory = FALSE
A.set_dynamic_lighting()
for(var/i in 1 to turfs.len)
@@ -257,6 +258,7 @@
A.power_light = FALSE
A.power_environ = FALSE
A.always_unpowered = FALSE
+ A.valid_territory = FALSE
A.set_dynamic_lighting()
for(var/i in 1 to turfs.len)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 009da06d235..ab8ab9a6ddc 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -477,12 +477,12 @@ REAGENT SCANNER
. += " [R.name] Стадия: [R.addiction_stage]/5"
else
. += "Зависимости от реагентов не обнаружены."
- for(var/thing in H.viruses)
+ for(var/thing in H.diseases)
var/datum/disease/D = thing
if(!(D.visibility_flags & HIDDEN_SCANNER))
. += "Внимание: обнаружен [D.form]"
. += " Название: [D.name]"
- . += " Тип: [D.spread_text]"
+ . += " Тип: [D.additional_info]"
. += " Стадия: [D.stage]/[D.max_stages]"
. += " Лечение: [D.cure_text]"
if(H.undergoing_cardiac_arrest())
@@ -903,9 +903,9 @@ REAGENT SCANNER
dat += "[target.health > 50 ? "" : ""]\tHealth %: [target.health], ([t1])
"
var/found_disease = FALSE
- for(var/thing in target.viruses)
+ for(var/thing in target.diseases)
var/datum/disease/D = thing
- if(D.visibility_flags) //If any visibility flags are on.
+ if(D.visibility_flags & HIDDEN_SCANNER)
continue
found_disease = TRUE
break
diff --git a/code/game/objects/items/devices/window_painter.dm b/code/game/objects/items/devices/window_painter.dm
index ae7d379cfd4..a44f0d13a09 100644
--- a/code/game/objects/items/devices/window_painter.dm
+++ b/code/game/objects/items/devices/window_painter.dm
@@ -1,6 +1,8 @@
/obj/item/pipe_painter/window_painter
name = "window painter"
icon_state = "window_painter"
+ var/colour = "#ffffff"
+
var/list/paintable_windows = list(
/obj/structure/window/reinforced,
@@ -9,14 +11,42 @@
/obj/structure/window/full/basic,
/obj/machinery/door/window)
+/obj/item/pipe_painter/window_painter/New()
+ . = ..()
+ update_icon()
+ mode = "paint"
+
+
+/obj/item/pipe_painter/window_painter/attack_self(mob/user)
+ var/choice = input(user,"Painter options") in list("Pipette","Choose Color","Color Presets")
+ switch(choice)
+ if("Pipette")
+ mode = "pipette"
+ if("Choose Color")
+ mode = "paint"
+ colour = input(user,"Choose Color") as color
+ update_icon()
+ if("Color Presets")
+ mode = "paint"
+ colour = input("Which color do you want to use?", name, colour) in GLOB.pipe_colors
+ update_icon()
+
/obj/item/pipe_painter/window_painter/afterattack(atom/A, mob/user as mob)
if(!is_type_in_list(A, paintable_windows) || !in_range(user, A))
return
var/obj/structure/window/W = A
- if(W.color == GLOB.pipe_colors[mode])
- to_chat(user, "This window is aready painted [mode]!")
- return
+ if(mode == "paint")
+ W.color = colour
+ playsound(loc, usesound, 30, TRUE)
+ else
+ colour = W.color
+ mode = "paint"
+ to_chat(user, span_notice("You copy color of this window."))
+ update_icon()
- playsound(loc, usesound, 30, TRUE)
- W.color = GLOB.pipe_colors[mode]
+/obj/item/pipe_painter/window_painter/update_icon()
+ overlays.Cut()
+ var/image/colour_image = image('icons/obj/device.dmi', "window_painter_colour")
+ colour_image.color = colour
+ overlays += colour_image
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index 0ad9af40b5a..b270d14cd0b 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -26,8 +26,9 @@
return 0
if(istype(M,/mob/living/silicon/robot)) //Repairing cyborgs
var/mob/living/silicon/robot/R = M
- if(R.getBruteLoss() || R.getFireLoss() )
+ if(R.getBruteLoss() || R.getFireLoss() || R.diseases?.len)
R.heal_overall_damage(15, 15)
+ R.CureAllDiseases(FALSE)
use(1)
user.visible_message("\The [user] applied some [src] at [R]'s damaged areas.",\
"You apply some [src] at [R]'s damaged areas.")
@@ -39,6 +40,11 @@
var/obj/item/organ/external/S = H.get_organ(user.zone_selected)
if(S && S.is_robotic())
+ if(ismachineperson(M) && M.diseases?.len)
+ use(1)
+ M.CureAllDiseases()
+ user.visible_message("\The [user] applies some nanite paste at \the [M] to fix problems.")
+ return
if(S.get_damage())
use(1)
var/remheal = 15
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 6015bd5f004..fc3a8b1d857 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -105,7 +105,7 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \
null, \
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20), \
new/datum/stack_recipe("alien chair", /obj/structure/chair/comfy/abductor, 2, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("alien computer frame", /obj/structure/computerframe/abductor, 4, one_per_turf = 1, on_floor = 1)
+ new/datum/stack_recipe("alien computer frame", /obj/structure/computerframe/abductor, 4, time = 25, one_per_turf = 1, on_floor = 1)
))
GLOBAL_LIST_INIT(adamantine_recipes, list(
@@ -424,6 +424,7 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list(
throw_speed = 1
origin_tech = "materials=6;abductor=1"
sheettype = "abductor"
+ materials = list(MAT_METAL = 4000, MAT_PLASMA = 4000)
/obj/item/stack/sheet/mineral/abductor/fifty
amount = 50
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index e0ce61d3f20..95e85ba6386 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -195,6 +195,9 @@
if(istype(A, /area/space))
to_chat(usr, "The beacon must be inside the station itself to properly work.")
return FALSE
+ if(!A.valid_territory)
+ to_chat(usr, "This area is too unstable for the beacon!")
+ return FALSE
if(A.get_beacon())
to_chat(usr, "This area already has beacon!")
return FALSE
diff --git a/code/game/objects/items/weapons/storage/artistic_toolbox.dm b/code/game/objects/items/weapons/storage/artistic_toolbox.dm
index c41a3839009..65883392d66 100644
--- a/code/game/objects/items/weapons/storage/artistic_toolbox.dm
+++ b/code/game/objects/items/weapons/storage/artistic_toolbox.dm
@@ -22,7 +22,7 @@
var/activated = FALSE
/obj/item/storage/toolbox/green/memetic/ui_action_click(mob/user)
- if(user.HasDisease(new /datum/disease/memetic_madness))
+ if(user.HasDisease(/datum/disease/memetic_madness))
var/obj/item/storage/toolbox/green/memetic/M = user.get_active_hand()
if(istype(M))
to_chat(user, "His Grace [flags & NODROP ? "releases from" : "binds to"] your hand!")
@@ -41,10 +41,11 @@
..()
/obj/item/storage/toolbox/green/memetic/proc/link_user(mob/living/carbon/user)
- if(ishuman(user) && !user.HasDisease(new /datum/disease/memetic_madness))
+ if(ishuman(user) && !user.HasDisease(/datum/disease/memetic_madness))
activated = TRUE
- user.ForceContractDisease(new /datum/disease/memetic_madness)
- for(var/datum/disease/memetic_madness/DD in user.viruses)
+ var/datum/disease/memetic_madness/D = new
+ D.Contract(user)
+ for(var/datum/disease/memetic_madness/DD in user.diseases)
DD.progenitor = src
servantlinks.Add(DD)
break
@@ -74,7 +75,7 @@
if(istype(I, /obj/item/grab))
var/obj/item/grab/G = I
var/mob/living/victim = G.affecting
- if(!user.HasDisease(new /datum/disease/memetic_madness))
+ if(!user.HasDisease(/datum/disease/memetic_madness))
to_chat(user, "You can't seem to find the latch to open this.")
return
if(!victim)
@@ -147,13 +148,10 @@
name = "Memetic Kill Agent"
max_stages = 4
stage_prob = 8
- spread_text = "Non-Contagious"
- spread_flags = SPECIAL
cure_text = "Unknown"
- viable_mobtypes = list(/mob/living/carbon/human)
severity = BIOHAZARD
- disease_flags = CAN_CARRY
- spread_flags = NON_CONTAGIOUS
+ curable = FALSE
+ can_immunity = FALSE
virus_heal_resistant = TRUE
var/obj/item/storage/toolbox/green/memetic/progenitor = null
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 1d09b78c61b..0d912a97cbe 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -10,6 +10,7 @@
* Plant Bag
* Sheet Snatcher
* Book Bag
+ * Construction bag
* Tray
*
* -Sayu
@@ -387,6 +388,26 @@
can_hold = list(/obj/item/book, /obj/item/storage/bible, /obj/item/tome, /obj/item/spellbook)
resistance_flags = FLAMMABLE
+// ------------------------------------------
+// Construction bag
+// ------------------------------------------
+
+/obj/item/storage/bag/construction
+ name = "construction bag"
+ desc = "A bag for construction stuff."
+ icon = 'icons/obj/tools.dmi'
+ icon_state = "construction_bag"
+ storage_slots = 50
+ max_combined_w_class = 100
+ max_w_class = WEIGHT_CLASS_NORMAL
+ w_class = WEIGHT_CLASS_TINY
+ can_hold = list(
+ /obj/item/assembly, /obj/item/circuitboard,
+ /obj/item/airlock_electronics, /obj/item/firelock_electronics,
+ /obj/item/firealarm_electronics, /obj/item/airalarm_electronics, /obj/item/apc_electronics,
+ /obj/item/stock_parts/cell, /obj/item/stock_parts, /obj/item/camera_assembly)
+ resistance_flags = FLAMMABLE
+
/*
* Trays - Agouri
*/
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 3664721afe9..f6a864e8e0b 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -212,70 +212,6 @@
new /obj/item/dnainjector/m2h(src)
new /obj/item/dnainjector/m2h(src)
-/obj/item/storage/box/slug
- name = "Ammunition Box (Slug)"
- desc = "A small box capable of holding seven shotgun shells."
- icon_state = "slugbox"
-
-/obj/item/storage/box/slug/populate_contents()
- for(var/i in 1 to 7)
- new /obj/item/ammo_casing/shotgun(src)
-
-
-/obj/item/storage/box/buck
- name = "Ammunition Box (Buckshot)"
- desc = "A small box capable of holding seven shotgun shells."
- icon_state = "buckshotbox"
-
-/obj/item/storage/box/buck/populate_contents()
- for(var/i in 1 to 7)
- new /obj/item/ammo_casing/shotgun/buckshot(src)
-
-/obj/item/storage/box/dragonsbreath
- name = "Ammunition Box (Dragonsbreath)"
- desc = "A small box capable of holding seven shotgun shells."
- icon_state = "dragonsbreathbox"
-
-/obj/item/storage/box/dragonsbreath/populate_contents()
- for(var/i in 1 to 7)
- new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src)
-
-/obj/item/storage/box/stun
- name = "Ammunition Box (Stun shells)"
- desc = "A small box capable of holding seven shotgun shells."
- icon_state = "stunbox"
-
-/obj/item/storage/box/stun/populate_contents()
- for(var/i in 1 to 7)
- new /obj/item/ammo_casing/shotgun/stunslug(src)
-
-/obj/item/storage/box/beanbag
- name = "Ammunition Box (Beanbag shells)"
- desc = "A small box capable of holding seven shotgun shells."
- icon_state = "beanbagbox"
-
-/obj/item/storage/box/beanbag/populate_contents()
- for(var/i in 1 to 7)
- new /obj/item/ammo_casing/shotgun/beanbag(src)
-
-/obj/item/storage/box/rubbershot
- name = "Ammunition Box (Rubbershot shells)"
- desc = "A small box capable of holding seven shotgun shells."
- icon_state = "rubbershotbox"
-
-/obj/item/storage/box/rubbershot/populate_contents()
- for(var/i in 1 to 7)
- new /obj/item/ammo_casing/shotgun/rubbershot(src)
-
-/obj/item/storage/box/tranquilizer
- name = "Ammunition Box (Tranquilizer darts)"
- desc = "A small box capable of holding seven shotgun shells."
- icon_state = "tranqbox"
-
-/obj/item/storage/box/tranquilizer/populate_contents()
- for(var/i in 1 to 7)
- new /obj/item/ammo_casing/shotgun/tranquilizer(src)
-
/obj/item/storage/box/flashbangs
name = "box of flashbangs (WARNING)"
desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use."
@@ -1078,20 +1014,6 @@
new /obj/item/clothing/gloves/combat(src)
new /obj/item/storage/backpack/security(src)
-/obj/item/storage/box/a357
- name = "ammo box (.357)"
- desc = "A box of ammo?"
- icon_state = "357OLD"
- icon = 'icons/obj/weapons/ammo.dmi'
- display_contents_with_number = TRUE
- can_hold = list(/obj/item/ammo_casing/a357)
- storage_slots = 20
- max_combined_w_class = 20
-
-/obj/item/storage/box/a357/populate_contents()
- for(var/I in 1 to 20)
- new /obj/item/ammo_casing/a357(src)
-
#undef NODESIGN
#undef NANOTRASEN
#undef SYNDI
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index e525d4845c1..bc6f310547d 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -54,8 +54,8 @@
var/static/list/payday = list( // 35TC + four 0TC
/obj/item/gun/projectile/revolver, // 13TC
- /obj/item/ammo_box/a357, // 3TC
- /obj/item/ammo_box/a357, // 3TC
+ /obj/item/ammo_box/speedloader/a357, // 3TC
+ /obj/item/ammo_box/speedloader/a357, // 3TC
/obj/item/card/emag, // 6TC
/obj/item/jammer, // 5TC
/obj/item/card/id/syndicate, // 2TC
@@ -182,7 +182,7 @@
/obj/item/storage/box/syndie_kit/counterfeiter_bundle/populate_contents()
new /obj/item/stamp/chameleon(src)
new /obj/item/pen/fakesign(src)
-
+
/obj/item/storage/box/syndie_kit/chameleon_hardsuit/populate_contents()
new /obj/item/clothing/suit/space/hardsuit/contractor/agent(src)
new /obj/item/clothing/mask/gas/syndicate(src)
@@ -193,7 +193,7 @@
/obj/item/storage/box/syndie_kit/conversion/populate_contents()
new /obj/item/conversion_kit(src)
- new /obj/item/ammo_box/a357(src)
+ new /obj/item/ammo_box/speedloader/a357(src)
/obj/item/storage/box/syndie_kit/emp
name = "boxed EMP kit"
@@ -469,8 +469,8 @@ To apply, hold the injector a short distance away from the outer thigh before ap
name = "additional .357 ammunition kit"
/obj/item/storage/box/syndie_kit/revolver_ammo/populate_contents()
- new /obj/item/ammo_box/a357(src)
- new /obj/item/ammo_box/a357(src)
+ new /obj/item/ammo_box/speedloader/a357(src)
+ new /obj/item/ammo_box/speedloader/a357(src)
/obj/item/storage/box/syndie_kit/dangertray
name = "Danger Tray pack"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 6ac8842b74b..ca6ac177661 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -29,6 +29,7 @@
new /obj/item/holosign_creator/atmos(src)
new /obj/item/megaphone(src) //added here deleted on maps
new /obj/item/storage/garmentbag/engineering_chief(src)
+ new /obj/item/storage/bag/construction(src)
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies locker"
@@ -86,6 +87,8 @@
new /obj/item/cartridge/engineering(src)
new /obj/item/clothing/head/beret/eng(src)
new /obj/item/clothing/head/hardhat/orange(src)
+ new /obj/item/storage/bag/construction(src)
+ new /obj/item/storage/bag/construction(src)
/obj/structure/closet/secure_closet/atmos_personal
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index c8a28f8443d..009c37a0bf4 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -256,8 +256,8 @@
new /obj/item/clipboard(src)
new /obj/item/radio/headset/headset_sec/alt(src)
new /obj/item/detective_scanner(src)
- new /obj/item/ammo_box/c38(src)
- new /obj/item/ammo_box/c38(src)
+ new /obj/item/ammo_box/speedloader/c38(src)
+ new /obj/item/ammo_box/speedloader/c38(src)
new /obj/item/gun/projectile/revolver/detective(src)
new /obj/item/clothing/accessory/holster/armpit(src)
new /obj/item/clothing/glasses/sunglasses/yeah(src)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index e54e1bb84c7..2a9b76e5ef0 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -878,9 +878,10 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
set category = "Event"
set name = "Give Disease"
set desc = "Gives a Disease to a mob."
- var/datum/disease/D = input("Choose the disease to give to that guy", "ACHOO") as null|anything in GLOB.diseases
- if(!D) return
- T.ForceContractDisease(new D)
+ var/choosen_disease = input("Choose the disease to give to that guy", "ACHOO") as null|anything in GLOB.diseases
+ if(!choosen_disease) return
+ var/datum/disease/D = new choosen_disease()
+ D.Contract(T)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Disease") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_and_message_admins("gave [key_name_log(T)] the disease [D].")
diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm
index 61fefcf1c0e..17a2f28fad9 100644
--- a/code/modules/antagonists/_common/antag_spawner.dm
+++ b/code/modules/antagonists/_common/antag_spawner.dm
@@ -195,27 +195,29 @@
used = FALSE
to_chat(user, "The demons do not respond to your summon. Perhaps you should try again later.")
+
/obj/item/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "", mob/user)
var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
- var/mob/living/simple_animal/demon/slaughter/S = new demon_type(holder)
- S.vialspawned = TRUE
- S.holder = holder
- S.key = C.key
- S.mind.assigned_role = S.name
- S.mind.special_role = S.name
- SSticker.mode.traitors += S.mind
+ var/mob/living/simple_animal/demon/demon = new demon_type(holder)
+ demon.vialspawned = TRUE
+ demon.holder = holder
+ demon.key = C.key
+ demon.mind.assigned_role = demon.name
+ demon.mind.special_role = demon.name
+ SSticker.mode.traitors += demon.mind
var/datum/objective/assassinate/KillDaWiz = new /datum/objective/assassinate
- KillDaWiz.owner = S.mind
+ KillDaWiz.owner = demon.mind
KillDaWiz.target = user.mind
KillDaWiz.explanation_text = "[objective_verb] [user.real_name], the one who was foolish enough to summon you."
- S.mind.objectives += KillDaWiz
+ demon.mind.objectives += KillDaWiz
var/datum/objective/KillDaCrew = new /datum/objective
- KillDaCrew.owner = S.mind
+ KillDaCrew.owner = demon.mind
KillDaCrew.explanation_text = "[objective_verb] everyone else while you're at it."
KillDaCrew.completed = TRUE
- S.mind.objectives += KillDaCrew
- to_chat(S, "Objective #[1]: [KillDaWiz.explanation_text]")
- to_chat(S, "Objective #[2]: [KillDaCrew.explanation_text]")
+ demon.mind.objectives += KillDaCrew
+ to_chat(demon, "Objective #[1]: [KillDaWiz.explanation_text]")
+ to_chat(demon, "Objective #[2]: [KillDaCrew.explanation_text]")
+
/obj/item/antag_spawner/slaughter_demon/laughter
name = "vial of tickles"
@@ -229,6 +231,20 @@
objective_verb = "Hug and tickle"
demon_type = /mob/living/simple_animal/demon/slaughter/laughter
+
+/obj/item/antag_spawner/slaughter_demon/shadow
+ name = "vial of shadow"
+ desc = "A magically infused bottle of pure darkness, distilled from \
+ ground up shadowling bones. Used in dark rituals to attract \
+ dark creatures."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "vialshadows"
+ veil_msg = "You sense a dark presence \
+ lurking in the shadows..."
+ objective_verb = "Kill"
+ demon_type = /mob/living/simple_animal/demon/shadow
+
+
///////////MORPH
/obj/item/antag_spawner/morph
diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm
index 621cae81add..9bce2614773 100644
--- a/code/modules/antagonists/changeling/powers/panacea.dm
+++ b/code/modules/antagonists/changeling/powers/panacea.dm
@@ -34,7 +34,7 @@
user.reagents.add_reagent("mutadone", 2)
user.apply_status_effect(STATUS_EFFECT_PANACEA)
- for(var/datum/disease/virus in user.viruses)
+ for(var/datum/disease/virus in user.diseases)
if(virus.severity == NONTHREAT)
continue
virus.cure()
diff --git a/code/modules/antagonists/goon_vampire/goon_vampire_powers.dm b/code/modules/antagonists/goon_vampire/goon_vampire_powers.dm
index 60f8ba25369..6a716392112 100644
--- a/code/modules/antagonists/goon_vampire/goon_vampire_powers.dm
+++ b/code/modules/antagonists/goon_vampire/goon_vampire_powers.dm
@@ -220,8 +220,8 @@
to_chat(user, span_warning("Вам кажется, что заражающее касание не подействовало на [target]."))
return
- var/datum/disease/virus = new /datum/disease/vampire
- target.ForceContractDisease(virus)
+ var/datum/disease/vampire/virus = new
+ virus.Contract(target)
/obj/effect/proc_holder/spell/goon_vampire/glare
diff --git a/code/modules/antagonists/space_ninja/suit/ninja_equipment_actions/ninja_status_read.dm b/code/modules/antagonists/space_ninja/suit/ninja_equipment_actions/ninja_status_read.dm
index 79af8d00499..d59d4978470 100644
--- a/code/modules/antagonists/space_ninja/suit/ninja_equipment_actions/ninja_status_read.dm
+++ b/code/modules/antagonists/space_ninja/suit/ninja_equipment_actions/ninja_status_read.dm
@@ -33,10 +33,10 @@
info_list += "[span_info("Температура тела: [ninja.bodytemperature-T0C] градусов C ([ninja.bodytemperature*1.8-459.67] градусов F)")]\n"
//Diseases
- if(length(ninja.viruses))
+ if(length(ninja.diseases))
info_list += "[span_info("Вирусы:")]\n"
- for(var/datum/disease/ninja_disease in ninja.viruses)
- info_list += "[span_info("* [ninja_disease.name], Тип: [ninja_disease.spread_text], Стадия: [ninja_disease.stage]/[ninja_disease.max_stages], Возможное лекарство: [ninja_disease.cure_text]")]\n"
+ for(var/datum/disease/ninja_disease in ninja.diseases)
+ info_list += "[span_info("* [ninja_disease.name], Тип: [ninja_disease.additional_info], Стадия: [ninja_disease.stage]/[ninja_disease.max_stages], Возможное лекарство: [ninja_disease.cure_text]")]\n"
//Реагенты
if(ninja.reagents.reagent_list.len)
info_list += "[span_info("Обнаружены реагенты:")]\n"
diff --git a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm
index a9ec0f47748..1f7ff259c7c 100644
--- a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm
+++ b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm
@@ -684,7 +684,8 @@ GLOBAL_LIST_INIT(vampire_dissect_organs, list(
if(prob(10 + vampire.get_trophies("livers") * 3))
new /obj/effect/temp_visual/cult/sparks(get_turf(victim))
- victim.ForceContractDisease(new /datum/disease/vampire) // grave fever
+ var/datum/disease/vampire/D = new
+ D.Contract(victim) // grave fever
/*======================================================================================================================================*\
@@ -1575,7 +1576,7 @@ GLOBAL_LIST_INIT(vampire_dissect_organs, list(
// cures heart attack, heart failure and shock
human_vampire.set_heartattack(FALSE)
- for(var/datum/disease/critical/crit_virus in human_vampire.viruses)
+ for(var/datum/disease/critical/crit_virus in human_vampire.diseases)
crit_virus.cure()
// a little bit of nutrition for mr. vampire
@@ -1687,10 +1688,10 @@ GLOBAL_LIST_INIT(vampire_dissect_organs, list(
else
organ.status = NONE
- for(var/datum/disease/virus in human_vampire.viruses)
+ for(var/datum/disease/virus in human_vampire.diseases)
if(virus.severity == NONTHREAT)
continue
- virus.cure(resistance = FALSE)
+ virus.cure(need_immunity = FALSE)
var/mob/living/simple_animal/borer/borer = human_vampire.has_brain_worms()
if(borer)
diff --git a/code/modules/arcade/mob_hunt/battle_computer.dm b/code/modules/arcade/mob_hunt/battle_computer.dm
index ba4f5899493..32c0cb292af 100644
--- a/code/modules/arcade/mob_hunt/battle_computer.dm
+++ b/code/modules/arcade/mob_hunt/battle_computer.dm
@@ -107,6 +107,9 @@
avatar.update_self()
/obj/machinery/computer/mob_battle_terminal/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
interact(user)
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index f0b2aaec750..a53d5a788c7 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -168,7 +168,8 @@
if(faction)
M.faction = list(faction)
if(disease)
- M.ForceContractDisease(new disease)
+ var/datum/disease/D = new disease
+ D.Contract(M)
M.adjustOxyLoss(oxy_damage)
M.adjustBruteLoss(brute_damage)
M.adjustFireLoss(burn_damage)
@@ -450,13 +451,13 @@
outfit = /datum/outfit/job/assistant
/obj/effect/mob_spawn/human/corpse/assistant/beesease_infection
- disease = /datum/disease/beesease
+ disease = /datum/disease/virus/beesease
/obj/effect/mob_spawn/human/corpse/assistant/brainrot_infection
- disease = /datum/disease/brainrot
+ disease = /datum/disease/virus/brainrot
/obj/effect/mob_spawn/human/corpse/assistant/spanishflu_infection
- disease = /datum/disease/fluspanish
+ disease = /datum/disease/virus/fluspanish
/obj/effect/mob_spawn/human/cook
name = "Cook"
diff --git a/code/modules/awaymissions/mission_code/academy.dm b/code/modules/awaymissions/mission_code/academy.dm
index 18294bed86e..3d1e2c17e37 100644
--- a/code/modules/awaymissions/mission_code/academy.dm
+++ b/code/modules/awaymissions/mission_code/academy.dm
@@ -142,9 +142,9 @@
explosion(get_turf(user),-1,0,2, flame_range = 2, cause = src)
if(9)
//Cold
- var/datum/disease/D = new /datum/disease/cold
T.visible_message("[user] looks a little under the weather!")
- user.ForceContractDisease(D)
+ var/datum/disease/virus/cold/D = new
+ D.Contract(user)
if(10)
//Nothing
T.visible_message("Nothing seems to happen.")
diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm
index b967ca068d1..7c474be64bb 100644
--- a/code/modules/awaymissions/mission_code/spacebattle.dm
+++ b/code/modules/awaymissions/mission_code/spacebattle.dm
@@ -590,7 +590,7 @@
suit_store = /obj/item/gun/projectile/shotgun/riot/buckshot
backpack_contents = list(
/obj/item/storage/box/survival = 1,
- /obj/item/storage/box/buck = 1
+ /obj/item/ammo_box/shotgun/buck = 1
)
return ..()
@@ -677,7 +677,7 @@
/obj/item/reagent_containers/food/pill/patch/silver_sulf/small = 1,
/obj/item/reagent_containers/food/pill/patch/styptic/small = 1,
/obj/item/stock_parts/cell/high = 1,
- /obj/item/storage/box/buck = 1
+ /obj/item/ammo_box/shotgun/buck = 1
)
return ..()
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index ab1f4b348a8..c65289c4ac8 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -5,6 +5,7 @@
item_state = "labcoat_open"
ignore_suitadjust = 0
suit_adjusted = 1
+ permeability_coefficient = 0.5
blood_overlay_type = "coat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
allowed = list(/obj/item/analyzer,/obj/item/stack/medical,/obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/reagent_containers/applicator,/obj/item/healthanalyzer,/obj/item/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/food/pill,/obj/item/storage/pill_bottle,/obj/item/paper,/obj/item/rad_laser)
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 26a17d29fac..480d5cc9afd 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -1364,7 +1364,7 @@
/datum/crafting_recipe/makeshift_speedloader
name = "Makeshift Speedloader"
- result = /obj/item/ammo_box/improvisedrevolver
+ result = /obj/item/ammo_box/speedloader/improvisedrevolver
time = 5 SECONDS
reqs = list(/obj/item/c_tube = 4,
/obj/item/stack/packageWrap = 10,
diff --git a/code/modules/economy/Accounts_DB.dm b/code/modules/economy/Accounts_DB.dm
index ece4aadddb5..42a6694133c 100644
--- a/code/modules/economy/Accounts_DB.dm
+++ b/code/modules/economy/Accounts_DB.dm
@@ -57,6 +57,9 @@ GLOBAL_VAR(current_date_string)
return ..()
/obj/machinery/computer/account_database/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 880b832567b..ddfa7e05d31 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -1,27 +1,35 @@
/datum/event/disease_outbreak
- announceWhen = 15
- /// The type of disease that patient zero will be infected with.
- var/datum/disease/D
+ announceWhen = 150
+ /// The type of virus that patient zero will be infected with.
+ var/datum/disease/virus/D
/// The initial target of the disease.
var/mob/living/carbon/human/patient_zero
/datum/event/disease_outbreak/setup()
- announceWhen = rand(15, 30)
- if(prob(40))
- var/virus_type = pick(/datum/disease/advance/preset/flu, /datum/disease/advance/preset/cold, \
- /datum/disease/brainrot, /datum/disease/magnitis, /datum/disease/beesease, /datum/disease/anxiety, \
- /datum/disease/fake_gbs, /datum/disease/fluspanish, /datum/disease/pierrot_throat, /datum/disease/lycan, \
- /datum/disease/loyalty)
- D = new virus_type()
+ announceWhen = rand(150, 300)
+ var/virus_type = pick(
+ 5; /datum/disease/virus/advance,
+ 1; /datum/disease/virus/anxiety,
+ 1; /datum/disease/virus/beesease,
+ 1; /datum/disease/virus/brainrot,
+ 1; /datum/disease/virus/cold,
+ 1; /datum/disease/virus/flu,
+ 1; /datum/disease/virus/fluspanish,
+ 1; /datum/disease/virus/fake_gbs,
+ 1; /datum/disease/virus/loyalty,
+ 1; /datum/disease/virus/lycan,
+ 1; /datum/disease/virus/magnitis,
+ 1; /datum/disease/virus/pierrot_throat,
+ 1; /datum/disease/virus/pierrot_throat/advanced,
+ 1; /datum/disease/virus/tuberculosis,
+ 1; /datum/disease/virus/wizarditis
+ )
+ if(virus_type == /datum/disease/virus/advance)
+ //creates only contagious viruses, that are always visible in Pandemic
+ D = CreateRandomVirus(count_of_symptoms = rand(4, 6), resistance = rand(0,11), stealth = pick(0,0,1,1,2),
+ stage_rate = rand(-11,5), transmittable = rand(5,9), severity = rand(0,5))
else
- var/datum/disease/advance/A = new /datum/disease/advance
- A.name = capitalize(pick(GLOB.adjectives)) + " " + capitalize(pick(GLOB.nouns + GLOB.verbs)) // random silly name
- A.symptoms = A.GenerateSymptoms(1,9,6)
- A.Refresh()
- A.AssignProperties(list("resistance" = rand(0,11), "stealth" = rand(0,2), "stage_rate" = rand(0,5), "transmittable" = rand(0,5), "severity" = rand(0,10)))
- D = A
-
- D.carrier = TRUE
+ D = new virus_type()
/datum/event/disease_outbreak/announce()
GLOB.event_announcement.Announce("Вспышка вирусной угрозы 7-го уровня зафиксирована на борту станции [station_name()]. Всему персоналу надлежит сдержать ее распространение.", "ВНИМАНИЕ: БИОЛОГИЧЕСКАЯ УГРОЗА.", new_sound = 'sound/AI/outbreak7.ogg')
@@ -33,15 +41,17 @@
for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
if(!H.client)
continue
- if(issmall(H)) //don't infect monkies; that's a waste
- continue
var/turf/T = get_turf(H)
if(!T)
continue
if(!is_station_level(T.z))
continue
- if(!H.ForceContractDisease(D))
+ if(istype(D, /datum/disease/virus/advance))
+ var/datum/disease/virus/advance/old_virus = locate() in H.diseases
+ if(old_virus)
+ old_virus.cure(need_immunity = FALSE)
+ if(!D.Contract(H, is_carrier = TRUE))
continue
patient_zero = H
break
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 46e7b477af8..1be7a276cc1 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -241,7 +241,9 @@ GLOBAL_LIST_EMPTY(event_last_fired)
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Визит абдукторов",/datum/event/abductor, 20, list(ASSIGNMENT_SECURITY = 3), TRUE), // 5.8% on high pop, 4.5% on low pop
new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Заражение ксеноморфами", /datum/event/alien_infestation, 20, list(ASSIGNMENT_SECURITY = 4), TRUE),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Пауки Ужаса", /datum/event/spider_terror, 20, list(ASSIGNMENT_SECURITY = 4), TRUE), // 7.1% on high pop, 5.3% on low pop
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Демон Резни", /datum/event/spawn_slaughter, 10, is_one_shot = TRUE), // 3% on high pop, 2.1% on low pop
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Демон Резни", /datum/event/spawn_slaughter, 20, is_one_shot = TRUE), // 3% on high pop, 2.1% on low pop
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Демон Смеха", /datum/event/spawn_slaughter/laughter, 20, is_one_shot = TRUE),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Теневой Демон", /datum/event/spawn_slaughter/shadow, 20, is_one_shot = TRUE),
//new /datum/event_meta(EVENT_LEVEL_MAJOR, "Floor Cluwne", /datum/event/spawn_floor_cluwne, 15, is_one_shot = TRUE)
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Космический Дракон", /datum/event/space_dragon, 20, list(ASSIGNMENT_SECURITY = 4), TRUE),
)
diff --git a/code/modules/events/slaughterevent.dm b/code/modules/events/slaughterevent.dm
index a4d69b7bae8..d54072c2748 100644
--- a/code/modules/events/slaughterevent.dm
+++ b/code/modules/events/slaughterevent.dm
@@ -1,49 +1,70 @@
/datum/event/spawn_slaughter
var/key_of_slaughter
+ var/mob/living/simple_animal/demon/demon = /mob/living/simple_animal/demon/slaughter
-/datum/event/spawn_slaughter/proc/get_slaughter(var/end_if_fail = 0)
- spawn()
- var/list/candidates = SSghost_spawns.poll_candidates("Вы хотите занять роль Демона Резни?", ROLE_DEMON, TRUE, source = /mob/living/simple_animal/demon/slaughter)
- if(!candidates.len)
- key_of_slaughter = null
- kill()
- return
- var/mob/C = pick(candidates)
- key_of_slaughter = C.key
-
- if(!key_of_slaughter)
- kill()
- return
-
- var/datum/mind/player_mind = new /datum/mind(key_of_slaughter)
- player_mind.active = 1
- var/list/spawn_locs = list()
+
+/datum/event/spawn_slaughter/proc/get_slaughter()
+ var/list/candidates = SSghost_spawns.poll_candidates("Вы хотите занять роль [initial(demon.name)]?", ROLE_DEMON, TRUE, source = demon)
+ if(!length(candidates))
+ kill()
+ return
+
+ var/mob/canidate = pick(candidates)
+ key_of_slaughter = canidate.key
+
+ if(!key_of_slaughter)
+ kill()
+ return
+
+ var/datum/mind/player_mind = new /datum/mind(key_of_slaughter)
+ player_mind.active = TRUE
+ var/turf/spawn_loc = get_spawn_loc(player_mind.current)
+ var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(spawn_loc)
+ var/mob/living/simple_animal/demon/new_demon = new demon(holder)
+ new_demon.holder = holder
+ player_mind.transfer_to(new_demon)
+ player_mind.assigned_role = ROLE_DEMON
+ player_mind.special_role = SPECIAL_ROLE_DEMON
+ message_admins("[key_name_admin(new_demon)] has been made into a [new_demon.name] by an event.")
+ log_game("[key_name_admin(new_demon)] was spawned as a [new_demon.name] by an event.")
+
+
+/datum/event/spawn_slaughter/proc/get_spawn_loc(mob/player)
+ RETURN_TYPE(/turf)
+ var/list/spawn_locs = list()
+ for(var/thing in GLOB.landmarks_list)
+ var/obj/effect/landmark/landmark = thing
+ if(isturf(landmark.loc) && landmark.name == "revenantspawn")
+ spawn_locs += landmark.loc
+ if(!spawn_locs) // If we can't find any good spots, try the carp spawns
for(var/thing in GLOB.landmarks_list)
- var/obj/effect/landmark/L = thing
- if(isturf(L.loc))
- switch(L.name)
- if("revenantspawn")
- spawn_locs += L.loc
- if(!spawn_locs) //If we can't find any revenant spawns, try the carp spawns
- for(var/thing in GLOB.landmarks_list)
- var/obj/effect/landmark/L = thing
- if(isturf(L.loc))
- switch(L.name)
- if("carpspawn")
- spawn_locs += L.loc
- if(!spawn_locs) //If we can't find either, just spawn the revenant at the player's location
- spawn_locs += get_turf(player_mind.current)
- if(!spawn_locs) //If we can't find THAT, then just retry
- kill()
- return
- var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(pick(spawn_locs))
- var/mob/living/simple_animal/demon/slaughter/S = new(holder)
- S.holder = holder
- player_mind.transfer_to(S)
- player_mind.assigned_role = "Slaughter Demon"
- player_mind.special_role = SPECIAL_ROLE_SLAUGHTER_DEMON
- message_admins("[key_name_admin(S)] выбран на роль Демона Резни по событию.")
- add_game_logs("выбран на роль Демона Резни по событию.", S)
+ var/obj/effect/landmark/landmark = thing
+ if(isturf(landmark.loc) && landmark.name == "carpspawn")
+ spawn_locs += landmark.loc
+ if(!spawn_locs) //If we can't find a good place, just spawn at the player's location
+ spawn_locs += get_turf(player)
+ if(!spawn_locs) //If we can't find THAT, then give up
+ kill()
+ return
+ return pick(spawn_locs)
+
/datum/event/spawn_slaughter/start()
- get_slaughter()
+ INVOKE_ASYNC(src, PROC_REF(get_slaughter))
+
+
+/datum/event/spawn_slaughter/laughter
+ demon = /mob/living/simple_animal/demon/slaughter/laughter
+
+/datum/event/spawn_slaughter/shadow
+ demon = /mob/living/simple_animal/demon/shadow
+
+
+/datum/event/spawn_slaughter/shadow/get_spawn_loc()
+ var/turf/spawn_loc = ..()
+ for(var/turf/check in range(50, spawn_loc))
+ if(check.get_lumcount()) // if the turf is not pitch black
+ continue
+ return check // return the first turf that is dark nearby.
+ kill()
+
diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm
index 53923f4d124..e7033c1fa7a 100644
--- a/code/modules/events/spontaneous_appendicitis.dm
+++ b/code/modules/events/spontaneous_appendicitis.dm
@@ -7,12 +7,12 @@
if(!H.get_int_organ(/obj/item/organ/internal/appendix))
continue
var/foundAlready = FALSE //don't infect someone that already has appendicitis
- for(var/datum/disease/appendicitis/A in H.viruses)
+ for(var/datum/disease/appendicitis/A in H.diseases)
foundAlready = TRUE
break
if(H.stat == DEAD || foundAlready)
continue
- var/datum/disease/D = new /datum/disease/appendicitis
- H.ForceContractDisease(D)
+ var/datum/disease/appendicitis/D = new
+ D.Contract(H)
break
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index dc422a4d46b..6f1591b9791 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -699,7 +699,7 @@ GLOBAL_LIST_INIT(major_hallutinations, list("fake"=20,"death"=10,"xeno"=10,"sing
addtimer(CALLBACK(GLOBAL_PROC, /proc/qdel, O), 300)
return
-GLOBAL_LIST_INIT(non_fakeattack_weapons, list(/obj/item/gun/projectile, /obj/item/ammo_box/a357,\
+GLOBAL_LIST_INIT(non_fakeattack_weapons, list(/obj/item/gun/projectile, /obj/item/ammo_box/speedloader/a357,\
/obj/item/gun/energy/kinetic_accelerator/crossbow,\
/obj/item/storage/box/syndicate, /obj/item/storage/box/emps,\
/obj/item/cartridge/syndicate, /obj/item/clothing/under/chameleon,\
diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm
index 6c1964b8994..ce40ea54e9d 100644
--- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm
+++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm
@@ -306,6 +306,10 @@
/obj/machinery/bottler/attack_hand(mob/user)
if(stat & BROKEN)
return
+
+ if(..())
+ return TRUE
+
add_fingerprint(user)
interact(user)
diff --git a/code/modules/food_and_drinks/food/foods/baked_goods.dm b/code/modules/food_and_drinks/food/foods/baked_goods.dm
index 01add110eaf..1c506f3b7db 100644
--- a/code/modules/food_and_drinks/food/foods/baked_goods.dm
+++ b/code/modules/food_and_drinks/food/foods/baked_goods.dm
@@ -265,7 +265,7 @@
bitesize = 3
filling_color = "#5e1706"
tastes = list("cherry" = 5, "sweetness" = 1, "chocolate" = 1)
- list_reagents = list("nutriment" = 10, "sugar" = 3, "coco" = 4)
+ list_reagents = list("nutriment" = 10, "sugar" = 35, "coco" = 4)
foodtype = SUGAR | FRUIT | GRAIN
/obj/item/reagent_containers/food/snacks/choccherrycakeslice
@@ -285,7 +285,7 @@
slices_num = 5
filling_color = "#5e1706"
tastes = list("chocolate" = 3, "sweetness" = 2, "egg" = 1, "berries" = 2)
- list_reagents = list("nutriment" = 6, "plantmatter" = 2, "coco" = 2, "cream" = 3, "sugar" = 3, "berryjucie" = 3)
+ list_reagents = list("nutriment" = 6, "plantmatter" = 2, "coco" = 2, "cream" = 3, "sugar" = 15, "berryjucie" = 3)
foodtype = SUGAR | FRUIT | GRAIN | DAIRY
/obj/item/reagent_containers/food/snacks/noelslice
@@ -307,7 +307,7 @@
icon_state = "COOKIE!!!"
bitesize = 1
filling_color = "#DBC94F"
- list_reagents = list("nutriment" = 1, "sugar" = 3, "hot_coco" = 5 )
+ list_reagents = list("nutriment" = 1, "sugar" = 1, "hot_coco" = 5 )
tastes = list("cookie" = 1, "crunchy chocolate" = 1)
foodtype = SUGAR | GRAIN
@@ -463,7 +463,7 @@
desc = "Goes great with Robust Coffee."
icon_state = "donut1"
bitesize = 5
- list_reagents = list("nutriment" = 3, "sugar" = 2)
+ list_reagents = list("nutriment" = 3, "sugar" = 10)
var/extra_reagent = null
filling_color = "#D2691E"
var/randomized_sprinkles = 1
@@ -506,7 +506,7 @@
/obj/item/reagent_containers/food/snacks/donut/sprinkles
name = "frosted donut"
icon_state = "donut2"
- list_reagents = list("nutriment" = 3, "sugar" = 2)
+ list_reagents = list("nutriment" = 3, "sugar" = 10)
filling_color = "#FF69B4"
donut_sprite_type = "frosted"
randomized_sprinkles = 0
@@ -581,7 +581,7 @@
extra_reagent = "berryjuice"
donut_sprite_type = "jelly"
randomized_sprinkles = 0
- tastes = list("jelly" = 1, "donut" = 3)
+ tastes = list("jelly" = 1, "donut" = 10)
/obj/item/reagent_containers/food/snacks/donut/jelly/Initialize(mapload)
if(extra_reagent)
@@ -637,21 +637,21 @@
icon_state = "pancake"
filling_color = "#E7D8AB"
bitesize = 2
- list_reagents = list("nutriment" = 3, "sugar" = 3)
+ list_reagents = list("nutriment" = 3, "sugar" = 10)
foodtype = GRAIN | SUGAR
/obj/item/reagent_containers/food/snacks/pancake/berry_pancake
name = "berry pancake"
desc = "A pancake loaded with berries."
icon_state = "berry_pancake"
- list_reagents = list("nutriment" = 3, "sugar" = 3, "berryjuice" = 3)
+ list_reagents = list("nutriment" = 3, "sugar" = 10, "berryjuice" = 3)
foodtype = GRAIN | SUGAR | FRUIT
/obj/item/reagent_containers/food/snacks/pancake/choc_chip_pancake
name = "choc-chip pancake"
desc = "A pancake loaded with chocolate chips."
icon_state = "choc_chip_pancake"
- list_reagents = list("nutriment" = 3, "sugar" = 3, "cocoa" = 3)
+ list_reagents = list("nutriment" = 3, "sugar" = 10, "cocoa" = 3)
//////////////////////
// Misc //
diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm
index e840a02a64c..267c340aa8e 100644
--- a/code/modules/food_and_drinks/food/foods/candy.dm
+++ b/code/modules/food_and_drinks/food/foods/candy.dm
@@ -47,14 +47,14 @@
desc = "A soft, chewy candy commonly found in candybars."
icon_state = "nougat"
filling_color = "#7D5F46"
- list_reagents = list("nutriment" = 3, "sugar" = 3)
+ list_reagents = list("nutriment" = 3, "sugar" = 5)
/obj/item/reagent_containers/food/snacks/candy/taffy
name = "saltwater taffy"
desc = "Old fashioned saltwater taffy. Chewy!"
icon_state = "candy1"
filling_color = "#7D5F46"
- list_reagents = list("nutriment" = 3, "sugar" = 3)
+ list_reagents = list("nutriment" = 3, "sugar" = 5)
/obj/item/reagent_containers/food/snacks/candy/taffy/New()
..()
@@ -103,7 +103,7 @@
desc = "Meal ready to eat."
trash = /obj/item/trash/candy
bitesize = 5
- list_reagents = list("nutriment" = 30, "sugar" = 3)
+ list_reagents = list("nutriment" = 30, "sugar" = 10)
/obj/item/reagent_containers/food/snacks/candy/donor
name = "donor candy"
@@ -117,7 +117,7 @@
desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas."
icon_state = "candycorn"
filling_color = "#FFFCB0"
- list_reagents = list("nutriment" = 4, "sugar" = 2)
+ list_reagents = list("nutriment" = 4, "sugar" = 1)
tastes = list("candy corn" = 1)
// ***********************************************************
@@ -131,7 +131,7 @@
trash = /obj/item/c_tube
filling_color = "#FFFFFF"
bitesize = 4
- list_reagents = list("sugar" = 15)
+ list_reagents = list("sugar" = 10)
/obj/item/reagent_containers/food/snacks/candy/candybar
name = "candy"
@@ -159,7 +159,7 @@
icon_state = "gbear"
filling_color = "#FFFFFF"
bitesize = 3
- list_reagents = list("sugar" = 10)
+ list_reagents = list("sugar" = 5)
/obj/item/reagent_containers/food/snacks/candy/gummyworm
name = "gummy worm"
@@ -167,7 +167,7 @@
icon_state = "gworm"
filling_color = "#FFFFFF"
bitesize = 3
- list_reagents = list("sugar" = 10)
+ list_reagents = list("sugar" = 5)
/obj/item/reagent_containers/food/snacks/candy/jellybean
name = "jelly bean"
@@ -175,7 +175,7 @@
icon_state = "jbean"
filling_color = "#FFFFFF"
bitesize = 3
- list_reagents = list("sugar" = 10)
+ list_reagents = list("sugar" = 3)
/obj/item/reagent_containers/food/snacks/candy/jawbreaker
name = "jawbreaker"
@@ -183,7 +183,7 @@
icon_state = "jawbreaker"
filling_color = "#ED0758"
bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift.
- list_reagents = list("sugar" = 10)
+ list_reagents = list("sugar" = 5)
/obj/item/reagent_containers/food/snacks/candy/cash
name = "candy cash"
@@ -211,21 +211,21 @@
trash = /obj/item/trash/gum
filling_color = "#FF7495"
bitesize = 0.2
- list_reagents = list("sugar" = 5)
+ list_reagents = list("sugar" = 3)
/obj/item/reagent_containers/food/snacks/candy/sucker
name = "sucker"
desc = "For being such a good sport!"
icon_state = "sucker"
filling_color = "#FFFFFF"
- list_reagents = list("sugar" = 10)
+ list_reagents = list("sugar" = 3)
/obj/item/reagent_containers/food/snacks/candy/sucker/lollipop
name = "lollipop"
desc = "For being such a courage patient!"
icon_state = "sucker"
filling_color = "#60A584"
- list_reagents = list("sugar" = 4)
+ list_reagents = list("sugar" = 2)
/obj/item/reagent_containers/food/snacks/candy/sucker/lollipop/New()
. = ..()
@@ -240,14 +240,14 @@
desc = "A small edible bear. It's red!"
icon_state = "gbear_red"
filling_color = "#801E28"
- list_reagents = list("sugar" = 10, "cherryjelly" = 2)
+ list_reagents = list("sugar" = 5, "cherryjelly" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummybear/blue
name = "gummy bear"
desc = "A small edible bear. It's blue!"
icon_state = "gbear_blue"
filling_color = "#863333"
- list_reagents = list("sugar" = 10, "berryjuice" = 2)
+ list_reagents = list("sugar" = 5, "berryjuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummybear/poison
name = "gummy bear"
@@ -261,35 +261,35 @@
desc = "A small edible bear. It's green!"
icon_state = "gbear_green"
filling_color = "#365E30"
- list_reagents = list("sugar" = 10, "limejuice" = 2)
+ list_reagents = list("sugar" = 5, "limejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummybear/yellow
name = "gummy bear"
desc = "A small edible bear. It's yellow!"
icon_state = "gbear_yellow"
filling_color = "#863333"
- list_reagents = list("sugar" = 10, "lemonjuice" = 2)
+ list_reagents = list("sugar" = 5, "lemonjuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummybear/orange
name = "gummy bear"
desc = "A small edible bear. It's orange!"
icon_state = "gbear_orange"
filling_color = "#E78108"
- list_reagents = list("sugar" = 10, "orangejuice" = 2)
+ list_reagents = list("sugar" = 5, "orangejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummybear/purple
name = "gummy bear"
desc = "A small edible bear. It's purple!"
icon_state = "gbear_purple"
filling_color = "#993399"
- list_reagents = list("sugar" = 10, "grapejuice" = 2)
+ list_reagents = list("sugar" = 5, "grapejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummybear/wtf
name = "gummy bear"
desc = "A small bear. Wait... what?"
icon_state = "gbear_rainbow"
filling_color = "#60A584"
- list_reagents = list("sugar" = 10, "space_drugs" = 2)
+ list_reagents = list("sugar" = 5, "space_drugs" = 2)
// ***********************************************************
// Gummy Worm Flavors
@@ -300,14 +300,14 @@
desc = "An edible worm, made from gelatin. It's red!"
icon_state = "gworm_red"
filling_color = "#801E28"
- list_reagents = list("sugar" = 10, "cherryjelly" = 2)
+ list_reagents = list("sugar" = 5, "cherryjelly" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummyworm/blue
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's blue!"
icon_state = "gworm_blue"
filling_color = "#863333"
- list_reagents = list("sugar" = 10, "berryjuice" = 2)
+ list_reagents = list("sugar" = 5, "berryjuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummyworm/poison
name = "gummy worm"
@@ -322,35 +322,35 @@
desc = "An edible worm, made from gelatin. It's green!"
icon_state = "gworm_green"
filling_color = "#365E30"
- list_reagents = list("sugar" = 10, "limejuice" = 2)
+ list_reagents = list("sugar" = 5, "limejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummyworm/yellow
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's yellow!"
icon_state = "gworm_yellow"
filling_color = "#863333"
- list_reagents = list("sugar" = 10, "lemonjuice" = 2)
+ list_reagents = list("sugar" = 5, "lemonjuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummyworm/orange
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's orange!"
icon_state = "gworm_orange"
filling_color = "#E78108"
- list_reagents = list("sugar" = 10, "orangejuice" = 2)
+ list_reagents = list("sugar" = 5, "orangejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummyworm/purple
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's purple!"
icon_state = "gworm_purple"
filling_color = "#993399"
- list_reagents = list("sugar" = 10, "grapejuice" = 2)
+ list_reagents = list("sugar" = 5, "grapejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/gummyworm/wtf
name = "gummy worm"
desc = "An edible worm. Did it just move?"
icon_state = "gworm_rainbow"
filling_color = "#60A584"
- list_reagents = list("sugar" = 10, "space_drugs" = 2)
+ list_reagents = list("sugar" = 5, "space_drugs" = 2)
// ***********************************************************
// Jelly Bean Flavors
@@ -361,14 +361,14 @@
desc = "A candy bean, guarenteed to not give you gas. It's red!"
icon_state = "jbean_red"
filling_color = "#801E28"
- list_reagents = list("sugar" = 10, "cherryjelly" = 2)
+ list_reagents = list("sugar" = 3, "cherryjelly" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/blue
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's blue!"
icon_state = "jbean_blue"
filling_color = "#863333"
- list_reagents = list("sugar" = 10, "berryjuice" = 2)
+ list_reagents = list("sugar" = 3, "berryjuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/poison
name = "jelly bean"
@@ -382,70 +382,70 @@
desc = "A candy bean, guarenteed to not give you gas. It's green!"
icon_state = "jbean_green"
filling_color = "#365E30"
- list_reagents = list("sugar" = 10, "limejuice" = 2)
+ list_reagents = list("sugar" = 3, "limejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/yellow
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's yellow!"
icon_state = "jbean_yellow"
filling_color = "#863333"
- list_reagents = list("sugar" = 10, "lemonjuice" = 2)
+ list_reagents = list("sugar" = 3, "lemonjuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/orange
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's orange!"
icon_state = "jbean_orange"
filling_color = "#E78108"
- list_reagents = list("sugar" = 10, "orangejuice" = 2)
+ list_reagents = list("sugar" = 3, "orangejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/purple
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's purple!"
icon_state = "jbean_purple"
filling_color = "#993399"
- list_reagents = list("sugar" = 10, "grapejuice" = 2)
+ list_reagents = list("sugar" = 3, "grapejuice" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/chocolate
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's chocolate!"
icon_state = "jbean_choc"
filling_color = "#302000"
- list_reagents = list("sugar" = 10, "chocolate" = 2)
+ list_reagents = list("sugar" = 3, "chocolate" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/popcorn
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's popcorn flavored!"
icon_state = "jbean_popcorn"
filling_color = "#664330"
- list_reagents = list("sugar" = 10, "nutriment" = 2)
+ list_reagents = list("sugar" = 3, "nutriment" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/cola
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Cola flavored!"
icon_state = "jbean_cola"
filling_color = "#102000"
- list_reagents = list("sugar" = 10, "cola" = 2)
+ list_reagents = list("sugar" = 3, "cola" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/drgibb
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Dr. Gibb flavored!"
icon_state = "jbean_cola"
filling_color = "#102000"
- list_reagents = list("sugar" = 10, "dr_gibb" = 2)
+ list_reagents = list("sugar" = 3, "dr_gibb" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/coffee
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Coffee flavored!"
icon_state = "jbean_choc"
filling_color = "#482000"
- list_reagents = list("sugar" = 10, "coffee" = 2)
+ list_reagents = list("sugar" = 3, "coffee" = 2)
/obj/item/reagent_containers/food/snacks/candy/jellybean/wtf
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. You aren't sure what color it is."
icon_state = "jbean_rainbow"
filling_color = "#60A584"
- list_reagents = list("sugar" = 10, "space_drugs" = 2)
+ list_reagents = list("sugar" = 3, "space_drugs" = 2)
// ***********************************************************
// Cotton Candy Flavors
diff --git a/code/modules/food_and_drinks/food/foods/desserts.dm b/code/modules/food_and_drinks/food/foods/desserts.dm
index e2c640f1011..fc340b29b7f 100644
--- a/code/modules/food_and_drinks/food/foods/desserts.dm
+++ b/code/modules/food_and_drinks/food/foods/desserts.dm
@@ -9,7 +9,7 @@
icon = 'icons/obj/kitchen.dmi'
icon_state = "icecream_cone"
bitesize = 3
- list_reagents = list("nutriment" = 1, "sugar" = 1)
+ list_reagents = list("nutriment" = 1, "sugar" = 3)
tastes = list("ice cream" = 1)
foodtype = SUGAR | DAIRY
@@ -51,7 +51,7 @@
name = "fried banana"
desc = "Goreng Pisang, also known as fried bananas."
icon_state = "friedbanana"
- list_reagents = list("sugar" = 5, "nutriment" = 8, "cornoil" = 4)
+ list_reagents = list("sugar" = 10, "nutriment" = 8, "cornoil" = 4)
foodtype = FRIED | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/ricepudding
@@ -93,7 +93,7 @@
icon_state = "candiedapple"
filling_color = "#F21873"
bitesize = 3
- list_reagents = list("nutriment" = 3, "sugar" = 2)
+ list_reagents = list("nutriment" = 3, "sugar" = 5)
tastes = list("apple" = 2, "sweetness" = 2)
foodtype = FRUIT | SUGAR
diff --git a/code/modules/food_and_drinks/food/foods/ethnic.dm b/code/modules/food_and_drinks/food/foods/ethnic.dm
index 9bdbaa1ac5f..c1c1f929a0b 100644
--- a/code/modules/food_and_drinks/food/foods/ethnic.dm
+++ b/code/modules/food_and_drinks/food/foods/ethnic.dm
@@ -137,7 +137,7 @@
icon_state = "chinese1"
junkiness = 25
antable = FALSE
- list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2)
+ list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 1)
tastes = list("noodle" = 1, "vegetables" = 1)
foodtype = FRIED | VEGETABLES
@@ -147,7 +147,7 @@
icon_state = "chickenball"
item_state = "chinese3"
junkiness = 25
- list_reagents = list("nutriment" = 2, "msg" = 4, "sugar" = 2)
+ list_reagents = list("nutriment" = 2, "msg" = 4, "sugar" = 5)
tastes = list("chicken" = 1, "sweetness" = 1)
foodtype = FRIED | MEAT
@@ -157,7 +157,7 @@
icon_state = "chinese2"
junkiness = 25
antable = FALSE
- list_reagents = list("nutriment" = 1, "protein" = 1, "msg" = 4, "sugar" = 4)
+ list_reagents = list("nutriment" = 1, "protein" = 1, "msg" = 4, "sugar" = 5)
tastes = list("chicken" = 1)
foodtype = FRIED | MEAT
@@ -178,7 +178,7 @@
item_state = "chinese2"
junkiness = 20
antable = FALSE
- list_reagents = list("nutriment" = 1, "rice" = 3, "msg" = 4, "sugar" = 2)
+ list_reagents = list("nutriment" = 1, "rice" = 3, "msg" = 4, "sugar" = 1)
tastes = list("rice" = 1)
foodtype = FRIED | GRAIN | VEGETABLES
diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm
index cbf87216d8d..eaedc39227f 100644
--- a/code/modules/food_and_drinks/food/foods/ingredients.dm
+++ b/code/modules/food_and_drinks/food/foods/ingredients.dm
@@ -184,7 +184,7 @@
icon = 'icons/obj/food/food_ingredients.dmi'
desc = "The base for tasty cookies."
icon_state = "cookiedough"
- list_reagents = list("nutriment" = 5, "sugar" = 5)
+ list_reagents = list("nutriment" = 5, "sugar" = 1)
tastes = list("dough" = 1, "sugar" = 1)
foodtype = GRAIN | SUGAR
@@ -222,7 +222,7 @@
desc = "Ready for oven!"
icon = 'icons/obj/food/food_ingredients.dmi'
icon_state = "unbaked_cookies"
- list_reagents = list("nutriment" = 5, "sugar" = 5)
+ list_reagents = list("nutriment" = 5, "sugar" = 2)
foodtype = GRAIN | SUGAR
/obj/item/reagent_containers/food/snacks/rawcookies/attackby(obj/item/I, mob/user, params)
@@ -254,7 +254,7 @@
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7D5F46"
- list_reagents = list("nutriment" = 2, "sugar" = 2, "cocoa" = 2)
+ list_reagents = list("nutriment" = 2, "sugar" = 5, "cocoa" = 2)
tastes = list("chocolate" = 1)
foodtype = SUGAR
diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm
index 013b18947f0..ab03ee2889c 100644
--- a/code/modules/food_and_drinks/food/foods/junkfood.dm
+++ b/code/modules/food_and_drinks/food/foods/junkfood.dm
@@ -12,7 +12,7 @@
filling_color = "#E8C31E"
junkiness = 20
antable = FALSE
- list_reagents = list("nutriment" = 1, "sodiumchloride" = 1, "sugar" = 3)
+ list_reagents = list("nutriment" = 1, "sodiumchloride" = 1, "sugar" = 2)
tastes = list("crisps" = 1)
foodtype = JUNKFOOD | FRIED
@@ -36,7 +36,7 @@
filling_color = "#BAD145"
junkiness = 20
antable = FALSE
- list_reagents = list("plantmatter" = 2, "sodiumchloride" = 1, "sugar" = 4)
+ list_reagents = list("plantmatter" = 2, "sodiumchloride" = 1, "sugar" = 2)
tastes = list("pistachios" = 1)
foodtype = JUNKFOOD
@@ -48,7 +48,7 @@
filling_color = "#343834"
junkiness = 25
antable = FALSE
- list_reagents = list("plantmatter" = 2, "sugar" = 4)
+ list_reagents = list("plantmatter" = 2, "sugar" = 2)
tastes = list("dried raisins" = 1)
foodtype = JUNKFOOD | FRUIT
@@ -95,7 +95,7 @@
filling_color = "#A66829"
junkiness = 20
antable = FALSE
- list_reagents = list("protein" = 2, "sugar" = 4)
+ list_reagents = list("protein" = 2, "sugar" = 2)
tastes = list("bread" = 1)
foodtype = JUNKFOOD | GRAIN
@@ -106,7 +106,7 @@
trash = /obj/item/trash/doshik
filling_color = "#d1a62f"
junkiness = 20
- list_reagents = list("protein" = 3, "sugar" = 1)
+ list_reagents = list("protein" = 3)
tastes = list("doshi co" = 1, "pleasure" = 1)
foodtype = JUNKFOOD | MEAT
opened = FALSE
@@ -118,7 +118,7 @@
trash = /obj/item/trash/doshik
filling_color = "#d16a2f"
junkiness = 20
- list_reagents = list("protein" = 3, "sugar" = 1, "capsaicin" = 5)
+ list_reagents = list("protein" = 3, "capsaicin" = 5)
tastes = list("doshi co" = 1, "pain" = 1, "pleasure" = 1)
foodtype = JUNKFOOD | MEAT
opened = FALSE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm
index a698c6679b8..adfed758c15 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/juicer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm
@@ -69,6 +69,9 @@
return 0
/obj/machinery/juicer/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
user.set_machine(src)
interact(user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index ab39dcb7f44..934bec6307f 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -597,7 +597,9 @@
spawn_meds = list(
/obj/item/reagent_containers/syringe/antiviral = 4,
/obj/item/reagent_containers/glass/bottle/cold = 1,
- /obj/item/reagent_containers/glass/bottle/flu_virion = 1,
+ /obj/item/reagent_containers/glass/bottle/flu = 1,
+ /obj/item/reagent_containers/glass/bottle/sneezing = 1,
+ /obj/item/reagent_containers/glass/bottle/cough = 1,
/obj/item/reagent_containers/glass/bottle/mutagen = 1,
/obj/item/reagent_containers/glass/bottle/plasma = 1,
/obj/item/reagent_containers/glass/bottle/diphenhydramine = 1
@@ -621,7 +623,9 @@
spawn_meds = list(
/obj/item/reagent_containers/syringe/antiviral = 4,
/obj/item/reagent_containers/glass/bottle/cold = 1,
- /obj/item/reagent_containers/glass/bottle/flu_virion = 1,
+ /obj/item/reagent_containers/glass/bottle/flu = 1,
+ /obj/item/reagent_containers/glass/bottle/sneezing = 1,
+ /obj/item/reagent_containers/glass/bottle/cough = 1,
/obj/item/reagent_containers/glass/bottle/mutagen = 1,
/obj/item/reagent_containers/glass/bottle/plasma = 1,
/obj/item/reagent_containers/glass/bottle/reagent/synaptizine = 1,
diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm
index 3dcad99d53f..9f0c5a9cb35 100644
--- a/code/modules/hydroponics/seed_extractor.dm
+++ b/code/modules/hydroponics/seed_extractor.dm
@@ -137,6 +137,8 @@
src.amount = am
/obj/machinery/seed_extractor/attack_hand(mob/user)
+ if(..())
+ return TRUE
interact(user)
/obj/machinery/seed_extractor/attack_ghost(mob/user)
diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm
index 09f09929944..a489c947a6d 100644
--- a/code/modules/mining/laborcamp/laborstacker.dm
+++ b/code/modules/mining/laborcamp/laborstacker.dm
@@ -51,6 +51,9 @@
return ..()
/obj/machinery/mineral/labor_claim_console/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
index 415181d4222..7b0810c814e 100644
--- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm
+++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm
@@ -161,15 +161,15 @@
playsound(user.loc,'sound/items/drink.ogg', rand(10,50), 1)
qdel(src)
-/datum/disease/transformation/dragon
+/datum/disease/virus/transformation/dragon
name = "dragon transformation"
- cure_text = "nothing"
+ cure_text = "Nothing"
cures = list("adminordrazine")
agent = "dragon's blood"
desc = "What do dragons have to do with Space Station 13?"
stage_prob = 20
severity = BIOHAZARD
- visibility_flags = 0
+ visibility_flags = VISIBLE
stage1 = list("Your bones ache.")
stage2 = list("Your skin feels scaley.")
stage3 = list("You have an overwhelming urge to terrorize some peasants.", "Your teeth feel sharper.")
diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm
index f7e84abece4..6d3b6965764 100644
--- a/code/modules/mining/machine_stacking.dm
+++ b/code/modules/mining/machine_stacking.dm
@@ -19,6 +19,9 @@
qdel(src)
/obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
var/obj/item/stack/sheet/s
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index d91f6979a30..12eedec409a 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -87,6 +87,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
real_name = name
//starts ghosts off with all HUDs.
+ show_me_the_hud(THOUGHTS_HUD)
toggle_all_huds_on(body)
..()
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 341585cdadf..cfd3bc0b59f 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -48,15 +48,13 @@
if(!iscarbon(user))
return
- for(var/thing in viruses)
- var/datum/disease/D = thing
- if(D.IsSpreadByTouch())
- user.ContractDisease(D)
-
- for(var/thing in user.viruses)
- var/datum/disease/D = thing
- if(D.IsSpreadByTouch())
- ContractDisease(D)
+ for(var/datum/disease/virus/V in diseases)
+ if(V.spread_flags & CONTACT)
+ V.Contract(user, act_type = CONTACT, need_protection_check = TRUE, zone = user.hand ? "l_hand" : "r_hand")
+
+ for(var/datum/disease/virus/V in user.diseases)
+ if(V.spread_flags & CONTACT)
+ V.Contract(src, act_type = CONTACT, need_protection_check = TRUE, zone = user.zone_selected)
if(lying && surgeries.len)
if(user.a_intent == INTENT_HELP)
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 7edf501a76e..6c5ee24dfae 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -108,6 +108,16 @@
else
return 0
+/mob/living/carbon/human/proc/check_brain_for_complex_interactions()
+ if(getBrainLoss() >= 60 || prob(getBrainLoss()))
+ return FALSE
+ var/datum/disease/virus/advance/A = locate(/datum/disease/virus/advance) in diseases
+ if(istype(A))
+ var/datum/symptom/headache/S = locate(/datum/symptom/headache) in A.symptoms
+ if(istype(S))
+ return FALSE
+ return TRUE
+
//These procs fetch a cumulative total damage from all organs
/mob/living/carbon/human/getBruteLoss()
if(status_flags & GODMODE)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 51bdb167da9..15875df4d2a 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,6 +1,6 @@
/mob/living/carbon/human
- hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,GLAND_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,GLAND_HUD,THOUGHT_HUD)
pressure_resistance = 25
//Marking colour and style
var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000.
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index e9160944cfb..e7ea6a330da 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -380,6 +380,9 @@
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
var/mult = dna.species.coldmod
if(mult>0)
+ if(bodytemperature < dna.species.cold_level_2 && prob(1))
+ var/datum/disease/virus/cold/D = new
+ D.Contract(src)
if(bodytemperature >= dna.species.cold_level_2 && bodytemperature <= dna.species.cold_level_1)
throw_alert("temp", /obj/screen/alert/cold, 1)
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature")
@@ -679,8 +682,8 @@
overeatduration -= 2
if(!ismachineperson(src) && !isLivingSSD(src) && nutrition < NUTRITION_LEVEL_HYPOGLYCEMIA) //Gosh damn snowflakey IPCs
- var/datum/disease/D = new /datum/disease/critical/hypoglycemia
- ForceContractDisease(D)
+ var/datum/disease/critical/hypoglycemia/D = new
+ D.Contract(src)
//metabolism change
if(nutrition > NUTRITION_LEVEL_FAT)
@@ -748,24 +751,24 @@
var/mob/living/carbon/human/H = src
H.set_heartattack(TRUE)
if(prob(health * -0.2))
- var/datum/disease/D = new /datum/disease/critical/heart_failure
- ForceContractDisease(D)
+ var/datum/disease/critical/heart_failure/D = new
+ D.Contract(src)
Paralyse(10 SECONDS)
if(-99 to -80)
adjustOxyLoss(1)
if(prob(4))
to_chat(src, "Your chest hurts...")
Paralyse(4 SECONDS)
- var/datum/disease/D = new /datum/disease/critical/heart_failure
- ForceContractDisease(D)
+ var/datum/disease/critical/heart_failure/D = new
+ D.Contract(src)
if(-79 to -50)
adjustOxyLoss(1)
if(prob(10))
- var/datum/disease/D = new /datum/disease/critical/shock
- ForceContractDisease(D)
+ var/datum/disease/critical/shock/D = new
+ D.Contract(src)
if(prob(health * -0.08))
- var/datum/disease/D = new /datum/disease/critical/heart_failure
- ForceContractDisease(D)
+ var/datum/disease/critical/heart_failure/D = new
+ D.Contract(src)
if(prob(6))
to_chat(src, "You feel [pick("horrible pain", "awful", "like shit", "absolutely awful", "like death", "like you are dying", "nothing", "warm", "sweaty", "tingly", "really, really bad", "horrible")]!")
Weaken(6 SECONDS)
@@ -774,8 +777,8 @@
if(-49 to 0)
adjustOxyLoss(1)
if(prob(3))
- var/datum/disease/D = new /datum/disease/critical/shock
- ForceContractDisease(D)
+ var/datum/disease/critical/shock/D = new
+ D.Contract(src)
if(prob(5))
to_chat(src, "You feel [pick("terrible", "awful", "like shit", "sick", "numb", "cold", "sweaty", "tingly", "horrible")]!")
Weaken(6 SECONDS)
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index 6ed1986bea1..6e079b0c07a 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -540,6 +540,25 @@
var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_selected))
var/armor_block = target.run_armor_check(affecting, "melee")
+ // Contract diseases
+
+ //user beats target, check target's defense in selected zone
+ for(var/datum/disease/virus/V in user.diseases)
+ var/is_infected = FALSE
+ if(attack.is_bite && (V.spread_flags & BITES))
+ is_infected = V.Contract(target, act_type = BITES|CONTACT, need_protection_check = TRUE, zone = affecting)
+ if(!is_infected && (V.spread_flags & CONTACT))
+ V.Contract(target, act_type = CONTACT, need_protection_check = TRUE, zone = affecting)
+
+ //check user's defense in attacking zone (hands or mouth)
+ for(var/datum/disease/virus/V in target.diseases)
+ var/is_infected = FALSE
+ if(attack.is_bite && (V.spread_flags > NON_CONTAGIOUS))
+ //infected blood contacts with mouth, ignore protection & spread_flags
+ is_infected = V.Contract(user, need_protection_check = FALSE)
+ if(!is_infected && (V.spread_flags & CONTACT))
+ V.Contract(user, act_type = CONTACT, need_protection_check = TRUE, zone = user.hand ? "l_hand" : "r_hand")
+
playsound(target.loc, attack.attack_sound, 25, 1, -1)
target.visible_message("[user.declent_ru(NOMINATIVE)] [attack_species] [target.declent_ru(ACCUSATIVE)]!")
@@ -684,6 +703,7 @@
var/sharp = FALSE
var/animation_type = ATTACK_EFFECT_PUNCH
var/harmless = FALSE //if set to true, attacks won't be admin logged and punches will "hit" for no damage
+ var/is_bite = FALSE
/datum/unarmed_attack/diona
attack_verb = list("охлестал", "тяжело стукнул", "лозой хлестанул", "ветвью щелкнул")
@@ -701,6 +721,7 @@
attack_sound = 'sound/weapons/bite.ogg'
sharp = TRUE
animation_type = ATTACK_EFFECT_BITE
+ is_bite = TRUE
/datum/unarmed_attack/claws/armalis
attack_verb = list("хлестает", "хлестанул", "искромсал", "разорвал") //армалисами почти никто не пользуется. Зачем вносить пол вырезаной расе которой никогда не будет в игре?
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 7f38a0de6fb..752607c835a 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -207,15 +207,6 @@
var/obj/item/organ/internal/O = thing
O.on_life()
-/mob/living/carbon/handle_diseases()
- for(var/thing in viruses)
- var/datum/disease/D = thing
- if(prob(D.infectivity))
- D.spread()
-
- if(stat != DEAD)
- D.stage_act()
-
//remember to remove the "proc" of the child procs of these.
/mob/living/carbon/proc/handle_blood()
return
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 9125fd67487..e5a658c4b04 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -42,7 +42,7 @@
//Random events (vomiting etc)
handle_random_events()
- if(LAZYLEN(viruses))
+ if(LAZYLEN(diseases))
handle_diseases()
if(QDELETED(src)) // diseases can qdel the mob via transformations
@@ -111,7 +111,9 @@
return
/mob/living/proc/handle_diseases()
- return
+ for(var/thing in diseases)
+ var/datum/disease/D = thing
+ D.stage_act()
/mob/living/proc/handle_random_events()
return
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 8fc051771bd..1d3ada3cd20 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -543,6 +543,7 @@
SetDeaf(0)
heal_overall_damage(1000, 1000)
ExtinguishMob()
+ CureAllDiseases(FALSE)
fire_stacks = 0
on_fire = 0
suiciding = 0
@@ -553,9 +554,9 @@
var/mob/living/carbon/C = src
C.uncuff()
- for(var/thing in C.viruses)
+ for(var/thing in C.diseases)
var/datum/disease/D = thing
- D.cure(0)
+ D.cure(need_immunity = FALSE)
// restore all of the human's blood and reset their shock stage
if(ishuman(src))
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 063726d1556..d4380493fcb 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -66,7 +66,7 @@
var/last_hallucinator_log // Used to log, what was last infliction to hallucination
var/blood_volume = 0 //how much blood the mob has
- hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD)
+ hud_possible = list(HEALTH_HUD,STATUS_HUD,SPECIALROLE_HUD,THOUGHT_HUD)
var/list/status_effects //a list of all status effects the mob has
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 20a186b8429..8a11c96da3f 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -268,10 +268,9 @@
modules += new /obj/item/gps/cyborg(src)
modules += new /obj/item/rlf(src)
- emag = new /obj/item/reagent_containers/spray(src)
+ emag = new /obj/item/reagent_containers/borghypo/basic/emagged_borg_hypo(src) // emagged med. cyborg gets a special hypospray.
+// can pierce through thick skin and hardsuits.
- emag.reagents.add_reagent("sacid", 250)
- emag.name = "Sulfuric acid spray"
fix_modules()
handle_storages()
diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
index 2dfd67140f2..5b40a820fa9 100644
--- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm
@@ -33,6 +33,7 @@
var/next_dest_loc
+
/mob/living/simple_animal/bot/cleanbot/New()
..()
get_targets()
@@ -94,6 +95,8 @@
/mob/living/simple_animal/bot/cleanbot/process_scan(obj/effect/decal/cleanable/D)
for(var/T in target_types)
if(istype(D, T))
+ if(locate(src.type) in D.loc)
+ return FALSE
return D
@@ -120,6 +123,14 @@
if(!target) //Search for cleanables it can see.
target = scan(/obj/effect/decal/cleanable)
+ var/mob/living/simple_animal/bot/cleanbot/otherbot
+ if(target)
+ otherbot = locate(src.type) in target.loc
+
+ if(otherbot && (src != otherbot) && otherbot.mode == BOT_CLEANING)
+ target = null
+ path = list()
+
if(!target && auto_patrol) //Search for cleanables it can see.
if(mode == BOT_IDLE || mode == BOT_START_PATROL)
start_patrol()
@@ -189,7 +200,6 @@
/mob/living/simple_animal/bot/cleanbot/proc/do_clean(obj/effect/decal/cleanable/target)
if(QDELETED(src))
return
-
if(mode == BOT_CLEANING)
QDEL_NULL(target)
anchored = FALSE
diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm
index 8f34b956cec..676fc3368c2 100644
--- a/code/modules/mob/living/simple_animal/bot/medbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/medbot.dm
@@ -399,9 +399,9 @@
if(!treat_virus)
return
- for(var/datum/disease/D as anything in C.viruses)
- if(!(D.visibility_flags & HIDDEN_SCANNER && D.visibility_flags & HIDDEN_PANDEMIC) && D.severity != NONTHREAT && (D.stage > 1 || D.spread_flags & AIRBORNE))
- return TRUE //Medbots see viruses that aren't fully hidden and have developed enough/are airborne, ignoring safe viruses
+ for(var/datum/disease/D as anything in C.diseases)
+ if(!(D.visibility_flags & HIDDEN_HUD) && D.discovered && D.severity != NONTHREAT)
+ return TRUE //Medbots see viruses if they displayed on HUD, ignoring safe viruses
/mob/living/simple_animal/bot/medbot/proc/select_medication(mob/living/carbon/C, beaker_injection)
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index 94f48b21b61..9a70d2fca61 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -815,6 +815,16 @@
if(target)
shootAt(target)
+/mob/living/simple_animal/pet/dog/corgi/borgi/attackby(obj/item/I, mob/living/user)
+ if(istype(I, /obj/item/stack/nanopaste))
+ var/obj/item/stack/nanopaste/N = I
+ N.use(1)
+ if(diseases?.len)
+ CureAllDiseases()
+ visible_message("[name] looks happy! ")
+ chasetail()
+ return ..()
+
/mob/living/simple_animal/pet/dog/corgi/borgi/death(gibbed)
// Only execute the below if we successfully died
. = ..(gibbed)
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index 934040052b3..1c275670e2f 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -170,7 +170,7 @@
beegent.reaction_mob(L, REAGENT_INGEST)
L.reagents.add_reagent(beegent.id, rand(1, 5))
else
- L.reagents.add_reagent("spidertoxin", 5)
+ L.reagents.add_reagent("beetoxin", 5)
/mob/living/simple_animal/hostile/poison/bees/proc/assign_reagent(datum/reagent/R)
if(istype(R))
diff --git a/code/modules/mob/living/simple_animal/hostile/bread_monster.dm b/code/modules/mob/living/simple_animal/hostile/bread_monster.dm
index 40172854186..39a38583990 100644
--- a/code/modules/mob/living/simple_animal/hostile/bread_monster.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bread_monster.dm
@@ -40,6 +40,7 @@ GLOBAL_LIST_EMPTY(bread_monsters)
current_teleport_count += 1
src.transform = src.transform.Scale(scaling_coeff, scaling_coeff)
health = initial(health) + health_increase * current_teleport_count
+ maxHealth = initial(maxHealth) + health_increase * current_teleport_count
harm_intent_damage = initial(harm_intent_damage) + damage_increase * current_teleport_count
melee_damage_lower = initial(melee_damage_lower) + damage_increase * current_teleport_count
melee_damage_upper = initial(melee_damage_upper) + damage_increase * current_teleport_count
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/builder.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/builder.dm
index c3e7df46341..70b65f3cf75 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/builder.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/builder.dm
@@ -37,11 +37,16 @@
spider_intro_text = "Будучи Дроном Ужаса, ваша задача - постройка и защита гнезда. Плетите паутину, используйте свои замедляющие плевки и замораживающие укусы для защиты яиц и гнезда. Помните, вы не регенерируете и двигаетесь медленно вне паутины!."
/mob/living/simple_animal/hostile/poison/terror_spider/builder/spider_specialattack(mob/living/carbon/human/L, poisonable)
+ . = ..()
+
+ if(!.)
+ return FALSE
+
L.Slowed(4 SECONDS)
if(!poisonable)
- return ..()
+ return TRUE
if(L.reagents.has_reagent("frostoil", 100))
- return ..()
+ return TRUE
var/inject_target = pick("chest", "head")
if(L.IsStunned() || L.can_inject(null, FALSE, inject_target, FALSE))
L.reagents.add_reagent("frostoil", 20)
@@ -49,7 +54,7 @@
else
L.reagents.add_reagent("frostoil", 10)
visible_message("[src] buries its long fangs deep into the [inject_target] of [target]!")
- L.attack_animal(src)
+ return TRUE
/mob/living/simple_animal/hostile/poison/terror_spider/builder/Move(atom/newloc, dir, step_x, step_y) //moves slow while not in web, but fast while in. does not regenerate if not in web
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/defiler.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/defiler.dm
index 4aa19194294..67a270c27ed 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/defiler.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/defiler.dm
@@ -43,11 +43,16 @@
return ..(gibbed)
/mob/living/simple_animal/hostile/poison/terror_spider/defiler/spider_specialattack(mob/living/carbon/human/L, poisonable)
+ . = ..()
+
+ if(!.)
+ return FALSE
+
L.AdjustSilence(20 SECONDS)
L.adjustStaminaLoss(39)
L.attack_animal(src)
if(!poisonable)
- return ..()
+ return TRUE
var/inject_target = pick("chest", "head")
if(L.IsParalyzed() || L.can_inject(null, FALSE, inject_target, FALSE) && prob(50))
new /obj/item/organ/internal/body_egg/terror_eggs(L)
@@ -65,8 +70,8 @@
/proc/IsTSInfected(mob/living/carbon/C) // Terror AI requires this
if(C.get_int_organ(/obj/item/organ/internal/body_egg))
- return 1
- return 0
+ return TRUE
+ return FALSE
/obj/structure/spider/terrorweb/white
name = "infested web"
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/guardian.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/guardian.dm
index ffd6373f687..6da266429f4 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/guardian.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/guardian.dm
@@ -46,15 +46,16 @@
var/max_queen_range = 15
/mob/living/simple_animal/hostile/poison/terror_spider/guardian/spider_specialattack(mob/living/carbon/human/L)
+ . = ..()
+
+ if(!.)
+ return FALSE
+
L.adjustStaminaLoss(15)
if(prob(20))
- playsound(src, 'sound/creatures/terrorspiders/bite2.ogg', 120, 1)
- do_attack_animation(L)
visible_message("[src] rams into [L], knocking [L.p_them()] to the floor!")
L.adjustBruteLoss(20)
L.Weaken(4 SECONDS)
- else
- ..()
/mob/living/simple_animal/hostile/poison/terror_spider/guardian/death(gibbed)
if(can_die() && spider_myqueen)
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/healer.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/healer.dm
index 36eba7cc2a7..9a085f5d433 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/healer.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/healer.dm
@@ -97,17 +97,18 @@
seek_cocoon_target()
/mob/living/simple_animal/hostile/poison/terror_spider/healer/spider_specialattack(mob/living/carbon/human/L, poisonable)
+ . = ..()
+ if(!.)
+ return FALSE
if(!poisonable)
- ..()
- return
+ return TRUE
var/inject_target = pick("chest","head")
if(L.IsStunned() || L.can_inject(null, FALSE, inject_target, FALSE))
L.AdjustEyeBlurry(20 SECONDS, 0, 120 SECONDS)
// instead of having a venom that only lasts seconds, we just add the eyeblur directly.
- visible_message("[src] buries its fangs deep into the [inject_target] of [target]!")
+ visible_message(span_danger("[src] buries its fangs deep into the [inject_target] of [target]!"))
else
- visible_message("[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!")
- L.attack_animal(src)
+ visible_message(span_danger("[src] bites [target], but cannot inject venom into [target.p_their()] [inject_target]!"))
/mob/living/simple_animal/hostile/poison/terror_spider/healer/AttackingTarget()
. = ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/lurker.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/lurker.dm
index 7daa9ef7eeb..7bdab378ddf 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/lurker.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/lurker.dm
@@ -51,15 +51,22 @@
melee_damage_lower = initial(melee_damage_lower) * 3
melee_damage_upper = initial(melee_damage_upper) * 3
armour_penetration = initial(armour_penetration) * 25
- visible_message("[src] suddenly attacks and savagely mauls [target]!")
- L.adjustStaminaLoss(45)
- L.AdjustSilence(10 SECONDS)
else
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
armour_penetration = initial(armour_penetration)
visible_message("[src] bites [target]!")
- L.attack_animal(src)
+
+ . = ..() //eat victim
+
+ if(!.)
+ return FALSE
+
+ if(W) //apply debuffs if failed to block
+ L.adjustStaminaLoss(45)
+ L.AdjustSilence(10 SECONDS)
+ return TRUE
+
/mob/living/simple_animal/hostile/poison/terror_spider/lurker/spider_special_action()
if(prob(prob_ai_massweb))
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
index 985104ef44d..6dbf4fff6f8 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/prince.dm
@@ -48,15 +48,21 @@
return ..()
/mob/living/simple_animal/hostile/poison/terror_spider/prince/spider_specialattack(mob/living/carbon/human/L)
- L.adjustStaminaLoss(35) //3 hits for stam crit
if(prob(delimb_chance))
if(L.stat != DEAD) //no dismemberment for dead carbons, less griefy
do_attack_animation(L)
+ if(L.check_shields(src, 25, "[name]", MELEE_ATTACK, armour_penetration))
+ return FALSE
L.adjustBruteLoss(25)
L.Weaken(2 SECONDS)
playsound(src, 'sound/creatures/terrorspiders/rip.ogg', 100, 1)
var/obj/item/organ/external/NB = pick(L.bodyparts)
- visible_message("[src] Tears appart the [NB.name] of [L] with his razor sharp jaws!")
+ visible_message(span_warning("[src] Tears appart the [NB.name] of [L] with his razor sharp jaws!"))
NB.droplimb() //dismemberment
+ L.adjustStaminaLoss(35)
else
- ..()
+ . = ..()
+ if(.)
+ L.adjustStaminaLoss(35) //3 hits for stam crit
+
+
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reaper.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reaper.dm
index 01382585eeb..8a8fb2ac654 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reaper.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reaper.dm
@@ -29,9 +29,10 @@
adjustBruteLoss(1) //degenerates on life, can only get heals from other spiders, or from killing
/mob/living/simple_animal/hostile/poison/terror_spider/reaper/spider_specialattack(mob/living/carbon/human/L)
+ . = ..()
+ if(!.)
+ return FALSE
+
if(L.stat != DEAD) //no healing when biting corpses
- L.attack_animal(src)
L.bleed(25) //bloodsucker
src.adjustBruteLoss(-30) //vampirism
- else
- ..()
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm
index 28a9dcfb073..3626dfb15ca 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm
@@ -201,7 +201,7 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list)
target.attack_animal(src)
/mob/living/simple_animal/hostile/poison/terror_spider/proc/spider_specialattack(mob/living/carbon/human/L, poisonable)
- L.attack_animal(src)
+ return L.attack_animal(src)
/mob/living/simple_animal/hostile/poison/terror_spider/proc/consume_jelly(obj/structure/spider/royaljelly/J)
if(health == maxHealth)
diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/widow.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/widow.dm
index 5ccb78df208..923ba0091be 100644
--- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/widow.dm
+++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/widow.dm
@@ -35,25 +35,27 @@
spider_intro_text = "Будучи Вдовой Ужаса, ваша цель - внести хаос на поле боя при помощи своих плевков, вы также смертоносны вблизи и с каждым укусом вводите в противников опасный яд. Несмотря на скорость и смертоносность, вы довольно хрупки, поэтому не стоит атаковать тяжело вооружённых противников!"
/mob/living/simple_animal/hostile/poison/terror_spider/widow/spider_specialattack(mob/living/carbon/human/L, poisonable)
+ . = ..()
+ if(!.)
+ return FALSE
L.AdjustSilence(10 SECONDS)
if(!poisonable)
- return ..()
+ return TRUE
if(L.reagents.has_reagent("terror_black_toxin", 100))
- return ..()
+ return TRUE
var/inject_target = pick("chest", "head")
if(L.IsStunned() || L.can_inject(null, FALSE, inject_target, FALSE))
L.reagents.add_reagent("terror_black_toxin", 33) // inject our special poison
- visible_message("[src] buries its long fangs deep into the [inject_target] of [target]!")
+ visible_message(span_danger("[src] buries its long fangs deep into the [inject_target] of [target]!"))
else
L.reagents.add_reagent("terror_black_toxin", 20)
- visible_message("[src] pierces armour and buries its long fangs deep into the [inject_target] of [target]!")
- L.attack_animal(src)
+ visible_message(span_danger("[src] pierces armour and buries its long fangs deep into the [inject_target] of [target]!"))
if(!ckey && (!(target in enemies) || L.reagents.has_reagent("terror_black_toxin", 60)))
step_away(src, L)
step_away(src, L)
LoseTarget()
step_away(src, L)
- visible_message("[src] jumps away from [L]!")
+ visible_message(span_notice("[src] jumps away from [L]!"))
/obj/structure/spider/terrorweb/widow
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 9c542a3d5a7..17dcb2ff3c7 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -455,9 +455,18 @@
collar_type = "[initial(collar_type)]"
regenerate_icons()
+/mob/living/simple_animal/proc/check_if_child(mob/possible_child)
+ for(var/childpath in childtype)
+ if (istype(possible_child, childpath))
+ return TRUE
+ return FALSE
+
/mob/living/simple_animal/proc/make_babies() // <3 <3 <3
if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress())
return FALSE
+
+ if (check_if_child(src)) // Children aren't fertile enough
+ return FALSE
next_scan_time = world.time + 400
var/alone = TRUE
@@ -467,12 +476,12 @@
for(var/mob/M in oview(7, src))
if(M.stat != CONSCIOUS) //Check if it's conscious FIRST.
continue
- else if(istype(M, childtype)) //Check for children SECOND.
+ else if(check_if_child(M)) //Check for children SECOND.
children++
else if(istype(M, animal_species))
if(M.ckey)
continue
- else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_;
+ else if(!check_if_child(M) && M.gender == MALE) //Better safe than sorry ;_;
partner = M
else if(isliving(M) && !faction_check_mob(M)) //shyness check. we're not shy in front of things that share a faction with us.
return //we never mate when not alone, so just abort early
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index bf59e1ad76f..e27937370ec 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -508,6 +508,7 @@
var/dead_for_sure = FALSE
var/obj/effect/proc_holder/spell/slime_degradation/parent_spell
var/mob/living/carbon/human/sman
+ powerlevel = 10
/mob/living/simple_animal/slime/invalid/Initialize(mapload, new_colour = "grey", age_state_new = new /datum/slime_age/baby, new_set_nutrition = 700, mob/living/carbon/human/slimeman, obj/effect/proc_holder/spell/slime_degradation/slime_spell)
..()
@@ -518,6 +519,8 @@
sman = slimeman
if(slime_spell)
parent_spell = slime_spell
+ verbs -= /mob/living/simple_animal/slime/verb/Evolve
+ verbs -= /mob/living/simple_animal/slime/verb/Reproduce
/mob/living/simple_animal/slime/invalid/Destroy()
parent_spell = null
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 78d4cd7e94e..fd5291d7991 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -486,10 +486,10 @@
return S
-/mob/living/proc/AdjustSlowedDuration(amount)
+/mob/living/proc/AdjustSlowedDuration(amount, bound_lower = 0, bound_upper = INFINITY)
var/datum/status_effect/incapacitating/slowed/S = IsSlowed()
if(S)
- S.duration += amount
+ S.duration = directional_bounded_sum(S.duration, amount, bound_lower, bound_upper)
/mob/living/proc/AdjustSlowedIntensity(intensity)
var/datum/status_effect/incapacitating/slowed/S = IsSlowed()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 8b9da7b61bc..9ea77a4d555 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -7,7 +7,7 @@
if(mind && mind.current == src)
spellremove(src)
mobspellremove(src)
- QDEL_LIST(viruses)
+ QDEL_LIST(diseases)
for(var/alert in alerts)
clear_alert(alert)
ghostize()
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index cbd5297dfd0..313eec102f8 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -123,6 +123,7 @@
/// Whether antagHUD has been enabled previously.
var/has_enabled_antagHUD = FALSE
var/antagHUD = FALSE // Whether AntagHUD is active right now
+ var/thoughtsHUD = 0 //Just a handler for permanent/temporary THOUGHTS_HUD changing.
var/can_change_intents = 1 //all mobs can change intents by default.
///Override for sound_environments. If this is set the user will always hear a specific type of reverb (Instead of the area defined reverb)
var/sound_environment_override = SOUND_ENVIRONMENT_NONE
@@ -150,7 +151,7 @@
//List of active diseases
- var/list/viruses = list() // list of all diseases in a mob
+ var/list/diseases = list() // list of all diseases in a mob
var/list/resistances = list()
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 32d4ebba41e..d31682694ab 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -432,13 +432,23 @@
return FALSE
user.visible_message("[user.name] поглоща[pluralize_ru(user.gender,"ет","ют")] [affecting.name]!")
+
if(affecting.mind)
add_attack_logs(attacker, affecting, "Devoured")
+
if(isvampire(user))
user.adjust_nutrition(affecting.blood_nutrients)
else
user.adjust_nutrition(10 * affecting.health)
+ for(var/datum/disease/virus/V in affecting.diseases)
+ if(V.spread_flags > NON_CONTAGIOUS)
+ V.Contract(user)
+
+ for(var/datum/disease/virus/V in user.diseases)
+ if(V.spread_flags > NON_CONTAGIOUS)
+ V.Contract(affecting)
+
affecting.forceMove(user)
LAZYADD(attacker.stomach_contents, affecting)
qdel(src)
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index e14de64d365..af1305c0ff4 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -81,6 +81,9 @@ GLOBAL_LIST_EMPTY(fax_blacklist)
GLOB.hidden_ussp |= department
/obj/machinery/photocopier/faxmachine/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 3f8f48dee88..6b93e7dc6dc 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -20,6 +20,7 @@
resistance_flags = FLAMMABLE
max_integrity = 50
attack_verb = list("bapped")
+ permeability_coefficient = 0.01
dog_fashion = /datum/dog_fashion/head
var/header //Above the main body, displayed at the top
var/info //What's actually written on the paper.
@@ -782,7 +783,8 @@
STOP_PROCESSING(SSobj, src)
if(mytarget && !used)
var/mob/living/carbon/target = mytarget
- target.ForceContractDisease(new /datum/disease/transformation/corgi)
+ var/datum/disease/virus/transformation/corgi/D = new
+ D.Contract(target)
return ..()
@@ -806,10 +808,12 @@
var/obj/machinery/photocopier/faxmachine/fax = locateUID(faxmachineid)
if(myeffect == "Borgification")
to_chat(target,"You seem to comprehend the AI a little better. Why are your muscles so stiff?")
- target.ForceContractDisease(new /datum/disease/transformation/robot)
+ var/datum/disease/virus/transformation/robot/D = new
+ D.Contract(target)
else if(myeffect == "Corgification")
to_chat(target,"You hear distant howling as the world seems to grow bigger around you. Boy, that itch sure is getting worse!")
- target.ForceContractDisease(new /datum/disease/transformation/corgi)
+ var/datum/disease/virus/transformation/corgi/D = new
+ D.Contract(target)
else if(myeffect == "Death By Fire")
to_chat(target,"You feel hotter than usual. Maybe you should lowe-wait, is that your hand melting?")
var/turf/simulated/T = get_turf(target)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 985d4210e4c..714122fd12d 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -816,6 +816,10 @@
/obj/machinery/power/apc/attack_hand(mob/user)
if(!user)
return
+
+ if(..())
+ return TRUE
+
add_fingerprint(user)
if(usr == user && opened && !issilicon(user))
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 38e6fa9924d..1ded07a2a83 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -37,6 +37,9 @@ GLOBAL_LIST_EMPTY(rad_collectors)
/obj/machinery/power/rad_collector/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
+
if(anchored)
if(!src.locked)
add_fingerprint(user)
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 92cd9599ff3..8caccfba7cc 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -37,6 +37,9 @@
return attack_hand(user)
/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
if(construction_state >= 3)
interact(user)
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 4d5aa5a4617..da3f01f882d 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -353,6 +353,9 @@
ui_interact(user)
/obj/machinery/power/smes/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 5d3fb938b5b..41aceeece1a 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -49,7 +49,13 @@
BB = new projectile_type(src, params)
return
-/obj/item/ammo_casing/attackby(obj/item/I as obj, mob/user as mob, params)
+/obj/item/ammo_casing/decompile_act(obj/item/matter_decompiler/C, mob/user)
+ if(!BB)
+ qdel(src)
+ return TRUE
+ return ..()
+
+/obj/item/ammo_casing/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/ammo_box))
var/obj/item/ammo_box/box = I
if(isturf(loc))
@@ -58,16 +64,16 @@
if(box.stored_ammo.len >= box.max_ammo)
break
if(bullet.BB)
- if(box.give_round(bullet, 0))
+ if(box.give_round(bullet, FALSE))
boolets++
else
continue
if(boolets > 0)
box.update_icon()
- to_chat(user, "You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.")
+ to_chat(user, span_notice("You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s."))
playsound(src, 'sound/weapons/gun_interactions/bulletinsert.ogg', 50, 1)
else
- to_chat(user, "You fail to collect anything!")
+ to_chat(user, span_warning("You fail to collect anything!"))
else
if(istype(I, /obj/item/screwdriver))
if(BB)
@@ -75,19 +81,19 @@
var/tmp_label = ""
var/label_text = sanitize(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label))
if(length(label_text) > 20)
- to_chat(user, "The inscription can be at most 20 characters long.")
+ to_chat(user, span_warning("The inscription can be at most 20 characters long."))
else
if(label_text == "")
- to_chat(user, "You scratch the inscription off of [initial(BB)].")
+ to_chat(user, span_notice("You scratch the inscription off of [initial(BB)]."))
BB.name = initial(BB.name)
else
- to_chat(user, "You inscribe \"[label_text]\" into \the [initial(BB.name)].")
+ to_chat(user, span_notice("You inscribe \"[label_text]\" into \the [initial(BB.name)]."))
BB.name = "[initial(BB.name)] \"[label_text]\""
else
- to_chat(user, "You can only inscribe a metal bullet.")//because inscribing beanbags is silly
+ to_chat(user, span_notice("You can only inscribe a metal bullet.")) //because inscribing beanbags is silly
else
- to_chat(user, "There is no bullet in the casing to inscribe anything into.")
+ to_chat(user, span_notice("There is no bullet in the casing to inscribe anything into."))
..()
/obj/item/ammo_casing/proc/leave_residue(mob/living/carbon/human/H)
@@ -153,19 +159,19 @@
update_icon()
return b
-/obj/item/ammo_box/proc/give_round(obj/item/ammo_casing/R, replace_spent = 0)
+/obj/item/ammo_box/proc/give_round(obj/item/ammo_casing/R, replace_spent = FALSE)
// Boxes don't have a caliber type, magazines do. Not sure if it's intended or not, but if we fail to find a caliber, then we fall back to ammo_type.
if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type))
- return 0
+ return FALSE
if(!accept_subtypes && R != src.ammo_type)
- return 0
+ return FALSE
if(stored_ammo.len < max_ammo)
stored_ammo += R
R.loc = src
playsound(src, insert_sound, 50, 1)
update_mat_value()
- return 1
+ return TRUE
//for accessibles magazines (e.g internal ones) when full, start replacing spent ammo
else if(replace_spent)
for(var/obj/item/ammo_casing/AC in stored_ammo)
@@ -177,14 +183,14 @@
R.loc = src
playsound(src, replacing_sound, 50, 1)
update_mat_value()
- return 1
+ return TRUE
- return 0
+ return FALSE
/obj/item/ammo_box/proc/can_load(mob/user)
- return 1
+ return TRUE
-/obj/item/ammo_box/attackby(obj/item/A, mob/user, params, silent = 0, replace_spent = 0)
+/obj/item/ammo_box/attackby(obj/item/A, mob/user, params, silent = FALSE, replace_spent = FALSE)
var/num_loaded = 0
if(!can_load(user))
return
@@ -205,19 +211,19 @@
num_loaded++
if(num_loaded)
if(!silent)
- to_chat(user, "You load [num_loaded] shell\s into \the [src]!")
+ to_chat(user, span_notice("You load [num_loaded] shell\s into \the [src]!"))
playsound(src, load_sound, 50, 1)
A.update_icon()
update_icon()
return num_loaded
-/obj/item/ammo_box/attack_self(mob/user as mob)
+/obj/item/ammo_box/attack_self(mob/user)
var/obj/item/ammo_casing/A = get_round()
if(A)
user.put_in_hands(A)
playsound(src, remove_sound, 50, 1)
- to_chat(user, "You remove a round from \the [src]!")
+ to_chat(user, span_notice("You remove a round from \the [src]!"))
update_icon()
/obj/item/ammo_box/update_icon()
diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm
index 43daf0bbfa9..4f6920a9c1e 100644
--- a/code/modules/projectiles/ammunition/ammo_casings.dm
+++ b/code/modules/projectiles/ammunition/ammo_casings.dm
@@ -20,10 +20,10 @@
projectile_type = /obj/item/projectile/bullet/weakbullet3/fortynr
/obj/item/ammo_casing/a762
- desc = "A 7.62mm bullet casing."
+ desc = "A 7.62x54mm bullet casing."
icon_state = "762-casing"
materials = list(MAT_METAL = 4000)
- caliber = "a762"
+ caliber = "7.62x54mm"
projectile_type = /obj/item/projectile/bullet
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
@@ -33,10 +33,10 @@
projectile_type = /obj/item/projectile/bullet/weakbullet3
/obj/item/ammo_casing/ftt762
- desc = "A fusty 7.62mm TT bullet casing."
+ desc = "A fusty 7.62x25mm TT bullet casing."
icon_state = "r-casing"
materials = list(MAT_METAL = 1000)
- caliber = "ftt762"
+ caliber = "7.62x25mm"
projectile_type = /obj/item/projectile/bullet/ftt762
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
@@ -161,9 +161,9 @@
projectile_type = /obj/item/projectile/bullet/midbullet3
/obj/item/ammo_casing/n762
- desc = "A 7.62x38mmR bullet casing."
+ desc = "A 7.62x38mm bullet casing."
materials = list(MAT_METAL = 4000)
- caliber = "n762"
+ caliber = "7.62x38mm"
projectile_type = /obj/item/projectile/bullet
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
muzzle_flash_range = MUZZLE_FLASH_RANGE_STRONG
@@ -405,21 +405,20 @@
/obj/item/ammo_casing/a556
desc = "A 5.56mm bullet casing."
materials = list(MAT_METAL = 3250)
- caliber = "a556"
+ caliber = "5.56mm"
projectile_type = /obj/item/projectile/bullet/heavybullet
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
/obj/item/ammo_casing/a545
desc = "A 5.45x39mm bullet casing."
- caliber = "a545"
+ caliber = "5.45x39mm"
projectile_type = /obj/item/projectile/bullet/midbullet3
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL
muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL
/obj/item/ammo_casing/a545/fusty
desc = "A fusty 5.45x39mm bullet casing."
- caliber = "f545"
materials = list(MAT_METAL = 1000)
projectile_type = /obj/item/projectile/bullet/f545
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
@@ -441,13 +440,13 @@
/obj/item/ammo_casing/caseless/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, distro, quiet, zone_override = "", spread)
if(..())
loc = null
- return 1
+ return TRUE
else
- return 0
+ return FALSE
/obj/item/ammo_casing/caseless/a75
desc = "A .75 bullet casing."
- caliber = "75"
+ caliber = ".75"
materials = list(MAT_METAL = 8000)
projectile_type = /obj/item/projectile/bullet/gyro
muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_STRONG
@@ -472,7 +471,7 @@
caliber = "foam_force"
projectile_type = /obj/item/projectile/bullet/reusable/foam_dart
muzzle_flash_effect = null
- var/modified = 0
+ var/modified = FALSE
harmful = FALSE
/obj/item/ammo_casing/caseless/foam_dart/update_icon()
@@ -491,7 +490,7 @@
..()
var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB
if(istype(A, /obj/item/screwdriver) && !modified)
- modified = 1
+ modified = TRUE
FD.damage_type = BRUTE
update_icon()
else if((istype(A, /obj/item/pen)) && modified && !FD.pen)
@@ -501,8 +500,8 @@
FD.log_override = FALSE
FD.pen = A
FD.damage = 5
- FD.nodamage = 0
- to_chat(user, "You insert [A] into [src].")
+ FD.nodamage = FALSE
+ to_chat(user, span_notice("You insert [A] into [src]."))
return
/obj/item/ammo_casing/caseless/foam_dart/attack_self(mob/living/user)
@@ -511,7 +510,7 @@
FD.damage = initial(FD.damage)
FD.nodamage = initial(FD.nodamage)
user.put_in_hands(FD.pen)
- to_chat(user, "You remove [FD.pen] from [src].")
+ to_chat(user, span_notice("You remove [FD.pen] from [src]."))
FD.pen = null
/obj/item/ammo_casing/caseless/foam_dart/riot
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index 1795086ea71..fded46da5e4 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -1,39 +1,60 @@
+/**
+ * AMMO BOX
+ */
+
+// REVOLVER
/obj/item/ammo_box/a357
- name = "speed loader (.357)"
- desc = "Designed to quickly reload revolvers."
- materials = list(MAT_METAL = 2000)
+ name = "ammo box (.357)"
+ icon_state = "357OLD" // see previous entry for explanation of these vars
ammo_type = /obj/item/ammo_casing/a357
+ max_ammo = 20
+ multiple_sprites = 1
+
+/obj/item/ammo_box/n762
+ name = "ammo box (7.62x38mmR)"
+ icon_state = "riflebox"
+ origin_tech = "combat=2"
+ ammo_type = /obj/item/ammo_casing/n762
+ max_ammo = 14
+
+// SHOTGUN
+/obj/item/ammo_box/shotgun
+ name = "Ammunition Box (Slug)"
+ icon_state = "slugbox"
+ ammo_type = /obj/item/ammo_casing/shotgun
max_ammo = 7
- icon_state = "357-7" // DEFAULT icon, composed of prefix + "-" + max_ammo for multiple_sprites == 1 boxes
- multiple_sprites = 1 // see: /obj/item/ammo_box/update_icon()
- icon_prefix = "357" // icon prefix, used in above formula to generate dynamic icons
-/obj/item/ammo_box/improvisedrevolver
- name = "makeshift speedloader"
- desc = "Speedloader made from shit and sticks"
- ammo_type = /obj/item/ammo_casing/revolver/improvised
- icon_state = "makeshift_speedloader-4"
- multiple_sprites = 1
- icon_prefix = "makeshift_speedloader"
- max_ammo = 4
-
-/obj/item/ammo_box/c38
- name = "speed loader (.38)"
- desc = "Designed to quickly reload revolvers."
- icon_state = "38"
- materials = list(MAT_METAL = 2000)
- ammo_type = /obj/item/ammo_casing/c38
- max_ammo = 6
- icon_state = "38-6" // see previous entry for explanation of these vars
- multiple_sprites = 1
- icon_prefix = "38"
+/obj/item/ammo_box/shotgun/buck
+ name = "Ammunition Box (Buckshot)"
+ icon_state = "buckshotbox"
+ ammo_type = /obj/item/ammo_casing/shotgun/buckshot
-/obj/item/ammo_box/c38/hp
- name = "speed loader (.38 Hollow-Point)"
- ammo_type = /obj/item/ammo_casing/c38/hp
- icon_state = "38hp-6"
- icon_prefix = "38hp"
+/obj/item/ammo_box/shotgun/dragonsbreath
+ name = "Ammunition Box (Dragonsbreath)"
+ icon_state = "dragonsbreathbox"
+ ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
+/obj/item/ammo_box/shotgun/stun
+ name = "Ammunition Box (Stun shells)"
+ icon_state = "stunbox"
+ ammo_type = /obj/item/ammo_casing/shotgun/stunslug
+
+/obj/item/ammo_box/shotgun/beanbag
+ name = "Ammunition Box (Beanbag shells)"
+ icon_state = "beanbagbox"
+ ammo_type = /obj/item/ammo_casing/shotgun/beanbag
+
+/obj/item/ammo_box/shotgun/rubbershot
+ name = "Ammunition Box (Rubbershot shells)"
+ icon_state = "rubbershotbox"
+ ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
+
+/obj/item/ammo_box/shotgun/tranquilizer
+ name = "Ammunition Box (Tranquilizer darts)"
+ icon_state = "tranqbox"
+ ammo_type = /obj/item/ammo_casing/shotgun/tranquilizer
+
+// AUTOMATIC
/obj/item/ammo_box/c9mm
name = "ammo box (9mm)"
icon_state = "9mmbox"
@@ -98,6 +119,7 @@
ammo_type = /obj/item/ammo_casing/c46x30mm/inc
max_ammo = 40
+// MISC
/obj/item/ammo_box/a40mm
name = "ammo box (40mm grenades)"
icon_state = "40mm"
@@ -105,98 +127,140 @@
max_ammo = 4
multiple_sprites = 1
-/obj/item/ammo_box/a762
- name = "stripper clip (7.62mm)"
- desc = "A stripper clip."
- icon_state = "762"
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 5
+/obj/item/ammo_box/laserammobox
+ name = "laser ammo box"
+ icon_state = "laserbox"
+ ammo_type = /obj/item/ammo_casing/laser
+ max_ammo = 40
+
+/obj/item/ammo_box/foambox
+ name = "ammo box (Foam Darts)"
+ icon = 'icons/obj/weapons/toy.dmi'
+ icon_state = "foambox"
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart
+ max_ammo = 40
+
+/obj/item/ammo_box/foambox/riot
+ icon_state = "foambox_riot"
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
+
+/obj/item/ammo_box/foambox/sniper
+ name = "ammo box (Foam Sniper Darts)"
+ icon = 'icons/obj/weapons/toy.dmi'
+ icon_state = "foambox_sniper"
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper
+ max_ammo = 40
+
+/obj/item/ammo_box/foambox/sniper/riot
+ icon_state = "foambox_sniper_riot"
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper/riot
+
+/**
+ * SPEEDLOADER
+ */
+
+// REVOLVER
+/obj/item/ammo_box/speedloader/a357
+ name = "speed loader (.357)"
+ desc = "Designed to quickly reload revolvers."
+ materials = list(MAT_METAL = 2000)
+ ammo_type = /obj/item/ammo_casing/a357
+ max_ammo = 7
+ caliber = ".357"
+ icon_state = "357-7" // DEFAULT icon, composed of prefix + "-" + max_ammo for multiple_sprites == 1 boxes
+ multiple_sprites = 1 // see: /obj/item/ammo_box/update_icon()
+ icon_prefix = "357" // icon prefix, used in above formula to generate dynamic icons
+
+/obj/item/ammo_box/speedloader/improvisedrevolver
+ name = "makeshift speedloader"
+ desc = "Speedloader made from shit and sticks"
+ ammo_type = /obj/item/ammo_casing/revolver/improvised
+ icon_state = "makeshift_speedloader-4"
multiple_sprites = 1
+ icon_prefix = "makeshift_speedloader"
+ max_ammo = 4
+ caliber = ".257"
-/obj/item/ammo_box/n762
- name = "ammo box (7.62x38mmR)"
- icon_state = "riflebox"
- origin_tech = "combat=2"
- ammo_type = /obj/item/ammo_casing/n762
- max_ammo = 14
+/obj/item/ammo_box/speedloader/c38
+ name = "speed loader (.38)"
+ desc = "Designed to quickly reload revolvers."
+ icon_state = "38"
+ materials = list(MAT_METAL = 2000)
+ ammo_type = /obj/item/ammo_casing/c38
+ max_ammo = 6
+ caliber = ".38"
+ icon_state = "38-6"
+ multiple_sprites = 1
+ icon_prefix = "38"
-/obj/item/ammo_box/shotgun
+/obj/item/ammo_box/speedloader/c38/hp
+ name = "speed loader (.38 Hollow-Point)"
+ ammo_type = /obj/item/ammo_casing/c38/hp
+ icon_state = "38hp-6"
+ icon_prefix = "38hp"
+
+// SHOTGUN
+/obj/item/ammo_box/speedloader/shotgun
name = "Shotgun Speedloader (slug)"
icon_state = "slugloader"
origin_tech = "combat=2"
ammo_type = /obj/item/ammo_casing/shotgun
max_ammo = 7
+ caliber = ".12"
multiple_sprites = 1
w_class = WEIGHT_CLASS_NORMAL
-/obj/item/ammo_box/shotgun/buck
+/obj/item/ammo_box/speedloader/shotgun/buck
name = "Shotgun Speedloader (buckshot)"
icon_state = "buckloader"
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
-/obj/item/ammo_box/shotgun/dragonsbreath
+/obj/item/ammo_box/speedloader/shotgun/dragonsbreath
name = "Shotgun Speedloader (dragonsbreath)"
icon_state = "dragonsbreathloader"
ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
-/obj/item/ammo_box/shotgun/stun
+/obj/item/ammo_box/speedloader/shotgun/stun
name = "Shotgun Speedloader (stun)"
icon_state = "stunloader"
ammo_type = /obj/item/ammo_casing/shotgun/stunslug
-/obj/item/ammo_box/shotgun/beanbag
+/obj/item/ammo_box/speedloader/shotgun/beanbag
name = "Shotgun Speedloader (beanbag)"
icon_state = "beanbagloader"
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
-/obj/item/ammo_box/shotgun/rubbershot
+/obj/item/ammo_box/speedloader/shotgun/rubbershot
name = "Shotgun Speedloader (rubbershot)"
icon_state = "rubbershotloader"
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
-/obj/item/ammo_box/shotgun/tranquilizer
+/obj/item/ammo_box/speedloader/shotgun/tranquilizer
name = "Shotgun Speedloader (tranquilizer)"
icon_state = "tranqloader"
ammo_type = /obj/item/ammo_casing/shotgun/tranquilizer
-/obj/item/ammo_box/shotgun/universal
+/obj/item/ammo_box/speedloader/shotgun/universal
name = "Shotgun Speedloader"
icon_state = "slugloader"
ammo_type = null
- caliber = ".12"
-//FOAM DARTS
-/obj/item/ammo_box/foambox
- name = "ammo box (Foam Darts)"
- icon = 'icons/obj/weapons/toy.dmi'
- icon_state = "foambox"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- max_ammo = 40
-
-/obj/item/ammo_box/foambox/riot
- icon_state = "foambox_riot"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
-
-/obj/item/ammo_box/foambox/sniper
- name = "ammo box (Foam Sniper Darts)"
- icon = 'icons/obj/weapons/toy.dmi'
- icon_state = "foambox_sniper"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper
- max_ammo = 40
-
-/obj/item/ammo_box/foambox/sniper/riot
- icon_state = "foambox_sniper_riot"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/sniper/riot
-
-/obj/item/ammo_box/caps
+// MISC
+/obj/item/ammo_box/speedloader/caps
name = "speed loader (caps)"
icon_state = "357"
ammo_type = /obj/item/ammo_casing/cap
max_ammo = 7
multiple_sprites = 1
-/obj/item/ammo_box/laserammobox
- name = "laser ammo box"
- icon_state = "laserbox"
- ammo_type = /obj/item/ammo_casing/laser
- max_ammo = 40
+/**
+ * STRIPPER CLIP
+ */
+
+/obj/item/ammo_box/a762
+ name = "stripper clip (7.62mm)"
+ desc = "A stripper clip."
+ icon_state = "762"
+ ammo_type = /obj/item/ammo_casing/a762
+ max_ammo = 5
+ multiple_sprites = 1
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index 922b9675b66..3d59e3dcf9b 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -39,9 +39,9 @@
for(var/i in 1 to rand(0, max_ammo*2))
rotate()
-/obj/item/ammo_box/magazine/internal/cylinder/give_round(obj/item/ammo_casing/R, replace_spent = 0)
+/obj/item/ammo_box/magazine/internal/cylinder/give_round(obj/item/ammo_casing/R, replace_spent = FALSE)
if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type))
- return 0
+ return FALSE
for(var/i in 1 to stored_ammo.len)
var/obj/item/ammo_casing/bullet = stored_ammo[i]
@@ -51,9 +51,9 @@
if(bullet)
bullet.loc = get_turf(loc)
- return 1
+ return TRUE
- return 0
+ return FALSE
/obj/item/ammo_box/magazine/internal/cylinder/rev38
name = "detective revolver cylinder"
@@ -72,7 +72,7 @@
/obj/item/ammo_box/magazine/internal/cylinder/rev762
name = "nagant revolver cylinder"
ammo_type = /obj/item/ammo_casing/n762
- caliber = "n762"
+ caliber = "7.62x38mm"
max_ammo = 7
/obj/item/ammo_box/magazine/internal/cylinder/rev36
@@ -192,7 +192,7 @@
name = "bolt action rifle internal magazine"
desc = "Oh god, this shouldn't be here"
ammo_type = /obj/item/ammo_casing/a762
- caliber = "a762"
+ caliber = "7.62x54mm"
max_ammo = 5
multiload = 1
@@ -279,10 +279,10 @@
/obj/item/ammo_box/magazine/enforcer/proc/is_rubber()//if the topmost bullet is a rubber one
var/ammo = ammo_count()
if(!ammo)
- return 0
+ return FALSE
if(istype(contents[contents.len], /obj/item/ammo_casing/rubber9mm))
- return 1
- return 0
+ return TRUE
+ return FALSE
/obj/item/ammo_box/magazine/enforcer/lethal
name = "handgun magazine (9mm)"
@@ -410,7 +410,7 @@
name = "specialized magazine (.75)"
icon_state = "75"
ammo_type = /obj/item/ammo_casing/caseless/a75
- caliber = "75"
+ caliber = ".75"
multiple_sprites = 2
max_ammo = 8
@@ -419,7 +419,7 @@
icon_state = "5.56m"
origin_tech = "combat=5"
ammo_type = /obj/item/ammo_casing/a556
- caliber = "a556"
+ caliber = "5.56mm"
max_ammo = 30
multiple_sprites = 2
@@ -429,26 +429,27 @@
desc= "A universal magazine for an AK style rifle."
origin_tech = "combat=5;syndicate=1"
ammo_type = /obj/item/ammo_casing/a545
- caliber = "a545"
+ caliber = "5.45x39mm"
max_ammo = 30
multiple_sprites = 2
+
/obj/item/ammo_box/magazine/aksu
name = "AK magazine (5.45x39mm)"
icon_state = "ak47mag"
desc= "An antique fusty magazine for an AK rifle."
origin_tech = "combat=4;syndicate=1"
ammo_type = /obj/item/ammo_casing/a545/fusty
- caliber = "f545"
+ caliber = "5.45x39mm"
max_ammo = 30
multiple_sprites = 2
/obj/item/ammo_box/magazine/ppsh
- name = "PPSh drum (7,62x25mm)"
+ name = "PPSh drum (7.62x25mm)"
icon_state = "ppshDrum"
desc= "An antique drum for an PPSh submacnine."
origin_tech = "combat=3;syndicate=1"
ammo_type = /obj/item/ammo_casing/ftt762
- caliber = "ftt762"
+ caliber = "7.62x25mm"
max_ammo = 71
multiple_sprites = 2
@@ -565,10 +566,10 @@
/obj/item/ammo_box/magazine/toy/enforcer/proc/is_riot()//if the topmost bullet is a riot dart
var/ammo = ammo_count()
if(!ammo)
- return 0
+ return FALSE
if(istype(contents[contents.len], /obj/item/ammo_casing/caseless/foam_dart/riot))
- return 1
- return 0
+ return TRUE
+ return FALSE
/obj/item/ammo_box/magazine/toy/smgm45
name = "donksoft SMG magazine"
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index 1424217276e..fdcdc4363cc 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -29,12 +29,13 @@
. = ..()
if(.)
return
- var/num_loaded = magazine.attackby(A, user, params, 1)
- if(num_loaded)
- to_chat(user, "You load [num_loaded] shell\s into \the [src].")
- A.update_icon()
- update_icon()
- chamber_round(0)
+ if(istype(A, /obj/item/ammo_box/speedloader))
+ var/num_loaded = magazine.attackby(A, user, params, TRUE)
+ if(num_loaded)
+ to_chat(user, span_notice("You load [num_loaded] shell\s into \the [src]."))
+ A.update_icon()
+ update_icon()
+ chamber_round(0)
/obj/item/gun/projectile/revolver/attack_self(mob/living/user)
var/num_unloaded = 0
@@ -49,9 +50,9 @@
playsound(get_turf(CB), "casingdrop", 60, 1)
num_unloaded++
if(num_unloaded)
- to_chat(user, "You unload [num_unloaded] shell\s from [src].")
+ to_chat(user, span_notice("You unload [num_unloaded] shell\s from [src]."))
else
- to_chat(user, "[src] is empty!")
+ to_chat(user, span_notice("[src] is empty!"))
/obj/item/gun/projectile/revolver/verb/spin()
set name = "Spin Chamber"
@@ -68,7 +69,7 @@
C.spin()
chamber_round(0)
playsound(loc, 'sound/weapons/revolver_spin.ogg', 50, 1)
- usr.visible_message("[usr] spins [src]'s chamber.", "You spin [src]'s chamber.")
+ usr.visible_message("[usr] spins [src]'s chamber.", span_notice("You spin [src]'s chamber."))
else
verbs -= /obj/item/gun/projectile/revolver/verb/spin
@@ -85,7 +86,7 @@
/obj/item/gun/projectile/revolver/examine(mob/user)
. = ..()
- . += "[get_ammo(0,0)] of those are live rounds."
+ . += span_notice("[get_ammo(0,0)] of those are live rounds")
/obj/item/gun/projectile/revolver/detective
desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds."
@@ -146,13 +147,13 @@
/obj/item/gun/projectile/revolver/fingergun/shoot_with_empty_chamber(/*mob/living/user as mob|obj*/)
- to_chat(usr, "You are out of ammo! You holster your fingers.")
+ to_chat(usr, span_notice("You are out of ammo! You holster your fingers."))
qdel(src)
return
/obj/item/gun/projectile/revolver/fingergun/afterattack(atom/target, mob/living/user, flag, params)
if(!user.mind.miming)
- to_chat(usr, "You must dedicate yourself to silence first. Use your fingers if you wish to holster them.")
+ to_chat(usr, span_notice("You must dedicate yourself to silence first. Use your fingers if you wish to holster them."))
return
..()
@@ -160,7 +161,7 @@
return
/obj/item/gun/projectile/revolver/fingergun/attack_self(mob/living/user = usr)
- to_chat(user, "You holster your fingers. Another time.")
+ to_chat(user, span_notice("You holster your fingers. Another time."))
qdel(src)
return
@@ -191,7 +192,7 @@
desc = "An old model of revolver that originated in Russia. Able to be suppressed. Uses 7.62x38mmR ammo."
icon_state = "nagant"
origin_tech = "combat=3"
- can_suppress = 1
+ can_suppress = TRUE
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev762
/obj/item/gun/projectile/revolver/c36
@@ -209,7 +210,7 @@
desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism that spins the chamber before each trigger pull."
origin_tech = "combat=2;materials=2"
mag_type = /obj/item/ammo_box/magazine/internal/rus357
- var/spun = 0
+ var/spun = FALSE
/obj/item/gun/projectile/revolver/russian/New()
@@ -222,14 +223,14 @@
var/random = rand(1, magazine.max_ammo)
if(random <= get_ammo(0,0))
chamber_round()
- spun = 1
+ spun = TRUE
/obj/item/gun/projectile/revolver/russian/attackby(obj/item/A, mob/user, params)
var/num_loaded = ..()
if(num_loaded)
- user.visible_message("[user] loads a single bullet into the revolver and spins the chamber.", "You load a single bullet into the chamber and spin it.")
+ user.visible_message("[user] loads a single bullet into the revolver and spins the chamber.", span_notice("You load a single bullet into the chamber and spin it."))
else
- user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.")
+ user.visible_message("[user] spins the chamber of the revolver.", span_notice("You spin the revolver's chamber."))
if(get_ammo() > 0)
Spin()
update_icon()
@@ -238,7 +239,7 @@
/obj/item/gun/projectile/revolver/russian/attack_self(mob/user)
if(!spun && can_shoot())
- user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.")
+ user.visible_message("[user] spins the chamber of the revolver.", span_notice("You spin the revolver's chamber."))
Spin()
else
var/num_unloaded = 0
@@ -251,9 +252,9 @@
playsound(get_turf(CB), "casingdrop", 60, 1)
num_unloaded++
if(num_unloaded)
- to_chat(user, "You unload [num_unloaded] shell\s from [src].")
+ to_chat(user, span_notice("You unload [num_unloaded] shell\s from [src]."))
else
- to_chat(user, "[src] is empty.")
+ to_chat(user, span_notice("[src] is empty."))
/obj/item/gun/projectile/revolver/russian/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)
if(flag)
@@ -266,15 +267,15 @@
return
if(target != user)
if(ismob(target))
- to_chat(user, "A mechanism prevents you from shooting anyone but yourself!")
+ to_chat(user, span_notice("A mechanism prevents you from shooting anyone but yourself!"))
return
if(ishuman(user))
if(!spun)
- to_chat(user, "You need to spin the revolver's chamber first!")
+ to_chat(user, span_notice("You need to spin the revolver's chamber first!"))
return
- spun = 0
+ spun = FALSE
if(chambered)
var/obj/item/ammo_casing/AC = chambered
@@ -284,15 +285,15 @@
if(zone == "head" || zone == "eyes" || zone == "mouth")
shoot_self(user, zone)
else
- user.visible_message("[user.name] cowardly fires [src] at [user.p_their()] [zone]!", "You cowardly fire [src] at your [zone]!", "You hear a gunshot!")
+ user.visible_message(span_danger("[user.name] cowardly fires [src] at [user.p_their()] [zone]!"), span_userdanger("You cowardly fire [src] at your [zone]!"), span_italics("You hear a gunshot!"))
return
- user.visible_message("*click*")
+ user.visible_message(span_danger("*click*"))
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
/obj/item/gun/projectile/revolver/russian/proc/shoot_self(mob/living/carbon/human/user, affecting = "head")
user.apply_damage(300, BRUTE, affecting)
- user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!")
+ user.visible_message(span_danger("[user.name] fires [src] at [user.p_their()] head!"), span_userdanger("You fire [src] at your head!"), span_italics("You hear a gunshot!"))
/obj/item/gun/projectile/revolver/russian/soul
name = "cursed Russian revolver"
@@ -304,7 +305,7 @@
if(!SS.transfer_soul("FORCE", user)) //Something went wrong
qdel(SS)
return
- user.visible_message("[user.name]'s soul is captured by \the [src]!", "You've lost the gamble! Your soul is forfeit!")
+ user.visible_message(span_danger("[user.name]'s soul is captured by \the [src]!"), span_userdanger("You've lost the gamble! Your soul is forfeit!"))
/obj/item/gun/projectile/revolver/capgun
name = "cap gun"
@@ -322,7 +323,7 @@
/obj/item/gun/projectile/revolver/improvisedrevolver/afterattack(atom/target, mob/living/user, flag, params)
if(prob(10))
chamber_round(1)
- user.visible_message("*CRACK*")
+ user.visible_message(span_danger("*CRACK*"))
return
..()
@@ -358,7 +359,7 @@
options["Cancel"] = null
/obj/item/gun/projectile/revolver/doublebarrel/attackby(obj/item/A, mob/user, params)
- if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing))
+ if(istype(A, /obj/item/ammo_box/speedloader) || istype(A, /obj/item/ammo_casing))
chamber_round()
if(istype(A, /obj/item/melee/energy))
var/obj/item/melee/energy/W = A
@@ -385,9 +386,9 @@
playsound(get_turf(CB), 'sound/weapons/gun_interactions/shotgun_fall.ogg', 70, 1)
num_unloaded++
if(num_unloaded)
- to_chat(user, "You break open \the [src] and unload [num_unloaded] shell\s.")
+ to_chat(user, span_notice("You break open \the [src] and unload [num_unloaded] shell\s."))
else
- to_chat(user, "[src] is empty.")
+ to_chat(user, span_notice("[src] is empty."))
// IMPROVISED SHOTGUN //
@@ -445,18 +446,18 @@
sawn_state = SAWN_OFF
w_class = WEIGHT_CLASS_SMALL
force = 10
- can_unsuppress = 0
+ can_unsuppress = FALSE
slot_flags = null
origin_tech = "" // NO GIVAWAYS
mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised/cane
sawn_desc = "I'm sorry, but why did you saw your cane in the first place?"
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
fire_sound = 'sound/weapons/gunshots/1suppres.ogg'
- suppressed = 1
- needs_permit = 0 //its just a cane beepsky.....
+ suppressed = TRUE
+ needs_permit = FALSE //its just a cane beepsky.....
/obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/is_crutch()
- return 1
+ return TRUE
/obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/update_icon()
return
@@ -474,7 +475,7 @@
f_name = "some "
else
f_name = "a "
- f_name += "blood-stained [name]!"
+ f_name += span_danger("blood-stained [name]!")
. = list("[bicon(src)] That's [f_name]")
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 62226f7b301..177c0708765 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -336,6 +336,10 @@
/obj/machinery/chem_dispenser/attack_hand(mob/user)
if(stat & BROKEN)
return
+
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm
index 8aa1f4c2366..502eca34007 100644
--- a/code/modules/reagents/chemistry/machinery/chem_heater.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm
@@ -99,6 +99,8 @@
default_deconstruction_crowbar(user, I)
/obj/machinery/chem_heater/attack_hand(mob/user)
+ if(..())
+ return TRUE
ui_interact(user)
/obj/machinery/chem_heater/attack_ghost(mob/user)
diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm
index 1d8f8eda582..799410ad9ec 100644
--- a/code/modules/reagents/chemistry/machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry/machinery/pandemic.dm
@@ -105,19 +105,17 @@
return
else if(href_list["create_virus_culture"])
if(!wait)
- var/type = GetVirusTypeByIndex(text2num(href_list["create_virus_culture"]))//the path is received as string - converting
- var/datum/disease/D = null
- if(!ispath(type))
- D = GetVirusByIndex(text2num(href_list["create_virus_culture"]))
- var/datum/disease/advance/A = GLOB.archive_diseases[D.GetDiseaseID()]
+ var/datum/disease/D = GetVirusByIndex(text2num(href_list["create_virus_culture"]))
+ var/datum/disease/copy = null
+ if(istype(D, /datum/disease/virus/advance))
+ var/datum/disease/virus/advance/A = GLOB.archive_diseases[D.GetDiseaseID()]
if(A)
- D = A.Copy()
- else if(type)
- if(type in GLOB.diseases) // Make sure this is a disease
- D = new type()
- if(!D)
+ copy = A.Copy()
+ if(!copy)
+ copy = D.Copy()
+ if(!copy)
return
- var/name = stripped_input(usr,"Name:","Name the culture",D.name,MAX_NAME_LEN)
+ var/name = stripped_input(usr,"Name:","Name the culture",copy.name,MAX_NAME_LEN)
if(name == null || wait)
return
var/obj/item/reagent_containers/glass/bottle/B = new/obj/item/reagent_containers/glass/bottle(loc)
@@ -125,9 +123,9 @@
B.pixel_x = rand(-3, 3)
B.pixel_y = rand(-3, 3)
replicator_cooldown(50)
- var/list/data = list("viruses"=list(D))
+ var/list/data = list("viruses"=list(copy))
B.name = "[name] culture bottle"
- B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium."
+ B.desc = "A small bottle. Contains [copy.agent] culture in synthblood medium."
B.reagents.add_reagent("blood",20,data)
updateUsrDialog()
else
@@ -155,9 +153,9 @@
return
var/id = GetVirusTypeByIndex(text2num(href_list["name_disease"]))
if(GLOB.archive_diseases[id])
- var/datum/disease/advance/A = GLOB.archive_diseases[id]
+ var/datum/disease/virus/advance/A = GLOB.archive_diseases[id]
A.AssignName(new_name)
- for(var/datum/disease/advance/AD in GLOB.active_diseases)
+ for(var/datum/disease/virus/advance/AD in GLOB.active_diseases)
AD.Refresh()
updateUsrDialog()
else if(href_list["print_form"])
@@ -179,7 +177,7 @@
icon_state = "mixer0"
//Prints a nice virus release form. Props to Urbanliner for the layout
-/obj/machinery/computer/pandemic/proc/print_form(var/datum/disease/advance/D, mob/living/user)
+/obj/machinery/computer/pandemic/proc/print_form(var/datum/disease/virus/advance/D, mob/living/user)
D = GLOB.archive_diseases[D.GetDiseaseID()]
if(!(printing) && D)
var/reason = input(user,"Укажите причину выпуска", "Указать", null) as message
@@ -206,7 +204,7 @@
P.info += "
"
P.info += "Название вируса: [D.name]
"
P.info += "Симптомы: [symtoms]
"
- P.info += "Путь передачи: [D.spread_text]
"
+ P.info += "Путь передачи: [D.additional_info]
"
P.info += "Лекарство от вируса: [D.cure_text]
"
P.info += "
"
P.info += "Причина выпуска: [reason]"
@@ -258,9 +256,9 @@
i++
if(!(D.visibility_flags & HIDDEN_PANDEMIC))
- if(istype(D, /datum/disease/advance))
+ if(istype(D, /datum/disease/virus/advance))
- var/datum/disease/advance/A = D
+ var/datum/disease/virus/advance/A = D
D = GLOB.archive_diseases[A.GetDiseaseID()]
if(D)
if(D.name == "Unknown")
@@ -274,11 +272,12 @@
dat += "Болезнетворный агент: [D?"[D.agent] — Создать бутылёк с вирусной культурой":"нет"]
"
dat += "Общепринятое название: [(D.name||"нет")]
"
dat += "Описание: [(D.desc||"нет")]
"
- dat += "Путь передачи: [(D.spread_text||"нет")]
"
+ dat += "Путь передачи: [(D.additional_info||"нет")]
"
dat += "Возможное лекарство: [(D.cure_text||"нет")]
"
+ dat += "Возможность выработки антител: [(D.can_immunity ? "Присутствует" : "Отсутствует")]
"
- if(istype(D, /datum/disease/advance))
- var/datum/disease/advance/A = D
+ if(istype(D, /datum/disease/virus/advance))
+ var/datum/disease/virus/advance/A = D
dat += "Симптомы: "
var/english_symptoms = list()
for(var/datum/symptom/S in A.symptoms)
@@ -301,7 +300,7 @@
var/disease_name = "Unknown"
if(!ispath(type))
- var/datum/disease/advance/A = GLOB.archive_diseases[type]
+ var/datum/disease/virus/advance/A = GLOB.archive_diseases[type]
if(A)
disease_name = A.name
else
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index c08b5a4fafc..e8acaa151ca 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -238,11 +238,13 @@
/obj/machinery/reagentgrinder/attack_ai(mob/user)
- return FALSE
+ return FALSE
/obj/machinery/reagentgrinder/attack_hand(mob/user)
- user.set_machine(src)
- interact(user)
+ if(..())
+ return TRUE
+ user.set_machine(src)
+ interact(user)
/obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu
var/is_chamber_empty = 0
diff --git a/code/modules/reagents/chemistry/reagents/admin.dm b/code/modules/reagents/chemistry/reagents/admin.dm
index 97bfb6eba7a..aeaffa9dfcb 100644
--- a/code/modules/reagents/chemistry/reagents/admin.dm
+++ b/code/modules/reagents/chemistry/reagents/admin.dm
@@ -49,11 +49,11 @@
M.SetConfused(0)
M.SetSleeping(0, FALSE)
M.SetJitter(0)
- for(var/thing in M.viruses)
+ for(var/thing in M.diseases)
var/datum/disease/D = thing
if(D.severity == NONTHREAT)
continue
- D.cure(0)
+ D.cure(need_immunity = FALSE)
..()
return STATUS_UPDATE_ALL
diff --git a/code/modules/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm
index 736e78a5c5e..dd14a22b989 100644
--- a/code/modules/reagents/chemistry/reagents/disease.dm
+++ b/code/modules/reagents/chemistry/reagents/disease.dm
@@ -25,7 +25,8 @@
/datum/reagent/nanomachines/on_mob_life(mob/living/carbon/M)
if(volume > 1.5)
- M.ForceContractDisease(new /datum/disease/transformation/robot)
+ var/datum/disease/virus/transformation/robot/D = new
+ D.Contract(M)
return ..()
@@ -39,7 +40,8 @@
/datum/reagent/xenomicrobes/on_mob_life(mob/living/carbon/M)
if(volume > 1.5)
- M.ContractDisease(new /datum/disease/transformation/xeno)
+ var/datum/disease/virus/transformation/xeno/D = new
+ D.Contract(M)
return ..()
/datum/reagent/fungalspores
@@ -52,7 +54,8 @@
/datum/reagent/fungalspores/on_mob_life(mob/living/carbon/M)
if(volume > 2.5)
- M.ForceContractDisease(new /datum/disease/tuberculosis)
+ var/datum/disease/virus/tuberculosis/D = new
+ D.Contract(M)
return ..()
/datum/reagent/jagged_crystals
@@ -65,7 +68,8 @@
taste_mult = 0
/datum/reagent/jagged_crystals/on_mob_life(mob/living/carbon/M)
- M.ForceContractDisease(new /datum/disease/berserker)
+ var/datum/disease/berserker/D = new
+ D.Contract(M)
return ..()
/datum/reagent/salmonella
@@ -78,7 +82,8 @@
taste_mult = 0
/datum/reagent/salmonella/on_mob_life(mob/living/carbon/M)
- M.ForceContractDisease(new /datum/disease/food_poisoning)
+ var/datum/disease/food_poisoning/D = new
+ D.Contract(M)
return ..()
/datum/reagent/gibbis
@@ -92,7 +97,8 @@
/datum/reagent/gibbis/on_mob_life(mob/living/carbon/M)
if(volume > 2.5)
- M.ForceContractDisease(new /datum/disease/gbs/curable)
+ var/datum/disease/virus/gbs/non_con/D = new
+ D.Contract(M)
return ..()
/datum/reagent/prions
@@ -106,7 +112,8 @@
/datum/reagent/prions/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
- M.ForceContractDisease(new /datum/disease/kuru)
+ var/datum/disease/kuru/D = new
+ D.Contract(M)
return ..()
/datum/reagent/grave_dust
@@ -120,7 +127,8 @@
/datum/reagent/grave_dust/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
- M.ForceContractDisease(new /datum/disease/vampire)
+ var/datum/disease/vampire/D = new
+ D.Contract(M)
return ..()
/datum/reagent/bacon_grease
@@ -134,7 +142,8 @@
/datum/reagent/bacon_grease/on_mob_life(mob/living/carbon/M)
if(volume > 4.5)
- M.ForceContractDisease(new /datum/disease/critical/heart_failure)
+ var/datum/disease/critical/heart_failure/D = new
+ D.Contract(M)
return ..()
/datum/reagent/heartworms
diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm
index 7fd74a4c863..b523dd0faf8 100644
--- a/code/modules/reagents/chemistry/reagents/food.dm
+++ b/code/modules/reagents/chemistry/reagents/food.dm
@@ -885,7 +885,8 @@
to_chat(H, "Ugh! Eating that was a terrible idea!")
if(NO_HUNGER in H.dna.species.species_traits) //If you don't eat, then you can't get food poisoning
return
- H.ForceContractDisease(new /datum/disease/food_poisoning)
+ var/datum/disease/food_poisoning/D = new
+ D.Contract(H)
/datum/reagent/msg
name = "Monosodium glutamate"
@@ -931,7 +932,8 @@
else if(volume >= 150 && prob(volume*0.01))
to_chat(M, "Your chest is burning with pain!")
M.Weaken(2 SECONDS)
- M.ForceContractDisease(new /datum/disease/critical/heart_failure)
+ var/datum/disease/critical/heart_failure/D = new
+ D.Contract(M)
return ..() | update_flags
/datum/reagent/fungus
@@ -950,7 +952,8 @@
M.reagents.add_reagent("toxin", rand(1,5))
else if(ranchance <= 5)
to_chat(M, "That tasted absolutely FOUL.")
- M.ForceContractDisease(new /datum/disease/food_poisoning)
+ var/datum/disease/food_poisoning/D = new
+ D.Contract(M)
else
to_chat(M, "Yuck!")
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index 3dcd83a1bf9..a0a2d0450dd 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -1349,7 +1349,7 @@
I.heal_internal_damage(4)
if(H.blood_volume < BLOOD_VOLUME_NORMAL * 0.9)// If below 90% blood, regenerate 225 units total
H.blood_volume += 15
- for(var/datum/disease/critical/heart_failure/HF in H.viruses)
+ for(var/datum/disease/critical/heart_failure/HF in H.diseases)
HF.cure() //Won't fix a stopped heart, but it will sure fix a critical one. Shock is not fixed as healing will fix it
if(M.health < 40)
update_flags |= M.adjustOxyLoss(-3, FALSE)
diff --git a/code/modules/reagents/chemistry/reagents/ninja.dm b/code/modules/reagents/chemistry/reagents/ninja.dm
index 62e716f108c..e2a9fabae5b 100644
--- a/code/modules/reagents/chemistry/reagents/ninja.dm
+++ b/code/modules/reagents/chemistry/reagents/ninja.dm
@@ -100,7 +100,7 @@
if(our_ears.damage < 25 && prob(30))
mob_human.SetDeaf(0)
//ALL viruses
- for(var/thing in mob_human.viruses)
+ for(var/thing in mob_human.diseases)
var/datum/disease/our_disease = thing
our_disease.cure(0)
//Genes(resets them like mutadone)
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index c528033c9e8..7a95340c09e 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -25,6 +25,61 @@
update_flags |= M.adjustToxLoss(1.5, FALSE)
return ..() | update_flags
+/datum/reagent/bee_venom
+ name = "Bee venom"
+ id = "beetoxin"
+ description = "A toxic venom injected by space bees."
+ reagent_state = LIQUID
+ color = "#ff932f"
+ taste_description = "pain"
+
+/datum/reagent/bee_venom/on_mob_life(mob/living/M)
+ var/update_flags = STATUS_UPDATE_NONE
+ update_flags |= M.adjustToxLoss(1.5, FALSE)
+ return ..() | update_flags
+
+//bee venom specially for Beesease bees
+/datum/reagent/bee_venom_beesease
+ name = "Bee venom"
+ id = "beetoxinbeesease"
+ description = "A toxic venom injected by space bees."
+ reagent_state = LIQUID
+ color = "#ff932f"
+ taste_description = "pain"
+ overdose_threshold = 30
+
+/datum/reagent/bee_venom_beesease/on_mob_life(mob/living/M)
+ var/update_flags = STATUS_UPDATE_NONE
+ update_flags |= M.adjustToxLoss(0.1, FALSE)
+ return ..() | update_flags
+
+/datum/reagent/bee_venom_beesease/overdose_process(mob/living/M, severity)
+ var/list/overdose_info = ..()
+ var/effect = overdose_info[REAGENT_OVERDOSE_EFFECT]
+ var/update_flags = overdose_info[REAGENT_OVERDOSE_FLAGS]
+ switch(severity)
+ //30-60 units
+ if(1)
+ M.Slowed(3 SECONDS, 3)
+ M.damageoverlaytemp = 50
+ update_flags |= M.adjustToxLoss(0.75, FALSE)
+ if(effect <= 5)
+ M.Jitter(8 SECONDS)
+ else if(effect <= 7)
+ M.Stuttering(8 SECONDS)
+ //60 - Infinity units
+ if(2)
+ M.Slowed(3 SECONDS, 6)
+ M.damageoverlaytemp = 90
+ update_flags |= M.adjustToxLoss(1.5, FALSE)
+ if(effect <= 3)
+ M.Weaken(4 SECONDS)
+ M.Jitter(8 SECONDS)
+ M.Stuttering(8 SECONDS)
+ else if(effect <= 7)
+ M.Stuttering(8 SECONDS)
+ return list(effect, update_flags)
+
/datum/reagent/minttoxin
name = "Mint Toxin"
id = "minttoxin"
@@ -99,7 +154,8 @@
/datum/reagent/aslimetoxin/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
if(method != REAGENT_TOUCH)
- M.ForceContractDisease(new /datum/disease/transformation/slime)
+ var/datum/disease/virus/transformation/slime/D = new
+ D.Contract(M)
/datum/reagent/mercury
@@ -1246,7 +1302,8 @@
taste_description = "decay"
/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=REAGENT_TOUCH, reac_volume)
- L.ForceContractDisease(new /datum/disease/transformation/morph)
+ var/datum/disease/virus/transformation/morph/D = new
+ D.Contract(L)
/datum/reagent/bungotoxin
name = "Bungotoxin"
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index 8e5617acceb..84b1bd05779 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -105,15 +105,15 @@
/datum/reagent/blood/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
if(data && data["viruses"])
for(var/thing in data["viruses"])
- var/datum/disease/D = thing
+ var/datum/disease/virus/V = thing
- if(D.spread_flags & SPECIAL || D.spread_flags & NON_CONTAGIOUS)
+ if(V.spread_flags < BLOOD)
continue
if(method == REAGENT_TOUCH)
- M.ContractDisease(D)
- else //ingest, patch or inject
- M.ForceContractDisease(D)
+ V.Contract(M, need_protection_check = TRUE, act_type = CONTACT)
+ else
+ V.Contract(M, need_protection_check = FALSE)
if(method == REAGENT_INGEST && iscarbon(M))
var/mob/living/carbon/C = M
@@ -138,19 +138,19 @@
// Stop issues with the list changing during mixing.
var/list/to_mix = list()
- for(var/datum/disease/advance/AD in mix1)
+ for(var/datum/disease/virus/advance/AD in mix1)
to_mix += AD
- for(var/datum/disease/advance/AD in mix2)
+ for(var/datum/disease/virus/advance/AD in mix2)
to_mix += AD
- var/datum/disease/advance/AD = Advance_Mix(to_mix)
+ var/datum/disease/virus/advance/AD = Advance_Mix(to_mix)
var/list/preserve = list()
if(istype(AD))
preserve += AD
for(var/datum/disease/D in data["viruses"] + mix_data["viruses"])
- if(!istype(D, /datum/disease/advance))
+ if(!istype(D, /datum/disease/virus/advance))
preserve += D.Copy()
data["viruses"] = preserve
@@ -186,15 +186,15 @@
/datum/reagent/blood/synthetic/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
if(data && data["viruses"])
for(var/thing in data["viruses"])
- var/datum/disease/D = thing
+ var/datum/disease/virus/V = thing
- if(D.spread_flags & SPECIAL || D.spread_flags & NON_CONTAGIOUS)
+ if(V.spread_flags < BLOOD)
continue
if(method == REAGENT_TOUCH)
- M.ContractDisease(D)
- else //ingest, patch or inject
- M.ForceContractDisease(D)
+ V.Contract(M, need_protection_check = TRUE, act_type = CONTACT)
+ else
+ V.Contract(M, need_protection_check = FALSE)
/datum/reagent/blood/synthetic/vox
name = "Synthetic Blood"
@@ -243,7 +243,7 @@
/datum/reagent/vaccine/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
if(islist(data) && (method == REAGENT_INGEST))
- for(var/thing in M.viruses)
+ for(var/thing in M.diseases)
var/datum/disease/D = thing
if(D.GetDiseaseID() in data)
D.cure()
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 487677c184c..ef5fe406b31 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -680,7 +680,7 @@
/datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, created_volume)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
+ var/datum/disease/virus/advance/D = locate(/datum/disease/virus/advance) in B.data["viruses"]
if(D)
D.Evolve(level_min, level_max)
@@ -750,6 +750,6 @@
/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, created_volume)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
+ var/datum/disease/virus/advance/D = locate(/datum/disease/virus/advance) in B.data["viruses"]
if(D)
D.Devolve()
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 140ad6a6673..68133377aaf 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -25,6 +25,7 @@
"hydrocodone" = list('icons/mob/actions/actions.dmi', "magicm"))
+
/obj/item/reagent_containers/borghypo/syndicate
name = "syndicate cyborg hypospray"
desc = "An experimental piece of Syndicate technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. Also metabolizes potassium iodide, for radiation poisoning, and hydrocodone, for field surgery and pain relief."
@@ -195,5 +196,21 @@
"sal_acid" = list('icons/mob/actions/actions.dmi', "fleshmend"), \
"salbutamol" = list('icons/obj/surgery.dmi', "lungs"))
+/obj/item/reagent_containers/borghypo/basic/emagged_borg_hypo
+ name = "ERR3NU1l_INJ3C70R"
+ desc = "This injector will deliver deadly chemicals into anyone not fortunate enough to end up as an enemy to Syndicate. Who could've thought NanoTrasen borgs can synthesize that?"
+ icon = 'icons/obj/hypo.dmi'
+ item_state = "borghypo_emag"
+ icon_state = "borghypo_emag"
+ amount_per_transfer_from_this = 10
+ // volume = 30
+ var/emagged = TRUE
+ var/safety_hypo = FALSE
+ reagent_ids = list( \
+ "heparin" = list('icons/effects/bleed.dmi', "bleed10"), \
+ "cyanide" = list('icons/mob/screen_corgi.dmi', "tox1"), \
+ "sodium_thiopental" = list('icons/obj/surgery.dmi', "lungs"))
+
+
#undef BORGHYPO_REFILL_VALUE
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index 5b753e5f3c1..5dc907fbd58 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -281,204 +281,216 @@
icon_state = "wide_bottle"
list_reagents = list("potass_iodide" = 30)
-/obj/item/reagent_containers/glass/bottle/flu_virion
+/obj/item/reagent_containers/glass/bottle/cold
+ name = "Rhinovirus culture bottle"
+ desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
+ icon_state = "round_bottle"
+ spawned_disease = /datum/disease/virus/cold
+
+/obj/item/reagent_containers/glass/bottle/flu
name = "Flu virion culture bottle"
desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/flu
+ spawned_disease = /datum/disease/virus/flu
+
+/obj/item/reagent_containers/glass/bottle/sneezing
+ name = "Sneezing symptom bottle"
+ desc = "A small bottle. Contains a simple advanced virus in synthblood medium that makes infected sneeze."
+ icon_state = "round_bottle"
+ spawned_disease = /datum/disease/virus/advance/preset/sneezing
+
+/obj/item/reagent_containers/glass/bottle/cough
+ name = "Cough symptom bottle"
+ desc = "A small bottle. Contains a simple advanced virus in synthblood medium that makes infected cough."
+ icon_state = "round_bottle"
+ spawned_disease = /datum/disease/virus/advance/preset/cough
/obj/item/reagent_containers/glass/bottle/epiglottis_virion
name = "Epiglottis virion culture bottle"
desc = "A small bottle. Contains Epiglottis virion culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/voice_change
+ spawned_disease = /datum/disease/virus/advance/preset/voice_change
/obj/item/reagent_containers/glass/bottle/liver_enhance_virion
name = "Liver enhancement virion culture bottle"
desc = "A small bottle. Contains liver enhancement virion culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/heal
+ spawned_disease = /datum/disease/virus/advance/preset/heal
/obj/item/reagent_containers/glass/bottle/hullucigen_virion
name = "Hullucigen virion culture bottle"
desc = "A small bottle. Contains hullucigen virion culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/hullucigen
+ spawned_disease = /datum/disease/virus/advance/preset/hullucigen
/obj/item/reagent_containers/glass/bottle/pierrot_throat
name = "Pierrot's Throat culture bottle"
desc = "A small bottle. Contains H0NI<42 virion culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/pierrot_throat
-
-/obj/item/reagent_containers/glass/bottle/cold
- name = "Rhinovirus culture bottle"
- desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium."
- icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/cold
+ spawned_disease = /datum/disease/virus/pierrot_throat
/obj/item/reagent_containers/glass/bottle/mind_restoration
name = "Reality Purifier culture bottle"
desc = "A small bottle. Contains Reality Purifier culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/mind_restoration
+ spawned_disease = /datum/disease/virus/advance/preset/mind_restoration
/obj/item/reagent_containers/glass/bottle/advanced_regeneration
name = "Advanced Neogenesis culture bottle"
desc = "A small bottle. Contains Advanced Neogenesis culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/advanced_regeneration
+ spawned_disease = /datum/disease/virus/advance/preset/advanced_regeneration
/obj/item/reagent_containers/glass/bottle/stealth_necrosis
name = "Necroeyrosis culture bottle"
desc = "A small bottle. Contains Necroeyrosis culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/stealth_necrosis
+ spawned_disease = /datum/disease/virus/advance/preset/stealth_necrosis
/obj/item/reagent_containers/glass/bottle/pre_kingstons
name = "Neverlasting Stranger culture bottle"
desc = "A small bottle. Contains Neverlasting Stranger culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/pre_kingstons
+ spawned_disease = /datum/disease/virus/advance/preset/pre_kingstons
/obj/item/reagent_containers/glass/bottle/love
name = "love"
desc = "love"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/love
+ spawned_disease = /datum/disease/virus/advance/preset/love
/obj/item/reagent_containers/glass/bottle/aggression
name = "aggression"
desc = "aggression"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/aggression
+ spawned_disease = /datum/disease/virus/advance/preset/aggression
/obj/item/reagent_containers/glass/bottle/obsession
name = "obsession"
desc = "obsession"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/obsession
+ spawned_disease = /datum/disease/virus/advance/preset/obsession
/obj/item/reagent_containers/glass/bottle/confusion
name = "confusion"
desc = "confusion"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/confusion
+ spawned_disease = /datum/disease/virus/advance/preset/confusion
/obj/item/reagent_containers/glass/bottle/bones
name = "bones"
desc = "bones"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/bones
+ spawned_disease = /datum/disease/virus/advance/preset/bones
/obj/item/reagent_containers/glass/bottle/limb_throw
name = "limb_throw"
desc = "limb_throw"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/limb_throw
+ spawned_disease = /datum/disease/virus/advance/preset/limb_throw
/obj/item/reagent_containers/glass/bottle/laugh
name = "laugh"
desc = "laugh"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/laugh
+ spawned_disease = /datum/disease/virus/advance/preset/laugh
/obj/item/reagent_containers/glass/bottle/moan
name = "moan"
desc = "moan"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/moan
+ spawned_disease = /datum/disease/virus/advance/preset/moan
/obj/item/reagent_containers/glass/bottle/infection
name = "infection"
desc = "infection"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/infection
+ spawned_disease = /datum/disease/virus/advance/preset/infection
/obj/item/reagent_containers/glass/bottle/loyalty
name = "loyalty"
desc = "loyalty"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/loyalty
+ spawned_disease = /datum/disease/virus/loyalty
/obj/item/reagent_containers/glass/bottle/pre_loyalty
name = "pre_loyalty"
desc = "pre_loyalty"
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/pre_loyalty
+ spawned_disease = /datum/disease/virus/advance/preset/pre_loyalty
/obj/item/reagent_containers/glass/bottle/retrovirus
name = "Retrovirus culture bottle"
desc = "A small bottle. Contains a retrovirus culture in a synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/dna_retrovirus
+ spawned_disease = /datum/disease/virus/dna_retrovirus
/obj/item/reagent_containers/glass/bottle/gbs
name = "GBS culture bottle"
desc = "A small bottle. Contains Gravitokinetic Bipotential SADS+ culture in synthblood medium."//Or simply - General BullShit
icon_state = "round_bottle"
amount_per_transfer_from_this = 5
- spawned_disease = /datum/disease/gbs
+ spawned_disease = /datum/disease/virus/gbs
/obj/item/reagent_containers/glass/bottle/fake_gbs
name = "GBS culture bottle"
desc = "A small bottle. Contains Gravitokinetic Bipotential SADS- culture in synthblood medium."//Or simply - General BullShit
icon_state = "round_bottle"
- spawned_disease = /datum/disease/fake_gbs
+ spawned_disease = /datum/disease/virus/fake_gbs
/obj/item/reagent_containers/glass/bottle/brainrot
name = "Brainrot culture bottle"
desc = "A small bottle. Contains Cryptococcus Cosmosis culture in synthblood medium."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/brainrot
+ spawned_disease = /datum/disease/virus/brainrot
/obj/item/reagent_containers/glass/bottle/magnitis
name = "Magnitis culture bottle"
desc = "A small bottle. Contains a small dosage of Fukkos Miracos."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/magnitis
+ spawned_disease = /datum/disease/virus/magnitis
/obj/item/reagent_containers/glass/bottle/wizarditis
name = "Wizarditis culture bottle"
desc = "A small bottle. Contains a sample of Rincewindus Vulgaris."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/wizarditis
+ spawned_disease = /datum/disease/virus/wizarditis
/obj/item/reagent_containers/glass/bottle/anxiety
name = "Severe Anxiety culture bottle"
desc = "A small bottle. Contains a sample of Lepidopticides."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/anxiety
+ spawned_disease = /datum/disease/virus/anxiety
/obj/item/reagent_containers/glass/bottle/beesease
name = "Beesease culture bottle"
desc = "A small bottle. Contains a sample of invasive Apidae."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/beesease
+ spawned_disease = /datum/disease/virus/beesease
/obj/item/reagent_containers/glass/bottle/fluspanish
name = "Spanish flu culture bottle"
desc = "A small bottle. Contains a sample of Inquisitius."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/fluspanish
+ spawned_disease = /datum/disease/virus/fluspanish
/obj/item/reagent_containers/glass/bottle/tuberculosis
name = "Fungal Tuberculosis culture bottle"
desc = "A small bottle. Contains a sample of Fungal Tubercle bacillus."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/tuberculosis
+ spawned_disease = /datum/disease/virus/tuberculosis
/obj/item/reagent_containers/glass/bottle/regeneration
name = "Regeneration culture bottle"
desc = "A small bottle. Contains a sample of a virus that heals toxin damage."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/heal
+ spawned_disease = /datum/disease/virus/advance/preset/heal
/obj/item/reagent_containers/glass/bottle/sensory_restoration
name = "Sensory Restoration culture bottle"
desc = "A small bottle. Contains a sample of a virus that heals sensory damage."
icon_state = "round_bottle"
- spawned_disease = /datum/disease/advance/preset/sensory_restoration
+ spawned_disease = /datum/disease/virus/advance/preset/sensory_restoration
/obj/item/reagent_containers/glass/bottle/tuberculosiscure
name = "BVAK bottle"
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 7e3d219ad52..85e9dc7eaa1 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -129,7 +129,7 @@
var/datum/disease/D = dis
var/virusData = D.name
var/english_symptoms = list()
- var/datum/disease/advance/A = D
+ var/datum/disease/virus/advance/A = D
if(istype(A))
for(var/datum/symptom/S in A.symptoms)
english_symptoms += S.name
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 3a2f6f8bf96..1ad310c23bc 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -525,7 +525,7 @@
id = "c38"
build_type = AUTOLATHE
materials = list(MAT_METAL = 5900)
- build_path = /obj/item/ammo_box/c38
+ build_path = /obj/item/ammo_box/speedloader/c38
category = list("initial", "Security")
/datum/design/c38hp
@@ -533,7 +533,7 @@
id = "c38hp"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
- build_path = /obj/item/ammo_box/c38/hp
+ build_path = /obj/item/ammo_box/speedloader/c38/hp
category = list("hacked", "Security")
/datum/design/recorder
@@ -886,7 +886,7 @@
id = "a357"
build_type = AUTOLATHE
materials = list(MAT_METAL = 75000)
- build_path = /obj/item/storage/box/a357
+ build_path = /obj/item/ammo_box/a357
category = list("hacked", "Security")
/datum/design/c10mm
@@ -1052,5 +1052,5 @@
id = "cap_ammo"
build_type = AUTOLATHE
materials = list(MAT_METAL = 100)
- build_path = /obj/item/ammo_box/caps
+ build_path = /obj/item/ammo_box/speedloader/caps
category = list("initial", "Miscellaneous")
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 9cd7fee382a..ef81f6ec415 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -164,6 +164,9 @@
..(O)
/obj/machinery/r_n_d/experimentor/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
user.set_machine(src)
var/dat = {""}
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index 6e0cbdb0693..378c865cae1 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -115,6 +115,8 @@ GLOBAL_LIST_EMPTY(message_servers)
/obj/machinery/message_server/attack_hand(user as mob)
// to_chat(user, "There seem to be some parts missing from this server. They should arrive on the station in a few days, give or take a few CentComm delays.")
+ if(..())
+ return TRUE
add_fingerprint(user)
to_chat(user, "You toggle PDA message passing from [active ? "On" : "Off"] to [active ? "Off" : "On"]")
active = !active
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index 3133a407ac9..aa5491ed23c 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -42,6 +42,8 @@
w -= src.disable_wire
/obj/machinery/r_n_d/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
add_fingerprint(user)
if(shocked)
shock(user,50)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 55c6ebb949c..3642427b1b8 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -169,6 +169,9 @@
return ..()
/obj/machinery/r_n_d/server/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
+
if(disabled)
return
@@ -342,6 +345,8 @@
/obj/machinery/computer/rdservercontrol/attack_hand(mob/user as mob)
if(stat & (BROKEN|NOPOWER))
return
+ if(..())
+ return TRUE
add_fingerprint(user)
user.set_machine(src)
var/dat = ""
diff --git a/code/modules/ruins/ruin_areas.dm b/code/modules/ruins/ruin_areas.dm
index 31875063bbe..307057bd151 100644
--- a/code/modules/ruins/ruin_areas.dm
+++ b/code/modules/ruins/ruin_areas.dm
@@ -52,7 +52,7 @@
name = "Old Mining Bay Bridge"
icon_state = "bridge"
-// Old tcommsat
-/area/ruin/tcommsat
- name = "Telecommunications Satellite"
- icon_state = "tcomsatcham"
+// Space Prison
+/area/ruin/spaceprison
+ name = "Space Prison"
+ icon_state = "spaceprison"
diff --git a/code/modules/shuttle/shuttle_manipulator.dm b/code/modules/shuttle/shuttle_manipulator.dm
index bc9458f3611..8ba798e3bf9 100644
--- a/code/modules/shuttle/shuttle_manipulator.dm
+++ b/code/modules/shuttle/shuttle_manipulator.dm
@@ -59,6 +59,8 @@
. = "ERROR"
/obj/machinery/shuttle_manipulator/attack_hand(mob/user)
+ if(..())
+ return TRUE
add_fingerprint(user)
ui_interact(user)
diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm
index 5b8abdff9c4..c53a994afe8 100644
--- a/code/modules/shuttle/supply.dm
+++ b/code/modules/shuttle/supply.dm
@@ -419,6 +419,9 @@
playsound(src, pick('sound/machines/button.ogg', 'sound/machines/button_alternate.ogg', 'sound/machines/button_meloboom.ogg'), 20)
return 1
+ if(..())
+ return TRUE
+
add_fingerprint(user)
post_signal("supply")
ui_interact(user)
diff --git a/code/modules/station_goals/bfl.dm b/code/modules/station_goals/bfl.dm
index 8cf1bdf3839..7e92559251f 100644
--- a/code/modules/station_goals/bfl.dm
+++ b/code/modules/station_goals/bfl.dm
@@ -81,6 +81,8 @@
var/lavaland_z_lvl // Определяется кодом по имени лаваленда
/obj/machinery/power/bfl_emitter/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
var/response
src.add_fingerprint(user)
if(state)
@@ -247,6 +249,8 @@
var/last_icon_change = 0
/obj/machinery/bfl_receiver/attack_hand(mob/user as mob)
+ if(..())
+ return TRUE
var/response
src.add_fingerprint(user)
if(state)
diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm
index b690dfb39e8..5c855cc5dd0 100644
--- a/code/modules/station_goals/bluespace_tap.dm
+++ b/code/modules/station_goals/bluespace_tap.dm
@@ -375,6 +375,9 @@
/obj/machinery/power/bluespace_tap/attack_hand(mob/user)
+ if(..())
+ return TRUE
+
add_fingerprint(user)
ui_interact(user)
diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm
index 32ad1fb564f..65b374eabe2 100644
--- a/code/modules/surgery/organs/blood.dm
+++ b/code/modules/surgery/organs/blood.dm
@@ -171,10 +171,10 @@
if(blood_id == "blood") //normal blood
if(blood_data["viruses"])
for(var/thing in blood_data["viruses"])
- var/datum/disease/D = thing
- if((D.spread_flags & SPECIAL) || (D.spread_flags & NON_CONTAGIOUS))
+ var/datum/disease/virus/V = thing
+ if(V.spread_flags < BLOOD)
continue
- C.ForceContractDisease(D)
+ V.Contract(C)
if(!(blood_data["blood_type"] in get_safe_blood(C.dna.blood_type)) || !(blood_data["blood_species"] == C.dna.species.blood_species))
C.reagents.add_reagent("toxin", amount * 0.5)
return 1
@@ -196,7 +196,7 @@
blood_data["donor"] = src
blood_data["viruses"] = list()
- for(var/thing in viruses)
+ for(var/thing in diseases)
var/datum/disease/D = thing
blood_data["viruses"] += D.Copy()
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 8ebefbad9f3..2e11d176c1b 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -180,17 +180,17 @@
addtimer(CALLBACK(src, PROC_REF(recharge)), 300)
addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] fails to return to its normal rhythm!"), 30)
- if(!(status & ORGAN_DEAD) && !attempted_restart && owner.HasDisease(new /datum/disease/critical/heart_failure))
+ if(!(status & ORGAN_DEAD) && !attempted_restart && owner.HasDisease(/datum/disease/critical/heart_failure))
to_chat(owner, "Your [name] detects a cardiac event and attempts to return to its normal rhythm!")
if(prob(40) && emagged)
attempted_restart = TRUE
- for(var/datum/disease/critical/heart_failure/HF in owner.viruses)
+ for(var/datum/disease/critical/heart_failure/HF in owner.diseases)
HF.cure()
addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] returns to its normal rhythm!"), 30)
addtimer(CALLBACK(src, PROC_REF(recharge)), 200)
else if(prob(25))
attempted_restart = TRUE
- for(var/datum/disease/critical/heart_failure/HF in owner.viruses)
+ for(var/datum/disease/critical/heart_failure/HF in owner.diseases)
HF.cure()
addtimer(CALLBACK(src, PROC_REF(message_to_owner), owner, "Your [name] returns to its normal rhythm!"), 30)
addtimer(CALLBACK(src, PROC_REF(recharge)), 200)
@@ -256,7 +256,8 @@
owner.adjustFireLoss(numHigh)
if(prob(numMid))
to_chat(owner, "Your [name] lurches awkwardly!")
- owner.ForceContractDisease(new /datum/disease/critical/heart_failure)
+ var/datum/disease/critical/heart_failure/D = new
+ D.Contract(owner)
if(prob(numMid))
to_chat(owner, "Your [name] stops beating!")
Stop()
@@ -272,4 +273,5 @@
owner.adjustFireLoss(numMid)
if(prob(numLow))
to_chat(owner, "Your [name] lurches awkwardly!")
- owner.ForceContractDisease(new /datum/disease/critical/heart_failure)
+ var/datum/disease/critical/heart_failure/D = new
+ D.Contract(owner)
diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm
index 61b3b591ca8..fcce8c7e53b 100644
--- a/code/modules/surgery/organs/organ_icon.dm
+++ b/code/modules/surgery/organs/organ_icon.dm
@@ -193,5 +193,6 @@ GLOBAL_LIST_EMPTY(limb_icon_cache)
var/n_is = damage_state_text()
if(n_is != damage_state)
damage_state = n_is
+ owner?.UpdateDamageIcon()
return 1
return 0
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index be0514aaab2..9edc4a0cffa 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -181,12 +181,12 @@
organ_tag = "appendix"
parent_organ = "groin"
slot = "appendix"
- var/inflamed = 0
+ var/inflamed = FALSE
/obj/item/organ/internal/appendix/remove(mob/living/carbon/M, special = 0)
- for(var/datum/disease/appendicitis/A in M.viruses)
+ for(var/datum/disease/appendicitis/A in M.diseases)
A.cure()
- inflamed = 1
+ inflamed = TRUE
update_icon()
. = ..()
@@ -260,8 +260,6 @@
squeak = M.AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg' = 1), 50, falloff_exponent = 20)
/obj/item/organ/internal/honktumor/remove(mob/living/carbon/M, special = 0)
- . = ..()
-
M.mutations.Remove(CLUMSY)
M.mutations.Remove(GLOB.comicblock)
M.dna.SetSEState(GLOB.clumsyblock,0)
@@ -270,7 +268,7 @@
genemutcheck(M,GLOB.comicblock,null,MUTCHK_FORCED)
M.RemoveElement(/datum/element/waddling)
QDEL_NULL(squeak)
- qdel(src)
+ . = ..()
/obj/item/organ/internal/honktumor/on_life()
if(organhonked < world.time)
@@ -369,7 +367,7 @@
if(germ_level >= INFECTION_LEVEL_TWO)
if(prob(3 * owner.dna.species.germs_growth_rate))
// big message from every 1 damage is not good. If germs growth rate is big, it will spam the chat.
- receive_damage(1, silent = prob(30/owner.dna.species.germs_growth_rate))
+ receive_damage(1, silent = prob(30*owner.dna.species.germs_growth_rate))
/mob/living/carbon/human/proc/check_infections()
var/list/infections = list()
diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm
index 698c198c9e9..7def144f9c3 100644
--- a/code/modules/telesci/gps.dm
+++ b/code/modules/telesci/gps.dm
@@ -177,6 +177,7 @@ GLOBAL_LIST_EMPTY(GPS_list)
icon_state = "gps-m"
gpstag = "MINE0"
desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
+ tracking = FALSE
/obj/item/gps/cyborg
icon_state = "gps-b"
diff --git a/config/example/spaceRuinBlacklist.txt b/config/example/spaceRuinBlacklist.txt
index 4bd66bba81f..4f5c68b844a 100644
--- a/config/example/spaceRuinBlacklist.txt
+++ b/config/example/spaceRuinBlacklist.txt
@@ -26,7 +26,7 @@
### The following ruins are based from past pre-spawned Zlevel content ###
#_maps/map_files/RandomRuins/SpaceRuins/abandonedtele.dmm
-#_maps/map_files/RandomRuins/SpaceRuins/blowntcommsat.dmm
+#_maps/map_files/RandomRuins/SpaceRuins/spaceprison.dmm
#_maps/map_files/RandomRuins/SpaceRuins/clownmime.dmm
#_maps/map_files/RandomRuins/SpaceRuins/dj.dmm
#_maps/map_files/RandomRuins/SpaceRuins/druglab.dmm
diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml
index 4a3ab86b046..25fba1623a8 100644
--- a/html/changelogs/archive/2023-11.yml
+++ b/html/changelogs/archive/2023-11.yml
@@ -34,3 +34,48 @@
- bugfix: wooden buckets now do not become blue (#3810)
Zwei:
- bugfix: Ninja Datum Fixes (#3823)
+'2023-11-06':
+ ArtemDerp:
+ - bugfix: ussp station fixes (#3739)
+ BeebBeebBoob:
+ - bugfix: Summon spots no longer in new areas. (Beacons too) (#3825)
+ Daeberdir:
+ - tweak: normal player accessability in Admin zones. (#3715)
+ - balance: speedloaders can be loaded from ammoboxes. (#3816)
+ Honker9999999:
+ - add: Bullet resist for shadowling instead of laser resist (#3818)
+ ROdenFL:
+ - imageadd: one soldier fix (#3831)
+ - qol: custom colors for window painter (#3774)
+ SSefuss:
+ - add: a special hypospray to the e-magged medical borg. (#3824)
+ Shaman:
+ - add: construction bag (#3787)
+ VasilevAY:
+ - add: Surgery theatre (#3717)
+ Vladisvell:
+ - bugfix: fixed infinite recursion with cluwne curse. (#3832)
+ - bugfix: bread monster's max hp now rises on teleportation (#3809)
+ - qol: Cleanbots now can spread between cleanable decals (#3806)
+ - bugfix: Terror Spiders no longer always penetrate hardsuit shields and blocks
+ (#3808)
+ - balance: bomb guardian no longer dismember legs and bomb damage nerfs (#3817)
+ - qol: Spent ammo casings can now be utilized using matter decompiler. (#3819)
+ mrWhiteFox365:
+ - add: Space Prison Ruin (#3782)
+'2023-11-07':
+ Daeberdir:
+ - tweak: mining GPS turned off. (#3836)
+ - add: chatbubble for telepathy users. (#3815)
+ LiquidPotroh:
+ - balance: Virology (#3703)
+ ROdenFL:
+ - bugfix: alien alloy bugs (#3834)
+ - tweak: sugar amount change (#3833)
+ - bugfix: anomaly extract cost, some slime fixes (#3827)
+ SuhEugene:
+ - bugfix: simple animals babymaking (#3791)
+ Zwei:
+ - add: Shadow Demon (#3616)
+ github-actions[bot]:
+ - server: Automatic NanoMap Update (#3835)
diff --git a/icons/_nanomaps/Cerestation_nanomap_z1.png b/icons/_nanomaps/Cerestation_nanomap_z1.png
index 5986a8bd27f..d0f105c4b0e 100644
Binary files a/icons/_nanomaps/Cerestation_nanomap_z1.png and b/icons/_nanomaps/Cerestation_nanomap_z1.png differ
diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi
index 101d167cca2..583644e5dbb 100644
Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 1eb28689431..b7aa3d59723 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index c8a6fab0750..d1b9b680331 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index dacdbdf409f..f84d354ae37 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/simple_human.dmi b/icons/mob/simple_human.dmi
index bc801cb5cc7..465f4d4c5cd 100644
Binary files a/icons/mob/simple_human.dmi and b/icons/mob/simple_human.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 383993ca6de..bca01eefc9f 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/hypo.dmi b/icons/obj/hypo.dmi
index 43d0fa7aace..205642c6572 100644
Binary files a/icons/obj/hypo.dmi and b/icons/obj/hypo.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index bbb8ade203f..241e8733d1f 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi
index 9e4bce82938..88691f70447 100644
Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ
diff --git a/icons/obj/weapons/ammo.dmi b/icons/obj/weapons/ammo.dmi
index f5647bf034c..e825133d5fc 100644
Binary files a/icons/obj/weapons/ammo.dmi and b/icons/obj/weapons/ammo.dmi differ
diff --git a/icons/obj/weapons/projectiles.dmi b/icons/obj/weapons/projectiles.dmi
index fc333a4e6e5..e48d86495bd 100644
Binary files a/icons/obj/weapons/projectiles.dmi and b/icons/obj/weapons/projectiles.dmi differ
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index cee6ad5438a..61d1672da52 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ
diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi
index 2c11cbbe6fa..2d431898d16 100755
Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 490e35a6ce6..51fd47b8ca3 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -400,73 +400,72 @@
#include "code\datums\components\swarming.dm"
#include "code\datums\components\twohanded.dm"
#include "code\datums\diseases\_disease.dm"
+#include "code\datums\diseases\viruses\_virus.dm"
#include "code\datums\diseases\_MobProcs.dm"
-#include "code\datums\diseases\anxiety.dm"
+#include "code\datums\diseases\viruses\anxiety.dm"
#include "code\datums\diseases\appendicitis.dm"
-#include "code\datums\diseases\beesease.dm"
+#include "code\datums\diseases\viruses\beesease.dm"
#include "code\datums\diseases\berserker.dm"
-#include "code\datums\diseases\brainrot.dm"
-#include "code\datums\diseases\cold.dm"
-#include "code\datums\diseases\cold9.dm"
+#include "code\datums\diseases\viruses\brainrot.dm"
+#include "code\datums\diseases\viruses\cold.dm"
#include "code\datums\diseases\critical.dm"
-#include "code\datums\diseases\fake_gbs.dm"
-#include "code\datums\diseases\flu.dm"
-#include "code\datums\diseases\fluspanish.dm"
+#include "code\datums\diseases\viruses\flu.dm"
+#include "code\datums\diseases\viruses\fluspanish.dm"
#include "code\datums\diseases\food_poisoning.dm"
-#include "code\datums\diseases\gbs.dm"
-#include "code\datums\diseases\kingstons.dm"
+#include "code\datums\diseases\viruses\gbs.dm"
+#include "code\datums\diseases\viruses\kingstons.dm"
#include "code\datums\diseases\kuru.dm"
-#include "code\datums\diseases\loyalty_syndrome.dm"
-#include "code\datums\diseases\lycancoughy.dm"
-#include "code\datums\diseases\magnitis.dm"
-#include "code\datums\diseases\pierrot_throat.dm"
-#include "code\datums\diseases\retrovirus.dm"
-#include "code\datums\diseases\rhumba_beat.dm"
-#include "code\datums\diseases\transformation.dm"
-#include "code\datums\diseases\tuberculosis.dm"
+#include "code\datums\diseases\viruses\loyalty_syndrome.dm"
+#include "code\datums\diseases\viruses\lycancoughy.dm"
+#include "code\datums\diseases\viruses\magnitis.dm"
+#include "code\datums\diseases\viruses\pierrot_throat.dm"
+#include "code\datums\diseases\viruses\retrovirus.dm"
+#include "code\datums\diseases\viruses\rhumba_beat.dm"
+#include "code\datums\diseases\viruses\transformation.dm"
+#include "code\datums\diseases\viruses\tuberculosis.dm"
#include "code\datums\diseases\vampire.dm"
-#include "code\datums\diseases\wizarditis.dm"
-#include "code\datums\diseases\advance\advance.dm"
-#include "code\datums\diseases\advance\presets.dm"
-#include "code\datums\diseases\advance\symptoms\beard.dm"
-#include "code\datums\diseases\advance\symptoms\blood.dm"
-#include "code\datums\diseases\advance\symptoms\bones.dm"
-#include "code\datums\diseases\advance\symptoms\booze.dm"
-#include "code\datums\diseases\advance\symptoms\choking.dm"
-#include "code\datums\diseases\advance\symptoms\confusion.dm"
-#include "code\datums\diseases\advance\symptoms\cough.dm"
-#include "code\datums\diseases\advance\symptoms\damage_converter.dm"
-#include "code\datums\diseases\advance\symptoms\deafness.dm"
-#include "code\datums\diseases\advance\symptoms\dizzy.dm"
-#include "code\datums\diseases\advance\symptoms\epinephrine.dm"
-#include "code\datums\diseases\advance\symptoms\fever.dm"
-#include "code\datums\diseases\advance\symptoms\fire.dm"
-#include "code\datums\diseases\advance\symptoms\flesh_eating.dm"
-#include "code\datums\diseases\advance\symptoms\hallucigen.dm"
-#include "code\datums\diseases\advance\symptoms\headache.dm"
-#include "code\datums\diseases\advance\symptoms\heal.dm"
-#include "code\datums\diseases\advance\symptoms\itching.dm"
-#include "code\datums\diseases\advance\symptoms\laugh.dm"
-#include "code\datums\diseases\advance\symptoms\limb_throw.dm"
-#include "code\datums\diseases\advance\symptoms\love.dm"
-#include "code\datums\diseases\advance\symptoms\moan.dm"
-#include "code\datums\diseases\advance\symptoms\oxygen.dm"
-#include "code\datums\diseases\advance\symptoms\painkiller.dm"
-#include "code\datums\diseases\advance\symptoms\sensory.dm"
-#include "code\datums\diseases\advance\symptoms\shedding.dm"
-#include "code\datums\diseases\advance\symptoms\shivering.dm"
-#include "code\datums\diseases\advance\symptoms\skin.dm"
-#include "code\datums\diseases\advance\symptoms\sneeze.dm"
-#include "code\datums\diseases\advance\symptoms\symptoms.dm"
-#include "code\datums\diseases\advance\symptoms\toxification.dm"
-#include "code\datums\diseases\advance\symptoms\uncotrollable.dm"
-#include "code\datums\diseases\advance\symptoms\viral.dm"
-#include "code\datums\diseases\advance\symptoms\vision.dm"
-#include "code\datums\diseases\advance\symptoms\voice_change.dm"
-#include "code\datums\diseases\advance\symptoms\vomit.dm"
-#include "code\datums\diseases\advance\symptoms\weakness.dm"
-#include "code\datums\diseases\advance\symptoms\weight.dm"
-#include "code\datums\diseases\advance\symptoms\youth.dm"
+#include "code\datums\diseases\viruses\wizarditis.dm"
+#include "code\datums\diseases\viruses\advance\advance.dm"
+#include "code\datums\diseases\viruses\advance\presets.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\beard.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\blood.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\bones.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\booze.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\choking.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\confusion.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\cough.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\damage_converter.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\deafness.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\dizzy.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\epinephrine.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\fever.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\fire.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\flesh_eating.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\hallucigen.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\headache.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\heal.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\itching.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\laugh.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\limb_throw.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\love.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\moan.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\oxygen.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\painkiller.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\sensory.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\shedding.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\shivering.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\skin.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\sneeze.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\symptoms.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\toxification.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\uncotrollable.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\viral.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\vision.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\voice_change.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\vomit.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\weakness.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\weight.dm"
+#include "code\datums\diseases\viruses\advance\symptoms\youth.dm"
#include "code\datums\elements\_element.dm"
#include "code\datums\elements\connect_loc.dm"
#include "code\datums\elements\waddling.dm"
@@ -711,6 +710,9 @@
#include "code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm"
#include "code\game\gamemodes\miniantags\changeling_slug\changeling_slug.dm"
#include "code\game\gamemodes\miniantags\changeling_slug\changeling_slug_event.dm"
+#include "code\game\gamemodes\miniantags\demons\demon.dm"
+#include "code\game\gamemodes\miniantags\demons\shadow_demon\shadow_demon.dm"
+#include "code\game\gamemodes\miniantags\demons\slaughter_demon\slaughter_demon.dm"
#include "code\game\gamemodes\miniantags\guardian\guardian.dm"
#include "code\game\gamemodes\miniantags\guardian\host_actions.dm"
#include "code\game\gamemodes\miniantags\guardian\types\assassin.dm"
@@ -734,8 +736,6 @@
#include "code\game\gamemodes\miniantags\revenant\revenant_abilities.dm"
#include "code\game\gamemodes\miniantags\revenant\revenant_spawn_event.dm"
#include "code\game\gamemodes\miniantags\sintouched\objectives.dm"
-#include "code\game\gamemodes\miniantags\slaughter\bloodcrawl.dm"
-#include "code\game\gamemodes\miniantags\slaughter\slaughter.dm"
#include "code\game\gamemodes\miniantags\space_dragon\space_dragon.dm"
#include "code\game\gamemodes\nuclear\nuclear.dm"
#include "code\game\gamemodes\nuclear\nuclear_challenge.dm"
diff --git a/sound/creatures/bee2.ogg b/sound/creatures/bee2.ogg
new file mode 100644
index 00000000000..52315c2c95a
Binary files /dev/null and b/sound/creatures/bee2.ogg differ
diff --git a/sound/creatures/bee3.ogg b/sound/creatures/bee3.ogg
new file mode 100644
index 00000000000..70975ad4364
Binary files /dev/null and b/sound/creatures/bee3.ogg differ
diff --git a/sound/creatures/bee4.ogg b/sound/creatures/bee4.ogg
new file mode 100644
index 00000000000..575a0b2c172
Binary files /dev/null and b/sound/creatures/bee4.ogg differ
diff --git a/sound/effects/magnitis.ogg b/sound/effects/magnitis.ogg
new file mode 100644
index 00000000000..407f986e01c
Binary files /dev/null and b/sound/effects/magnitis.ogg differ