diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index d10a2d79f6..d25839b92f 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -11,7 +11,8 @@
6. [Pull Request Process](#pull-request-process)
7. [Porting features/sprites/sounds/tools from other codebases](#porting-featuresspritessoundstools-from-other-codebases)
8. [Banned content](#banned-content)
-9. [A word on Git](#a-word-on-git)
+9. [Content requiring prior approval](#content-requiring-prior-approval)
+10. [A word on Git](#a-word-on-git)
## Reporting Issues
If you ever encounter a bug in-game, the best way to let a coder know about it is with our GitHub Issue Tracker. Please make sure you use the supplied issue template, and include the round ID for the server.
@@ -678,6 +679,14 @@ Do not add any of the following in a Pull Request or risk getting the PR closed:
Just because something isn't on this list doesn't mean that it's acceptable. Use common sense above all else.
+## Content requiring prior approval
+Certain types of changes may require prior approval from maintainers. This currently includes:
+
+* Code adding, removing, or updating the availability of alien races/species/human mutants. This includes pull requests attempting to add or remove features from said races/species/mutants. (Requires approval from at least one maintainer)
+* Code adding, removing, or modifying the functionality of adult-oriented features (such as, but not limited to: vore, genitals, MKUltra, and more). This also includes pull requests attempting to add or remove these features outright. (Requires approval from at least half of the formal maintainer team)
+
+If a PR contains any of the above content, and it lacks prior approval, then it may closed at maintainer discretion. Prior approval requires an @Maintainer ping in a relevant development/code or staff channel on the Discord. This is primarily to limit the impact of PRs that're created in bad faith, or are otherwise counterproductive to the server's health.
+
## A word on Git
This repository uses `LF` line endings for all code as specified in the **.gitattributes** and **.editorconfig** files.
diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm
index cef539c3b6..e9fec9bb24 100644
--- a/_maps/map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/map_files/OmegaStation/OmegaStation.dmm
@@ -1794,6 +1794,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/storage/fancy/donut_box{
+ pixel_y = 7
+ },
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/hos)
"acL" = (
@@ -2141,12 +2144,9 @@
/turf/open/floor/plasteel/white,
/area/command/heads_quarters/hop)
"adm" = (
-/obj/structure/sign/warning/securearea{
- pixel_x = 32;
- pixel_y = -32
- },
-/turf/open/space/basic,
-/area/space)
+/obj/structure/girder,
+/turf/open/floor/plating,
+/area/engineering/storage/tech)
"adn" = (
/turf/closed/wall,
/area/cargo/storage)
@@ -2264,6 +2264,7 @@
dir = 8
},
/obj/structure/closet/secure_closet/hos,
+/obj/item/gun/energy/e_gun/hos,
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/hos)
"adE" = (
@@ -4791,6 +4792,7 @@
req_access_txt = "63"
},
/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/security/prison)
"ahv" = (
@@ -4924,7 +4926,6 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/item/gun/energy/e_gun/hos,
/turf/open/floor/plasteel/dark,
/area/command/heads_quarters/captain/private)
"ahI" = (
@@ -4975,8 +4976,10 @@
pixel_y = -24
},
/obj/structure/table/wood,
-/obj/item/storage/fancy/donut_box,
-/obj/item/lighter,
+/obj/item/hand_tele{
+ pixel_y = 9
+ },
+/obj/item/storage/lockbox/medal,
/turf/open/floor/wood,
/area/command/heads_quarters/captain/private)
"ahN" = (
@@ -7561,7 +7564,6 @@
id = "brig2";
pixel_y = 26
},
-/obj/structure/chair,
/obj/structure/cable/white{
icon_state = "2-4"
},
@@ -7578,6 +7580,8 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/structure/bed,
+/obj/item/bedsheet/blue,
/turf/open/floor/plasteel,
/area/security/brig)
"alR" = (
@@ -8113,10 +8117,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/machinery/door/window/brigdoor/security/cell/westright{
- id = "brig2";
- name = "Cell 2"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -8126,6 +8126,10 @@
/obj/effect/turf_decal/tile/red{
dir = 8
},
+/obj/machinery/door/window/brigdoor/security/cell/eastright{
+ id = "Cell 1";
+ name = "Cell 1"
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"amO" = (
@@ -10562,6 +10566,14 @@
/obj/effect/turf_decal/stripes/corner{
dir = 4
},
+/mob/living/simple_animal/bot/secbot{
+ arrest_type = 1;
+ health = 45;
+ icon_state = "secbot1";
+ idcheck = 1;
+ name = "Sergeant-at-Armsky";
+ weaponscheck = 1
+ },
/turf/open/floor/plasteel,
/area/security/brig)
"aqH" = (
@@ -16317,8 +16329,6 @@
/turf/open/floor/plasteel/dark/corner,
/area/engineering/atmos)
"azA" = (
-/obj/structure/table,
-/obj/item/paicard,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -16329,6 +16339,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/closet/crate/bin,
/turf/open/floor/plasteel,
/area/commons/dorms)
"azB" = (
@@ -18309,6 +18320,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/paicard{
+ pixel_x = 15
+ },
/turf/open/floor/plasteel,
/area/commons/dorms)
"aCO" = (
@@ -19360,6 +19374,11 @@
dir = 9
},
/obj/item/clothing/glasses/meson/engine,
+/obj/machinery/camera{
+ c_tag = "Engineering Access";
+ dir = 4;
+ network = list("ss13","engine")
+ },
/turf/open/floor/plasteel,
/area/engineering/main)
"aEy" = (
@@ -19555,7 +19574,6 @@
/turf/open/floor/plasteel/dark,
/area/commons/dorms)
"aEM" = (
-/obj/structure/closet/crate/bin,
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -19567,6 +19585,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/vending/kink,
/turf/open/floor/plasteel/dark,
/area/commons/dorms)
"aEN" = (
@@ -20137,12 +20156,6 @@
/turf/open/floor/plasteel,
/area/engineering/main)
"aFB" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/terminal{
- dir = 4
- },
/obj/effect/turf_decal/delivery,
/obj/machinery/airalarm{
pixel_y = 24
@@ -20151,6 +20164,9 @@
c_tag = "Starboard Bow Solar";
network = list("ss13","engine")
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"aFC" = (
@@ -23289,7 +23305,7 @@
icon_state = "1-2"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/closed/wall,
+/turf/open/space/basic,
/area/maintenance/port/aft)
"aKo" = (
/obj/structure/lattice,
@@ -24135,10 +24151,12 @@
/turf/closed/wall,
/area/maintenance/solars/port/aft)
"aLD" = (
-/obj/machinery/power/port_gen/pacman,
/obj/effect/turf_decal/stripes/line{
dir = 5
},
+/obj/structure/table/reinforced,
+/obj/item/paper/guides/jobs/engi/gravity_gen,
+/obj/item/pen/blue,
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
"aLE" = (
@@ -24190,6 +24208,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/power/port_gen/pacman,
/turf/open/floor/plasteel,
/area/engineering/gravity_generator)
"aLI" = (
@@ -27755,13 +27774,12 @@
/turf/open/floor/engine,
/area/engineering/main)
"aRI" = (
-/obj/structure/cable/white{
- dir = 5;
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/orange/visible{
dir = 5
},
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
/turf/open/floor/engine,
/area/engineering/main)
"aRJ" = (
@@ -28700,9 +28718,6 @@
/obj/item/kirbyplants{
icon_state = "plant-18"
},
-/obj/machinery/camera{
- c_tag = "Arrivals Lounge"
- },
/turf/open/floor/plasteel/grimy,
/area/commons/lounge)
"aTB" = (
@@ -28713,6 +28728,9 @@
"aTC" = (
/obj/structure/table/wood,
/obj/item/storage/fancy/donut_box,
+/obj/machinery/camera{
+ c_tag = "Arrivals Lounge"
+ },
/turf/open/floor/plasteel/grimy,
/area/commons/lounge)
"aTD" = (
@@ -29449,8 +29467,7 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/trimline/green/line{
- dir = 8;
- icon_state = "trimline"
+ dir = 8
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -29561,8 +29578,7 @@
dir = 4
},
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -29575,8 +29591,7 @@
dir = 1
},
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -29618,8 +29633,7 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating{
icon_state = "panelscorched"
@@ -29640,8 +29654,7 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -29654,8 +29667,7 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -29674,8 +29686,7 @@
dir = 1
},
/obj/effect/turf_decal/trimline/green/corner{
- dir = 1;
- icon_state = "trimline_corner"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -29886,11 +29897,6 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/obj/machinery/camera{
- c_tag = "Engineering Access";
- dir = 8;
- network = list("ss13","engine")
- },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
@@ -29967,8 +29973,7 @@
/area/commons/dorms)
"aVI" = (
/obj/effect/turf_decal/trimline/green/line{
- dir = 9;
- icon_state = "trimline"
+ dir = 9
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
@@ -29981,8 +29986,7 @@
icon_state = "2-4"
},
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -30008,8 +30012,7 @@
icon_state = "1-8"
},
/obj/effect/turf_decal/trimline/green/corner{
- dir = 1;
- icon_state = "trimline_corner"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -30313,6 +30316,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/item/screwdriver,
/turf/open/floor/plasteel,
/area/medical/chemistry)
"aWk" = (
@@ -30460,8 +30464,7 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/trimline/green/line{
- dir = 8;
- icon_state = "trimline"
+ dir = 8
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -30817,8 +30820,7 @@
icon_state = "4-8"
},
/obj/effect/turf_decal/trimline/green/corner{
- dir = 1;
- icon_state = "trimline_corner"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -31870,14 +31872,18 @@
},
/obj/structure/table,
/obj/item/reagent_containers/glass/beaker/cryoxadone{
- pixel_x = -6;
- pixel_y = 6
+ pixel_x = -5;
+ pixel_y = 10
},
/obj/item/reagent_containers/glass/beaker/cryoxadone{
- pixel_x = 6;
+ pixel_x = -5;
pixel_y = 6
},
-/obj/item/storage/pill_bottle/mannitol,
+/obj/item/storage/pill_bottle/mannitol{
+ pixel_x = 6;
+ pixel_y = 8
+ },
+/obj/item/reagent_containers/spray/cleaner,
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"aYQ" = (
@@ -32925,11 +32931,10 @@
/area/maintenance/solars/port/aft)
"bav" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/cable,
/obj/structure/cable{
- icon_state = "0-2"
+ icon_state = "1-2"
},
-/turf/closed/wall,
+/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"baw" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -33289,7 +33294,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 9
},
-/obj/structure/closet/crate/bin,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"baW" = (
@@ -33363,8 +33367,13 @@
/area/maintenance/port/aft)
"bbf" = (
/obj/machinery/power/smes,
-/obj/structure/cable/white{
- icon_state = "0-2"
+/obj/machinery/camera{
+ c_tag = "Port Quarter Solar";
+ dir = 4;
+ network = list("ss13","engine")
+ },
+/obj/structure/cable{
+ icon_state = "0-4"
},
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
@@ -33381,18 +33390,18 @@
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"bbi" = (
-/obj/structure/cable/white{
- icon_state = "0-8"
- },
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
/obj/machinery/power/apc{
areastring = "/area/maintenance/solars/port/aft";
dir = 4;
name = "Port Quarter Solar APC";
pixel_x = 24
},
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/white{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"bbj" = (
@@ -33477,8 +33486,12 @@
/turf/open/floor/plating,
/area/maintenance/port/aft)
"bbo" = (
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/effect/turf_decal/delivery,
/obj/structure/cable/white{
- icon_state = "1-4"
+ icon_state = "0-4"
},
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
@@ -33825,16 +33838,10 @@
/turf/open/space/basic,
/area/solars/starboard/fore)
"bbR" = (
+/obj/machinery/light/small,
/obj/structure/cable/white{
- icon_state = "0-8"
+ icon_state = "1-8"
},
-/obj/structure/cable/white,
-/obj/machinery/power/solar_control{
- dir = 8;
- id = "aftport";
- name = "Port Quarter Solar Control"
- },
-/obj/effect/turf_decal/bot,
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"bbS" = (
@@ -33874,12 +33881,8 @@
/turf/open/space/basic,
/area/solars/starboard/fore)
"bbX" = (
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/structure/closet/emcloset/anchored,
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel,
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bbY" = (
/obj/structure/lattice/catwalk,
@@ -33893,6 +33896,9 @@
/obj/structure/cable{
icon_state = "2-4"
},
+/obj/machinery/light/small{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/maintenance/solars/starboard/fore)
"bca" = (
@@ -33943,8 +33949,6 @@
/turf/open/floor/plasteel,
/area/maintenance/solars/starboard/fore)
"bcd" = (
-/obj/item/retractor,
-/obj/item/hemostat,
/obj/structure/table/reinforced,
/obj/machinery/vending/wallmed{
name = "Emergency NanoMed";
@@ -33965,6 +33969,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/storage/backpack/duffelbag/med/surgery,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/zone3)
"bce" = (
@@ -33987,12 +33992,10 @@
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"bcf" = (
-/obj/machinery/computer/operating{
- dir = 8
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
+/obj/machinery/computer/operating,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -34003,11 +34006,6 @@
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"bcg" = (
-/obj/item/clothing/gloves/color/latex,
-/obj/item/clothing/suit/apron/surgical,
-/obj/item/clothing/mask/surgical,
-/obj/item/surgical_drapes,
-/obj/structure/table/reinforced,
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -34022,6 +34020,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/limbgrower,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/zone3)
"bch" = (
@@ -34294,28 +34293,34 @@
pixel_x = 32;
pixel_y = 32
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable{
icon_state = "1-4"
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bcH" = (
-/obj/machinery/light/small{
- dir = 4
- },
/obj/structure/cable{
icon_state = "4-8"
},
+/obj/structure/closet/emcloset/anchored,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bcI" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/structure/cable{
- icon_state = "0-4"
+ icon_state = "4-8"
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
@@ -34328,24 +34333,24 @@
/turf/open/floor/plasteel/airless/solarpanel,
/area/solars/starboard/fore)
"bcK" = (
-/obj/machinery/power/smes,
-/obj/structure/cable/white{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/maintenance/solars/starboard/fore)
-"bcL" = (
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/obj/structure/cable/white{
- icon_state = "0-8"
- },
/obj/machinery/power/solar_control{
id = "forestarboard";
name = "Starboard Bow Solar Control"
},
/obj/effect/turf_decal/bot,
+/obj/machinery/power/terminal{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating,
+/area/maintenance/solars/starboard/fore)
+"bcL" = (
+/obj/machinery/power/smes,
+/obj/structure/cable/white{
+ icon_state = "0-2"
+ },
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bcM" = (
@@ -34358,9 +34363,6 @@
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bcN" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -34368,12 +34370,13 @@
pixel_x = 32;
pixel_y = -32
},
-/turf/open/floor/plating,
-/area/maintenance/solars/starboard/fore)
-"bcO" = (
+/obj/machinery/light/small,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/turf/open/floor/plating,
+/area/maintenance/solars/starboard/fore)
+"bcO" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -34381,6 +34384,9 @@
name = "Starboard Bow Solar Access";
req_access_txt = "10"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bcP" = (
@@ -34429,10 +34435,6 @@
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bcU" = (
-/obj/item/circular_saw,
-/obj/item/surgicaldrill{
- pixel_y = 5
- },
/obj/structure/table/reinforced,
/obj/structure/mirror{
pixel_x = -28
@@ -34451,6 +34453,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/item/clothing/gloves/color/latex,
+/obj/item/clothing/suit/apron/surgical,
+/obj/item/clothing/mask/surgical,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/zone3)
"bcV" = (
@@ -34484,9 +34489,6 @@
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"bcX" = (
-/obj/item/scalpel,
-/obj/item/cautery,
-/obj/structure/table/reinforced,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -34504,6 +34506,8 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/closet/crate/freezer/surplus_limbs,
+/obj/item/reagent_containers/glass/beaker/synthflesh,
/turf/open/floor/plasteel/dark,
/area/medical/medbay/zone3)
"bcY" = (
@@ -34514,10 +34518,6 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
},
-/obj/machinery/camera{
- c_tag = "Medbay South";
- dir = 4
- },
/obj/effect/turf_decal/tile/blue{
dir = 8
},
@@ -34877,7 +34877,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/door/airlock/maintenance{
- req_one_access_txt = "8;12"
+ req_one_access_txt = "7;12"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 1
@@ -34896,11 +34896,15 @@
/turf/open/floor/plating/airless,
/area/solars/starboard/fore)
"bdC" = (
-/obj/structure/cable,
-/obj/machinery/power/terminal{
- dir = 8
+/obj/machinery/power/solar_control{
+ id = "aftport";
+ name = "Port Quarter Solar Control"
+ },
+/obj/effect/turf_decal/bot,
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/effect/turf_decal/delivery,
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"bdD" = (
@@ -34929,17 +34933,17 @@
},
/area/command/heads_quarters/rd)
"bdE" = (
-/obj/structure/cable/white{
- icon_state = "0-4"
- },
-/obj/structure/cable/white{
- icon_state = "0-8"
- },
/obj/machinery/power/apc{
areastring = "/area/maintenance/solars/starboard/fore";
name = "Starboard Bow Solar APC";
pixel_y = -26
},
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/white{
+ icon_state = "0-8"
+ },
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
"bdF" = (
@@ -34959,9 +34963,6 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"bdG" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 1
},
@@ -34969,6 +34970,9 @@
dir = 1;
pixel_y = -22
},
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"bdH" = (
@@ -36177,10 +36181,8 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
/obj/item/circuitboard/aicore,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel{
icon_state = "sepia"
},
@@ -36219,6 +36221,9 @@
dir = 1;
pixel_y = -28
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel{
icon_state = "sepia"
},
@@ -36252,7 +36257,7 @@
/area/service/chapel/main)
"bfB" = (
/obj/machinery/holopad,
-/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/mixing)
"bfC" = (
@@ -36334,6 +36339,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/smartfridge/organ/preloaded{
+ pixel_y = -31
+ },
/turf/open/floor/plasteel,
/area/medical/medbay/zone3)
"bfG" = (
@@ -36346,7 +36354,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay Recovery Room";
- dir = 8;
+ dir = 1;
network = list("ss13","medbay")
},
/obj/effect/turf_decal/tile/neutral{
@@ -36796,6 +36804,9 @@
dir = 1;
network = list("ss13","engine")
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/engineering/atmos)
"bgi" = (
@@ -36841,12 +36852,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/machinery/light/small,
-/obj/machinery/camera{
- c_tag = "Port Quarter Solar";
- dir = 1;
- network = list("ss13","engine")
- },
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
"bgl" = (
@@ -37318,8 +37323,7 @@
"bhn" = (
/obj/machinery/light/floor,
/turf/open/floor/plasteel/yellowsiding/corner{
- dir = 8;
- icon_state = "yellowcornersiding"
+ dir = 8
},
/area/maintenance/starboard/aft)
"bho" = (
@@ -37465,6 +37469,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/airalarm{
+ pixel_y = 23
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bhA" = (
@@ -37487,13 +37494,13 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/machinery/airalarm{
- pixel_y = 23
- },
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/camera{
+ c_tag = "Arrivals Bay 1 North"
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bhC" = (
@@ -37887,10 +37894,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/machinery/camera{
- c_tag = "Arrivals Bay 1 North";
- dir = 1
- },
/obj/effect/turf_decal/tile/blue{
dir = 4
},
@@ -38258,10 +38261,6 @@
"biV" = (
/obj/machinery/door/firedoor,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/camera{
- c_tag = "Arrivals Hallway 3";
- dir = 8
- },
/obj/effect/turf_decal/stripes/line,
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -38781,6 +38780,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/camera{
+ c_tag = "Arrivals Hallway";
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bjV" = (
@@ -38937,6 +38940,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/camera{
+ c_tag = "Arrivals Hallway 2";
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
"bkX" = (
@@ -39118,66 +39125,21 @@
/turf/open/floor/circuit/telecomms/mainframe,
/area/tcommsat/server)
"bls" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Security Checkpoint";
- dir = 1
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel{
- heat_capacity = 1e+006
- },
-/area/hallway/primary/aft)
+/turf/closed/wall,
+/area/engineering/storage/tech)
"blv" = (
+/turf/closed/wall/rust,
+/area/engineering/storage/tech)
+"blx" = (
+/obj/structure/sign/poster/contraband/random,
+/turf/closed/wall,
+/area/engineering/storage/tech)
+"bly" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/camera{
- c_tag = "Arrivals Bay 1 North";
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel{
- heat_capacity = 1e+006
- },
-/area/hallway/secondary/entry)
-"blx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/camera{
- c_tag = "Arrivals Hallway";
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
-"bly" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/camera{
- c_tag = "Arrivals Hallway 2";
- dir = 8
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/hallway/secondary/entry)
+/turf/closed/wall/r_wall,
+/area/command/heads_quarters/rd)
"blA" = (
/obj/machinery/door/airlock/grunge{
name = "Mass Driver Room";
@@ -39916,10 +39878,10 @@
/turf/open/floor/circuit/green/telecomms,
/area/tcommsat/server)
"buN" = (
-/obj/machinery/announcement_system,
/obj/machinery/status_display/ai{
pixel_x = 32
},
+/obj/machinery/ntnet_relay,
/turf/open/floor/circuit/telecomms/mainframe,
/area/tcommsat/server)
"buO" = (
@@ -39961,22 +39923,11 @@
/turf/open/floor/plasteel/dark/telecomms,
/area/tcommsat/server)
"buS" = (
-/obj/machinery/ntnet_relay,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel/dark/telecomms,
-/area/tcommsat/server)
+/turf/closed/wall/r_wall/rust,
+/area/science/mixing)
"buW" = (
/turf/closed/wall/r_wall,
/area/engineering/supermatter)
@@ -40741,7 +40692,7 @@
icon_state = "1-2"
},
/obj/machinery/door/airlock/maintenance{
- req_one_access_txt = "8;12"
+ req_one_access_txt = "7;12"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/turf/open/floor/plating,
@@ -40832,8 +40783,7 @@
/area/service/bar/atrium)
"dSq" = (
/turf/open/floor/plasteel/yellowsiding{
- dir = 4;
- icon_state = "yellowsiding"
+ dir = 4
},
/area/maintenance/starboard/aft)
"dXv" = (
@@ -40872,6 +40822,9 @@
/area/engineering/atmos)
"eew" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/obj/structure/cable{
icon_state = "4-8"
},
@@ -41011,6 +40964,12 @@
},
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
+"eDk" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/science/mixing)
"eOg" = (
/obj/structure/closet/crate{
icon_state = "crateopen"
@@ -41066,13 +41025,13 @@
name = "Incinerator Exterior Airlock";
req_access_txt = "12"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/decal/cleanable/dirt,
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
/turf/open/floor/engine,
/area/maintenance/disposal/incinerator)
"eZd" = (
@@ -41231,14 +41190,14 @@
/turf/open/space/basic,
/area/space)
"fsJ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume{
frequency = 1449;
id = "incinerator_airlock_pump"
},
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
/turf/open/floor/engine,
/area/maintenance/disposal/incinerator)
"fuR" = (
@@ -41384,6 +41343,12 @@
/obj/effect/turf_decal/tile/neutral,
/turf/open/floor/plasteel,
/area/hallway/primary/port)
+"gfr" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/closed/wall,
+/area/science/mixing)
"ggq" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -41461,6 +41426,12 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
+"gBp" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/science/mixing)
"gGq" = (
/obj/machinery/mass_driver{
dir = 4;
@@ -41547,18 +41518,11 @@
/area/command/gateway)
"gSu" = (
/turf/open/floor/plasteel/yellowsiding{
- dir = 8;
- icon_state = "yellowsiding"
+ dir = 8
},
/area/maintenance/starboard/aft)
"gSv" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/structure/cable{
- icon_state = "1-8"
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -41569,6 +41533,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
"gVX" = (
@@ -41592,8 +41559,7 @@
/obj/effect/decal/cleanable/dirt/dust,
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/light/broken{
- dir = 1;
- icon_state = "tube-broken"
+ dir = 1
},
/turf/open/floor/carpet/green/airless,
/area/maintenance/starboard/aft)
@@ -41717,8 +41683,7 @@
dir = 4
},
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
@@ -41781,8 +41746,7 @@
dir = 4
},
/obj/effect/turf_decal/trimline/green/line{
- dir = 1;
- icon_state = "trimline"
+ dir = 1
},
/turf/open/floor/plating{
icon_state = "panelscorched"
@@ -41794,10 +41758,7 @@
name = "Robotics Lab";
req_access_txt = "29"
},
-/obj/machinery/door/airlock/research/glass{
- name = "Robotics Lab";
- req_access_txt = "29"
- },
+/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/science/robotics/lab)
"hUG" = (
@@ -41903,6 +41864,10 @@
/obj/machinery/air_sensor/atmos/carbon_tank,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
+"irp" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall/rust,
+/area/science/mixing)
"isT" = (
/turf/open/floor/wood{
icon_state = "wood-broken2"
@@ -42001,6 +41966,13 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/button/door{
+ id = "stationawaygate";
+ name = "Gateway Access Shutter Control";
+ pixel_x = -1;
+ pixel_y = -24;
+ req_access_txt = "31"
+ },
/turf/open/floor/plasteel,
/area/command/gateway)
"iUO" = (
@@ -42009,8 +41981,7 @@
/area/science/mixing)
"iVs" = (
/obj/machinery/computer/gateway_control{
- dir = 4;
- icon_state = "computer"
+ dir = 4
},
/obj/effect/turf_decal/delivery,
/obj/machinery/camera{
@@ -42104,8 +42075,7 @@
/area/science/xenobiology)
"jeI" = (
/turf/open/floor/plasteel/yellowsiding{
- dir = 1;
- icon_state = "yellowsiding"
+ dir = 1
},
/area/maintenance/starboard/aft)
"jkc" = (
@@ -42172,11 +42142,12 @@
/turf/open/floor/plasteel/dark,
/area/hallway/primary/starboard)
"jrd" = (
-/obj/machinery/pool/drain,
-/turf/open/pool,
-/area/maintenance/starboard/aft)
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/science/mixing)
"jsD" = (
-/obj/effect/mapping_helpers/airlock/locked,
/obj/machinery/door/airlock/research/glass/incinerator/toxmix_exterior,
/turf/open/floor/engine,
/area/science/mixing)
@@ -42416,12 +42387,16 @@
/area/engineering/atmos)
"kiw" = (
/obj/machinery/atmospherics/pipe/simple/general/visible,
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/power/terminal,
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/engineering/atmos)
"koL" = (
@@ -42453,14 +42428,12 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/mixing)
"krX" = (
/obj/machinery/light/floor,
/turf/open/floor/plasteel/yellowsiding/corner{
- dir = 4;
- icon_state = "yellowcornersiding"
+ dir = 4
},
/area/maintenance/starboard/aft)
"kwF" = (
@@ -42513,6 +42486,10 @@
/obj/machinery/meter/atmos,
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"kFf" = (
+/obj/structure/closet/crate/bin,
+/turf/open/floor/plasteel,
+/area/science/mixing)
"kHA" = (
/obj/machinery/atmospherics/pipe/simple/green/visible{
dir = 4
@@ -42593,6 +42570,12 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
/area/maintenance/starboard/aft)
+"kYh" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/science/mixing)
"lcW" = (
/turf/open/floor/wood,
/area/maintenance/starboard/aft)
@@ -42916,13 +42899,13 @@
/obj/machinery/igniter{
id = "Incinerator"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/machinery/air_sensor/atmos/incinerator_tank{
pixel_x = -32;
pixel_y = 32
},
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
"mQi" = (
@@ -43029,12 +43012,16 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/airalarm{
+ dir = 4;
+ name = "Inceinerator air alarm";
+ pixel_x = 10
+ },
/turf/closed/wall/r_wall,
/area/maintenance/disposal/incinerator)
"nio" = (
/obj/structure/pool/ladder{
dir = 1;
- icon_state = "ladder";
pixel_y = -24
},
/turf/open/pool,
@@ -43132,6 +43119,10 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"nPS" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/maintenance/solars/port/aft)
"nTg" = (
/obj/item/assembly/timer{
pixel_x = 5;
@@ -43155,8 +43146,16 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/machinery/power/smes,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
/turf/open/floor/plasteel/dark/corner,
/area/engineering/atmos)
+"nXb" = (
+/obj/machinery/pool/drain,
+/turf/open/pool,
+/area/maintenance/starboard/aft)
"oaV" = (
/obj/structure/grille,
/obj/machinery/meter,
@@ -43196,11 +43195,11 @@
/turf/closed/wall,
/area/asteroid/nearstation)
"ooX" = (
-/obj/machinery/smartfridge/organ/preloaded{
- pixel_y = 2
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 10
},
-/turf/closed/wall,
-/area/medical/medbay/zone3)
+/turf/closed/wall/r_wall,
+/area/science/mixing)
"oql" = (
/obj/machinery/atmospherics/pipe/simple/green/visible,
/turf/open/floor/plasteel,
@@ -43249,7 +43248,6 @@
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
"oxb" = (
-/obj/effect/mapping_helpers/airlock/locked,
/obj/machinery/door/airlock/research/glass/incinerator/toxmix_interior,
/turf/open/floor/engine,
/area/science/mixing)
@@ -43259,13 +43257,13 @@
dir = 4;
luminosity = 2
},
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/structure/cable{
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/yellow{
icon_state = "0-8"
},
-/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
"oys" = (
@@ -43307,8 +43305,7 @@
"oIA" = (
/obj/machinery/light/floor,
/turf/open/floor/plasteel/yellowsiding/corner{
- dir = 1;
- icon_state = "yellowcornersiding"
+ dir = 1
},
/area/maintenance/starboard/aft)
"oIG" = (
@@ -43437,6 +43434,10 @@
},
/turf/open/floor/plasteel/dark,
/area/science/mixing)
+"pgH" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
+/area/science/mixing)
"pix" = (
/turf/open/floor/wood{
icon_state = "wood-broken7"
@@ -43511,7 +43512,7 @@
/obj/structure/sign/warning/vacuum{
pixel_y = -32
},
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "0-4"
},
/turf/open/floor/engine/vacuum,
@@ -43555,6 +43556,9 @@
/obj/effect/turf_decal/tile/yellow{
dir = 8
},
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
/turf/open/floor/plasteel/checker,
/area/engineering/atmos)
"pAN" = (
@@ -43604,7 +43608,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/mixing)
"pLb" = (
@@ -43691,9 +43694,6 @@
name = "Toxins Launch Room Access";
req_access_txt = "7"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
@@ -43703,6 +43703,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/mixing)
"qdt" = (
@@ -43875,6 +43878,9 @@
dir = 1
},
/obj/machinery/meter,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/open/floor/plasteel,
/area/engineering/atmos)
"qRz" = (
@@ -44414,7 +44420,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sEQ" = (
/obj/structure/rack,
/obj/item/radio,
@@ -44444,7 +44450,7 @@
dir = 4
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFo" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -44456,7 +44462,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFp" = (
/obj/effect/turf_decal/bot{
dir = 1
@@ -44469,8 +44475,11 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFq" = (
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/stripes/line{
@@ -44489,7 +44498,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFs" = (
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
@@ -44535,7 +44544,7 @@
dir = 4
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFS" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -44545,7 +44554,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFT" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/tile/neutral,
@@ -44556,7 +44565,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFU" = (
/obj/effect/turf_decal/bot,
/obj/effect/turf_decal/stripes/line{
@@ -44575,7 +44584,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sFX" = (
/obj/machinery/light/small{
dir = 8
@@ -44617,7 +44626,7 @@
dir = 8
},
/turf/open/floor/plasteel/dark,
-/area/maintenance/starboard)
+/area/engineering/storage/tech)
"sGA" = (
/obj/structure/cable/white{
icon_state = "2-4"
@@ -46921,8 +46930,7 @@
"twy" = (
/obj/structure/table/reinforced,
/obj/machinery/chem_dispenser/drinks{
- dir = 1;
- icon_state = "soda_dispenser"
+ dir = 1
},
/turf/open/floor/wood{
icon_state = "wood-broken6"
@@ -46987,11 +46995,26 @@
/turf/open/floor/plating,
/area/science/mixing)
"ucu" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
-/turf/closed/wall,
-/area/science/mixing)
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/camera{
+ c_tag = "Security Checkpoint";
+ dir = 10
+ },
+/turf/open/floor/plasteel{
+ heat_capacity = 1e+006
+ },
+/area/hallway/primary/aft)
"udT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/power/apc{
@@ -47243,10 +47266,6 @@
/turf/open/floor/plasteel/dark,
/area/command/gateway)
"uMi" = (
-/obj/machinery/door/airlock/security{
- name = "Law Office";
- req_access_txt = "38"
- },
/obj/machinery/door/firedoor,
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -47255,6 +47274,10 @@
/obj/structure/cable/white{
icon_state = "1-2"
},
+/obj/machinery/door/airlock{
+ name = "Law Office";
+ req_access_txt = "38"
+ },
/turf/open/floor/plasteel,
/area/service/lawoffice)
"uSs" = (
@@ -47345,7 +47368,6 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/mixing)
"vmq" = (
@@ -48041,9 +48063,6 @@
name = "Incinerator Interior Airlock";
req_access_txt = "12"
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
@@ -48059,6 +48078,9 @@
sanitize_external = 1;
sensor_tag = "incinerator_airlock_sensor"
},
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
/turf/open/floor/engine,
/area/maintenance/disposal/incinerator)
"yba" = (
@@ -48118,8 +48140,8 @@
/area/hallway/primary/port/aft)
"ygB" = (
/obj/machinery/door/airlock/maintenance_hatch{
- name = "Maintenance Hatch";
- req_access_txt = "12"
+ name = "Gateway Maintenance Hatch";
+ req_access_txt = "62"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -76083,7 +76105,7 @@ aad
aad
aLC
bae
-aLC
+nPS
aLC
sdX
sdX
@@ -76599,8 +76621,8 @@ aMJ
bak
aLC
aLC
-aLC
-aLC
+nPS
+nPS
aaa
pZU
aaa
@@ -76857,7 +76879,7 @@ bal
aLC
bbf
bbo
-aLC
+nPS
aaa
pZU
aaa
@@ -77108,13 +77130,13 @@ aTY
aUP
buL
buP
-buS
+sKn
aMJ
bam
bav
bdC
bgk
-aLC
+nPS
sdX
sdX
aaa
@@ -80407,11 +80429,11 @@ aad
aro
ars
ars
-ars
+asI
ars
ars
arp
-ars
+asI
ars
asu
asA
@@ -86112,7 +86134,7 @@ aSh
bcf
bcW
bfF
-ooX
+aSh
hSE
bfA
bfX
@@ -87926,14 +87948,14 @@ bjV
bjC
bjC
bkl
-blx
bjC
bjC
bjC
bjC
bjC
bjC
-bly
+bjC
+bjC
bkS
bkX
blc
@@ -89703,7 +89725,7 @@ aUy
aWQ
tWh
aYc
-iey
+ucu
sKB
baI
bby
@@ -89960,7 +89982,7 @@ sNz
aWR
tWh
aYd
-bls
+iey
byq
baJ
bbz
@@ -89973,7 +89995,7 @@ bfL
aYc
bgU
bhI
-blv
+biw
bgU
aaa
aaa
@@ -93498,8 +93520,8 @@ aad
aad
aaa
aaa
-bbT
-bbT
+aaa
+bcF
bbT
bbT
bcF
@@ -93754,8 +93776,8 @@ sMq
aad
aad
aaa
-adm
-bbT
+aaa
+aaa
bbX
bbZ
bcc
@@ -94012,8 +94034,8 @@ aad
aad
aaa
aad
-bbU
-bbT
+aaa
+bbX
bca
bbT
bcH
@@ -94786,7 +94808,7 @@ bbW
bcQ
adq
aad
-bbT
+bbX
bcK
bdE
adu
@@ -94817,10 +94839,10 @@ xpX
pML
oyD
bfp
-aSD
-aRz
-aRz
-aRz
+adm
+bls
+bls
+bls
saI
aRz
sIb
@@ -95043,7 +95065,7 @@ aef
aaa
aaa
aaa
-bbT
+bbX
bcL
bcR
adu
@@ -95074,10 +95096,10 @@ oyD
oyD
oyD
sGY
-aRz
+bls
sFn
sFR
-sJN
+blv
sGY
aRz
bmb
@@ -95300,8 +95322,8 @@ adq
sdX
sdX
sdX
-bbT
-bbT
+bbX
+bbX
bbU
adu
adu
@@ -95334,7 +95356,7 @@ sEn
sEN
sFo
sFS
-aSH
+blx
sGY
aRz
sIc
@@ -95588,7 +95610,7 @@ eOg
sDq
aRz
bfp
-aRz
+bls
sFp
sFT
sGy
@@ -95618,7 +95640,7 @@ hXc
abP
jLF
aAY
-hVE
+kFf
bdA
aRy
aRy
@@ -95845,10 +95867,10 @@ xMZ
bRf
xMZ
ygB
-aRz
+bls
sFq
sFU
-aRz
+bls
sGY
sJN
blM
@@ -96141,8 +96163,8 @@ lMu
aRy
bhm
bhX
-jrd
uCY
+nXb
nio
jeI
juY
@@ -97931,12 +97953,12 @@ xiZ
wvy
bfz
bfB
-mvB
-mvB
+hVE
+hVE
kqH
vlJ
pHH
-ucu
+kPi
aad
aad
aad
@@ -98193,7 +98215,7 @@ eZs
vPZ
jde
pmK
-iio
+kPi
aad
aad
aad
@@ -98445,12 +98467,12 @@ sVt
sVt
sVt
qcP
-sVt
-meo
-meo
-sVt
-sVt
-sVt
+pgH
+irp
+irp
+pgH
+pgH
+kYh
iio
aad
aad
@@ -98696,7 +98718,7 @@ aJO
aJO
bdK
bew
-ajP
+bly
ajP
sVt
meo
@@ -98953,7 +98975,7 @@ aaa
aJO
aJO
aJO
-ajP
+bly
dfK
dfK
sVt
@@ -99210,7 +99232,7 @@ aaa
aaa
aad
aad
-meo
+buS
dfK
qnA
ucd
@@ -99467,11 +99489,11 @@ aaa
aaa
aac
aad
-sVt
+jrd
lmq
nfS
-sVt
-iio
+gBp
+gfr
upN
iio
iio
@@ -99724,10 +99746,10 @@ aaa
aaa
aac
aad
-sVt
-sVt
-sVt
-sVt
+ooX
+gcw
+gcw
+eDk
gLD
lFm
uTF
diff --git a/auxmos.dll b/auxmos.dll
index a5fc480d10..eb7e3b71fc 100644
Binary files a/auxmos.dll and b/auxmos.dll differ
diff --git a/auxmos.pdb b/auxmos.pdb
index 12fb921360..5d005d3689 100644
Binary files a/auxmos.pdb and b/auxmos.pdb differ
diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm
index 0609b9dabe..f893ab3dfe 100644
--- a/code/__DEFINES/is_helpers.dm
+++ b/code/__DEFINES/is_helpers.dm
@@ -76,7 +76,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isvampire(A) (is_species(A,/datum/species/vampire))
#define isdullahan(A) (is_species(A, /datum/species/dullahan))
-#define isangel(A) (is_species(A, /datum/species/angel))
#define ismush(A) (is_species(A, /datum/species/mush))
#define isshadow(A) (is_species(A, /datum/species/shadow))
#define isrobotic(A) (is_species(A, /datum/species/ipc) || is_species(A, /datum/species/synthliz) || is_species(A, /datum/species/mammal/synthetic))
diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm
index 74ca459fa1..60aeb57513 100644
--- a/code/__DEFINES/species.dm
+++ b/code/__DEFINES/species.dm
@@ -3,7 +3,6 @@
#define SPECIES_ABDUCTOR "abductor"
#define SPECIES_ANDROID "android"
-#define SPECIES_ANGEL "angel"
#define SPECIES_MAMMAL "mammal"
#define SPECIES_MAMMAL_SYNTHETIC "mammal_synthetic"
#define SPECIES_ARACHNID "arachnid"
@@ -53,3 +52,14 @@
#define SPECIES_CATEGORY_SHADOW "shadow"
#define SPECIES_CATEGORY_SKELETON "skeleton"
#define SPECIES_CATEGORY_UNDEAD "undead"
+
+
+//Species Wing Type Defines ----------------------
+#define SPECIES_WINGS_ANGEL list("Angel")
+#define SPECIES_WINGS_DRAGON list("Dragon") //could also be considered demon wings or bat wings?
+#define SPECIES_WINGS_ROBOT list("Robotic")
+#define SPECIES_WINGS_INSECT list("Fly") //"hey when can we have something besides giant fly wings?" "when you sprite it!"
+#define SPECIES_WINGS_SKELETAL list("Skeleton")
+#define SPECIES_WINGS_MOTH list("Megamoth","Mothra")
+#define SPECIES_WINGS_JELLY list("Angel") //no actual slime wings present right now, but I'm making this in the event someone wants to sprite slime wings.
+#define SPECIES_WINGS_ALL list("Angel","Dragon","Robotic","Fly","Skeleton","Megamoth","Mothra") //keep this updated
diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm
index 87187a4c3d..36de9d281b 100644
--- a/code/__HELPERS/type2type.dm
+++ b/code/__HELPERS/type2type.dm
@@ -591,9 +591,9 @@
switch(child)
if(/datum)
return null
- if(/obj || /mob)
+ if(/obj, /mob)
return /atom/movable
- if(/area || /turf)
+ if(/area, /turf)
return /atom
else
return /datum
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index ed0a9fbab8..88008920b9 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -224,6 +224,7 @@
else
to_chat(owner, "You feel your heart lurching in your chest...")
owner.adjustOxyLoss(8)
+ else
/datum/brain_trauma/severe/discoordination
name = "Discoordination"
diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm
index 3a67230d36..07b3d5fe8a 100644
--- a/code/datums/diseases/dna_spread.dm
+++ b/code/datums/diseases/dna_spread.dm
@@ -30,7 +30,7 @@
return
switch(stage)
- if(2 || 3) //Pretend to be a cold and give time to spread.
+ if(2, 3) //Pretend to be a cold and give time to spread.
if(prob(8))
affected_mob.emote("sneeze")
if(prob(8))
diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm
index d4807e377c..a273aad0dd 100644
--- a/code/game/machinery/requests_console.dm
+++ b/code/game/machinery/requests_console.dm
@@ -374,7 +374,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
radio_freq = FREQ_ENGINEERING
if("security")
radio_freq = FREQ_SECURITY
- if("cargobay" || "mining")
+ if("cargobay", "mining")
radio_freq = FREQ_SUPPLY
Radio.set_frequency(radio_freq)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index a8e76d04ca..a353a2b76b 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -380,6 +380,8 @@ GENETICS SCANNER
mutant = TRUE
else if (S.mutantstomach != initial(S.mutantstomach))
mutant = TRUE
+ else if (S.flying_species != initial(S.flying_species))
+ mutant = TRUE
msg += "\tReported Species: [H.spec_trait_examine_font()][H.dna.custom_species ? H.dna.custom_species : S.name]\n"
msg += "\tBase Species: [H.spec_trait_examine_font()][S.name]\n"
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index c10bcd753d..b6520f6bb5 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -53,7 +53,6 @@
desc = "A satchel that opens into a localized pocket of Blue Space."
icon_state = "holdingsat"
item_state = "holdingsat"
- species_exception = list(/datum/species/angel)
/obj/item/storage/backpack/holding/duffel
name = "duffel bag of holding"
@@ -190,7 +189,6 @@
name = "satchel"
desc = "A trendy looking satchel."
icon_state = "satchel-norm"
- species_exception = list(/datum/species/angel) //satchels can be equipped since they are on the side, not back
/obj/item/storage/backpack/satchel/leather
name = "leather satchel"
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 5f84094477..4853d553dc 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -719,7 +719,6 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
icon = 'icons/obj/smooth_structures/rplasma_window.dmi'
icon_state = "rplasmawindow"
dir = FULLTILE_WINDOW_DIR
- state = PRWINDOW_SECURE
max_integrity = 1000
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 458fcc0121..17bad60945 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -53,15 +53,6 @@
return
cmd_show_exp_panel(M.client)
- else if(href_list["toggleexempt"])
- if(!check_rights(R_ADMIN))
- return
- var/client/C = locate(href_list["toggleexempt"]) in GLOB.clients
- if(!C)
- to_chat(usr, "ERROR: Client not found.")
- return
- toggle_exempt_status(C)
-
else if(href_list["makeAntag"])
if(!check_rights(R_ADMIN))
return
diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
index bc8fd6777d..d019a03140 100644
--- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm
+++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm
@@ -70,9 +70,9 @@
/obj/machinery/atmospherics/pipe/layer_manifold/SetInitDirections()
switch(dir)
- if(NORTH || SOUTH)
+ if(NORTH, SOUTH)
initialize_directions = NORTH|SOUTH
- if(EAST || WEST)
+ if(EAST, WEST)
initialize_directions = EAST|WEST
/obj/machinery/atmospherics/pipe/layer_manifold/isConnectable(obj/machinery/atmospherics/target, given_layer)
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index c33e6098c0..d78488ec0b 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -119,6 +119,23 @@
to_chat(user, "Your Clown Mask has now morphed into [choice], all praise the Honkmother!")
return TRUE
+/obj/item/clothing/mask/gas/clown_hat_polychromic
+ name = "polychromic clown wig and mask"
+ desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
+ clothing_flags = ALLOWINTERNALS
+ icon_state = "clown"
+ item_state = "clown_hat"
+ dye_color = "clown"
+ w_class = WEIGHT_CLASS_SMALL
+ flags_cover = MASKCOVERSEYES
+ resistance_flags = FLAMMABLE
+ dog_fashion = /datum/dog_fashion/head/clown
+ var/list/poly_colors = list("#FF8000", "#FFFFFF", "#FF0000", "#0000FF", "#FFFF00")
+
+/obj/item/clothing/mask/gas/clown_hat_polychromic/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/polychromic, poly_colors, 5, names = list("Hair", "Frame", "Mouth", "Eyes", "Markings"))
+
/obj/item/clothing/mask/gas/clown_hat/sexy
name = "sexy-clown wig and mask"
desc = "A feminine clown mask for the dabbling crossdressers or female entertainers."
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index c944b2aa1f..f51593b590 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -234,7 +234,6 @@ Contains:
icon_state = "ert_medical"
item_state = "ert_medical"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med
- species_exception = list(/datum/species/angel)
//Red alert ERT
@@ -296,7 +295,6 @@ Contains:
icon_state = "ert_medical-alert"
item_state = "ert_medical-alert"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med
- species_exception = list(/datum/species/angel)
/obj/item/clothing/suit/space/eva
name = "EVA suit"
diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
index 470a3695fc..25c40ee5d8 100644
--- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm
+++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
@@ -32,6 +32,20 @@
can_adjust = FALSE
mutantrace_variation = STYLE_DIGITIGRADE //The clown suit must look funny, no taur alpha masks where possible.
+/obj/item/clothing/under/rank/civilian/polychromic_clown
+ name = "polychromic clown suit"
+ desc = "'HONK!'"
+ icon_state = "clown"
+ item_state = "clown"
+ fitted = FEMALE_UNIFORM_TOP
+ can_adjust = FALSE
+ mutantrace_variation = STYLE_DIGITIGRADE //The clown suit must look funny, no taur alpha masks where possible.
+ var/list/poly_colors = list("#FF0000", "#FF99FF", "#FFFF00", "#FFFFFF")
+
+/obj/item/clothing/under/rank/civilian/polychromic_clown/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/polychromic, poly_colors, 4)
+
/obj/item/clothing/under/rank/civilian/clown/blue
name = "blue clown suit"
desc = "'BLUE HONK!'"
diff --git a/code/modules/hydroponics/hydroponics_chemreact.dm b/code/modules/hydroponics/hydroponics_chemreact.dm
index a4ef78a21f..640784aed8 100644
--- a/code/modules/hydroponics/hydroponics_chemreact.dm
+++ b/code/modules/hydroponics/hydroponics_chemreact.dm
@@ -12,21 +12,16 @@
/obj/machinery/hydroponics/proc/mutation_roll(mob/user)
- switch(rand(100))
+ switch(rand(1, 100))
if(91 to 100)
adjustHealth(-10)
visible_message("\The [myseed.plantname] starts to wilt and burn!")
- return
if(41 to 90)
if(myseed && !self_sustaining) //Stability
myseed.adjust_instability(5)
- return
if(21 to 40)
visible_message("\The [myseed.plantname] appears unusually reactive...")
- return
if(11 to 20)
mutateweed()
- return
if(1 to 10)
mutatepest(user)
- return
diff --git a/code/modules/jobs/job_report.dm b/code/modules/jobs/job_report.dm
index 88c7f7ad19..016e34f525 100644
--- a/code/modules/jobs/job_report.dm
+++ b/code/modules/jobs/job_report.dm
@@ -17,6 +17,13 @@
ui = new(user, src, "TrackedPlaytime")
ui.open()
+/datum/job_report_menu/ui_data(mob/user)
+ var/list/data = list()
+
+ data["exemptStatus"] = (owner.prefs?.db_flags & DB_FLAG_EXEMPT)
+
+ return data
+
/datum/job_report_menu/ui_static_data()
if (!CONFIG_GET(flag/use_exp_tracking))
return list("failReason" = JOB_REPORT_MENU_FAIL_REASON_TRACKING_DISABLED)
@@ -42,8 +49,39 @@
data["livingTime"] = play_records[EXP_TYPE_LIVING]
data["ghostTime"] = play_records[EXP_TYPE_GHOST]
+ data["adminTime"] = play_records[EXP_TYPE_ADMIN] ? play_records[EXP_TYPE_ADMIN] : 0
+
+ data["isAdmin"] = check_rights(R_ADMIN, show_msg = FALSE)
return data
+/datum/job_report_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
+ . = ..()
+ if(.)
+ return
+
+ switch(action)
+ if("toggle_exempt")
+ if(!check_rights(R_ADMIN))
+ message_admins("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin rights.")
+ log_admin("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin rights.")
+ to_chat(usr, span_danger("ERROR: Insufficient admin rights."), confidential = TRUE)
+ return TRUE
+
+ var/datum/admins/viewer_admin_datum = GLOB.admin_datums[usr.ckey]
+
+ if(!viewer_admin_datum)
+ message_admins("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin datum for their ckey.")
+ log_admin("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin datum for their ckey.")
+ to_chat(usr, span_danger("ERROR: Insufficient admin rights."), confidential = TRUE)
+ return TRUE
+
+ if(QDELETED(owner))
+ to_chat(usr, span_danger("ERROR: Client not found."), confidential = TRUE)
+ return TRUE
+
+ viewer_admin_datum.toggle_exempt_status(owner)
+ return TRUE
+
#undef JOB_REPORT_MENU_FAIL_REASON_TRACKING_DISABLED
#undef JOB_REPORT_MENU_FAIL_REASON_NO_RECORDS
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index b005822438..0d46912a5a 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -694,16 +694,20 @@
/datum/reagent/flightpotion/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
- if(!ishumanbasic(M) || reac_volume < 5) // implying xenohumans are holy
+ var/mob/living/carbon/C = M
+ if(reac_volume < 5)
if(method == INGEST && show_message)
- to_chat(M, "You feel nothing but a terrible aftertaste.")
+ to_chat(C, "You feel nothing but a terrible aftertaste.")
return ..()
-
- to_chat(M, "A terrible pain travels down your back as wings burst out!")
- M.set_species(/datum/species/angel)
- playsound(M.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1)
- M.adjustBruteLoss(20)
- M.emote("scream")
+ var/has_wings = (C.dna.species.mutant_bodyparts["deco_wings"] && C.dna.features["deco_wings"] != "None" || C.dna.species.mutant_bodyparts["insect_wings"] && C.dna.features["insect_wings"] != "None")
+ var/has_functional_wings = (C.dna.species.mutant_bodyparts["wings"] != null)
+ to_chat(C, "A terrible pain travels down your back as [has_wings || has_functional_wings ? "your wings transform" : "wings burst out"]!")
+ C.dna.species.GiveSpeciesFlight(C, has_functional_wings ? TRUE : FALSE) //give them the full list of wing choices if this is their second flight potion
+ to_chat(C, "You feel blessed!")
+ ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) //implying anyone is truly holy in a setting where people throw tantrums when things aren't violent
+ playsound(C.loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -1)
+ C.adjustBruteLoss(20)
+ C.emote("scream")
..()
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
index 800682b8cf..07adec0aa4 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm
@@ -1,4 +1,8 @@
-//Angel Wings
+//Functional Wings
+
+/datum/sprite_accessory/wings
+ icon = 'icons/mob/wings_functional.dmi'
+ relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings/none
name = "None"
@@ -9,23 +13,12 @@
return (!H.dna.features["wings"] || H.dna.features["wings"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception))))
/datum/sprite_accessory/wings_open
- icon = 'icons/mob/wings.dmi'
+ icon = 'icons/mob/wings_functional.dmi'
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings_open/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
return (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)) || H.dna.species.mutant_bodyparts["wings"])
-/datum/sprite_accessory/wings_open/angel
- name = "Angel"
- icon_state = "angel"
- color_src = 0
- dimension_x = 46
- center = TRUE
- dimension_y = 34
-
-/datum/sprite_accessory/wings
- icon = 'icons/mob/wings.dmi'
- relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings/angel
name = "Angel"
@@ -36,6 +29,114 @@
dimension_y = 34
locked = TRUE
+/datum/sprite_accessory/wings_open/angel
+ name = "Angel"
+ icon_state = "angel"
+ color_src = 0
+ dimension_x = 46
+ center = TRUE
+ dimension_y = 34
+
+/datum/sprite_accessory/wings/dragon
+ name = "Dragon"
+ icon_state = "dragon"
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/dragon
+ name = "Dragon"
+ icon_state = "dragon"
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/megamoth
+ name = "Megamoth"
+ icon_state = "megamoth"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/megamoth
+ name = "Megamoth"
+ icon_state = "megamoth"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/mothra
+ name = "Mothra"
+ icon_state = "mothra"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/mothra
+ name = "Mothra"
+ icon_state = "mothra"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/skeleton
+ name = "Skeleton"
+ icon_state = "skele"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/skeleton
+ name = "Skeleton"
+ icon_state = "skele"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/robotic
+ name = "Robotic"
+ icon_state = "robotic"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/robotic
+ name = "Robotic"
+ icon_state = "robotic"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
+/datum/sprite_accessory/wings/fly
+ name = "Fly"
+ icon_state = "fly"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+ locked = TRUE
+
+/datum/sprite_accessory/wings_open/fly
+ name = "Fly"
+ icon_state = "fly"
+ color_src = FALSE
+ dimension_x = 96
+ center = TRUE
+ dimension_y = 32
+
// Decorative wings
/datum/sprite_accessory/deco_wings
@@ -43,6 +144,10 @@
color_src = WINGCOLOR
mutant_part_string = "insect_wings"
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+ var/list/upgrade_to = list() //What the wings change to if the mob consumes a flight potion or gains true wings through other means. If it's an empty list, it will pick the species alternative instead.
+
+/datum/sprite_accessory/deco_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
+ return (H.dna.features["wings"] != "None") //true wings will override decorative wings
/datum/sprite_accessory/deco_wings/none
name = "None"
@@ -57,162 +162,201 @@
center = TRUE
dimension_y = 34
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
+ upgrade_to = SPECIES_WINGS_ANGEL //obviously
//nonmoth wings
/datum/sprite_accessory/deco_wings/bat
name = "Bat"
icon_state = "bat"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/bee
name = "Bee"
icon_state = "bee"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/bee2
name = "Small Bee"
icon_state = "beewings"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/dragon
name = "Dragon"
icon_state = "dragon"
+ upgrade_to = SPECIES_WINGS_DRAGON //lol
/datum/sprite_accessory/deco_wings/dragonfly
name = "Dragonfly"
icon_state = "dragonfly"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/fairy
name = "Fairy"
icon_state = "fairy"
+ upgrade_to = SPECIES_WINGS_INSECT //rip people's sparkly wings until someone sprites in some huge fairy wings or something
/datum/sprite_accessory/deco_wings/featheredwing
name = "Feathery"
icon_state = "feathery"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/featheredwingmedium
name = "Medium Feathered"
icon_state = "feathered3"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/featheredwinglarge
name = "Large Feathered"
icon_state = "feathered2"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/harpywings
name = "Harpy"
icon_state = "harpywings"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/roboticwing
name = "Robotic"
icon_state = "drago"
+ upgrade_to = SPECIES_WINGS_ROBOT
/datum/sprite_accessory/deco_wings/succubusblack
name = "Succubus Black"
icon_state = "succubusblack"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/succubuspurple
name = "Succubus Purple"
icon_state = "succubuspurple"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/succubusred
name = "Succubus Red"
icon_state = "succubusred"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/xenobackplate
name = "Xenomorph Backplate"
icon_state = "snagbackplate"
+ upgrade_to = list()
//moth wings
/datum/sprite_accessory/deco_wings/atlas
name = "Atlas"
icon_state = "atlas"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/brown
name = "Brown"
icon_state = "brown"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/deathhead
name = "Deathshead"
icon_state = "deathhead"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/featherymoth
name = "Feathery Moth Wings"
icon_state = "featherymoth"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/firewatch
name = "Firewatch"
icon_state = "firewatch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/gothic
name = "Gothic"
icon_state = "gothic"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/jungle
name = "Jungle"
icon_state = "jungle"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/lovers
name = "Lovers"
icon_state = "lovers"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/luna
name = "Luna"
icon_state = "luna"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/monarch
name = "Monarch"
icon_state = "monarch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/moonfly
name = "Moon Fly"
icon_state = "moonfly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/oakworm
name = "Oak Worm"
icon_state = "oakworm"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/plain
name = "Plain"
icon_state = "plain"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/plasmafire
name = "Plasma Fire"
icon_state = "plasmafire"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/poison
name = "Poison"
icon_state = "poison"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/punished
name = "Burnt Off"
icon_state = "punished"
+ upgrade_to = SPECIES_WINGS_MOTH //through TG code moth wings aren't meant to get upgraded if they're burnt off but...
/datum/sprite_accessory/deco_wings/ragged
name = "Ragged"
icon_state = "ragged"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/reddish
name = "Reddish"
icon_state = "redish"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/rosy
name = "Rosy"
icon_state = "rosy"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/royal
name = "Royal"
icon_state = "royal"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/snow
name = "Snow"
icon_state = "snow"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/whitefly
name = "White Fly"
icon_state = "whitefly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/witchwing
name = "Witch Wing"
icon_state = "witchwing"
+ upgrade_to = SPECIES_WINGS_MOTH
//INSECT WINGS
@@ -220,67 +364,86 @@
icon = 'icons/mob/wings.dmi'
color_src = WINGCOLOR
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
+ var/list/upgrade_to = list()
+
+/datum/sprite_accessory/insect_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
+ return (H.dna.features["wings"] != "None") //true wings will override decorative wings
//non insect wings
-/datum/sprite_accessory/deco_wings/bat
+/datum/sprite_accessory/insect_wings/bat
name = "Bat"
icon_state = "bat"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/bee
name = "Bee"
icon_state = "bee"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/bee2
name = "Small Bee"
icon_state = "beewings"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/dragon
name = "Dragon"
icon_state = "dragon"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/dragonfly
name = "Dragonfly"
icon_state = "dragonfly"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/fairy
name = "Fairy"
icon_state = "fairy"
+ upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/featheredwing
name = "Feathery"
icon_state = "feathery"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/featheredwingmedium
name = "Medium Feathered"
icon_state = "feathered3"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/featheredwinglarge
name = "Large Feathered"
icon_state = "feathered2"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/harpywings
name = "Harpy"
icon_state = "harpywings"
+ upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/roboticwing
name = "Robotic"
icon_state = "drago"
+ upgrade_to = SPECIES_WINGS_ROBOT
/datum/sprite_accessory/insect_wings/succubusblack
name = "Succubus Black"
icon_state = "succubusblack"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/succubuspurple
name = "Succubus Purple"
icon_state = "succubuspurple"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/succubusred
name = "Succubus Red"
icon_state = "succubusred"
+ upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/xenobackplate
name = "Xenomorph Backplate"
icon_state = "snagbackplate"
+ upgrade_to = list()
//moth wings
@@ -288,98 +451,122 @@
name = "None"
icon_state = "none"
relevant_layers = null
+ upgrade_to = list()
/datum/sprite_accessory/insect_wings/atlas
name = "Atlas"
icon_state = "atlas"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/brown
name = "Brown"
icon_state = "brown"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/deathhead
name = "Deathshead"
icon_state = "deathhead"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/featherymoth
name = "Feathery Moth Wings"
icon_state = "featherymoth"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/firewatch
name = "Firewatch"
icon_state = "firewatch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/gothic
name = "Gothic"
icon_state = "gothic"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/jungle
name = "Jungle"
icon_state = "jungle"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/lovers
name = "Lovers"
icon_state = "lovers"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/luna
name = "Luna"
icon_state = "luna"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/monarch
name = "Monarch"
icon_state = "monarch"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/moonfly
name = "Moon Fly"
icon_state = "moonfly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/oakworm
name = "Oak Worm"
icon_state = "oakworm"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/plain
name = "Plain"
icon_state = "plain"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/plasmafire
name = "Plasma Fire"
icon_state = "plasmafire"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/poison
name = "Poison"
icon_state = "poison"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/punished
name = "Burnt Off"
icon_state = "punished"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/ragged
name = "Ragged"
icon_state = "ragged"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/reddish
name = "Reddish"
icon_state = "redish"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/rosy
name = "Rosy"
icon_state = "rosy"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/royal
name = "Royal"
icon_state = "royal"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/snow
name = "Snow"
icon_state = "snow"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/whitefly
name = "White Fly"
icon_state = "whitefly"
+ upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/witchwing
name = "Witch Wing"
icon_state = "witchwing"
+ upgrade_to = SPECIES_WINGS_MOTH
//insect markings
/datum/sprite_accessory/insect_markings // Extra markings for insects ported from tg.
@@ -453,9 +640,11 @@
/datum/sprite_accessory/deco_wings/eyestalks
name = "gazer eyestalks"
icon_state = "eyestalks"
+ upgrade_to = list() //and suddenly flight potions become a lot more awkward when they gouge your tentacle eyes out.
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
/datum/sprite_accessory/insect_wings/eyestalks
name = "gazer eyestalks"
icon_state = "eyestalks"
+ upgrade_to = list()
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 4fc60cc6ac..5a58289316 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -948,9 +948,6 @@
/mob/living/carbon/human/species/android
race = /datum/species/android
-/mob/living/carbon/human/species/angel
- race = /datum/species/angel
-
/mob/living/carbon/human/species/corporate
race = /datum/species/corporate
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 22e97290ad..bbe2781403 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -142,6 +142,15 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
/// A path to an outfit that is important for species life e.g. plasmaman outfit
var/datum/outfit/outfit_important_for_life
+ ///Is this species a flying species? Used as an easy check for some things
+ var/flying_species = FALSE
+ ///The actual flying ability given to flying species
+ var/datum/action/innate/flight/fly
+ ///Current wings icon
+ var/wings_icon = "Angel"
+ //Dictates which wing icons are allowed for a given species. If count is >1 a radial menu is used to choose between all icons in list
+ var/list/wings_icons = SPECIES_WINGS_ANGEL
+
///Species-only traits. Can be found in [code/__DEFINES/DNA.dm]
var/list/species_traits = list(HAS_FLESH,HAS_BONE) //by default they can scar and have bones/flesh unless set to something else
///Generic traits tied to having the species.
@@ -495,6 +504,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/datum/disease/A in C.diseases)
A.cure(FALSE)
+ if(flying_species && isnull(fly))
+ fly = new
+ fly.Grant(C)
+
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(NOGENITALS in H.dna.species.species_traits)
@@ -569,6 +582,16 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(F)
qdel(F)
+ if(flying_species)
+ if(C.movement_type & FLYING)
+ ToggleFlight(C)
+ fly.Remove(C)
+ QDEL_NULL(fly)
+ if(C.dna && C.dna.species && (C.dna.features["wings"] == wings_icon))
+ if("wings" in C.dna.species.mutant_bodyparts)
+ C.dna.species.mutant_bodyparts -= "wings"
+ C.dna.features["wings"] = "None"
+ C.update_body()
if(ROBOTIC_LIMBS in species_traits)
for(var/obj/item/bodypart/B in C.bodyparts)
@@ -1186,6 +1209,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return move_trail */
/datum/species/proc/spec_life(mob/living/carbon/human/H)
+ if(flying_species) //turns off flight automatically if they can't.
+ HandleFlight(H)
if(HAS_TRAIT(H, TRAIT_NOBREATH))
H.setOxyLoss(0)
H.losebreath = 0
@@ -2388,10 +2413,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return
////////////
-//Stun//
+// Stun //
////////////
/datum/species/proc/spec_stun(mob/living/carbon/human/H,amount)
+ if(flying_species && H.movement_type & FLYING)
+ ToggleFlight(H,0)
+ flyslip(H)
if(H)
stop_wagging_tail(H)
. = stunmod * H.physiology.stun_mod * amount
@@ -2401,10 +2429,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
//////////////
/datum/species/proc/space_move(mob/living/carbon/human/H)
- return 0
+ if(H.movement_type & FLYING)
+ return TRUE
+ return FALSE
/datum/species/proc/negates_gravity(mob/living/carbon/human/H)
- return 0
+ if(H.movement_type & FLYING)
+ return TRUE
+ return FALSE
////////////////
//Tail Wagging//
@@ -2438,3 +2470,130 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
mutant_bodyparts["spines"] = mutant_bodyparts["waggingspines"]
mutant_bodyparts -= "waggingspines"
H.update_body()
+
+///////////////
+//FLIGHT SHIT//
+///////////////
+
+/datum/species/proc/GiveSpeciesFlight(mob/living/carbon/human/H, all_wings = FALSE)
+ if(flying_species) //grant them the choice of all wings if they don't have them
+ all_wings = TRUE
+ flying_species = TRUE
+ //CITADEL CHANGE: check if they already have wings, and "evolve" them based off of the wings they have. If they have none, use their species wings basis.
+ var/list/wingslist
+ if(all_wings) //give them the full list of wing choices to pick from, typically if they drink a second flight potion
+ wingslist = SPECIES_WINGS_ALL
+ else
+ //why the fuck do we have two different wing types anyways? they're literally almost both using the same wing shit too.
+ var/datum/sprite_accessory/deco_wings/D = GLOB.deco_wings_list[H.dna.features["deco_wings"]]
+ var/datum/sprite_accessory/insect_wings/I = GLOB.insect_wings_list[H.dna.features["insect_wings"]]
+ if(mutant_bodyparts["deco_wings"] && D?.upgrade_to.len) //species check to see if they were allowed to have deco wings
+ wingslist = D.upgrade_to
+ else if(mutant_bodyparts["insect_wings"] && I?.upgrade_to.len) //species check to see if they were allowed to have insect wings
+ wingslist = I.upgrade_to
+ else
+ wingslist = wings_icons
+
+ if(wingslist.len > 1)
+ if(!H.client)
+ wings_icon = pick(wingslist)
+ else
+ var/list/wings = list()
+ for(var/W in wingslist)
+ var/datum/sprite_accessory/S = GLOB.wings_list[W] //Gets the datum for every wing this species has, then prompts user with a radial menu
+ var/image/img = image(icon = 'icons/mob/wings_functional.dmi', icon_state = "m_wingsopen_[S.icon_state]_BEHIND") //Process the HUD elements
+ img.transform *= 0.5
+ img.pixel_x = -32
+ if(wings[S.name])
+ stack_trace("Different wing types with repeated names. Please fix as this may cause issues.")
+ else
+ wings[S.name] = img
+ wings_icon = show_radial_menu(H, H, wings, tooltips = TRUE)
+ if(!wings_icon)
+ wings_icon = pick(wings_icons)
+ else
+ wings_icon = wingslist[1]
+ if(isnull(fly))
+ fly = new
+ fly.Grant(H)
+ if(H.dna.features["wings"] != wings_icon)
+ mutant_bodyparts["wings"] = wings_icon
+ H.dna.features["wings"] = wings_icon
+ H.update_body()
+
+/datum/species/proc/HandleFlight(mob/living/carbon/human/H)
+ if(H.movement_type & FLYING)
+ if(!CanFly(H))
+ ToggleFlight(H)
+ return FALSE
+ return TRUE
+ else
+ return FALSE
+
+/datum/species/proc/CanFly(mob/living/carbon/human/H)
+ if(H.stat || !(H.mobility_flags & MOBILITY_STAND))
+ return FALSE
+ if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too
+ to_chat(H, "Your suit blocks your wings from extending!")
+ return FALSE
+ var/turf/T = get_turf(H)
+ if(!T)
+ return FALSE
+ var/datum/gas_mixture/environment = T.return_air()
+ if(environment && !(environment.return_pressure() > 30))
+ to_chat(H, "The atmosphere is too thin for you to fly!")
+ return FALSE
+ else
+ return TRUE
+
+/datum/species/proc/flyslip(mob/living/carbon/human/H)
+ var/obj/buckled_obj
+ if(H.buckled)
+ buckled_obj = H.buckled
+ to_chat(H, "Your wings spazz out and launch you!")
+ playsound(H.loc, 'sound/misc/slip.ogg', 50, TRUE, -3)
+ for(var/obj/item/I in H.held_items)
+ H.accident(I)
+ var/olddir = H.dir
+ H.stop_pulling()
+ if(buckled_obj)
+ buckled_obj.unbuckle_mob(H)
+ step(buckled_obj, olddir)
+ else
+ new /datum/forced_movement(H, get_ranged_target_turf(H, olddir, 4), 1, FALSE, CALLBACK(H, /mob/living/carbon/.proc/spin, 1, 1))
+ return TRUE
+
+//UNSAFE PROC, should only be called through the Activate or other sources that check for CanFly
+/datum/species/proc/ToggleFlight(mob/living/carbon/human/H)
+ if(!(H.movement_type & FLYING) && CanFly(H))
+ stunmod *= 2
+ speedmod -= 0.35
+ H.setMovetype(H.movement_type | FLYING)
+ override_float = TRUE
+ H.pass_flags |= PASSTABLE
+ H.OpenWings()
+ H.update_mobility()
+ else
+ stunmod *= 0.5
+ speedmod += 0.35
+ H.setMovetype(H.movement_type & ~FLYING)
+ override_float = FALSE
+ H.pass_flags &= ~PASSTABLE
+ H.CloseWings()
+
+/datum/action/innate/flight
+ name = "Toggle Flight"
+ check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN
+ icon_icon = 'icons/mob/actions/actions_items.dmi'
+ button_icon_state = "flight"
+
+/datum/action/innate/flight/Activate()
+ var/mob/living/carbon/human/H = owner
+ var/datum/species/S = H.dna.species
+ if(S.CanFly(H))
+ S.ToggleFlight(H)
+ if(!(H.movement_type & FLYING))
+ to_chat(H, "You settle gently back onto the ground...")
+ else
+ to_chat(H, "You beat your wings and begin to hover gently above the ground...")
+ H.set_resting(FALSE, TRUE)
diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm
index 3c6a2a8e13..d9edfc240d 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -12,3 +12,4 @@
species_language_holder = /datum/language_holder/synthetic
limbs_id = SPECIES_SYNTH
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/angel.dm b/code/modules/mob/living/carbon/human/species_types/angel.dm
deleted file mode 100644
index 977e8aaab3..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/angel.dm
+++ /dev/null
@@ -1,145 +0,0 @@
-/datum/species/angel
- name = "Angel"
- id = SPECIES_ANGEL
- default_color = "FFFFFF"
- species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,HAS_FLESH,HAS_BONE)
- mutant_bodyparts = list("tail_human" = "None", "ears" = "None", "wings" = "Angel")
- use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM
- no_equip = list(SLOT_BACK)
- blacklisted = 1
- limbs_id = SPECIES_HUMAN
- skinned_type = /obj/item/stack/sheet/animalhide/human
- species_category = SPECIES_CATEGORY_BASIC //they're a kind of human
-
- var/datum/action/innate/flight/fly
-
-/datum/species/angel/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
- ..()
- if(H.dna && H.dna.species && (H.dna.features["wings"] != "Angel"))
- if(!H.dna.species.mutant_bodyparts["wings"])
- H.dna.species.mutant_bodyparts["wings"] = "Angel"
- H.dna.features["wings"] = "Angel"
- H.update_body()
- if(ishuman(H) && !fly)
- fly = new
- fly.Grant(H)
- ADD_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
-
-/datum/species/angel/on_species_loss(mob/living/carbon/human/H)
- if(fly)
- fly.Remove(H)
- if(H.movement_type & FLYING)
- H.setMovetype(H.movement_type & ~FLYING)
- ToggleFlight(H,0)
- if(H.dna && H.dna.species && (H.dna.features["wings"] == "Angel"))
- if(H.dna.species.mutant_bodyparts["wings"])
- H.dna.species.mutant_bodyparts -= "wings"
- H.dna.features["wings"] = "None"
- H.update_body()
- REMOVE_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
- ..()
-
-/datum/species/angel/spec_life(mob/living/carbon/human/H)
- HandleFlight(H)
-
-/datum/species/angel/proc/HandleFlight(mob/living/carbon/human/H)
- if(H.movement_type & FLYING)
- if(!CanFly(H))
- ToggleFlight(H,0)
- return 0
- return 1
- else
- return 0
-
-/datum/species/angel/proc/CanFly(mob/living/carbon/human/H)
- if(!CHECK_MOBILITY(H, MOBILITY_MOVE))
- return FALSE
- if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too
- to_chat(H, "Your suit blocks your wings from extending!")
- return FALSE
- var/turf/T = get_turf(H)
- if(!T)
- return FALSE
-
- var/datum/gas_mixture/environment = T.return_air()
- if(environment && !(environment.return_pressure() > 30))
- to_chat(H, "The atmosphere is too thin for you to fly!")
- return FALSE
- return TRUE
-
-/datum/action/innate/flight
- name = "Toggle Flight"
- check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN
- icon_icon = 'icons/mob/actions/actions_items.dmi'
- button_icon_state = "flight"
-
-/datum/action/innate/flight/Activate()
- var/mob/living/carbon/human/H = owner
- var/datum/species/angel/A = H.dna.species
- if(A.CanFly(H))
- if(H.movement_type & FLYING)
- to_chat(H, "You settle gently back onto the ground...")
- A.ToggleFlight(H,0)
- H.update_mobility()
- else
- to_chat(H, "You beat your wings and begin to hover gently above the ground...")
- H.set_resting(FALSE, TRUE)
- A.ToggleFlight(H,1)
- H.update_mobility()
-
-/datum/species/angel/proc/flyslip(mob/living/carbon/human/H)
- var/obj/buckled_obj
- if(H.buckled)
- buckled_obj = H.buckled
-
- to_chat(H, "Your wings spazz out and launch you!")
-
- playsound(H.loc, 'sound/misc/slip.ogg', 50, 1, -3)
-
- for(var/obj/item/I in H.held_items)
- H.accident(I)
-
- var/olddir = H.dir
-
- H.stop_pulling()
- if(buckled_obj)
- buckled_obj.unbuckle_mob(H)
- step(buckled_obj, olddir)
- else
- for(var/i=1, i<5, i++)
- spawn (i)
- step(H, olddir)
- H.spin(1,1)
- return 1
-
-
-/datum/species/angel/spec_stun(mob/living/carbon/human/H,amount)
- if(H.movement_type & FLYING)
- ToggleFlight(H,0)
- flyslip(H)
- . = ..()
-
-/datum/species/angel/negates_gravity(mob/living/carbon/human/H)
- if(H.movement_type & FLYING)
- return 1
-
-/datum/species/angel/space_move(mob/living/carbon/human/H)
- if(H.movement_type & FLYING)
- return 1
-
-/datum/species/angel/proc/ToggleFlight(mob/living/carbon/human/H,flight)
- if(flight && CanFly(H))
- stunmod = 2
- speedmod = -0.1
- H.setMovetype(H.movement_type | FLYING)
- override_float = TRUE
- H.pass_flags |= PASSTABLE
- H.OpenWings()
- else
- stunmod = 1
- speedmod = 0
- H.setMovetype(H.movement_type & ~FLYING)
- override_float = FALSE
- H.pass_flags &= ~PASSTABLE
- H.CloseWings()
- update_species_slowdown(H)
diff --git a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
index b79c281b3b..c9af50de9d 100644
--- a/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
+++ b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
@@ -57,4 +57,5 @@
exotic_bloodtype = "S"
exotic_blood_color = BLOOD_COLOR_OIL
allowed_limb_ids = list("mammal","aquatic","avian", "human")
- species_category = "robot"
+ species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/arachnid.dm b/code/modules/mob/living/carbon/human/species_types/arachnid.dm
index 454625cf36..7495e2500e 100644
--- a/code/modules/mob/living/carbon/human/species_types/arachnid.dm
+++ b/code/modules/mob/living/carbon/human/species_types/arachnid.dm
@@ -21,6 +21,7 @@
var/web_cooldown = 200
var/web_ready = TRUE
var/spinner_rate = 25
+ wings_icons = SPECIES_WINGS_MOTH //Arachnids' phylum is arthropods, which include butterflies. Might as well hit them with moth wings.
/datum/species/arachnid/random_name(gender,unique,lastname)
if(unique)
diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
index f87f425b5f..df4abf864a 100644
--- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
@@ -19,6 +19,7 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_INSECT
+ wings_icons = SPECIES_WINGS_INSECT
allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale")
diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm
index e9baa786da..48b5032129 100644
--- a/code/modules/mob/living/carbon/human/species_types/corporate.dm
+++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm
@@ -19,3 +19,4 @@
sexes = 0
gib_types = /obj/effect/gibspawner/robot
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
index 7cd582d050..facc3dfd8d 100644
--- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm
+++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm
@@ -16,6 +16,7 @@
has_field_of_vision = FALSE //Too much of a trouble, their vision is already bound to their severed head.
species_category = SPECIES_CATEGORY_UNDEAD
var/pumpkin = FALSE
+ wings_icons = SPECIES_WINGS_SKELETAL //seems suitable for an undead.
var/obj/item/dullahan_relay/myhead
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index 5a185cbeb8..86720289fe 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -13,6 +13,7 @@
exotic_bloodtype = "BUG"
exotic_blood_color = BLOOD_COLOR_BUG
species_category = SPECIES_CATEGORY_INSECT
+ wings_icons = SPECIES_WINGS_INSECT
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(istype(chem, /datum/reagent/toxin/pestkiller))
diff --git a/code/modules/mob/living/carbon/human/species_types/ipc.dm b/code/modules/mob/living/carbon/human/species_types/ipc.dm
index c3fd9e21fc..8c9e6bcd4f 100644
--- a/code/modules/mob/living/carbon/human/species_types/ipc.dm
+++ b/code/modules/mob/living/carbon/human/species_types/ipc.dm
@@ -35,6 +35,7 @@
exotic_bloodtype = "S"
exotic_blood_color = BLOOD_COLOR_OIL
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
var/datum/action/innate/monitor_change/screen
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 0693bf64e1..66402de911 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -29,6 +29,7 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_JELLY
+ wings_icons = SPECIES_WINGS_JELLY
ass_image = 'icons/ass/assslime.png'
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
@@ -69,6 +70,7 @@
to_chat(H, "You feel drained!")
if(H.blood_volume < (BLOOD_VOLUME_BAD*H.blood_ratio))
Cannibalize_Body(H)
+ ..()
/datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H)
var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs()
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 07fa78a88a..ef8fd35c45 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -29,6 +29,7 @@
tail_type = "tail_lizard"
wagging_type = "waggingtail_lizard"
species_category = SPECIES_CATEGORY_LIZARD
+ wings_icons = SPECIES_WINGS_DRAGON
ass_image = 'icons/ass/asslizard.png'
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index 547d017c23..9c29856084 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -23,6 +23,7 @@
outfit_important_for_life = /datum/outfit/plasmaman
species_category = SPECIES_CATEGORY_SKELETON
+ wings_icons = SPECIES_WINGS_SKELETAL
ass_image = 'icons/ass/assplasma.png'
diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
index 4c82a25b4b..bfef310cdf 100644
--- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm
@@ -16,6 +16,7 @@
mutanteyes = /obj/item/organ/eyes/night_vision
species_category = SPECIES_CATEGORY_SHADOW
+ wings_icons = SPECIES_WINGS_SKELETAL //not sure what's more spooky for these guys - skeleton or dragon?
/datum/species/shadow/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index 8175f505fa..5a927397fb 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -16,6 +16,7 @@
burnmod = 1.25
species_category = SPECIES_CATEGORY_SKELETON //they have their own category that's disassociated from undead, paired with plasmapeople
+ wings_icons = SPECIES_WINGS_SKELETAL
/datum/species/skeleton/New()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) //skeletons are stronger during the spooky season!
diff --git a/code/modules/mob/living/carbon/human/species_types/synthliz.dm b/code/modules/mob/living/carbon/human/species_types/synthliz.dm
index c692370030..aa853ee551 100644
--- a/code/modules/mob/living/carbon/human/species_types/synthliz.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synthliz.dm
@@ -35,3 +35,4 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index 91711b5c39..316b129ee8 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -18,6 +18,7 @@
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
species_language_holder = /datum/language_holder/synthetic
species_category = SPECIES_CATEGORY_ROBOT
+ wings_icons = SPECIES_WINGS_ROBOT
/datum/species/synth/military
name = "Military Synth"
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index e708835ed1..3e54a4e638 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -15,8 +15,10 @@
skinned_type = /obj/item/stack/sheet/animalhide/human
var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
species_category = SPECIES_CATEGORY_UNDEAD
+ wings_icons = SPECIES_WINGS_DRAGON //closest to "bat" wings.
var/batform_enabled = TRUE
+
/datum/species/vampire/roundstart
id = SPECIES_VAMPIRE_WEAK
batform_enabled = FALSE
diff --git a/code/modules/mob/living/carbon/human/species_types/xeno.dm b/code/modules/mob/living/carbon/human/species_types/xeno.dm
index d3249edd96..ffb8ac5a80 100644
--- a/code/modules/mob/living/carbon/human/species_types/xeno.dm
+++ b/code/modules/mob/living/carbon/human/species_types/xeno.dm
@@ -17,3 +17,4 @@
disliked_food = JUNKFOOD
liked_food = GROSS | MEAT
species_category = SPECIES_CATEGORY_ALIEN
+ wings_icons = SPECIES_WINGS_DRAGON //most depictions of xenomorphs with wings are closest to this.
diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm
index 57a11481d7..0dc08eeedb 100644
--- a/code/modules/mob/living/carbon/human/species_types/zombies.dm
+++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm
@@ -16,6 +16,7 @@
disliked_food = NONE
liked_food = GROSS | MEAT | RAW
species_category = SPECIES_CATEGORY_UNDEAD
+ wings_icons = SPECIES_WINGS_SKELETAL //eh.
/datum/species/zombie/notspaceproof
id = "notspaceproofzombie"
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 5bfc6fe652..561425c710 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -144,6 +144,7 @@
newletter = "nglu"
if(5)
newletter = "glor"
+ else
. += newletter
return sanitize(.)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 256e128ff4..8490daa681 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -347,10 +347,10 @@
var/dir2 = 0
var/dir3 = 0
switch(direction)
- if(NORTH||SOUTH)
+ if(NORTH, SOUTH)
dir2 = 4
dir3 = 8
- if(EAST||WEST)
+ if(EAST, WEST)
dir2 = 1
dir3 = 2
var/turf/T2 = T
diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
index 088683ccd2..d9dfdd8c19 100644
--- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -145,6 +145,8 @@
if(7)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/mask/cigarette/rollie(src)
+ else
+ return
/obj/structure/closet/crate/grave/open(mob/living/user, obj/item/S)
if(!opened)
diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm
index 4a52e446bc..b3b3b4aa1d 100644
--- a/code/modules/surgery/advanced/lobotomy.dm
+++ b/code/modules/surgery/advanced/lobotomy.dm
@@ -41,13 +41,14 @@
target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY)
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
- switch(rand(1,6))//Now let's see what hopefully-not-important part of the brain we cut off
- if(1)
- target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
- if(2)
- target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
- if(3)
- target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_SURGERY)
+ if(prob(50))
+ switch(rand(1,3))//Now let's see what hopefully-not-important part of the brain we cut off
+ if(1)
+ target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
+ if(2)
+ target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
+ if(3)
+ target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_SURGERY)
// you're cutting off a part of the brain.w
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
B.applyOrganDamage(50, 100)
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 16caef5b4e..cea7502540 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -469,6 +469,7 @@ GLOBAL_LIST_EMPTY(vending_products)
freebie(user, 2)
if(16 to 25)
freebie(user, 1)
+ if(26 to 75)
if(76 to 90)
tilt(user)
if(91 to 100)
diff --git a/html/changelogs/AutoChangeLog-pr-15414.yml b/html/changelogs/AutoChangeLog-pr-15414.yml
new file mode 100644
index 0000000000..b483e8437c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-15414.yml
@@ -0,0 +1,5 @@
+author: "BlueWildrose and tralezab, Wjohnston, Mey Ha Zah, ArcaneDefense, Jack7D1, Papaporo, Sheits & Mqiib from TG and Yog"
+delete-after: True
+changes:
+ - rscadd: "TG wing port - All species can now use flight potions and grow wings. Your wing sprite will be based off of what wings you have on your character, or otherwise what species you are if you have no wings."
+ - bugfix: "Jellypeople did not call the species parent proc on spec_life. Fixed."
diff --git a/html/changelogs/AutoChangeLog-pr-15510.yml b/html/changelogs/AutoChangeLog-pr-15510.yml
new file mode 100644
index 0000000000..206bf8c13e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-15510.yml
@@ -0,0 +1,36 @@
+author: "TripleShades"
+delete-after: True
+changes:
+ - rscadd: "[Omega] Gateway shutter button"
+ - rscadd: "[Omega] Signs to the airlocks that lead to space that say SPACE"
+ - rscadd: "[Omega] Air Alarm for the Turbine itself"
+ - rscadd: "[Omega] SMES Unit for the Turbine itself"
+ - rscadd: "[Omega] Firelock to Robotics airlock"
+ - rscadd: "[Omega] Captain's Office now has a hand teleporter and medal box"
+ - rscadd: "[Omega] Screwdriver to Chemistry"
+ - rscadd: "[Omega] Space Cleaner bottle to Medbay"
+ - rscadd: "[Omega] Limb Grower and Spare Limb Crate to Surgery"
+ - rscadd: "[Omega] Kinkmate in Dorms"
+ - rscadd: "[Omega] Lightbulb fixture to Secure Tech Storage"
+ - rscadd: "[Omega] Armsky is now in the Armoury"
+ - rscdel: "[Omega] Extra automated announcement machine"
+ - rscdel: "[Omega] Wall inside of southwest Solar Array window"
+ - rscdel: "[Omega] Wall inside library maint airlock"
+ - rscdel: "[Omega] Duplicate Robotics airlock
+tweak: [Omega] HoS gun now spawns in HoS locker instead of Captain's locker
+tweak: [Omega] Both Solar Arrays now have more windows
+tweak: [Omega] PACMAN moved out from behind a Command airlock in Engineering
+tweak: [Omega] A few cameras so that they're not sitting improperly on windows
+tweak: [Omega] Medbay Surgery now has a surgical duffel instead of strewn about tools
+tweak: [Omega] Security Cell 1 is now properly named and has a bed instead of a chair
+tweak: [Omega] Toxins scrubber piping now goes through a wall
+tweak: [Omega] Robotics trash can is now moved to the small hallway between Robotics and Toxins
+tweak: [Omega] Maint Pool drain moved down a tile so it's easier to retrieve lost items"
+ - bugfix: "[Omega] Lawyer Office access"
+ - bugfix: "[Omega] Both Solar Arrays are now wired up to power the station properly"
+ - bugfix: "[Omega] Wire leading to the single Supermatter Emitter should now be properly connected and not diagonal"
+ - bugfix: "[Omega] Gateway Maint airlock access"
+ - bugfix: "[Omega] Toxins Launch not being connected to the main air supply"
+ - bugfix: "[Omega] Toxins Mix Chamber no longer starts bolted"
+ - bugfix: "[Omega] Missing pipe above Security leading into Perma"
+ - bugfix: "[Omega] Secure Tech Storage now properly has an area"
diff --git a/html/changelogs/AutoChangeLog-pr-15513.yml b/html/changelogs/AutoChangeLog-pr-15513.yml
new file mode 100644
index 0000000000..077fb57101
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-15513.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "Default features on linux auxmos compile now formatted correctly"
diff --git a/html/changelogs/AutoChangeLog-pr-15515.yml b/html/changelogs/AutoChangeLog-pr-15515.yml
new file mode 100644
index 0000000000..dcd230897e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-15515.yml
@@ -0,0 +1,4 @@
+author: "Putnam3145"
+delete-after: True
+changes:
+ - bugfix: "reinforced plasma glass windows are buildable"
diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml
index d38f2b34a7..17000e958a 100644
--- a/html/changelogs/archive/2022-02.yml
+++ b/html/changelogs/archive/2022-02.yml
@@ -74,3 +74,13 @@
- refactor: Refactors give/take > offer/receive
- config: Added Families to the dynamic config
- admin: Adds admin tp Family stuff
+2022-02-17:
+ '[Timberpoes](https://github.com/Timberpoes)':
+ - admin: Re-added the button to the player playtime panel that lets admins toggle
+ a player's job playtime exemption status.
+2022-02-19:
+ timothyteakettle:
+ - rscadd: polychromic clown outfit and mask
+2022-02-20:
+ jupyterkat:
+ - refactor: switched equalization method to katmos
diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi
index b0cbc3b623..2413b52d71 100644
Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ
diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi
index 7f1717b8ca..04d9b20a75 100644
Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ
diff --git a/icons/mob/wings.dmi b/icons/mob/wings.dmi
index 92de5c150c..49d9e4d4a8 100644
Binary files a/icons/mob/wings.dmi and b/icons/mob/wings.dmi differ
diff --git a/icons/mob/wings_functional.dmi b/icons/mob/wings_functional.dmi
new file mode 100644
index 0000000000..5d1a82a245
Binary files /dev/null and b/icons/mob/wings_functional.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index ebc7140dae..f5bc9e7046 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 3a5dfb97a9..c16b416cd8 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm
index 576b29cddc..52e79884c2 100644
--- a/modular_citadel/code/modules/client/loadout/mask.dm
+++ b/modular_citadel/code/modules/client/loadout/mask.dm
@@ -30,4 +30,8 @@
name = "Paper mask"
path = /obj/item/clothing/mask/paper
cost = 2
-
+
+/datum/gear/mask/polychromic_clown
+ name = "polychromic clown wig and mask"
+ path = /obj/item/clothing/mask/gas/clown_hat_polychromic
+ restricted_roles = list("Clown")
diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm
index 86fcc867a3..c16aa5ea55 100644
--- a/modular_citadel/code/modules/client/loadout/uniform.dm
+++ b/modular_citadel/code/modules/client/loadout/uniform.dm
@@ -739,3 +739,9 @@
path = /obj/item/clothing/under/rank/cargo/tech/long
subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
restricted_roles = list("Cargo Technician")
+
+/datum/gear/uniform/clown_polychromic
+ name = "polychromic clown suit"
+ path = /obj/item/clothing/under/rank/civilian/polychromic_clown
+ subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
+ restricted_roles = list("Clown")
diff --git a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
index e3f23a4992..dbf5ad0648 100644
--- a/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
+++ b/modular_citadel/code/modules/eventmaps/Spookystation/JTGSZwork.dm
@@ -630,19 +630,19 @@ GLOBAL_LIST_EMPTY(rain_sounds)
playchime = 1
switch(hour)
- if(1 || 2)
+ if(1, 2)
HRimgstate = "asshouroverlay-2" //Now it is ass, mostly because someones going to kill me for the other names.
if(3)
HRimgstate = "asshouroverlay-3"
- if(4 || 5)
+ if(4, 5)
HRimgstate = "asshouroverlay-4"
if(6)
HRimgstate = "asshouroverlay-6"
- if(7 || 8)
+ if(7, 8)
HRimgstate = "asshouroverlay-7"
if(9)
HRimgstate = "asshouroverlay-9"
- if(10 || 11)
+ if(10, 11)
HRimgstate = "asshouroverlay-10"
else
HRimgstate = "asshouroverlay-0" //Station time wraps to 0, and so does our hours.
diff --git a/tgstation.dme b/tgstation.dme
index 4328158bfc..cd5a1eb823 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2703,7 +2703,6 @@
#include "code\modules\mob\living\carbon\human\innate_abilities\limb_regeneration.dm"
#include "code\modules\mob\living\carbon\human\species_types\abductor.dm"
#include "code\modules\mob\living\carbon\human\species_types\android.dm"
-#include "code\modules\mob\living\carbon\human\species_types\angel.dm"
#include "code\modules\mob\living\carbon\human\species_types\anthropomorph.dm"
#include "code\modules\mob\living\carbon\human\species_types\arachnid.dm"
#include "code\modules\mob\living\carbon\human\species_types\bugmen.dm"
diff --git a/tools/tgs4_scripts/PreCompile.sh b/tools/tgs4_scripts/PreCompile.sh
index 6130736b4e..6e45a1d820 100755
--- a/tools/tgs4_scripts/PreCompile.sh
+++ b/tools/tgs4_scripts/PreCompile.sh
@@ -84,7 +84,7 @@ fi
echo "Deploying auxmos..."
git checkout "$AUXMOS_VERSION"
-env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features all_reaction_hooks,explosive_decompression -- -C target-cpu=native
+env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks katmos" -- -C target-cpu=native
mv -f target/i686-unknown-linux-gnu/release/libauxmos.so "$1/libauxmos.so"
cd ..