diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml
index 422be83aa1a..53b0643a373 100644
--- a/.github/workflows/ci_suite.yml
+++ b/.github/workflows/ci_suite.yml
@@ -3,9 +3,11 @@ on:
push:
branches:
- master
+ - 'project/**'
pull_request:
branches:
- master
+ - 'project/**'
jobs:
run_linters:
if: "!contains(github.event.head_commit.message, '[ci skip]')"
diff --git a/.github/workflows/conflicts.yml b/.github/workflows/conflicts.yml
index cfc332b3097..4823aee3abf 100644
--- a/.github/workflows/conflicts.yml
+++ b/.github/workflows/conflicts.yml
@@ -3,6 +3,7 @@ on:
push:
branches:
- master
+ - 'project/**'
jobs:
triage:
runs-on: ubuntu-20.04
diff --git a/.github/workflows/has_515_compatibility.yml b/.github/workflows/has_515_compatibility.yml
index a026105d7c2..35b56068ca4 100644
--- a/.github/workflows/has_515_compatibility.yml
+++ b/.github/workflows/has_515_compatibility.yml
@@ -9,6 +9,7 @@ on:
pull_request:
branches:
- master
+ - 'project/**'
jobs:
has_515_compatibility:
name: Has 515 Compatibility
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm
index 514cfa08218..8bd1fe4d7d0 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/cargodiselost.dmm
@@ -238,7 +238,6 @@
"fm" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden,
/obj/machinery/computer/order_console/mining{
- uses_ltsrbt = 0;
forced_express = 1;
express_cost_multiplier = 1
},
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm
index 203bb42a125..f0fa5a3a965 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm
@@ -4873,7 +4873,6 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/computer/order_console/mining{
- uses_ltsrbt = 0;
forced_express = 1;
express_cost_multiplier = 1
},
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm
index ab5ddb70acf..9014846fcf4 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon3.dmm
@@ -4735,7 +4735,6 @@
dir = 4
},
/obj/machinery/computer/order_console/mining{
- uses_ltsrbt = 0;
forced_express = 1;
express_cost_multiplier = 1
},
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm
index 71d05851663..ff69c41c86a 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon4.dmm
@@ -4152,7 +4152,6 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/computer/order_console/mining{
- uses_ltsrbt = 0;
forced_express = 1;
express_cost_multiplier = 1
},
diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm
index 9da06f435db..7eabedcd506 100644
--- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon5.dmm
@@ -4502,7 +4502,6 @@
},
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/computer/order_console/mining{
- uses_ltsrbt = 0;
forced_express = 1;
express_cost_multiplier = 1
},
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index 217d1d2d832..8df5b09ef54 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -2918,6 +2918,21 @@
},
/turf/open/floor/iron,
/area/station/security/warden)
+"aZv" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 1;
+ id = "ordnancebridge"
+ },
+/obj/machinery/button/door{
+ id = "ordnancebridge";
+ pixel_x = -24;
+ req_one_access = list("maint_tunnels","science")
+ },
+/obj/effect/turf_decal/caution/stand_clear{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/aft/lesser)
"aZL" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -3906,14 +3921,6 @@
/obj/machinery/light/directional/south,
/turf/open/floor/iron/dark,
/area/station/science/ordnance/burnchamber)
-"bqy" = (
-/obj/effect/turf_decal/siding/purple{
- dir = 6
- },
-/obj/structure/table,
-/obj/item/clipboard,
-/turf/open/floor/iron/white,
-/area/station/science/ordnance/office)
"bqJ" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -7312,16 +7319,6 @@
/obj/effect/mapping_helpers/airlock/access/all/supply/qm,
/turf/open/floor/plating,
/area/station/maintenance/port/greater)
-"cJU" = (
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/door/window/right/directional/south{
- dir = 8;
- name = "Jim Norton's Quebecois Coffee";
- req_one_access = list("service","maint_tunnels")
- },
-/obj/effect/turf_decal/trimline/green/line,
-/turf/open/floor/iron/dark,
-/area/station/service/cafeteria)
"cKd" = (
/obj/effect/turf_decal/trimline/blue/filled/warning{
dir = 4
@@ -7826,6 +7823,19 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron/white,
/area/station/security/prison)
+"cUp" = (
+/obj/structure/table,
+/obj/item/plate,
+/obj/item/candle,
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/item/radio{
+ desc = "An old handheld radio. You could use it, if you really wanted to.";
+ icon_state = "radio";
+ name = "old radio";
+ pixel_y = 15
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/space_hut)
"cUw" = (
/obj/machinery/power/apc/auto_name/directional/east,
/obj/structure/cable,
@@ -9209,12 +9219,6 @@
/obj/effect/spawner/random/engineering/flashlight,
/turf/open/floor/iron/dark,
/area/station/security/office)
-"dtp" = (
-/obj/structure/table,
-/obj/item/candle,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/iron,
-/area/station/hallway/secondary/exit/departure_lounge)
"dtB" = (
/obj/machinery/atmospherics/pipe/smart/manifold/purple/visible{
dir = 8
@@ -9366,20 +9370,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
-"dwD" = (
-/obj/structure/cable,
-/obj/machinery/door/airlock{
- name = "Custodial Closet"
- },
-/obj/structure/disposalpipe/segment{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
-/obj/effect/mapping_helpers/airlock/access/all/service/janitor,
-/obj/effect/landmark/navigate_destination/janitor,
-/turf/open/floor/iron,
-/area/station/maintenance/starboard/greater)
"dwJ" = (
/obj/structure/lattice,
/obj/effect/spawner/random/structure/grille,
@@ -9541,6 +9531,12 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/iron,
/area/station/service/hydroponics)
+"dBV" = (
+/obj/docking_port/stationary/escape_pod{
+ dir = 4
+ },
+/turf/open/space/basic,
+/area/space)
"dBZ" = (
/obj/item/clothing/head/cone{
pixel_x = -4;
@@ -10218,25 +10214,6 @@
},
/turf/open/floor/iron,
/area/station/security/office)
-"dOo" = (
-/obj/structure/safe,
-/obj/item/storage/secure/briefcase/riches,
-/obj/item/storage/backpack/duffelbag/syndie/hitman,
-/obj/item/card/id/advanced/silver/reaper,
-/obj/item/lazarus_injector,
-/obj/item/gun/energy/disabler,
-/obj/item/gun/ballistic/revolver/russian,
-/obj/item/ammo_box/a357,
-/obj/item/clothing/neck/stethoscope,
-/obj/item/book{
- desc = "An undeniably handy book.";
- icon_state = "bookknock";
- name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes"
- },
-/obj/effect/turf_decal/bot_white/left,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/ai_monitored/command/nuke_storage)
"dOs" = (
/obj/structure/sign/warning/no_smoking,
/turf/closed/wall/r_wall,
@@ -11124,6 +11101,10 @@
"ecO" = (
/turf/open/floor/carpet,
/area/station/service/library)
+"edl" = (
+/obj/docking_port/stationary/escape_pod,
+/turf/open/space/basic,
+/area/space)
"edo" = (
/obj/structure/table/glass,
/obj/item/paper_bin,
@@ -13694,6 +13675,15 @@
/obj/effect/spawner/random/decoration/showcase,
/turf/open/floor/carpet,
/area/station/command/corporate_showroom)
+"faB" = (
+/obj/item/kirbyplants/random,
+/obj/effect/turf_decal/siding/purple{
+ dir = 5
+ },
+/obj/machinery/airalarm/directional/east,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/science/genetics)
"faD" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -13736,13 +13726,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"fbO" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Surgery C Maintenance"
- },
-/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/turf/open/floor/plating,
-/area/station/maintenance/aft/greater)
"fbP" = (
/obj/effect/turf_decal/tile/neutral,
/obj/structure/cable,
@@ -17027,6 +17010,20 @@
},
/turf/open/floor/iron,
/area/station/service/hydroponics/garden)
+"gpv" = (
+/obj/structure/cable,
+/obj/machinery/door/airlock{
+ name = "Custodial Closet"
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/mapping_helpers/airlock/access/all/service/janitor,
+/obj/effect/landmark/navigate_destination/janitor,
+/turf/open/floor/iron,
+/area/station/maintenance/starboard/greater)
"gpB" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
@@ -19095,6 +19092,18 @@
"hbv" = (
/turf/closed/wall/r_wall,
/area/station/medical/coldroom)
+"hbC" = (
+/obj/structure/table,
+/obj/effect/turf_decal/tile/purple,
+/obj/effect/turf_decal/tile/purple{
+ dir = 1
+ },
+/obj/structure/extinguisher_cabinet/directional/south,
+/obj/item/reagent_containers/cup/glass/mug/britcup{
+ pixel_y = 2
+ },
+/turf/open/floor/iron,
+/area/station/science/research)
"hbK" = (
/turf/closed/wall,
/area/station/maintenance/department/science/xenobiology)
@@ -19944,19 +19953,6 @@
/obj/item/radio/intercom/directional/west,
/turf/open/floor/iron,
/area/station/service/bar)
-"hsh" = (
-/obj/structure/table,
-/obj/item/plate,
-/obj/item/candle,
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/item/radio{
- desc = "An old handheld radio. You could use it, if you really wanted to.";
- icon_state = "radio";
- name = "old radio";
- pixel_y = 15
- },
-/turf/open/floor/plating,
-/area/station/maintenance/space_hut)
"hsp" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -20082,12 +20078,6 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/turf/closed/wall/r_wall,
/area/station/maintenance/starboard/greater)
-"hup" = (
-/obj/machinery/door/airlock/maintenance{
- name = "Medbay Maintenance"
- },
-/turf/open/floor/plating,
-/area/station/maintenance/port/aft)
"huq" = (
/obj/machinery/modular_computer/console/preset/id{
dir = 4
@@ -20395,15 +20385,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/iron/dark,
/area/station/medical/break_room)
-"hyI" = (
-/obj/item/kirbyplants/random,
-/obj/effect/turf_decal/siding/purple{
- dir = 5
- },
-/obj/machinery/airalarm/directional/east,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/genetics)
"hyN" = (
/obj/structure/sign/warning/secure_area,
/turf/closed/wall/r_wall,
@@ -21719,6 +21700,17 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
+"hYh" = (
+/obj/machinery/computer/scan_consolenew{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/purple{
+ dir = 8
+ },
+/obj/machinery/light/directional/west,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/science/genetics)
"hYr" = (
/obj/machinery/holopad,
/obj/structure/cable,
@@ -23066,6 +23058,11 @@
/obj/effect/spawner/random/food_or_drink/donkpockets,
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
+"iuD" = (
+/obj/effect/spawner/random/vending/snackvend,
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/hallway/primary/central)
"iuJ" = (
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
dir = 4
@@ -24135,11 +24132,6 @@
},
/turf/open/floor/plating,
/area/station/maintenance/aft/lesser)
-"iLG" = (
-/obj/effect/spawner/random/vending/snackvend,
-/obj/machinery/newscaster/directional/west,
-/turf/open/floor/iron/dark,
-/area/station/hallway/primary/central)
"iLH" = (
/obj/machinery/flasher/directional/west{
id = "Cell 1"
@@ -25701,6 +25693,16 @@
},
/turf/open/floor/iron,
/area/station/security/office)
+"jkE" = (
+/obj/effect/turf_decal/siding/purple{
+ dir = 6
+ },
+/obj/structure/table,
+/obj/item/clipboard,
+/obj/item/holosign_creator/atmos,
+/obj/item/holosign_creator/atmos,
+/turf/open/floor/iron/white,
+/area/station/science/ordnance/office)
"jkT" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -25923,18 +25925,6 @@
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/surgery/theatre)
-"jox" = (
-/obj/structure/table,
-/obj/item/reagent_containers/cup/glass/mug/britcup{
- pixel_x = -6;
- pixel_y = 11
- },
-/obj/item/phone{
- pixel_x = 6;
- pixel_y = 1
- },
-/turf/open/floor/iron,
-/area/station/cargo/drone_bay)
"jpr" = (
/obj/structure/rack,
/obj/effect/spawner/random/techstorage/command_all,
@@ -26818,21 +26808,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/iron,
/area/station/cargo/warehouse)
-"jDf" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 1;
- id = "ordnancebridge"
- },
-/obj/machinery/button/door{
- id = "ordnancebridge";
- pixel_x = -24;
- req_one_access = list("maint_tunnels","science")
- },
-/obj/effect/turf_decal/caution/stand_clear{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/station/maintenance/aft/lesser)
"jDk" = (
/obj/effect/spawner/random/entertainment/arcade,
/obj/effect/decal/cleanable/dirt/dust,
@@ -27960,18 +27935,6 @@
},
/turf/open/floor/iron/dark,
/area/station/command/heads_quarters/ce)
-"jWu" = (
-/obj/structure/table,
-/obj/effect/turf_decal/tile/purple,
-/obj/effect/turf_decal/tile/purple{
- dir = 1
- },
-/obj/structure/extinguisher_cabinet/directional/south,
-/obj/item/reagent_containers/cup/glass/mug/britcup{
- pixel_y = 2
- },
-/turf/open/floor/iron,
-/area/station/science/research)
"jWR" = (
/obj/item/radio/intercom/directional/east,
/obj/effect/turf_decal/siding/wood{
@@ -29915,6 +29878,13 @@
/obj/machinery/light/directional/south,
/turf/open/floor/wood,
/area/station/service/library)
+"kJT" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Surgery C Maintenance"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/plating,
+/area/station/maintenance/aft/greater)
"kKd" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
@@ -30442,6 +30412,21 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/port)
+"kRF" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ dir = 4;
+ id = "ordnancebridge"
+ },
+/obj/machinery/button/door{
+ id = "ordnancebridge";
+ pixel_y = 24;
+ req_one_access = list("maint_tunnels","science")
+ },
+/obj/effect/turf_decal/caution/stand_clear{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/aft/lesser)
"kRV" = (
/obj/structure/window/reinforced{
dir = 4
@@ -39477,21 +39462,6 @@
/obj/effect/landmark/start/chemist,
/turf/open/floor/iron/white,
/area/station/medical/pharmacy)
-"oas" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- dir = 4;
- id = "ordnancebridge"
- },
-/obj/machinery/button/door{
- id = "ordnancebridge";
- pixel_y = 24;
- req_one_access = list("maint_tunnels","science")
- },
-/obj/effect/turf_decal/caution/stand_clear{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/station/maintenance/aft/lesser)
"oaw" = (
/obj/structure/table/reinforced,
/obj/structure/cable,
@@ -40995,14 +40965,6 @@
/obj/effect/turf_decal/tile/green/fourcorners,
/turf/open/floor/iron,
/area/station/service/hydroponics)
-"oBN" = (
-/obj/item/candle,
-/obj/machinery/light_switch/directional/north,
-/obj/effect/decal/cleanable/cobweb/cobweb2,
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/service/chapel)
"oBO" = (
/obj/structure/cable,
/obj/effect/landmark/start/medical_doctor,
@@ -42702,6 +42664,12 @@
},
/turf/open/floor/iron,
/area/station/command/gateway)
+"pig" = (
+/obj/structure/table,
+/obj/item/candle,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/iron,
+/area/station/hallway/secondary/exit/departure_lounge)
"piw" = (
/obj/effect/landmark/start/cyborg,
/obj/machinery/holopad/secure,
@@ -45021,14 +44989,6 @@
},
/turf/open/floor/circuit/telecomms,
/area/station/science/xenobiology)
-"pZj" = (
-/obj/item/candle,
-/obj/machinery/light_switch/directional/west,
-/obj/effect/decal/cleanable/cobweb,
-/obj/structure/table/wood,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/service/chapel)
"pZn" = (
/obj/effect/turf_decal/tile/blue{
dir = 8
@@ -45362,6 +45322,41 @@
dir = 1
},
/area/station/service/chapel)
+"qgc" = (
+/obj/structure/closet/crate/secure/weapon{
+ desc = "A secure clothing crate.";
+ name = "formal uniform crate";
+ req_access = list("armory")
+ },
+/obj/item/clothing/under/rank/security/officer/formal,
+/obj/item/clothing/under/rank/security/officer/formal,
+/obj/item/clothing/under/rank/security/officer/formal,
+/obj/item/clothing/under/rank/security/officer/formal,
+/obj/item/clothing/under/rank/security/officer/formal,
+/obj/item/clothing/under/rank/security/officer/formal,
+/obj/item/clothing/suit/jacket/officer/blue,
+/obj/item/clothing/suit/jacket/officer/blue,
+/obj/item/clothing/suit/jacket/officer/blue,
+/obj/item/clothing/suit/jacket/officer/blue,
+/obj/item/clothing/suit/jacket/officer/blue,
+/obj/item/clothing/suit/jacket/officer/blue,
+/obj/item/clothing/under/rank/security/warden/formal,
+/obj/item/clothing/suit/jacket/warden/blue,
+/obj/item/clothing/under/rank/security/head_of_security/formal,
+/obj/item/clothing/suit/jacket/hos/blue,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navyofficer,
+/obj/item/clothing/head/beret/sec/navywarden,
+/obj/item/clothing/head/hats/hos/beret/navyhos,
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/blue/half/contrasted,
+/turf/open/floor/iron/dark,
+/area/station/security/lockers)
"qgf" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -46710,6 +46705,14 @@
/obj/effect/mapping_helpers/airlock/access/all/medical/general,
/turf/open/floor/plating,
/area/station/maintenance/aft/greater)
+"qER" = (
+/obj/item/candle,
+/obj/machinery/light_switch/directional/west,
+/obj/effect/decal/cleanable/cobweb,
+/obj/structure/table/wood,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/service/chapel)
"qFj" = (
/obj/structure/table,
/obj/effect/turf_decal/delivery,
@@ -48141,10 +48144,6 @@
},
/turf/open/floor/engine,
/area/station/science/cytology)
-"rec" = (
-/obj/docking_port/stationary/escape_pod,
-/turf/open/space/basic,
-/area/space)
"ret" = (
/obj/effect/spawner/random/trash/garbage{
spawn_scatter_radius = 1
@@ -48220,6 +48219,18 @@
/obj/effect/spawner/random/decoration/showcase,
/turf/open/floor/carpet,
/area/station/command/corporate_showroom)
+"rgL" = (
+/obj/structure/table,
+/obj/item/reagent_containers/cup/glass/mug/britcup{
+ pixel_x = -6;
+ pixel_y = 11
+ },
+/obj/item/phone{
+ pixel_x = 6;
+ pixel_y = 1
+ },
+/turf/open/floor/iron,
+/area/station/cargo/drone_bay)
"rgN" = (
/obj/structure/cable,
/obj/effect/turf_decal/trimline/brown/filled/line{
@@ -59513,41 +59524,6 @@
},
/turf/open/space/basic,
/area/space)
-"uXE" = (
-/obj/structure/closet/crate/secure/weapon{
- desc = "A secure clothing crate.";
- name = "formal uniform crate";
- req_access = list("armory")
- },
-/obj/item/clothing/under/rank/security/officer/formal,
-/obj/item/clothing/under/rank/security/officer/formal,
-/obj/item/clothing/under/rank/security/officer/formal,
-/obj/item/clothing/under/rank/security/officer/formal,
-/obj/item/clothing/under/rank/security/officer/formal,
-/obj/item/clothing/under/rank/security/officer/formal,
-/obj/item/clothing/suit/jacket/officer/blue,
-/obj/item/clothing/suit/jacket/officer/blue,
-/obj/item/clothing/suit/jacket/officer/blue,
-/obj/item/clothing/suit/jacket/officer/blue,
-/obj/item/clothing/suit/jacket/officer/blue,
-/obj/item/clothing/suit/jacket/officer/blue,
-/obj/item/clothing/under/rank/security/warden/formal,
-/obj/item/clothing/suit/jacket/warden/blue,
-/obj/item/clothing/under/rank/security/head_of_security/formal,
-/obj/item/clothing/suit/jacket/hos/blue,
-/obj/item/clothing/head/beret/sec/navyofficer,
-/obj/item/clothing/head/beret/sec/navyofficer,
-/obj/item/clothing/head/beret/sec/navyofficer,
-/obj/item/clothing/head/beret/sec/navyofficer,
-/obj/item/clothing/head/beret/sec/navyofficer,
-/obj/item/clothing/head/beret/sec/navyofficer,
-/obj/item/clothing/head/beret/sec/navywarden,
-/obj/item/clothing/head/hats/hos/beret/navyhos,
-/obj/structure/extinguisher_cabinet/directional/east,
-/obj/structure/cable,
-/obj/effect/turf_decal/tile/blue/half/contrasted,
-/turf/open/floor/iron/dark,
-/area/station/security/lockers)
"uXG" = (
/obj/machinery/door/airlock/maintenance{
name = "Psychology Maintenance"
@@ -59890,20 +59866,6 @@
},
/turf/open/floor/iron/cafeteria,
/area/station/service/kitchen)
-"veo" = (
-/obj/effect/decal/cleanable/dirt/dust,
-/obj/structure/table/reinforced,
-/obj/item/storage/box/lights/mixed,
-/obj/item/cigbutt/cigarbutt,
-/obj/item/candle{
- pixel_x = -5
- },
-/obj/item/storage/box/matches{
- pixel_x = 1;
- pixel_y = -1
- },
-/turf/open/floor/iron/white,
-/area/station/medical/abandoned)
"veO" = (
/obj/effect/turf_decal/tile/blue/anticorner/contrasted{
dir = 8
@@ -60027,17 +59989,6 @@
},
/turf/open/floor/iron/white,
/area/station/medical/chemistry)
-"vhq" = (
-/obj/machinery/computer/scan_consolenew{
- dir = 4
- },
-/obj/effect/turf_decal/siding/purple{
- dir = 8
- },
-/obj/machinery/light/directional/west,
-/obj/effect/turf_decal/tile/neutral/fourcorners,
-/turf/open/floor/iron/dark,
-/area/station/science/genetics)
"vht" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -60070,6 +60021,14 @@
/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/security/evidence)
+"vhE" = (
+/obj/item/candle,
+/obj/machinery/light_switch/directional/north,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/structure/table/wood,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/service/chapel)
"vhI" = (
/obj/effect/turf_decal/tile/yellow{
dir = 8
@@ -62649,12 +62608,6 @@
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/plating,
/area/station/maintenance/starboard/greater)
-"waq" = (
-/obj/docking_port/stationary/escape_pod{
- dir = 4
- },
-/turf/open/space/basic,
-/area/space)
"was" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -64735,6 +64688,25 @@
},
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
+"wOQ" = (
+/obj/structure/safe,
+/obj/item/storage/secure/briefcase/riches,
+/obj/item/storage/backpack/duffelbag/syndie/hitman,
+/obj/item/card/id/advanced/silver/reaper,
+/obj/item/lazarus_injector,
+/obj/item/gun/energy/disabler,
+/obj/item/gun/ballistic/revolver/russian,
+/obj/item/ammo_box/a357,
+/obj/item/clothing/neck/stethoscope,
+/obj/item/book{
+ desc = "An undeniably handy book.";
+ icon_state = "bookknock";
+ name = "\improper A Simpleton's Guide to Safe-cracking with Stethoscopes"
+ },
+/obj/effect/turf_decal/bot_white/left,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron/dark,
+/area/station/ai_monitored/command/nuke_storage)
"wOR" = (
/obj/effect/landmark/event_spawn,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -66547,6 +66519,20 @@
/obj/effect/spawner/random/bureaucracy/pen,
/turf/open/floor/iron,
/area/station/engineering/gravity_generator)
+"xvT" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/table/reinforced,
+/obj/item/storage/box/lights/mixed,
+/obj/item/cigbutt/cigarbutt,
+/obj/item/candle{
+ pixel_x = -5
+ },
+/obj/item/storage/box/matches{
+ pixel_x = 1;
+ pixel_y = -1
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/abandoned)
"xvZ" = (
/obj/structure/extinguisher_cabinet/directional/east,
/turf/open/floor/iron/freezer,
@@ -68737,6 +68723,12 @@
},
/turf/open/floor/plating,
/area/station/hallway/secondary/entry)
+"ykp" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Medbay Maintenance"
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/aft)
"ykI" = (
/obj/effect/landmark/start/hangover,
/turf/open/floor/engine{
@@ -68750,6 +68742,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/plating,
/area/station/maintenance/port/fore)
+"ykR" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/window/right/directional/south{
+ dir = 8;
+ name = "Jim Norton's Quebecois Coffee";
+ req_one_access = list("service","maint_tunnels")
+ },
+/obj/effect/turf_decal/trimline/green/line,
+/turf/open/floor/iron/dark,
+/area/station/service/cafeteria)
"ykS" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
@@ -78459,7 +78461,7 @@ tkr
aaa
aaa
aaa
-rec
+edl
cSk
auJ
jMZ
@@ -80316,7 +80318,7 @@ tsd
tsd
tsd
hUN
-hsh
+cUp
jIR
lMJ
gQK
@@ -87520,7 +87522,7 @@ tzE
ucc
tSw
tSw
-fbO
+kJT
tSw
tSw
tSw
@@ -87785,7 +87787,7 @@ bEL
keq
scb
suz
-veo
+xvT
tSw
vUM
bhS
@@ -88285,7 +88287,7 @@ sWO
oxW
dqN
vlH
-hup
+ykp
miy
tFr
nMf
@@ -89233,7 +89235,7 @@ fru
wrG
uzb
phP
-jox
+rgL
jXu
tfR
jXu
@@ -90527,7 +90529,7 @@ rlU
vis
mCi
ixT
-dOo
+wOQ
rlU
aaa
aEH
@@ -90829,7 +90831,7 @@ sVY
sVY
sVY
sVY
-iLG
+iuD
xxk
ahr
bMY
@@ -91052,7 +91054,7 @@ vvH
cFp
guX
mgl
-cJU
+ykR
wAj
pPH
hSg
@@ -91646,7 +91648,7 @@ bsZ
rJI
taX
tSw
-pZj
+qER
gmX
lHK
tey
@@ -93188,7 +93190,7 @@ tSw
tSw
xWF
tSw
-oBN
+vhE
iZi
kVN
qri
@@ -93702,10 +93704,10 @@ tSw
tSw
sGA
tSw
-dtp
+pig
fgl
btx
-dtp
+pig
otu
otu
otu
@@ -94091,7 +94093,7 @@ isc
aaa
aaa
aaa
-rec
+edl
tYS
lgS
jKq
@@ -97031,7 +97033,7 @@ cId
rQl
oIg
wBq
-vhq
+hYh
vKW
jNX
jxW
@@ -97188,7 +97190,7 @@ aaa
rrt
aaa
ahj
-uXE
+qgc
sCi
kiW
rfb
@@ -98055,7 +98057,7 @@ bBo
gwf
gfZ
gqm
-hyI
+faB
cDA
jrb
lkL
@@ -99098,7 +99100,7 @@ wna
oFX
lWN
hND
-jDf
+aZv
iKL
nFa
nFa
@@ -101159,7 +101161,7 @@ svS
svS
svS
svS
-oas
+kRF
dKC
anS
lMJ
@@ -102166,7 +102168,7 @@ fnh
mMX
moF
klT
-bqy
+jkE
svS
dKC
lMW
@@ -106017,7 +106019,7 @@ gcV
nNe
nbS
aHM
-jWu
+hbC
oWk
ddu
wmi
@@ -106257,7 +106259,7 @@ unL
uNd
unL
unL
-dwD
+gpv
unL
tUn
tUn
@@ -106695,7 +106697,7 @@ aaa
aaa
szp
aaa
-waq
+dBV
aaa
szp
szp
@@ -114707,7 +114709,7 @@ dgm
dgB
fJy
aaa
-waq
+dBV
aaa
fJy
oAQ
diff --git a/code/__DEFINES/dcs/signals/signals_turf.dm b/code/__DEFINES/dcs/signals/signals_turf.dm
index 61142cea565..36e6920b8d2 100644
--- a/code/__DEFINES/dcs/signals/signals_turf.dm
+++ b/code/__DEFINES/dcs/signals/signals_turf.dm
@@ -14,6 +14,8 @@
#define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new"
///from base of turf/proc/onShuttleMove(): (turf/new_turf)
#define COMSIG_TURF_ON_SHUTTLE_MOVE "turf_on_shuttle_move"
+///from base of /datum/turf_reservation/proc/Release: (datum/turf_reservation/reservation)
+#define COMSIG_TURF_RESERVATION_RELEASED "turf_reservation_released"
///from /turf/open/temperature_expose(datum/gas_mixture/air, exposed_temperature)
#define COMSIG_TURF_EXPOSE "turf_expose"
///from /turf/proc/immediate_calculate_adjacent_turfs()
diff --git a/code/__DEFINES/movement.dm b/code/__DEFINES/movement.dm
index ac56ca7097c..041e2bc2b24 100644
--- a/code/__DEFINES/movement.dm
+++ b/code/__DEFINES/movement.dm
@@ -34,6 +34,8 @@ GLOBAL_VAR_INIT(glide_size_multiplier, 1.0)
#define MOVEMENT_LOOP_IGNORE_PRIORITY (1<<1)
///Should we override the loop's glide?
#define MOVEMENT_LOOP_IGNORE_GLIDE (1<<2)
+///Should we not update our movables dir on move?
+#define MOVEMENT_LOOP_NO_DIR_UPDATE (1<<3)
//Index defines for movement bucket data packets
#define MOVEMENT_BUCKET_TIME 1
diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm
index 6255473288b..7215f5b00d8 100644
--- a/code/__DEFINES/obj_flags.dm
+++ b/code/__DEFINES/obj_flags.dm
@@ -38,6 +38,8 @@
#define IGNORE_DIGITIGRADE (1<<18)
/// Has contextual screentips when HOVERING OVER OTHER objects
#define ITEM_HAS_CONTEXTUAL_SCREENTIPS (1 << 19)
+/// No blood overlay is allowed to appear on this item, and it cannot gain blood DNA forensics
+#define NO_BLOOD_ON_ITEM (1 << 20)
// Flags for the clothing_flags var on /obj/item/clothing
diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm
index 5b906d97bf3..1d721ef3f1d 100644
--- a/code/__DEFINES/shuttles.dm
+++ b/code/__DEFINES/shuttles.dm
@@ -44,7 +44,7 @@
#define TRANSIT_REQUEST 1
#define TRANSIT_READY 2
-#define SHUTTLE_TRANSIT_BORDER 8
+#define SHUTTLE_TRANSIT_BORDER 16
#define PARALLAX_LOOP_TIME 25
#define HYPERSPACE_END_TIME 5
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index 68d7bfc6c4a..a52b3585edc 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -204,6 +204,7 @@
#define FIRE_PRIORITY_FLUIDS 20
#define FIRE_PRIORITY_AIR 20
#define FIRE_PRIORITY_NPC 20
+#define FIRE_PRIORITY_HYPERSPACE_DRIFT 20
#define FIRE_PRIORITY_NPC_MOVEMENT 21
#define FIRE_PRIORITY_NPC_ACTIONS 22
#define FIRE_PRIORITY_PATHFINDING 23
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 08fa4f6cbff..5e400ffe216 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -319,6 +319,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
/// Increases chance of getting special traumas, makes them harder to cure
#define TRAIT_SPECIAL_TRAUMA_BOOST "special_trauma_boost"
#define TRAIT_SPACEWALK "spacewalk"
+/// Sanity trait to keep track of when we're in hyperspace and add the appropriate element if we werent
+#define TRAIT_HYPERSPACED "hyperspaced"
+///Gives the movable free hyperspace movement without being pulled during shuttle transit
+#define TRAIT_FREE_HYPERSPACE_MOVEMENT "free_hyperspace_movement"
/// Gets double arcade prizes
#define TRAIT_GAMERGOD "gamer-god"
#define TRAIT_GIANT "giant"
diff --git a/code/__DEFINES/~skyrat_defines/inventory.dm b/code/__DEFINES/~skyrat_defines/inventory.dm
index 318c11e19fe..fe2c1d7cee9 100644
--- a/code/__DEFINES/~skyrat_defines/inventory.dm
+++ b/code/__DEFINES/~skyrat_defines/inventory.dm
@@ -3,7 +3,6 @@
#define STYLE_TAUR_PAW (1<<3)
#define STYLE_TAUR_HOOF (1<<4)
#define STYLE_TAUR_ALL (STYLE_TAUR_SNAKE|STYLE_TAUR_PAW|STYLE_TAUR_HOOF)
-#define STYLE_TESHARI (1<<6) //teshari clothes and shit
// We don't use the HUD for these, they have their own menu.
#define LEWD_SLOT_VAGINA (1<<0)
diff --git a/code/__HELPERS/duplicating.dm b/code/__HELPERS/duplicating.dm
new file mode 100644
index 00000000000..e15f375d20a
--- /dev/null
+++ b/code/__HELPERS/duplicating.dm
@@ -0,0 +1,93 @@
+///List of all vars that will not be copied over when using duplicate_object()
+GLOBAL_LIST_INIT(duplicate_forbidden_vars, list(
+ "actions",
+ "active_hud_list",
+ "active_timers",
+ "AIStatus",
+ "appearance",
+ "area",
+ "atmos_adjacent_turfs",
+ "bodyparts",
+ "ckey",
+ "comp_lookup",
+ "computer_id",
+ "contents",
+ "cooldowns",
+ "datum_components",
+ "external_organs",
+ "external_organs_slot",
+ "group",
+ "hand_bodyparts",
+ "held_items",
+ "hud_list",
+ "implants",
+ "important_recursive_contents",
+ "internal_organs",
+ "internal_organs_slot",
+ "key",
+ "lastKnownIP",
+ "loc",
+ "locs",
+ "managed_overlays",
+ "managed_vis_overlays",
+ "overlays",
+ "overlays_standing",
+ "parent",
+ "parent_type",
+ "power_supply",
+ "quirks",
+ "reagents",
+ "signal_procs",
+ "status_traits",
+ "stat",
+ "tag",
+ "tgui_shared_states",
+ "type",
+ "vars",
+ "verbs",
+ "x", "y", "z",
+))
+GLOBAL_PROTECT(duplicate_forbidden_vars)
+
+/**
+ * # duplicate_object
+ *
+ * Makes a copy of an item and transfers most vars over, barring GLOB.duplicate_forbidden_vars
+ * Args:
+ * original - Atom being duplicated
+ * spawning_location - Turf where the duplicated atom will be spawned at.
+ */
+/proc/duplicate_object(atom/original, turf/spawning_location)
+ RETURN_TYPE(original.type)
+ if(!original)
+ return
+
+ var/atom/made_copy = new original.type(spawning_location)
+
+ for(var/atom_vars in original.vars - GLOB.duplicate_forbidden_vars)
+ if(islist(original.vars[atom_vars]))
+ var/list/var_list = original.vars[atom_vars]
+ made_copy.vars[atom_vars] = var_list.Copy()
+ continue
+ else if(istype(original.vars[atom_vars], /datum) || ismob(original.vars[atom_vars]))
+ continue // this would reference the original's object, that will break when it is used or deleted.
+ made_copy.vars[atom_vars] = original.vars[atom_vars]
+
+ if(isliving(made_copy))
+ if(iscarbon(made_copy))
+ var/mob/living/carbon/original_carbon = original
+ var/mob/living/carbon/copied_carbon = made_copy
+ //transfer DNA over (also body features), then update skin color.
+ original_carbon.dna.transfer_identity(copied_carbon, transfer_SE = TRUE)
+ copied_carbon.updateappearance(mutcolor_update = TRUE)
+
+ var/mob/living/original_living = original
+ //transfer implants, we do this so the original's implants being removed won't destroy ours.
+ for(var/obj/item/implant/original_implants as anything in original_living.implants)
+ var/obj/item/implant/copied_implant = new original_implants.type
+ copied_implant.implant(made_copy, silent = TRUE, force = TRUE)
+ //transfer quirks, we do this because transfering the original's quirks keeps the 'owner' as the original.
+ for(var/datum/quirk/original_quirks as anything in original_living.quirks)
+ original_living.add_quirk(original_quirks.type)
+
+ return made_copy
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index d7d9bfcae65..4b7790228ac 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -189,6 +189,7 @@ DEFINE_BITFIELD(item_flags, list(
"SLOWS_WHILE_IN_HAND" = SLOWS_WHILE_IN_HAND,
"SURGICAL_TOOL" = SURGICAL_TOOL,
"XENOMORPH_HOLDABLE" = XENOMORPH_HOLDABLE,
+ "NO_BLOOD_ON_ITEM" = NO_BLOOD_ON_ITEM,
))
DEFINE_BITFIELD(flags_inv, list(
diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index f59f2052e69..bee8a5c0184 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -57,6 +57,3 @@ GLOBAL_LIST_EMPTY(alert_consoles) // Station alert consoles, /obj/machinery/comp
GLOBAL_LIST_EMPTY(roundstart_station_borgcharger_areas) // List of area names of roundstart station cyborg rechargers, for the low charge/no charge cyborg screen alert tooltips.
GLOBAL_LIST_EMPTY(roundstart_station_mechcharger_areas) // List of area names of roundstart station mech rechargers, for the low charge/no charge mech screen alert tooltips.
-
-///List of all types of '/obj/machinery/mining_ltsrbt'
-GLOBAL_LIST_EMPTY(mining_ltsrbt)
diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm
index fda766e3562..9f342a0c976 100644
--- a/code/controllers/subsystem/materials.dm
+++ b/code/controllers/subsystem/materials.dm
@@ -26,11 +26,11 @@ SUBSYSTEM_DEF(materials)
new /datum/stack_recipe("Toilet", /obj/structure/toilet/greyscale, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE),
new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE, category = CAT_TILES),
- new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 50, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS),
+ new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS),
)
///List of stackcrafting recipes for materials using rigid recipes
var/list/rigid_stack_recipes = list(
- new /datum/stack_recipe("Carving block", /obj/structure/carving_block, 5, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_STRUCTURE),
+ new /datum/stack_recipe("Carving block", /obj/structure/carving_block, 5, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_STRUCTURE),
)
///Ran on initialize, populated the materials and materials_by_category dictionaries with their appropiate vars (See these variables for more info)
diff --git a/code/controllers/subsystem/movement/hyperspace_drift.dm b/code/controllers/subsystem/movement/hyperspace_drift.dm
new file mode 100644
index 00000000000..bd1ac67a6f0
--- /dev/null
+++ b/code/controllers/subsystem/movement/hyperspace_drift.dm
@@ -0,0 +1,6 @@
+///This subsystem handles the hyperspace shuttle pull movement loops
+MOVEMENT_SUBSYSTEM_DEF(hyperspace_drift)
+ name = "Hyperspace Drift"
+ priority = FIRE_PRIORITY_HYPERSPACE_DRIFT
+ flags = SS_NO_INIT|SS_TICKER
+ runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
diff --git a/code/controllers/subsystem/movement/movement.dm b/code/controllers/subsystem/movement/movement.dm
index 39761b633a8..c43debda543 100644
--- a/code/controllers/subsystem/movement/movement.dm
+++ b/code/controllers/subsystem/movement/movement.dm
@@ -104,12 +104,12 @@ SUBSYSTEM_DEF(movement)
smash_bucket(bucket_time = loop.timer) // We can't pass an index in for context because we don't know our position
/datum/controller/subsystem/movement/proc/add_loop(datum/move_loop/add)
- add.start_loop()
+ add.loop_started()
if(QDELETED(add))
return
queue_loop(add)
/datum/controller/subsystem/movement/proc/remove_loop(datum/move_loop/remove)
dequeue_loop(remove)
- remove.stop_loop()
+ remove.loop_stopped()
diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm
index a3d1165b8a3..2d3f3ba84b0 100644
--- a/code/controllers/subsystem/movement/movement_types.dm
+++ b/code/controllers/subsystem/movement/movement_types.dm
@@ -25,6 +25,8 @@
var/timer = 0
///Is this loop running or not
var/running = FALSE
+ ///Track if we're currently paused
+ var/paused = FALSE
/datum/move_loop/New(datum/movement_packet/owner, datum/controller/subsystem/movement/controller, atom/moving, priority, flags, datum/extra_info)
src.owner = owner
@@ -51,7 +53,8 @@
return TRUE
return FALSE
-/datum/move_loop/proc/start_loop()
+///Called when a loop is starting by a movement subsystem
+/datum/move_loop/proc/loop_started()
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_MOVELOOP_START)
running = TRUE
@@ -62,7 +65,8 @@
return
timer = world.time + delay
-/datum/move_loop/proc/stop_loop()
+///Called when a loop is stopped, doesn't stop the loop itself
+/datum/move_loop/proc/loop_stopped()
SHOULD_CALL_PARENT(TRUE)
running = FALSE
SEND_SIGNAL(src, COMSIG_MOVELOOP_STOP)
@@ -126,6 +130,25 @@
/datum/move_loop/proc/move()
return FALSE
+
+///Pause our loop untill restarted with resume_loop()
+/datum/move_loop/proc/pause_loop()
+ if(!controller || !running || paused) //we dead
+ return
+
+ //Dequeue us from our current bucket
+ controller.dequeue_loop(src)
+ paused = TRUE
+
+///Resume our loop after being paused by pause_loop()
+/datum/move_loop/proc/resume_loop()
+ if(!controller || !running || !paused)
+ return
+
+ controller.queue_loop(src)
+ timer = world.time
+ paused = FALSE
+
///Removes the atom from some movement subsystem. Defaults to SSmovement
/datum/controller/subsystem/move_manager/proc/stop_looping(atom/movable/moving, datum/controller/subsystem/movement/subsystem = SSmovement)
var/datum/movement_packet/our_info = moving.move_packet
@@ -168,7 +191,7 @@
/datum/move_loop/move/move()
var/atom/old_loc = moving.loc
- moving.Move(get_step(moving, direction), direction)
+ moving.Move(get_step(moving, direction), direction, FALSE, !(flags & MOVEMENT_LOOP_NO_DIR_UPDATE))
// We cannot rely on the return value of Move(), we care about teleports and it doesn't
// Moving also can be null on occasion, if the move deleted it and therefor us
return old_loc != moving?.loc
@@ -376,7 +399,7 @@
return TRUE
return FALSE
-/datum/move_loop/has_target/jps/start_loop()
+/datum/move_loop/has_target/jps/loop_started()
. = ..()
INVOKE_ASYNC(src, PROC_REF(recalculate_path))
diff --git a/code/datums/components/onwear_mood.dm b/code/datums/components/onwear_mood.dm
index 886652d2057..8361a7653de 100644
--- a/code/datums/components/onwear_mood.dm
+++ b/code/datums/components/onwear_mood.dm
@@ -7,7 +7,7 @@
/// what slots it needs to be equipped to to work
var/slot_equip
-/datum/component/onwear_mood/Initialize(datum/mood_event/saved_event, examine_string, slot_equip = ITEM_SLOT_ON_BODY)
+/datum/component/onwear_mood/Initialize(datum/mood_event/saved_event_type, examine_string, slot_equip = ITEM_SLOT_ON_BODY)
if(!isitem(parent))
return COMPONENT_INCOMPATIBLE
diff --git a/code/datums/components/shuttle_cling.dm b/code/datums/components/shuttle_cling.dm
new file mode 100644
index 00000000000..0f2042ede68
--- /dev/null
+++ b/code/datums/components/shuttle_cling.dm
@@ -0,0 +1,158 @@
+
+//Below defines are for the is_holding_on proc to see how well they're holding on and respond accordingly
+///Instead of a high move force we just get launched away dramatically because we're that hopeless
+#define SUPER_NOT_HOLDING_ON 0
+///We're not holdin on and will get thrown off
+#define NOT_HOLDING_ON 1
+///We're holding on, but will be pulled slowly
+#define CLINGING 2
+///We're holding on really well and aren't suffering from any pull
+#define ALL_GOOD 3
+
+///Gets added to all movables that enter hyperspace and are supposed to suffer from "hyperspace drift"
+///This lets people fly around shuttles during transit using jetpacks, or cling to the side if they got a spacesuit
+///Dumping into deepspace is handled by the hyperspace turf, not the component.
+///Not giving something this component while on hyperspace is safe, it just means free movement like carps
+/datum/component/shuttle_cling
+ ///The direction we push stuff towards
+ var/direction
+ ///Path to the hyperspace tile, so we know if we're in hyperspace
+ var/hyperspace_type = /turf/open/space/transit
+
+ ///Our moveloop, handles the transit pull
+ var/datum/move_loop/move/hyperloop
+
+ ///If we can "hold on", how often do we move?
+ var/clinging_move_delay = 1 SECONDS
+ ///If we can't hold onto anything, how fast do we get pulled away?
+ var/not_clinging_move_delay = 0.2 SECONDS
+
+/datum/component/shuttle_cling/Initialize(direction)
+ . = ..()
+
+ if(!ismovable(parent))
+ return COMPONENT_INCOMPATIBLE
+
+ src.direction = direction
+
+ ADD_TRAIT(parent, TRAIT_HYPERSPACED, src)
+
+ RegisterSignals(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UNBUCKLE, COMSIG_ATOM_NO_LONGER_PULLED), PROC_REF(update_state))
+
+ hyperloop = SSmove_manager.move(moving = parent, direction = direction, delay = not_clinging_move_delay, subsystem = SShyperspace_drift, priority = MOVEMENT_ABOVE_SPACE_PRIORITY, flags = MOVEMENT_LOOP_START_FAST | MOVEMENT_LOOP_NO_DIR_UPDATE)
+
+ update_state(parent) //otherwise we'll get moved 1 tile before we can correct ourselves, which isnt super bad but just looks jank
+
+///Check if we're in hyperspace and our state in hyperspace
+/datum/component/shuttle_cling/proc/update_state()
+ SIGNAL_HANDLER
+
+ if(!is_on_hyperspace(parent))
+ qdel(src)
+ return
+
+ var/should_loop = FALSE
+
+ switch(is_holding_on(parent))
+ if(SUPER_NOT_HOLDING_ON)
+ launch_very_hard(parent)
+ should_loop = TRUE
+ if(NOT_HOLDING_ON)
+ hyperloop.set_delay(not_clinging_move_delay)
+ should_loop = TRUE
+ hyperloop.direction = direction //we're not close to anything so reset direction if we got diagonalized
+ if(CLINGING)
+ hyperloop.set_delay(clinging_move_delay)
+ should_loop = TRUE
+ update_drift_direction(parent)
+ if(ALL_GOOD)
+ should_loop = FALSE
+
+ //Do pause/unpause/nothing for the hyperloop
+ if(should_loop && hyperloop.paused)
+ hyperloop.resume_loop()
+ else if(!should_loop && !hyperloop.paused)
+ hyperloop.pause_loop()
+
+///Check if we're "holding on" to the shuttle
+/datum/component/shuttle_cling/proc/is_holding_on(atom/movable/movee)
+ if(movee.pulledby || !isturf(movee.loc))
+ return ALL_GOOD
+
+ if(!isliving(movee))
+ if(is_tile_solid(get_step(movee, direction))) //something is blocking us so do the cool drift
+ return CLINGING
+ return SUPER_NOT_HOLDING_ON
+
+ var/mob/living/living = movee
+
+ //Check if we can interact with stuff (checks for alive, arms, stun, etc)
+ if(!living.canUseTopic(living, be_close = TRUE, no_dexterity = FALSE, no_tk = TRUE, need_hands = TRUE))
+ return NOT_HOLDING_ON
+
+ if(living.buckled)
+ return ALL_GOOD
+
+ for(var/atom/handlebar in range(living, 1))
+ if(isclosedturf(handlebar))
+ return CLINGING
+ if(isobj(handlebar))
+ var/obj/object = handlebar
+ if(object.anchored && object.density)
+ return CLINGING
+ return NOT_HOLDING_ON
+
+///Are we on a hyperspace tile? There's some special bullshit with lattices so we just wrap this check
+/datum/component/shuttle_cling/proc/is_on_hyperspace(atom/movable/clinger)
+ if(istype(clinger.loc, hyperspace_type) && !(locate(/obj/structure/lattice) in clinger.loc))
+ return TRUE
+ return FALSE
+
+///Launch the atom very hard, away from hyperspace
+/datum/component/shuttle_cling/proc/launch_very_hard(atom/movable/byebye)
+ byebye.safe_throw_at(get_edge_target_turf(byebye, direction), 200, 1, spin = TRUE, force = MOVE_FORCE_EXTREMELY_STRONG)
+
+///Check if we arent just being blocked, and if we are give us some diagonal push so we cant just infinitely cling to the front
+/datum/component/shuttle_cling/proc/update_drift_direction(atom/movable/clinger)
+ var/turf/potential_blocker = get_step(clinger, direction)
+ //We are not being blocked, so just give us cardinal drift
+ if(!is_tile_solid(potential_blocker))
+ hyperloop.direction = direction
+ return
+
+ //We're already moving diagonally
+ if(hyperloop.direction != direction)
+ var/side_dir = hyperloop.direction - direction
+
+ if(is_tile_solid(get_step(clinger, side_dir)))
+ hyperloop.direction = direction + turn(side_dir, 180) //We're bumping a wall to the side, so switch to the other side_dir (yes this adds pingpong protocol)
+ return
+
+ //Get the directions from the side of our current drift direction (so if we have drift south, get all cardinals and remove north and south, leaving only east and west)
+ var/side_dirs = shuffle(GLOB.cardinals - direction - turn(direction, 180))
+
+ //We check if one side is solid
+ if(!is_tile_solid(get_step(clinger, side_dirs[1])))
+ hyperloop.direction = direction + side_dirs[1]
+ else //if one side isnt solid, send it to the other side (it can also be solid but we dont care cause we're boxed in then and not like itll matter much then)
+ hyperloop.direction = direction + side_dirs[2]
+
+///Check if it's a closed turf or contains a dense object
+/datum/component/shuttle_cling/proc/is_tile_solid(turf/maybe_solid)
+ if(isclosedturf(maybe_solid))
+ return TRUE
+ for(var/obj/blocker in maybe_solid.contents)
+ if(blocker.density)
+ return TRUE
+ return FALSE
+
+/datum/component/shuttle_cling/Destroy(force, silent)
+ REMOVE_TRAIT(parent, TRAIT_HYPERSPACED, src)
+ QDEL_NULL(hyperloop)
+
+ return ..()
+
+#undef SUPER_NOT_HOLDING_ON
+#undef NOT_HOLDING_ON
+#undef CLINGING
+#undef ALL_GOOD
diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm
index 5d53d9f1cad..519904aaabf 100644
--- a/code/datums/status_effects/debuffs/debuffs.dm
+++ b/code/datums/status_effects/debuffs/debuffs.dm
@@ -417,23 +417,33 @@
alert_type = null
duration = -1
+/datum/status_effect/neck_slice/on_apply()
+ if(!ishuman(owner))
+ return FALSE
+ if(!owner.get_bodypart(BODY_ZONE_HEAD))
+ return FALSE
+ return TRUE
+
/datum/status_effect/neck_slice/tick()
- var/mob/living/carbon/human/H = owner
- var/obj/item/bodypart/throat = H.get_bodypart(BODY_ZONE_HEAD)
- if(H.stat == DEAD || !throat)
- H.remove_status_effect(/datum/status_effect/neck_slice)
+ var/obj/item/bodypart/throat = owner.get_bodypart(BODY_ZONE_HEAD)
+ if(owner.stat == DEAD || !throat) // they can lose their head while it's going.
+ qdel(src)
+ return
var/still_bleeding = FALSE
- for(var/thing in throat.wounds)
- var/datum/wound/W = thing
- if(W.wound_type == WOUND_SLASH && W.severity > WOUND_SEVERITY_MODERATE)
+ for(var/datum/wound/bleeding_thing as anything in throat.wounds)
+ if(bleeding_thing.wound_type == WOUND_SLASH && bleeding_thing.severity > WOUND_SEVERITY_MODERATE)
still_bleeding = TRUE
break
if(!still_bleeding)
- H.remove_status_effect(/datum/status_effect/neck_slice)
+ qdel(src)
+ return
if(prob(10))
- H.emote(pick("gasp", "gag", "choke"))
+ owner.emote(pick("gasp", "gag", "choke"))
+
+/datum/status_effect/neck_slice/get_examine_text()
+ return span_warning("[owner.p_their(TRUE)] neck is cut and is bleeding profusely!")
/mob/living/proc/apply_necropolis_curse(set_curse)
var/datum/status_effect/necropolis_curse/C = has_status_effect(/datum/status_effect/necropolis_curse)
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index cb5ad2241a0..fa8db5fe2f0 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -516,7 +516,7 @@
// Here's where we rewrite how byond handles movement except slightly different
// To be removed on step_ conversion
// All this work to prevent a second bump
-/atom/movable/Move(atom/newloc, direction, glide_size_override = 0)
+/atom/movable/Move(atom/newloc, direction, glide_size_override = 0, update_dir = TRUE)
. = FALSE
if(!newloc || newloc == loc)
return
@@ -524,7 +524,7 @@
if(!direction)
direction = get_dir(src, newloc)
- if(set_dir_on_move && dir != direction && !face_mouse) // SKYRAT EDIT CHANGE
+ if(set_dir_on_move && dir != direction && update_dir && !face_mouse) // SKYRAT EDIT - && !face_mouse
setDir(direction)
var/is_multi_tile_object = is_multi_tile_object(src)
@@ -589,7 +589,7 @@
////////////////////////////////////////
-/atom/movable/Move(atom/newloc, direct, glide_size_override = 0)
+/atom/movable/Move(atom/newloc, direct, glide_size_override = 0, update_dir = TRUE)
var/atom/movable/pullee = pulling
var/turf/current_turf = loc
if(!moving_from_pull)
@@ -650,7 +650,7 @@
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
if(moving_diagonally == SECOND_DIAG_STEP)
- if(!. && set_dir_on_move && !face_mouse) // SKYRAT EDIT CHANGE
+ if(!. && set_dir_on_move && update_dir && !face_mouse) // SKYRAT EDIT CHANGE - && !face_mouse
setDir(first_step_dir)
else if(!inertia_moving)
newtonian_move(direct)
@@ -691,7 +691,7 @@
last_move = direct
- if(set_dir_on_move && dir != direct && !face_mouse) // SKYRAT EDIT CHANGE
+ if(set_dir_on_move && dir != direct && update_dir && !face_mouse) // SKYRAT EDIT CHANGE - && !face_mouse)
setDir(direct)
if(. && has_buckled_mobs() && !handle_buckled_mob_movement(loc, direct, glide_size_override)) //movement failed due to buckled mob(s)
. = FALSE
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 0e29e62bf24..04d0efa487a 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -355,7 +355,7 @@
. += span_notice("The status display reads: Storing up to [materials.max_amount] material units.
Material consumption at [creation_efficiency*100]%.")
/obj/machinery/autolathe/proc/can_build(datum/design/D, amount = 1)
- if(length(D.make_reagents))
+ if(D.make_reagent)
return FALSE
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : creation_efficiency)
diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm
index 94556192c56..8700a36ddaf 100644
--- a/code/game/machinery/buttons.dm
+++ b/code/game/machinery/buttons.dm
@@ -214,15 +214,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
/obj/machinery/button/door/indestructible
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
-/datum/armor/machinery_button
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 10
- fire = 90
- acid = 70
-
/obj/machinery/button/door/setup_device()
if(!device)
if(normaldoorcontrol)
@@ -321,15 +312,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
device_type = /obj/item/assembly/control/curtain
var/sync_doors = TRUE
-/datum/armor/machinery_button
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 10
- fire = 90
- acid = 70
-
/obj/machinery/button/curtain/setup_device()
var/obj/item/assembly/control/curtain = device
curtain.sync_doors = sync_doors
@@ -366,15 +348,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/button/door, 24)
/// The specific lift id of the tram we're calling.
var/lift_id = MAIN_STATION_TRAM
-/datum/armor/machinery_button
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 10
- fire = 90
- acid = 70
-
/obj/machinery/button/tram/setup_device()
var/obj/item/assembly/control/tram/tram_device = device
tram_device.initial_id = id
diff --git a/code/game/machinery/computer/orders/order_computer/cook_order.dm b/code/game/machinery/computer/orders/order_computer/cook_order.dm
index 0b0de93b713..2a235660a76 100644
--- a/code/game/machinery/computer/orders/order_computer/cook_order.dm
+++ b/code/game/machinery/computer/orders/order_computer/cook_order.dm
@@ -8,7 +8,7 @@
CATEGORY_SAUCES_REAGENTS,
)
-/obj/machinery/computer/order_console/cook/order_groceries(mob/living/purchaser, obj/item/card/id/card, list/groceries, ltsrbt_delivered = FALSE)
+/obj/machinery/computer/order_console/cook/order_groceries(mob/living/purchaser, obj/item/card/id/card, list/groceries)
say("Thank you for your purchase! It will arrive on the next cargo shuttle!")
radio.talk_into(src, "The kitchen has ordered groceries which will arrive on the cargo shuttle! Please make sure it gets to them as soon as possible!", radio_channel)
for(var/datum/orderable_item/ordered_item in groceries)
diff --git a/code/game/machinery/computer/orders/order_computer/golem_order.dm b/code/game/machinery/computer/orders/order_computer/golem_order.dm
index 848cd720f39..c428ab3634a 100644
--- a/code/game/machinery/computer/orders/order_computer/golem_order.dm
+++ b/code/game/machinery/computer/orders/order_computer/golem_order.dm
@@ -3,7 +3,6 @@
circuit = /obj/item/circuitboard/computer/order_console/mining/golem
forced_express = TRUE
express_cost_multiplier = 1
- uses_ltsrbt = FALSE
order_categories = list(
CATEGORY_GOLEM,
CATEGORY_MINING,
diff --git a/code/game/machinery/computer/orders/order_computer/mining_order.dm b/code/game/machinery/computer/orders/order_computer/mining_order.dm
index 5cceac263fa..e50d3d7e22a 100644
--- a/code/game/machinery/computer/orders/order_computer/mining_order.dm
+++ b/code/game/machinery/computer/orders/order_computer/mining_order.dm
@@ -1,3 +1,6 @@
+#define MINING_SHIPPING_MULTIPLIER 0.65
+#define GET_MINING_SHIPPING_MULTIPLIER(cost) round(cost * MINING_SHIPPING_MULTIPLIER,5)
+
/obj/machinery/computer/order_console/mining
name = "mining equipment order console"
desc = "An equipment shop for miners, points collected at an ore redemption machine can be spent here."
@@ -8,8 +11,12 @@
circuit = /obj/item/circuitboard/computer/order_console/mining
cooldown_time = 10 SECONDS //just time to let you know your order went through.
- express_cost_multiplier = 1.5
- uses_ltsrbt = TRUE
+ express_cost_multiplier = 1
+ purchase_tooltip = @{"Your purchases will arrive at cargo,
+ and hopefully get delivered by them.
+ 35% cheaper than express delivery."}
+ express_tooltip = @{"Sends your purchases instantly."}
+
order_categories = list(
CATEGORY_MINING,
CATEGORY_CONSUMABLES,
@@ -20,16 +27,15 @@
/obj/machinery/computer/order_console/mining/purchase_items(obj/item/card/id/card, express = FALSE)
var/final_cost = get_total_cost()
var/failure_message = "Sorry, but you do not have enough mining points."
- if(express)
- final_cost *= express_cost_multiplier
- failure_message += "Remember, Express upcharges the cost!"
+ if(!express)
+ final_cost = GET_MINING_SHIPPING_MULTIPLIER(final_cost)
if(final_cost <= card.mining_points)
card.mining_points -= final_cost
return TRUE
say(failure_message)
return FALSE
-/obj/machinery/computer/order_console/mining/order_groceries(mob/living/purchaser, obj/item/card/id/card, list/groceries, ltsrbt_delivered = FALSE)
+/obj/machinery/computer/order_console/mining/order_groceries(mob/living/purchaser, obj/item/card/id/card, list/groceries)
var/list/things_to_order = list()
for(var/datum/orderable_item/item as anything in groceries)
things_to_order[item.item_path] = groceries[item]
@@ -53,25 +59,14 @@
cost_type = "mp",
can_be_cancelled = FALSE,
)
- if(ltsrbt_delivered)
- var/obj/machinery/mining_ltsrbt/ltsrbt
- for(var/obj/machinery/mining_ltsrbt/all_ltsrbts as anything in GLOB.mining_ltsrbt)
- if(all_ltsrbts.machine_stat & (NOPOWER|BROKEN|MAINT)) //not functional
- continue
- if(!all_ltsrbts.enabled) //not enabled
- continue
- ltsrbt = all_ltsrbts
- break
- if(ltsrbt && ltsrbt.recieve_order(new_order))
- return
- say("Found no functional mining LTSRBTs. If there is one, it is likely destroyed, powered down, or under maintenance. Your delivery has instead been rerouted to Cargo.")
- else
- say("Thank you for your purchase! It will arrive on the next cargo shuttle!")
+ say("Thank you for your purchase! It will arrive on the next cargo shuttle!")
radio.talk_into(src, "A shaft miner has ordered equipment which will arrive on the cargo shuttle! Please make sure it gets to them as soon as possible!", radio_channel)
SSshuttle.shopping_list += new_order
/obj/machinery/computer/order_console/mining/ui_data(mob/user)
var/list/data = ..()
+ var/cost = get_total_cost()
+ data["total_cost"] = "[GET_MINING_SHIPPING_MULTIPLIER(cost)] (Express: [cost]) "
if(!isliving(user))
return data
var/mob/living/living_user = user
@@ -86,6 +81,15 @@
if(!.)
flick("mining-deny", src)
+/obj/machinery/computer/order_console/mining/ui_static_data(mob/user)
+ var/list/data = ..()
+ for(var/list/order in data["order_datums"])
+ var/cost = order["cost"]
+ if(isnull(cost)) //sanity check
+ continue
+ order["cost"] = GET_MINING_SHIPPING_MULTIPLIER(cost) // change costs to reflect mining shipping instead
+ return data
+
/obj/machinery/computer/order_console/mining/attackby(obj/item/weapon, mob/user, params)
if(istype(weapon, /obj/item/mining_voucher))
redeem_voucher(weapon, user)
@@ -206,3 +210,5 @@
#undef TO_POINT_CARD
#undef TO_USER_ID
+#undef MINING_SHIPPING_MULTIPLIER
+#undef GET_MINING_SHIPPING_MULTIPLIER
diff --git a/code/game/machinery/computer/orders/order_computer/order_computer.dm b/code/game/machinery/computer/orders/order_computer/order_computer.dm
index f0933f0694a..ec4e986515c 100644
--- a/code/game/machinery/computer/orders/order_computer/order_computer.dm
+++ b/code/game/machinery/computer/orders/order_computer/order_computer.dm
@@ -7,14 +7,17 @@ GLOBAL_LIST_EMPTY(order_console_products)
icon_screen = "request"
icon_keyboard = "generic_key"
light_color = LIGHT_COLOR_ORANGE
+ ///Tooltip for the express button in TGUI
+ var/express_tooltip = @{"Sends your purchases instantly,
+ but locks the console longer and increases the price!"}
+ ///Tooltip for the purchase button in TGUI
+ var/purchase_tooltip = @{"Your purchases will arrive at cargo,
+ and hopefully get delivered by them."}
///Cooldown between order uses.
COOLDOWN_DECLARE(order_cooldown)
///Cooldown time between uses, express console will have extra time depending on express_cost_multiplier.
var/cooldown_time = 60 SECONDS
- ///Boolean on whether they can bluespace orders using a '/obj/machinery/mining_ltsrbt'
- var/uses_ltsrbt = FALSE
-
///The radio the console can speak into
var/obj/item/radio/radio
///The channel we will attempt to speak into through our radio.
@@ -63,7 +66,8 @@ GLOBAL_LIST_EMPTY(order_console_products)
/obj/machinery/computer/order_console/ui_data(mob/user)
var/list/data = list()
- data["total_cost"] = get_total_cost()
+ var/cost = get_total_cost()
+ data["total_cost"] = "[cost] (Express: [cost*express_cost_multiplier])"
data["off_cooldown"] = COOLDOWN_FINISHED(src, order_cooldown)
if(!isliving(user))
@@ -77,7 +81,8 @@ GLOBAL_LIST_EMPTY(order_console_products)
/obj/machinery/computer/order_console/ui_static_data(mob/user)
var/list/data = list()
- data["ltsrbt_available"] = (uses_ltsrbt && GLOB.mining_ltsrbt.len)
+ data["express_tooltip"] = express_tooltip
+ data["purchase_tooltip"] = purchase_tooltip
data["forced_express"] = forced_express
data["order_categories"] = order_categories
data["order_datums"] = list()
@@ -128,7 +133,7 @@ GLOBAL_LIST_EMPTY(order_console_products)
if(get_total_cost() < CARGO_CRATE_VALUE)
say("For the delivery order needs to cost more or equal to [CARGO_CRATE_VALUE] points!")
return
- order_groceries(living_user, used_id_card, grocery_list, ltsrbt_delivered = (action == "ltsrbt_deliver"))
+ order_groceries(living_user, used_id_card, grocery_list)
grocery_list.Cut()
COOLDOWN_START(src, order_cooldown, cooldown_time)
if("express")
@@ -180,5 +185,5 @@ GLOBAL_LIST_EMPTY(order_console_products)
say(failure_message)
return FALSE
-/obj/machinery/computer/order_console/proc/order_groceries(mob/living/purchaser, obj/item/card/id/card, list/groceries, ltsrbt_delivered = FALSE)
+/obj/machinery/computer/order_console/proc/order_groceries(mob/living/purchaser, obj/item/card/id/card, list/groceries)
return
diff --git a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm
index 033a0769249..2e7ad9c4c26 100644
--- a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm
+++ b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm
@@ -22,12 +22,6 @@
desc = "A mining-themed MODsuit that works best when in a mining environment."
cost_per_order = 3000
-/datum/orderable_item/mining/mining_ltsrbt
- item_path = /obj/item/circuitboard/machine/mining_ltsrbt
- name = "Mining LTSRBT Board"
- desc = "Tired of waiting on the Cargo shuttle? This item lets you bluespace mining orders directly to the station."
- cost_per_order = 750
-
/datum/orderable_item/mining/mining_belt
item_path = /obj/item/storage/belt/mining
cost_per_order = 500
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 57c1e531d36..ab73335d865 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -174,14 +174,6 @@
actions_types = list(/datum/action/item_action/toggle_barrier_spread)
var/mode = SINGLE
-/datum/armor/barricade_security
- melee = 10
- bullet = 50
- laser = 50
- energy = 50
- bomb = 10
- fire = 10
-
/obj/item/grenade/barrier/examine(mob/user)
. = ..()
. += span_notice("Alt-click to toggle modes.")
@@ -240,14 +232,6 @@
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
-/datum/armor/barricade_security
- melee = 10
- bullet = 50
- laser = 50
- energy = 50
- bomb = 10
- fire = 10
-
/obj/item/deployable_turret_folded/Initialize(mapload)
. = ..()
AddComponent(/datum/component/deployable, 5 SECONDS, /obj/machinery/deployable_turret/hmg, delete_on_use = TRUE)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index a780946e64a..86091f01119 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -698,6 +698,27 @@
ui_interact(user)
+///Performs basic checks to make sure we are still able to hack an airlock. If control is restored early through outside means, opens the airlock's control interface.
+/obj/machinery/door/airlock/proc/check_hacking(mob/user, success_message)
+ if(QDELETED(src))
+ to_chat(user, span_warning("Connection lost! Unable to locate airlock on network."))
+ aiHacking = FALSE
+ return FALSE
+ if(canAIControl(user))
+ to_chat(user, span_notice("Alert cancelled. Airlock control has been restored without our assistance."))
+ aiHacking = FALSE
+ if(user)
+ attack_ai(user) //bring up airlock dialog
+ return
+ else if(!canAIHack())
+ to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
+ aiHacking = FALSE
+ return
+ if(success_message)
+ to_chat(user, span_notice(success_message))
+ return TRUE
+
+///Attemps to override airlocks that have the AI control wire disabled.
/obj/machinery/door/airlock/proc/hack(mob/user)
set waitfor = 0
if(!aiHacking)
@@ -705,75 +726,33 @@
to_chat(user, span_warning("Airlock AI control has been blocked. Beginning fault-detection."))
sleep(5 SECONDS)
-
- if(QDELETED(src))
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
+ if(!check_hacking(user, "Fault confirmed: airlock control wire disabled or cut."))
return
- if(canAIControl(user))
- to_chat(user, span_notice("Alert cancelled. Airlock control has been restored without our assistance."))
- aiHacking = FALSE
- return
- else if(!canAIHack())
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
- aiHacking = FALSE
- return
- to_chat(user, span_notice("Fault confirmed: airlock control wire disabled or cut."))
sleep(2 SECONDS)
-
- if(QDELETED(src))
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
+ if(!check_hacking(user, "Attempting to hack into airlock. This may take some time."))
return
- to_chat(user, span_notice("Attempting to hack into airlock. This may take some time."))
sleep(20 SECONDS)
-
- if(QDELETED(src))
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
+ if(!check_hacking(user, "Upload access confirmed. Loading control program into airlock software."))
return
- if(canAIControl(user))
- to_chat(user, span_notice("Alert cancelled. Airlock control has been restored without our assistance."))
- aiHacking = FALSE
- return
- else if(!canAIHack())
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
- aiHacking = FALSE
- return
- to_chat(user, span_notice("Upload access confirmed. Loading control program into airlock software."))
sleep(17 SECONDS)
-
- if(QDELETED(src))
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
+ if(!check_hacking(user,"Transfer complete. Forcing airlock to execute program."))
return
- if(canAIControl(user))
- to_chat(user, span_notice("Alert cancelled. Airlock control has been restored without our assistance."))
- aiHacking = FALSE
- return
- else if(!canAIHack())
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
- aiHacking = FALSE
- return
- to_chat(user, span_notice("Transfer complete. Forcing airlock to execute program."))
sleep(5 SECONDS)
-
- if(QDELETED(src))
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
+ if(!check_hacking(user, "Receiving control information from airlock."))
return
- //disable blocked control
- aiControlDisabled = AI_WIRE_HACKED
- to_chat(user, span_notice("Receiving control information from airlock."))
+ aiControlDisabled = AI_WIRE_HACKED //disable blocked control
sleep(1 SECONDS)
-
- if(QDELETED(src))
- to_chat(user, span_warning("Connection lost! Unable to hack airlock."))
- return
- //bring up airlock dialog
aiHacking = FALSE
+ if(QDELETED(src))
+ to_chat(user, span_warning("Connection lost! Unable to locate airlock on network."))
+ return
if(user)
- attack_ai(user)
+ attack_ai(user) //bring up airlock dialog
/obj/machinery/door/airlock/attack_animal(mob/user, list/modifiers)
if(isElectrified() && shock(user, 100))
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 7f1a0ab079d..62f025f1435 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -472,15 +472,6 @@
/obj/machinery/door/morgue
icon = 'icons/obj/doors/doormorgue.dmi'
-/datum/armor/machinery_door
- melee = 30
- bullet = 30
- laser = 20
- energy = 20
- bomb = 10
- fire = 80
- acid = 70
-
/obj/machinery/door/get_dumping_location()
return null
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index d511123f8c1..6b1f6fdea95 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -685,15 +685,6 @@
density = TRUE
alarm_type = FIRELOCK_ALARM_TYPE_GENERIC
-/datum/armor/door_firedoor
- melee = 10
- bullet = 30
- laser = 20
- energy = 20
- bomb = 30
- fire = 95
- acid = 70
-
/obj/machinery/door/firedoor/border_only/Initialize(mapload)
. = ..()
adjust_lights_starting_offset()
@@ -766,15 +757,6 @@
var/constructionStep = CONSTRUCTION_NO_CIRCUIT
var/reinforced = 0
-/datum/armor/door_firedoor
- melee = 10
- bullet = 30
- laser = 20
- energy = 20
- bomb = 30
- fire = 95
- acid = 70
-
/obj/structure/firelock_frame/examine(mob/user)
. = ..()
switch(constructionStep)
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 217891471df..947def3087e 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -176,15 +176,6 @@
var/checkdir = 4 //door won't open if turf in this dir is `turftype`
var/turftype = /turf/open/space
-/datum/armor/door_poddoor
- melee = 50
- bullet = 100
- laser = 100
- energy = 100
- bomb = 50
- fire = 100
- acid = 70
-
/obj/machinery/door/poddoor/shuttledock/proc/check()
var/turf/turf = get_step(src, checkdir)
if(!istype(turf, turftype))
diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm
index 86115ed501f..cef95421321 100644
--- a/code/game/machinery/firealarm.dm
+++ b/code/game/machinery/firealarm.dm
@@ -441,10 +441,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/firealarm, 26)
desc = "Cuban Pete is in the house!"
var/static/party_overlay
-/datum/armor/machinery_firealarm
- fire = 90
- acid = 30
-
/obj/machinery/firealarm/partyalarm/reset()
if (machine_stat & (NOPOWER|BROKEN))
return
@@ -481,10 +477,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/firealarm, 26)
var/obj/machinery/firealarm/attached_alarm
-/datum/armor/machinery_firealarm
- fire = 90
- acid = 30
-
/obj/item/circuit_component/firealarm/populate_ports()
alarm_trigger = add_input_port("Set", PORT_TYPE_SIGNAL)
reset_trigger = add_input_port("Reset", PORT_TYPE_SIGNAL)
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index c043b9c29ce..4b499ec6fce 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -105,13 +105,6 @@ Possible to do for anyone motivated enough:
desc = "It's a floor-mounted device for projecting holographic images. This one will refuse to auto-connect incoming calls."
secure = TRUE
-/datum/armor/machinery_holopad
- melee = 50
- bullet = 20
- laser = 20
- energy = 20
- fire = 50
-
/obj/machinery/holopad/secure/Initialize(mapload)
. = ..()
var/obj/item/circuitboard/machine/holopad/board = circuit
@@ -126,13 +119,6 @@ Possible to do for anyone motivated enough:
var/datum/proximity_monitor/proximity_monitor
var/proximity_range = 1
-/datum/armor/machinery_holopad
- melee = 50
- bullet = 20
- laser = 20
- energy = 20
- fire = 50
-
/obj/machinery/holopad/tutorial/Initialize(mapload)
. = ..()
if(proximity_range)
@@ -877,13 +863,6 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
var/mob/living/Impersonation
var/datum/holocall/HC
-/datum/armor/machinery_holopad
- melee = 50
- bullet = 20
- laser = 20
- energy = 20
- fire = 50
-
/obj/effect/overlay/holo_pad_hologram/Destroy()
Impersonation = null
if(!QDELETED(HC))
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 34a613e1c87..83f237d2e9d 100644
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -80,15 +80,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26)
/obj/machinery/sparker/ordmix
id = INCINERATOR_ORDMIX_IGNITER
-/datum/armor/machinery_igniter
- melee = 50
- bullet = 30
- laser = 70
- energy = 50
- bomb = 20
- fire = 100
- acid = 70
-
/obj/machinery/sparker/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread
diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm
index 82426663dac..12980a91f3c 100644
--- a/code/game/machinery/porta_turret/portable_turret.dm
+++ b/code/game/machinery/porta_turret/portable_turret.dm
@@ -656,15 +656,6 @@ DEFINE_BITFIELD(turret_flags, list(
button_icon = 'icons/mob/actions/actions_mecha.dmi'
button_icon_state = "mech_cycle_equip_off"
-/datum/armor/machinery_porta_turret
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 30
- fire = 90
- acid = 90
-
/datum/action/turret_toggle/Trigger(trigger_flags)
var/obj/machinery/porta_turret/P = target
if(!istype(P))
@@ -676,15 +667,6 @@ DEFINE_BITFIELD(turret_flags, list(
button_icon = 'icons/mob/actions/actions_mecha.dmi'
button_icon_state = "mech_eject"
-/datum/armor/machinery_porta_turret
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 30
- fire = 90
- acid = 90
-
/datum/action/turret_quit/Trigger(trigger_flags)
var/obj/machinery/porta_turret/P = target
if(!istype(P))
@@ -751,15 +733,6 @@ DEFINE_BITFIELD(turret_flags, list(
faction = list(ROLE_SYNDICATE)
desc = "A ballistic machine gun auto-turret."
-/datum/armor/machinery_porta_turret
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 30
- fire = 90
- acid = 90
-
/obj/machinery/porta_turret/syndicate/Initialize(mapload)
. = ..()
AddElement(/datum/element/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES)
@@ -830,15 +803,6 @@ DEFINE_BITFIELD(turret_flags, list(
faction = list("silicon")
turret_flags = TURRET_FLAG_SHOOT_CRIMINALS | TURRET_FLAG_SHOOT_ANOMALOUS | TURRET_FLAG_SHOOT_HEADS
-/datum/armor/syndicate_shuttle
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 80
- fire = 90
- acid = 90
-
/obj/machinery/porta_turret/ai/assess_perp(mob/living/carbon/human/perp)
return 10 //AI turrets shoot at everything not in their faction
@@ -851,15 +815,6 @@ DEFINE_BITFIELD(turret_flags, list(
mode = TURRET_LETHAL //It would be useless in stun mode anyway
faction = list(FACTION_NEUTRAL,"silicon","turret") //Minebots, medibots, etc that should not be shot.
-/datum/armor/syndicate_shuttle
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 80
- fire = 90
- acid = 90
-
/obj/machinery/porta_turret/aux_base/assess_perp(mob/living/carbon/human/perp)
return 0 //Never shoot humanoids. You are on your own if Ashwalkers or the like attack!
@@ -890,15 +845,6 @@ DEFINE_BITFIELD(turret_flags, list(
faction = list(FACTION_NEUTRAL,"silicon","turret")
mode = TURRET_LETHAL
-/datum/armor/syndicate_shuttle
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 80
- fire = 90
- acid = 90
-
/obj/machinery/porta_turret/centcom_shuttle/Initialize(mapload)
. = ..()
AddElement(/datum/element/empprotection, EMP_PROTECT_SELF | EMP_PROTECT_WIRES)
@@ -946,15 +892,6 @@ DEFINE_BITFIELD(turret_flags, list(
/// List of weakrefs to all turrets
var/list/turrets = list()
-/datum/armor/syndicate_shuttle
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 80
- fire = 90
- acid = 90
-
/obj/machinery/turretid/Initialize(mapload, ndir = 0, built = 0)
. = ..()
if(built)
@@ -1114,15 +1051,6 @@ DEFINE_BITFIELD(turret_flags, list(
custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
pixel_shift = 29
-/datum/armor/syndicate_shuttle
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 80
- fire = 90
- acid = 90
-
/obj/item/gun/proc/get_turret_properties()
. = list()
.["lethal_projectile"] = null
@@ -1183,15 +1111,6 @@ DEFINE_BITFIELD(turret_flags, list(
turret_flags = TURRET_FLAG_AUTH_WEAPONS
var/team_color
-/datum/armor/syndicate_shuttle
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 80
- fire = 90
- acid = 90
-
/obj/machinery/porta_turret/lasertag/assess_perp(mob/living/carbon/human/perp)
. = 0
if(team_color == "blue") //Lasertag turrets target the opposing team, how great is that? -Sieve
@@ -1235,15 +1154,6 @@ DEFINE_BITFIELD(turret_flags, list(
installation = /obj/item/gun/energy/laser/bluetag
team_color = "blue"
-/datum/armor/syndicate_shuttle
- melee = 50
- bullet = 30
- laser = 30
- energy = 30
- bomb = 80
- fire = 90
- acid = 90
-
/obj/machinery/porta_turret/lasertag/bullet_act(obj/projectile/P)
. = ..()
if(on)
diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm
index 4bd8a9b1b66..d6c5b6f32a6 100644
--- a/code/game/machinery/roulette_machine.dm
+++ b/code/game/machinery/roulette_machine.dm
@@ -443,15 +443,6 @@
icon_state = "floor_beacon"
var/used
-/datum/armor/machinery_roulette
- melee = 45
- bullet = 30
- laser = 30
- energy = 30
- bomb = 10
- fire = 30
- acid = 30
-
/obj/item/roulette_wheel_beacon/attack_self()
if(used)
return
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index c27351f7765..7587ba9efc4 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -281,10 +281,6 @@
/obj/machinery/space_heater/constructed
cell = null
-/datum/armor/machinery_space_heater
- fire = 80
- acid = 10
-
/obj/machinery/space_heater/constructed/Initialize(mapload)
. = ..()
set_panel_open(TRUE)
@@ -313,10 +309,6 @@
var/chem_heating_power = 1
display_panel = FALSE
-/datum/armor/machinery_space_heater
- fire = 80
- acid = 10
-
/obj/machinery/space_heater/improvised_chem_heater/Destroy()
. = ..()
QDEL_NULL(beaker)
diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm
index a5fc968fe19..b27d18802ab 100644
--- a/code/game/machinery/telecomms/machines/message_server.dm
+++ b/code/game/machinery/telecomms/machines/message_server.dm
@@ -89,13 +89,6 @@
var/decryptkey = "password"
var/calibrating = 15 MINUTES //Init reads this and adds world.time, then becomes 0 when that time has passed and the machine works
-/datum/armor/machinery_blackbox_recorder
- melee = 25
- bullet = 10
- laser = 10
- fire = 50
- acid = 70
-
/obj/machinery/telecomms/message_server/Initialize(mapload)
. = ..()
if (!decryptkey)
@@ -167,13 +160,6 @@
server_type = /obj/machinery/telecomms/message_server
var/datum/logged
-/datum/armor/machinery_blackbox_recorder
- melee = 25
- bullet = 10
- laser = 10
- fire = 50
- acid = 70
-
/datum/signal/subspace/messaging/New(init_source, init_data)
source = init_source
data = init_data
@@ -224,13 +210,6 @@
var/datum/picture/picture // attached photo
var/automated = 0 //automated message
-/datum/armor/machinery_blackbox_recorder
- melee = 25
- bullet = 10
- laser = 10
- fire = 50
- acid = 70
-
/datum/data_tablet_msg/New(param_rec, param_sender, param_message, param_photo)
if(param_rec)
recipient = param_rec
@@ -260,13 +239,6 @@
var/id_auth = "Unauthenticated"
var/priority = "Normal"
-/datum/armor/machinery_blackbox_recorder
- melee = 25
- bullet = 10
- laser = 10
- fire = 50
- acid = 70
-
/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority)
if(param_rec)
rec_dpt = param_rec
diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm
index 7bb81b30c99..e8352cf4e96 100644
--- a/code/game/objects/items/RCD.dm
+++ b/code/game/objects/items/RCD.dm
@@ -442,10 +442,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
// `initial` does not work here. Neither does instantiating a wall/whatever
// and referencing that. I don't know why.
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/proc/init_holographic_wall()
return getHologramIcon(
icon('icons/turf/walls/wall.dmi', "wall-0"),
@@ -519,10 +515,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
name = "hologram"
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/obj/effect/rcd_hologram/Initialize(mapload)
. = ..()
QDEL_IN(src, RCD_HOLOGRAM_FADE_TIME)
@@ -786,10 +778,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
var/energyfactor = 72
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
if(!iscyborg(user))
return 0
@@ -887,10 +875,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
inhand_icon_state = "oldrcd"
has_ammobar = FALSE
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user)
. = ..()
if(range_check(A,user))
@@ -951,10 +935,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
var/list/display_options = list()
var/color_choice = null
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/obj/item/construction/rld/Initialize(mapload)
. = ..()
for(var/option in original_options)
@@ -1153,10 +1133,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
"Fifth Layer" = 5,
)
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/obj/item/construction/plumbing/Initialize(mapload)
. = ..()
@@ -1410,10 +1386,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
has_ammobar = TRUE
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/obj/item/construction/plumbing/research/set_plumbing_designs()
plumbing_design_types = list(
//category 1 synthesizers
@@ -1440,10 +1412,6 @@ GLOBAL_VAR_INIT(icon_holographic_window, init_holographic_window())
icon_state = "plumberer_service"
has_ammobar = TRUE
-/datum/armor/item_construction
- fire = 100
- acid = 50
-
/obj/item/construction/plumbing/service/set_plumbing_designs()
plumbing_design_types = list(
//category 1 synthesizers
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 2ca038bceba..7e49b7d8015 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -844,10 +844,6 @@
desc = "An ID card that allows access to bots maintenance protocols."
trim = /datum/id_trim/away/old/robo
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/away/deep_storage //deepstorage.dmm space ruin
name = "bunker access ID"
@@ -859,10 +855,6 @@
var/department_name = ACCOUNT_CIV_NAME
registered_age = null
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/departmental_budget/Initialize(mapload)
. = ..()
var/datum/bank_account/B = SSeconomy.get_dep_account(department_ID)
@@ -886,10 +878,6 @@
department_name = ACCOUNT_CAR_NAME
icon_state = "car_budget" //saving up for a new tesla
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/departmental_budget/AltClick(mob/living/user)
registered_account.bank_card_talk(span_warning("Withdrawing is not compatible with this card design."), TRUE) //prevents the vault bank machine being useless and putting money from the budget to your card to go over personal crates
@@ -919,10 +907,6 @@
/// If this is set, will manually override the trim shown for SecHUDs. Intended for admins to VV edit and chameleon ID cards.
var/sechud_icon_state_override = null
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/advanced/Initialize(mapload)
. = ..()
RegisterSignal(src, COMSIG_ITEM_EQUIPPED, PROC_REF(update_intern_status))
@@ -1085,10 +1069,6 @@
assigned_icon_state = "assigned_gold"
wildcard_slots = WILDCARD_LIMIT_GOLD
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/advanced/gold/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_TASTEFULLY_THICK_ID_CARD, ROUNDSTART_TRAIT)
@@ -1100,10 +1080,6 @@
trim = /datum/id_trim/job/captain
registered_age = null
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/advanced/gold/captains_spare/update_label() //so it doesn't change to Captain's ID card (Captain) on a sneeze
if(registered_name == "Captain")
name = "[initial(name)][(!assignment || assignment == "Captain") ? "" : " ([assignment])"]"
@@ -1197,10 +1173,6 @@
registered_name = "Captain"
registered_age = null
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/advanced/black/syndicate_command/captain_id/syndie_spare/update_label()
if(registered_name == "Captain")
name = "[initial(name)][(!assignment || assignment == "Captain") ? "" : " ([assignment])"]"
@@ -1217,10 +1189,6 @@
trim = /datum/id_trim/admin
wildcard_slots = WILDCARD_LIMIT_ADMIN
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/advanced/debug/Initialize(mapload)
. = ..()
registered_account = SSeconomy.get_dep_account(ACCOUNT_CAR)
@@ -1249,10 +1217,6 @@
/// Time left on a card till they can leave.
var/time_left = 0
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/advanced/prisoner/attackby(obj/item/card/id/C, mob/user)
..()
var/list/id_access = C.GetAccess()
@@ -1362,10 +1326,6 @@
/// Weak ref to the ID card we're currently attempting to steal access from.
var/datum/weakref/theft_target
-/datum/armor/card_id
- fire = 100
- acid = 100
-
/obj/item/card/id/advanced/chameleon/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 60235435cdd..14bf5b32df8 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -294,10 +294,6 @@
nocell_state = "defibcompact-nocell"
emagged_state = "defibcompact-emagged"
-/datum/armor/item_defibrillator
- fire = 50
- acid = 50
-
/obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user)
if(slot & user.getBeltSlot())
return TRUE
@@ -324,10 +320,6 @@
/obj/item/defibrillator/compact/combat/loaded
cell_removable = FALSE // Don't let people just have an infinite power cell
-/datum/armor/item_defibrillator
- fire = 50
- acid = 50
-
/obj/item/defibrillator/compact/combat/loaded/Initialize(mapload)
. = ..()
cell = new /obj/item/stock_parts/cell/infinite(src)
@@ -372,10 +364,6 @@
var/recharge_time = 6 SECONDS // Only applies to defibs that do not require a defibrilator. See: do_success()
var/combat = FALSE //If it penetrates armor and gives additional functionality
-/datum/armor/item_defibrillator
- fire = 50
- acid = 50
-
/obj/item/shockpaddles/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_HANDS|ITEM_SLOT_BACK)
@@ -706,10 +694,6 @@
inhand_icon_state = "defibpaddles0"
req_defib = FALSE
-/datum/armor/item_defibrillator
- fire = 50
- acid = 50
-
/obj/item/shockpaddles/cyborg/attack(mob/M, mob/user)
if(iscyborg(user))
var/mob/living/silicon/robot/R = user
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 98414aaefd0..bb0f20cdb02 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -27,12 +27,13 @@
// examines you when you're holding it in your hand, you will be discovered.
//
+#define GLASS_SHEET_USES 5
+#define LIGHTBULB_COST 1
+#define BULB_SHARDS_REQUIRED 4
/obj/item/lightreplacer
-
name = "light replacer"
desc = "A device to automatically replace lights. Refill with broken or working light bulbs, or sheets of glass."
-
icon = 'icons/obj/janitor.dmi'
icon_state = "lightreplacer"
inhand_icon_state = "electronic"
@@ -44,97 +45,95 @@
slot_flags = ITEM_SLOT_BELT
force = 8
- var/max_uses = 20
+ /// How many uses does our light replacer have?
var/uses = 10
- // How much to increase per each glass?
- var/increment = 5
- // How much to take from the glass?
- var/decrement = 1
+ /// The maximum number of lights this replacer can hold
+ var/max_uses = 20
+ /// The light replacer's charge increment (used for adding to cyborg light replacers)
var/charge = 1
- // Eating used bulbs gives us bulb shards
+ /// Eating used bulbs gives us bulb shards. Requires BULB_SHARDS_MAXIMUM to produce a new light.
var/bulb_shards = 0
- // when we get this many shards, we get a free bulb.
- var/shards_required = 4
- // whether it is "bluespace powered" (can be used at a range)
+ /// whether it is "bluespace powered" (can be used at a range)
var/bluespace_toggle = FALSE
/obj/item/lightreplacer/examine(mob/user)
. = ..()
. += status_string()
-/obj/item/lightreplacer/attackby(obj/item/W, mob/user, params)
+/obj/item/lightreplacer/attackby(obj/item/insert, mob/user, params)
- if(istype(W, /obj/item/stack/sheet/glass))
- var/obj/item/stack/sheet/glass/G = W
+ if(istype(insert, /obj/item/stack/sheet/glass))
+ var/obj/item/stack/sheet/glass/glass_to_insert = insert
if(uses >= max_uses)
to_chat(user, span_warning("[src.name] is full."))
return
- else if(G.use(decrement))
- AddUses(increment)
+ else if(glass_to_insert.use(LIGHTBULB_COST))
+ add_uses(GLASS_SHEET_USES)
to_chat(user, span_notice("You insert a piece of glass into \the [src.name]. You have [uses] light\s remaining."))
return
else
to_chat(user, span_warning("You need one sheet of glass to replace lights!"))
- if(istype(W, /obj/item/shard))
+ if(istype(insert, /obj/item/shard))
if(uses >= max_uses)
to_chat(user, span_warning("\The [src] is full."))
return
- if(!user.temporarilyRemoveItemFromInventory(W))
+ if(!user.temporarilyRemoveItemFromInventory(insert))
return
- AddUses(round(increment*0.75))
+ add_uses(round(GLASS_SHEET_USES*0.75))
to_chat(user, span_notice("You insert a shard of glass into \the [src]. You have [uses] light\s remaining."))
- qdel(W)
+ qdel(insert)
return
- if(istype(W, /obj/item/light))
- var/obj/item/light/L = W
- if(L.status == 0) // LIGHT OKAY
+ if(istype(insert, /obj/item/light))
+ var/obj/item/light/light_to_insert = insert
+ if(light_to_insert.status == 0) // LIGHT OKAY
if(uses < max_uses)
- if(!user.temporarilyRemoveItemFromInventory(W))
+ if(!user.temporarilyRemoveItemFromInventory(insert))
return
- AddUses(1)
- qdel(L)
+ add_uses(1)
+ qdel(light_to_insert)
else
- if(!user.temporarilyRemoveItemFromInventory(W))
+ if(!user.temporarilyRemoveItemFromInventory(insert))
return
- to_chat(user, span_notice("You insert [L] into \the [src]."))
- AddShards(1, user)
- qdel(L)
+ to_chat(user, span_notice("You insert [light_to_insert] into \the [src]."))
+ add_shards(1, user)
+ qdel(light_to_insert)
return
- if(istype(W, /obj/item/storage))
- var/obj/item/storage/S = W
+ if(istype(insert, /obj/item/storage))
+ var/obj/item/storage/storage_to_empty = insert
var/found_lightbulbs = FALSE
var/replaced_something = TRUE
- for(var/obj/item/I in S.contents)
- if(istype(I, /obj/item/light))
- var/obj/item/light/L = I
- found_lightbulbs = TRUE
- if(src.uses >= max_uses)
- break
- if(L.status == LIGHT_OK)
- replaced_something = TRUE
- AddUses(1)
- qdel(L)
+ for(var/obj/item/item_to_check in storage_to_empty.contents)
+ if(!istype(item_to_check, /obj/item/light))
+ continue
+ var/obj/item/light/found_light = item_to_check
+ found_lightbulbs = TRUE
+ if(src.uses >= max_uses)
+ break
+ if(found_light.status == LIGHT_OK)
+ replaced_something = TRUE
+ add_uses(1)
+ qdel(found_light)
- else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED)
- replaced_something = TRUE
- AddShards(1, user)
- qdel(L)
+ else if(found_light.status == LIGHT_BROKEN || found_light.status == LIGHT_BURNED)
+ replaced_something = TRUE
+ add_shards(1, user)
+ qdel(found_light)
if(!found_lightbulbs)
- to_chat(user, span_warning("\The [S] contains no bulbs."))
+ to_chat(user, span_warning("\The [storage_to_empty] contains no bulbs."))
return
if(!replaced_something && src.uses == max_uses)
to_chat(user, span_warning("\The [src] is full!"))
return
- to_chat(user, span_notice("You fill \the [src] with lights from \the [S]. " + status_string() + ""))
+ to_chat(user, span_notice("You fill \the [src] with lights from \the [storage_to_empty]. " + status_string() + ""))
/obj/item/lightreplacer/emag_act()
if(obj_flags & EMAGGED)
@@ -143,9 +142,35 @@
/obj/item/lightreplacer/attack_self(mob/user)
for(var/obj/machinery/light/target in user.loc)
- ReplaceLight(target, user)
+ replace_light(target, user)
to_chat(user, status_string())
+/obj/item/lightreplacer/afterattack(atom/target, mob/user, proximity)
+ . = ..()
+ if(!can_use(user))
+ balloon_alert(user, "no more lights!")
+ return
+
+ if(!proximity && !bluespace_toggle)
+ return
+
+ if(!isturf(target))
+ if(istype(target, /obj/machinery/light))
+ if(!proximity && bluespace_toggle)
+ if(replace_light(target, user))
+ user.Beam(target, icon_state = "rped_upgrade", time = 1 SECONDS)
+ playsound(src, 'sound/items/pshoom.ogg', 40, 1)
+ return
+
+ for(var/atom/target_atom in target)
+ if(!can_use(user)) //We check inside the loop in case we're filling multiple lights with one click
+ balloon_alert(user, "no more lights!")
+ return
+ replace_light(target_atom, user)
+ if(bluespace_toggle)
+ user.Beam(target, icon_state = "rped_upgrade", time = 1 SECONDS)
+ playsound(src, 'sound/items/pshoom.ogg', 40, 1)
+
/obj/item/lightreplacer/update_icon_state()
icon_state = "[initial(icon_state)][(obj_flags & EMAGGED ? "-emagged" : "")]"
return ..()
@@ -155,19 +180,19 @@
/obj/item/lightreplacer/proc/Use(mob/user)
playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
- AddUses(-1)
- return 1
+ add_uses(-1)
+ return TRUE
// Negative numbers will subtract
-/obj/item/lightreplacer/proc/AddUses(amount = 1)
+/obj/item/lightreplacer/proc/add_uses(amount = 1)
uses = clamp(uses + amount, 0, max_uses)
-/obj/item/lightreplacer/proc/AddShards(amount = 1, user)
+/obj/item/lightreplacer/proc/add_shards(amount = 1, user)
bulb_shards += amount
- var/new_bulbs = round(bulb_shards / shards_required)
+ var/new_bulbs = round(bulb_shards / BULB_SHARDS_REQUIRED)
if(new_bulbs > 0)
- AddUses(new_bulbs)
- bulb_shards = bulb_shards % shards_required
+ add_uses(new_bulbs)
+ bulb_shards = bulb_shards % BULB_SHARDS_REQUIRED
if(new_bulbs != 0)
to_chat(user, span_notice("\The [src] fabricates a new bulb from the broken glass it has stored. It now has [uses] uses."))
playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE)
@@ -176,19 +201,22 @@
/obj/item/lightreplacer/proc/Charge(mob/user)
charge += 1
if(charge > 3)
- AddUses(1)
+ add_uses(1)
charge = 1
-/obj/item/lightreplacer/proc/ReplaceLight(obj/machinery/light/target, mob/living/U)
+/obj/item/lightreplacer/proc/replace_light(obj/machinery/light/target, mob/living/user)
+
+ if(!istype(target)) //Confirm that it's a light we're testing, because afterattack runs this for everything on a given turf and will runtime
+ return
if(target.status != LIGHT_OK)
- if(CanUse(U))
- if(!Use(U))
- return
- to_chat(U, span_notice("You replace \the [target.fitting] with \the [src]."))
+ if(can_use(user))
+ if(!Use(user))
+ return FALSE
+ to_chat(user, span_notice("You replace \the [target.fitting] with \the [src]."))
if(target.status != LIGHT_EMPTY)
- AddShards(1, U)
+ add_shards(1, user)
target.status = LIGHT_EMPTY
target.update()
@@ -203,14 +231,14 @@
target.on = target.has_power()
target.update()
qdel(L2)
- return
+ return TRUE
else
- to_chat(U, span_warning("\The [src]'s refill light blinks red."))
- return
+ to_chat(user, span_warning("\The [src]'s refill light blinks red."))
+ return FALSE
else
- to_chat(U, span_warning("There is a working [target.fitting] already inserted!"))
- return
+ to_chat(user, span_warning("There is a working [target.fitting] already inserted!"))
+ return FALSE
/obj/item/lightreplacer/proc/Emag()
obj_flags ^= EMAGGED
@@ -221,33 +249,12 @@
name = initial(name)
update_appearance()
-/obj/item/lightreplacer/proc/CanUse(mob/living/user)
+/obj/item/lightreplacer/proc/can_use(mob/living/user)
src.add_fingerprint(user)
if(uses > 0)
- return 1
+ return TRUE
else
- return 0
-
-/obj/item/lightreplacer/afterattack(atom/T, mob/U, proximity)
- . = ..()
- if(!proximity && !bluespace_toggle)
- return
- if(!isturf(T))
- return
-
- var/used = FALSE
- for(var/atom/A in T)
- if(!CanUse(U))
- break
- used = TRUE
- if(istype(A, /obj/machinery/light))
- if(!proximity && bluespace_toggle)
- U.Beam(A, icon_state = "rped_upgrade", time = 1 SECONDS)
- playsound(src, 'sound/items/pshoom.ogg', 40, 1)
- ReplaceLight(A, U)
-
- if(!used)
- to_chat(U, span_warning("\The [src]'s refill light blinks red."))
+ return FALSE
/obj/item/lightreplacer/cyborg/Initialize(mapload)
. = ..()
@@ -261,3 +268,7 @@
/obj/item/lightreplacer/blue/emag_act()
return // balancing against longrange explosions
+
+#undef GLASS_SHEET_USES
+#undef LIGHTBULB_COST
+#undef BULB_SHARDS_REQUIRED
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 89a00ad99c0..a962d9eb46b 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -7,6 +7,7 @@
canhear_range = 2
dog_fashion = null
unscrewed = FALSE
+ item_flags = NO_BLOOD_ON_ITEM
overlay_speaker_idle = "intercom_s"
overlay_speaker_active = "intercom_recieve"
@@ -170,9 +171,6 @@
set_on(current_area.powered(AREA_USAGE_EQUIP)) // set "on" to the equipment power status of our area.
update_appearance()
-/obj/item/radio/intercom/add_blood_DNA(list/blood_dna)
- return FALSE
-
//Created through the autolathe or through deconstructing intercoms. Can be applied to wall to make a new intercom on it!
/obj/item/wallframe/intercom
name = "intercom frame"
diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm
index d8488d8d79d..5f5126983db 100644
--- a/code/game/objects/items/dualsaber.dm
+++ b/code/game/objects/items/dualsaber.dm
@@ -31,6 +31,7 @@
bare_wound_bonus = 20
special_desc_requirement = EXAMINE_CHECK_SYNDICATE_TOY // Skyrat edit
special_desc = "A double bladed energy sword employed by the Syndicate in raids" // Skyrat edit
+ item_flags = NO_BLOOD_ON_ITEM
var/w_class_on = WEIGHT_CLASS_BULKY
var/saber_color = "green"
var/two_hand_force = 34
@@ -64,10 +65,6 @@
START_PROCESSING(SSobj, src)
set_light_on(TRUE)
-
-/obj/item/dualsaber/add_blood_DNA(list/blood_DNA_to_add)
- return FALSE
-
/// Triggered on unwield of two handed item
/// switch hitsounds
/obj/item/dualsaber/proc/on_unwield(obj/item/source, mob/living/carbon/user)
@@ -76,7 +73,6 @@
STOP_PROCESSING(SSobj, src)
set_light_on(FALSE)
-
/obj/item/dualsaber/get_sharpness()
return HAS_TRAIT(src, TRAIT_WIELDED) && sharpness
@@ -197,10 +193,6 @@
/obj/item/dualsaber/purple
possible_colors = list("purple")
-/datum/armor/item_dualsaber
- fire = 100
- acid = 70
-
/obj/item/dualsaber/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_MULTITOOL)
if(!hacked)
diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/fireaxe.dm
index ca0b7303548..196834642bc 100644
--- a/code/game/objects/items/fireaxe.dm
+++ b/code/game/objects/items/fireaxe.dm
@@ -75,10 +75,6 @@
/*
* Metal Hydrogen Axe
*/
-/datum/armor/item_fireaxe
- fire = 100
- acid = 30
-
/obj/item/fireaxe/metal_h2_axe
icon_state = "metalh2_axe0"
base_icon_state = "metalh2_axe"
diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm
index 45aeb93018f..cde81033443 100644
--- a/code/game/objects/items/handcuffs.dm
+++ b/code/game/objects/items/handcuffs.dm
@@ -152,10 +152,6 @@
breakouttime = 30 SECONDS
cuffsound = 'sound/weapons/cablecuff.ogg'
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/handcuffs/cable/Initialize(mapload, new_color)
. = ..()
@@ -274,10 +270,6 @@
cable_color = CABLE_COLOR_WHITE
inhand_icon_state = "coil_white"
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params) //Slapcrafting
if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
@@ -335,10 +327,6 @@
desc = "A pair of broken zipties."
icon_state = "cuff_used"
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
return
@@ -395,10 +383,6 @@
/obj/item/restraints/legcuffs/beartrap/prearmed
armed = TRUE
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/legcuffs/beartrap/Initialize(mapload)
. = ..()
update_appearance()
@@ -488,10 +472,6 @@
item_flags = DROPDEL
flags_1 = NONE
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/legcuffs/beartrap/energy/Initialize(mapload)
. = ..()
addtimer(CALLBACK(src, PROC_REF(dissipate)), 100)
@@ -527,10 +507,6 @@
///Amount of time to knock the target down for once it's hit in deciseconds.
var/knockdown = 0
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, gentle = FALSE, quickstart = TRUE)
if(!..())
return
@@ -583,10 +559,6 @@
breakouttime = 6 SECONDS
custom_price = PAYCHECK_COMMAND * 0.35
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/legcuffs/bola/energy/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_UNCATCHABLE, TRAIT_GENERIC) // People said energy bolas being uncatchable is a feature.
@@ -611,10 +583,6 @@
slowdown = 0
var/datum/status_effect/gonbola_pacify/effectReference
-/datum/armor/restraints_handcuffs
- fire = 50
- acid = 50
-
/obj/item/restraints/legcuffs/bola/gonbola/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
if(iscarbon(hit_atom))
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index cedc9ab4e73..139777dd757 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -75,10 +75,6 @@
custom_materials = list(/datum/material/plastic=80)
custom_price = PAYCHECK_LOWER * 2
-/datum/armor/kitchen_fork
- fire = 50
- acid = 30
-
/obj/item/kitchen/fork/plastic/Initialize(mapload)
. = ..()
AddElement(/datum/element/easily_fragmented, PLASTIC_BREAK_PROBABILITY)
@@ -102,10 +98,6 @@
sharpness = SHARP_EDGED
custom_price = PAYCHECK_LOWER * 2
-/datum/armor/kitchen_fork
- fire = 50
- acid = 30
-
/obj/item/knife/plastic/Initialize(mapload)
. = ..()
AddElement(/datum/element/easily_fragmented, PLASTIC_BREAK_PROBABILITY)
@@ -139,10 +131,6 @@
custom_price = PAYCHECK_CREW * 2
bare_wound_bonus = 14
-/datum/armor/kitchen_fork
- fire = 50
- acid = 30
-
/obj/item/kitchen/rollingpin/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] begins flattening [user.p_their()] head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!"))
return BRUTELOSS
diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm
index 1063fd76323..ace8f16e823 100644
--- a/code/game/objects/items/melee/baton.dm
+++ b/code/game/objects/items/melee/baton.dm
@@ -654,11 +654,6 @@
convertible = FALSE
var/obj/item/assembly/igniter/sparkler
-/datum/armor/baton_security
- bomb = 50
- fire = 80
- acid = 80
-
/obj/item/melee/baton/security/cattleprod/Initialize(mapload)
. = ..()
sparkler = new (src)
@@ -701,11 +696,6 @@
convertible = FALSE
custom_materials = list(/datum/material/iron = 10000, /datum/material/glass = 4000, /datum/material/silver = 10000, /datum/material/gold = 2000)
-/datum/armor/baton_security
- bomb = 50
- fire = 80
- acid = 80
-
/obj/item/melee/baton/security/boomerang/Initialize(mapload)
. = ..()
AddComponent(/datum/component/boomerang, throw_range+2, TRUE)
@@ -729,11 +719,6 @@
inhand_icon_state = "teleprod"
slot_flags = null
-/datum/armor/baton_security
- bomb = 50
- fire = 80
- acid = 80
-
/obj/item/melee/baton/security/cattleprod/teleprod/clumsy_check(mob/living/carbon/human/user)
. = ..()
if(!.)
diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm
index 928adb32587..095e8f46455 100644
--- a/code/game/objects/items/melee/energy.dm
+++ b/code/game/objects/items/melee/energy.dm
@@ -12,6 +12,7 @@
bare_wound_bonus = 20
stealthy_audio = TRUE
w_class = WEIGHT_CLASS_SMALL
+ item_flags = NO_BLOOD_ON_ITEM
/// The color of this energy based sword, for use in editing the icon_state.
var/sword_color_icon
@@ -77,9 +78,6 @@
user.visible_message(span_suicide("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!"))
return (BRUTELOSS|FIRELOSS)
-/obj/item/melee/energy/add_blood_DNA(list/blood_dna)
- return FALSE
-
/obj/item/melee/energy/process(delta_time)
if(heat)
open_flame()
@@ -160,10 +158,6 @@
active_throwforce = 30
active_w_class = WEIGHT_CLASS_HUGE
-/datum/armor/melee_energy
- fire = 100
- acid = 30
-
/obj/item/melee/energy/axe/make_transformable()
AddComponent(/datum/component/transforming, \
force_on = active_force, \
@@ -194,10 +188,6 @@
block_chance = 50
embedding = list("embed_chance" = 75, "impact_pain_mult" = 10)
-/datum/armor/melee_energy
- fire = 100
- acid = 30
-
/obj/item/melee/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
if(blade_active)
return ..()
@@ -209,10 +199,6 @@
/// The cell cost of hitting something.
var/hitcost = 50
-/datum/armor/melee_energy
- fire = 100
- acid = 30
-
/obj/item/melee/energy/sword/cyborg/attack(mob/target, mob/living/silicon/robot/user)
if(!user.cell)
return
@@ -262,10 +248,6 @@
var/hacked = FALSE
var/hacked_color
-/datum/armor/melee_energy
- fire = 100
- acid = 30
-
/obj/item/melee/energy/sword/saber/Initialize(mapload)
. = ..()
if(!sword_color_icon && LAZYLEN(possible_sword_colors))
@@ -301,10 +283,6 @@
/obj/item/melee/energy/sword/saber/purple
sword_color_icon = "purple"
-/datum/armor/melee_energy
- fire = 100
- acid = 30
-
/obj/item/melee/energy/sword/saber/multitool_act(mob/living/user, obj/item/tool)
if(hacked)
to_chat(user, span_warning("It's already fabulous!"))
@@ -348,10 +326,6 @@
var/datum/effect_system/spark_spread/spark_system
//Most of the other special functions are handled in their own files. aka special snowflake code so kewl
-/datum/armor/melee_energy
- fire = 100
- acid = 30
-
/obj/item/melee/energy/blade/Initialize(mapload)
. = ..()
spark_system = new /datum/effect_system/spark_spread()
diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm
index cb5b3b9d1e4..c73eb2c6b84 100644
--- a/code/game/objects/items/melee/misc.dm
+++ b/code/game/objects/items/melee/misc.dm
@@ -195,6 +195,7 @@
force = 0.001
armour_penetration = 1000
force_string = "INFINITE"
+ item_flags = NEEDS_PERMIT|NO_BLOOD_ON_ITEM
var/obj/machinery/power/supermatter_crystal/shard
var/balanced = 1
@@ -282,9 +283,6 @@
)
shard.Bump(turf)
-/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna)
- return FALSE
-
/obj/item/melee/curator_whip
name = "curator's whip"
desc = "Somewhat eccentric and outdated, it still stings like hell to be hit by."
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index f50230ab2c5..82fe4ffae96 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -37,6 +37,11 @@
toggle_on()
user.visible_message(span_notice("[user] [active ? "" : "de"]activates [user.p_their()] pinpointer."), span_notice("You [active ? "" : "de"]activate your pinpointer."))
+/obj/item/pinpointer/examine(mob/user)
+ . = ..()
+ if(target)
+ . += "It is currently tracking [target]."
+
/obj/item/pinpointer/proc/toggle_on()
active = !active
playsound(src, 'sound/items/screwdriver2.ogg', 50, TRUE)
diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm
index 187162f480c..43c1cb6d355 100644
--- a/code/game/objects/items/pneumaticCannon.dm
+++ b/code/game/objects/items/pneumaticCannon.dm
@@ -312,10 +312,6 @@
clumsyCheck = FALSE
var/static/list/pie_typecache = typecacheof(/obj/item/food/pie)
-/datum/armor/item_pneumatic_cannon
- fire = 60
- acid = 50
-
/obj/item/pneumatic_cannon/pie/Initialize(mapload)
. = ..()
allowed_typecache = pie_typecache
diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm
index c3e06b64d94..b176d2b6823 100644
--- a/code/game/objects/items/puzzle_pieces.dm
+++ b/code/game/objects/items/puzzle_pieces.dm
@@ -88,16 +88,6 @@
/obj/machinery/door/puzzle/keycard
desc = "This door only opens when a keycard is swiped. It looks virtually indestructible."
-/datum/armor/door_puzzle
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/machinery/door/puzzle/keycard/attackby(obj/item/attacking_item, mob/user, params)
. = ..()
if(!istype(attacking_item, /obj/item/keycard))
@@ -120,16 +110,6 @@
/obj/machinery/door/puzzle/light
desc = "This door only opens when a linked mechanism is powered. It looks virtually indestructible."
-/datum/armor/door_puzzle
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/machinery/door/puzzle/light/Initialize(mapload)
. = ..()
RegisterSignal(SSdcs, COMSIG_GLOB_LIGHT_MECHANISM_COMPLETED, PROC_REF(check_mechanism))
@@ -171,16 +151,6 @@
var/reward = /obj/item/food/cookie
var/claimed = FALSE
-/datum/armor/door_puzzle
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/item/pressure_plate/hologrid/Initialize(mapload)
. = ..()
if(undertile_pressureplate)
diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm
index 0d4020961d6..cf487dfcd3c 100644
--- a/code/game/objects/items/shields.dm
+++ b/code/game/objects/items/shields.dm
@@ -110,14 +110,6 @@
shield_break_sound = 'sound/effects/glassbr3.ogg'
shield_break_leftover = /obj/item/shard
-/datum/armor/item_shield
- melee = 50
- bullet = 50
- laser = 50
- bomb = 30
- fire = 80
- acid = 70
-
/obj/item/shield/riot/attackby(obj/item/attackby_item, mob/user, params)
if(istype(attackby_item, /obj/item/melee/baton))
if(!COOLDOWN_FINISHED(src, baton_bash))
@@ -144,14 +136,6 @@
inhand_icon_state = "flashshield"
var/obj/item/assembly/flash/handheld/embedded_flash = /obj/item/assembly/flash/handheld
-/datum/armor/item_shield
- melee = 50
- bullet = 50
- laser = 50
- bomb = 30
- fire = 80
- acid = 70
-
/obj/item/shield/riot/flash/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
@@ -269,14 +253,6 @@
/// Whether clumsy people can transform this without side effects.
var/can_clumsy_use = FALSE
-/datum/armor/item_shield
- melee = 50
- bullet = 50
- laser = 50
- bomb = 30
- fire = 80
- acid = 70
-
/obj/item/shield/energy/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -321,14 +297,6 @@
/// Whether the shield is extended and protecting the user..
var/extended = FALSE
-/datum/armor/item_shield
- melee = 50
- bullet = 50
- laser = 50
- bomb = 30
- fire = 80
- acid = 70
-
/obj/item/shield/riot/tele/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm
index 6b3e3bba249..6d03ad595d6 100644
--- a/code/game/objects/items/singularityhammer.dm
+++ b/code/game/objects/items/singularityhammer.dm
@@ -90,14 +90,6 @@
throw_range = 7
w_class = WEIGHT_CLASS_HUGE
-/datum/armor/item_singularityhammer
- melee = 50
- bullet = 50
- laser = 50
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/mjollnir/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, \
diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm
index f199f70839c..07d5b926827 100644
--- a/code/game/objects/items/spear.dm
+++ b/code/game/objects/items/spear.dm
@@ -107,10 +107,6 @@
icon_prefix = "spearbomb"
var/obj/item/grenade/explosive = null
-/datum/armor/item_spear
- fire = 50
- acid = 30
-
/obj/item/spear/explosive/Initialize(mapload)
. = ..()
set_explosive(new /obj/item/grenade/iedcasing/spawned()) //For admin-spawned explosive lances
@@ -189,10 +185,6 @@
force_unwielded = 15
force_wielded = 25
-/datum/armor/item_spear
- fire = 50
- acid = 30
-
/obj/item/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity)
. = ..()
if(!proximity)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 61e08a54313..ace9849e80d 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -44,10 +44,6 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
/obj/item/stack/sheet/glass/fifty
amount = 50
-/datum/armor/sheet_glass
- fire = 50
- acid = 100
-
/obj/item/stack/sheet/glass/get_main_recipes()
. = ..()
. += GLOB.glass_recipes
@@ -181,10 +177,6 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
/// The amount of energy this draws from the glass source per stack unit.
var/glacost = 500
-/datum/armor/sheet_rglass
- fire = 70
- acid = 100
-
/obj/item/stack/sheet/rglass/cyborg/get_amount()
return min(round(source.energy / cost), round(glasource.energy / glacost))
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index d25c1725cd4..a903ae2bb08 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -24,8 +24,8 @@ Mineral Sheets
*/
GLOBAL_LIST_INIT(sandstone_recipes, list ( \
- new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 10, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \
- new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
+ new/datum/stack_recipe("pile of dirt", /obj/machinery/hydroponics/soil, 3, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \
+ new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("Breakdown into sand", /obj/item/stack/ore/glass, 1, one_per_turf = FALSE, on_solid_ground = TRUE, category = CAT_MISC) \
))
@@ -63,7 +63,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
merge_type = /obj/item/stack/sheet/mineral/sandbags
GLOBAL_LIST_INIT(sandbag_recipes, list ( \
- new/datum/stack_recipe("sandbags", /obj/structure/barricade/sandbags, 1, time = 25, one_per_turf = 1, on_solid_ground = 1, category = CAT_STRUCTURE), \
+ new/datum/stack_recipe("sandbags", /obj/structure/barricade/sandbags, 1, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \
))
/obj/item/stack/sheet/mineral/sandbags/get_main_recipes()
@@ -106,7 +106,7 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
walltype = /turf/closed/wall/mineral/diamond
GLOBAL_LIST_INIT(diamond_recipes, list ( \
- new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, one_per_turf = 1, on_solid_ground = 1, applies_mats = TRUE, category = CAT_DOORS), \
+ new/datum/stack_recipe("diamond door", /obj/structure/mineral_door/transparent/diamond, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("diamond tile", /obj/item/stack/tile/mineral/diamond, 1, 4, 20, category = CAT_TILES), \
))
@@ -131,7 +131,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \
walltype = /turf/closed/wall/mineral/uranium
GLOBAL_LIST_INIT(uranium_recipes, list ( \
- new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, one_per_turf = 1, on_solid_ground = 1, applies_mats = TRUE, category = CAT_DOORS), \
+ new/datum/stack_recipe("uranium door", /obj/structure/mineral_door/uranium, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20, category = CAT_TILES), \
))
@@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \
return TOXLOSS//dont you kids know that stuff is toxic?
GLOBAL_LIST_INIT(plasma_recipes, list ( \
- new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_solid_ground = 1, applies_mats = TRUE, category = CAT_DOORS), \
+ new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20, category = CAT_TILES), \
))
@@ -196,7 +196,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
walltype = /turf/closed/wall/mineral/gold
GLOBAL_LIST_INIT(gold_recipes, list ( \
- new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_solid_ground = 1, applies_mats = TRUE, category = CAT_DOORS), \
+ new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("gold tile", /obj/item/stack/tile/mineral/gold, 1, 4, 20, category = CAT_TILES), \
new/datum/stack_recipe("blank plaque", /obj/item/plaque, 1, category = CAT_FURNITURE), \
new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/costume/crown, 5, category = CAT_CLOTHING), \
@@ -224,7 +224,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
walltype = /turf/closed/wall/mineral/silver
GLOBAL_LIST_INIT(silver_recipes, list ( \
- new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_solid_ground = 1, applies_mats = TRUE, category = CAT_DOORS), \
+ new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("silver tile", /obj/item/stack/tile/mineral/silver, 1, 4, 20, category = CAT_TILES), \
))
@@ -415,10 +415,10 @@ GLOBAL_LIST_INIT(adamantine_recipes, list(
walltype = /turf/closed/wall/mineral/abductor
GLOBAL_LIST_INIT(abductor_recipes, list ( \
- new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = 1, on_solid_ground = 1, category = CAT_FURNITURE), \
- new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 15, one_per_turf = 1, on_solid_ground = 1, category = CAT_FURNITURE), \
- new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 15, one_per_turf = 1, on_solid_ground = 1, category = CAT_FURNITURE), \
- new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 20, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
+ new/datum/stack_recipe("alien bed", /obj/structure/bed/abductor, 2, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
+ new/datum/stack_recipe("alien locker", /obj/structure/closet/abductor, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
+ new/datum/stack_recipe("alien table frame", /obj/structure/table_frame/abductor, 1, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
+ new/datum/stack_recipe("alien airlock assembly", /obj/structure/door_assembly/door_assembly_abductor, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
null, \
new/datum/stack_recipe("alien floor tile", /obj/item/stack/tile/mineral/abductor, 1, 4, 20, category = CAT_TILES), \
))
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index b9d32c7e334..c8613d24d43 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -81,24 +81,24 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("machine frame", /obj/structure/frame/machine, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
null, \
new /datum/stack_recipe_list("airlock assemblies", list( \
- new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("public airlock assembly", /obj/structure/door_assembly/door_assembly_public, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("science airlock assembly", /obj/structure/door_assembly/door_assembly_science, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("hydroponics airlock assembly", /obj/structure/door_assembly/door_assembly_hydro, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("virology airlock assembly", /obj/structure/door_assembly/door_assembly_viro, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("external maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_extmai, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
- new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS), \
+ new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("public airlock assembly", /obj/structure/door_assembly/door_assembly_public, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("science airlock assembly", /obj/structure/door_assembly/door_assembly_science, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("hydroponics airlock assembly", /obj/structure/door_assembly/door_assembly_hydro, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("virology airlock assembly", /obj/structure/door_assembly/door_assembly_viro, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("external maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_extmai, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
+ new /datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
)), \
null, \
new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \
@@ -116,7 +116,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2, category = CAT_EQUIPMENT), \
new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1, category = CAT_EQUIPMENT), \
null, \
- new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
+ new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), \
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 2, time = 10 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \
new/datum/stack_recipe("desk bell", /obj/structure/desk_bell, 2, time = 3 SECONDS, category = CAT_FURNITURE), \
new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_EQUIPMENT), \
@@ -245,8 +245,8 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
new/datum/stack_recipe("Large Gas Tank", /obj/structure/tank_frame, 4, time=1 SECONDS, one_per_turf=TRUE, category = CAT_ATMOSPHERIC),
null,
new /datum/stack_recipe_list("airlock assemblies", list( \
- new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS),
- new/datum/stack_recipe("vault door assembly", /obj/structure/door_assembly/door_assembly_vault, 6, time = 5 SECONDS, one_per_turf = 1, on_solid_ground = 1, category = CAT_DOORS),
+ new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS),
+ new/datum/stack_recipe("vault door assembly", /obj/structure/door_assembly/door_assembly_vault, 6, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS),
)), \
))
@@ -457,9 +457,6 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
grind_results = list(/datum/reagent/cellulose = 20)
-/datum/armor/mineral_bamboo
- fire = 50
-
/obj/item/stack/sheet/cloth/get_main_recipes()
. = ..()
. += GLOB.cloth_recipes
@@ -490,9 +487,6 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \
drop_sound = 'sound/items/handling/cloth_drop.ogg'
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
-/datum/armor/mineral_bamboo
- fire = 50
-
/obj/item/stack/sheet/durathread/get_main_recipes()
. = ..()
. += GLOB.durathread_recipes
@@ -591,9 +585,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
null, \
))
-/datum/armor/mineral_bamboo
- fire = 50
-
/obj/item/stack/sheet/cardboard //BubbleWrap //it's cardboard you fuck
name = "cardboard"
desc = "Large sheets of card, like boxes folded flat."
@@ -616,9 +607,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
/obj/item/stack/sheet/cardboard/fifty
amount = 50
-/datum/armor/mineral_bamboo
- fire = 50
-
/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage))
var/atom/droploc = drop_location()
@@ -680,9 +668,6 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
walltype = /turf/closed/wall/mineral/bronze
has_unique_girder = TRUE
-/datum/armor/mineral_bamboo
- fire = 50
-
/obj/item/stack/sheet/bronze/get_main_recipes()
. = ..()
. += GLOB.bronze_recipes
@@ -765,9 +750,6 @@ GLOBAL_LIST_INIT(plastic_recipes, list(
/obj/item/stack/sheet/plastic/five
amount = 5
-/datum/armor/mineral_bamboo
- fire = 50
-
/obj/item/stack/sheet/plastic/get_main_recipes()
. = ..()
. += GLOB.plastic_recipes
@@ -788,9 +770,6 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
grind_results = list(/datum/reagent/cellulose = 20)
material_type = /datum/material/paper
-/datum/armor/mineral_bamboo
- fire = 50
-
/obj/item/stack/sheet/paperframes/get_main_recipes()
. = ..()
. += GLOB.paperframe_recipes
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 77c71fcca12..dcbb28f504f 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -83,10 +83,6 @@
inhand_icon_state = "giftbag"
w_class = WEIGHT_CLASS_BULKY
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/santabag/Initialize(mapload)
. = ..()
regenerate_presents()
@@ -232,10 +228,6 @@
worn_icon = 'icons/mob/clothing/back/ethereal.dmi'
icon_state = "saddlepack"
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/saddlepack/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 26
@@ -256,10 +248,6 @@
icon_state = "satchel-leather"
inhand_icon_state = "satchel"
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/satchel/leather/withwallet/PopulateContents()
new /obj/item/storage/wallet/random(src)
@@ -334,10 +322,6 @@
inhand_icon_state = "satchel-flat"
w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself.
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/satchel/flat/Initialize(mapload)
. = ..()
AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_MAXIMUM, use_anchor = TRUE) // SKYRAT EDIT - Ghosts can't see smuggler's satchels
@@ -369,10 +353,6 @@
//slowdown = 1 //ORIGINAL
slowdown = 0.5 //SKYRAT EDIT CHANGE
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/Initialize(mapload)
. = ..()
atom_storage.max_total_storage = 30
@@ -387,10 +367,6 @@
slowdown = 2
max_integrity = 100
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/cursed/Initialize(mapload)
. = ..()
AddComponent(/datum/component/curse_of_hunger, add_dropdel = TRUE)
@@ -449,10 +425,6 @@
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/med/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
@@ -477,10 +449,6 @@
name = "surgical duffel bag"
desc = "A large duffel bag for holding extra supplies - this one has a material inlay with space for various sharp-looking tools."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/sec/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
@@ -508,10 +476,6 @@
inhand_icon_state = "duffel-drone"
resistance_flags = FIRE_PROOF
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
new /obj/item/screwdriver(src)
new /obj/item/wrench(src)
@@ -527,10 +491,6 @@
icon_state = "duffel-clown"
inhand_icon_state = "duffel-clown"
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/clown/cream_pie/PopulateContents()
for(var/i in 1 to 10)
new /obj/item/food/pie/cream(src)
@@ -548,10 +508,6 @@
special_desc_requirement = EXAMINE_CHECK_SYNDICATE // Skyrat edit
special_desc = "This duffel bag has the Syndicate logo stiched on the inside. It appears to be made from lighter yet sturdier materials." // Skyrat edit
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/Initialize(mapload)
. = ..()
atom_storage.silent = TRUE
@@ -561,10 +517,6 @@
icon_state = "duffel-syndieammo"
inhand_icon_state = "duffel-syndieammo"
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/hitman/PopulateContents()
new /obj/item/clothing/under/suit/black(src)
new /obj/item/clothing/neck/tie/red/hitman(src)
@@ -587,10 +539,6 @@
icon_state = "duffel-syndiemed"
inhand_icon_state = "duffel-syndiemed"
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/surgery/PopulateContents()
new /obj/item/scalpel(src)
new /obj/item/hemostat(src)
@@ -615,10 +563,6 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun
desc = "A large duffel bag, packed to the brim with Bulldog shotgun magazines."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/ammo/shotgun/PopulateContents()
for(var/i in 1 to 6)
new /obj/item/ammo_box/magazine/m12g(src)
@@ -629,10 +573,6 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg
desc = "A large duffel bag, packed to the brim with C-20r magazines."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/ammo/smg/PopulateContents()
for(var/i in 1 to 9)
new /obj/item/ammo_box/magazine/smgm45(src)
@@ -640,10 +580,6 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/mech
desc = "A large duffel bag, packed to the brim with various exosuit ammo."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/ammo/mech/PopulateContents()
new /obj/item/mecha_ammo/scattershot(src)
new /obj/item/mecha_ammo/scattershot(src)
@@ -654,10 +590,6 @@
/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler
desc = "A large duffel bag, packed to the brim with various exosuit ammo."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler/PopulateContents()
new /obj/item/mecha_ammo/lmg(src)
new /obj/item/mecha_ammo/lmg(src)
@@ -672,10 +604,6 @@
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle
desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/c20rbundle/PopulateContents()
new /obj/item/ammo_box/magazine/smgm45(src)
new /obj/item/ammo_box/magazine/smgm45(src)
@@ -685,10 +613,6 @@
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle
desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/bulldogbundle/PopulateContents()
new /obj/item/gun/ballistic/shotgun/bulldog(src)
new /obj/item/ammo_box/magazine/m12g(src)
@@ -698,10 +622,6 @@
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle
desc = "A large duffel bag containing a medical equipment, a Donksoft LMG, a big jumbo box of riot darts, and a magboot MODsuit module."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle/PopulateContents()
new /obj/item/mod/module/magboot(src)
new /obj/item/storage/medkit/tactical(src)
@@ -711,10 +631,6 @@
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
desc = "A large duffel bag containing deadly chemicals, a handheld chem sprayer, Bioterror foam grenade, a Donksoft assault rifle, box of riot grade darts, a dart pistol, and a box of syringes."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents()
new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src)
new /obj/item/storage/box/syndie_kit/chemical(src)
@@ -737,10 +653,6 @@
/obj/item/storage/backpack/duffelbag/syndie/firestarter
desc = "A large duffel bag containing a New Russian pyro backpack sprayer, Elite MODsuit, a Stechkin APS pistol, minibomb, ammo, and other equipment."
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/syndie/firestarter/PopulateContents()
new /obj/item/clothing/under/syndicate/soviet(src)
new /obj/item/mod/control/pre_equipped/elite/flamethrower(src)
@@ -782,10 +694,6 @@
icon_state = "duffel-explorer"
inhand_icon_state = "duffel-explorer"
-/datum/armor/backpack_holding
- fire = 60
- acid = 50
-
/obj/item/storage/backpack/duffelbag/mining_conscript/PopulateContents()
new /obj/item/clothing/glasses/meson(src)
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm
index a8e19107075..c405b8f25a8 100644
--- a/code/game/objects/items/storage/book.dm
+++ b/code/game/objects/items/storage/book.dm
@@ -264,6 +264,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
name = "Syndicate Tome"
attack_verb_continuous = list("attacks", "burns", "blesses", "damns", "scorches")
attack_verb_simple = list("attack", "burn", "bless", "damn", "scorch")
+ item_flags = NO_BLOOD_ON_ITEM
var/uses = 1
var/ownername
@@ -287,6 +288,3 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "burning",
return ..()
else
return ..(M,user,heal_mode = FALSE)
-
-/obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna)
- return FALSE
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 35881b372e4..782ca62cf1c 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -133,10 +133,6 @@
var/obj/item/watertank/tank
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/reagent_containers/spray/mister/Initialize(mapload)
. = ..()
tank = loc
@@ -161,10 +157,6 @@
inhand_icon_state = "waterbackpackjani"
custom_price = PAYCHECK_CREW * 5
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/watertank/janitor/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/space_cleaner, 500)
@@ -181,10 +173,6 @@
possible_transfer_amounts = list(5, 10)
current_range = 5
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/watertank/janitor/make_noz()
return new /obj/item/reagent_containers/spray/mister/janitor(src)
@@ -201,10 +189,6 @@
custom_price = PAYCHECK_CREW * 2
volume = 1000
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/watertank/pepperspray/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 1000)
@@ -221,10 +205,6 @@
possible_transfer_amounts = list(5, 10)
current_range = 6
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/watertank/pepperspray/make_noz()
return new /obj/item/reagent_containers/spray/mister/pepperspray(src)
@@ -246,10 +226,6 @@
volume = 200
slowdown = 0
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/watertank/atmos/Initialize(mapload)
. = ..()
reagents.add_reagent(/datum/reagent/water, 200)
@@ -286,10 +262,6 @@
var/metal_synthesis_cooldown = 0
COOLDOWN_DECLARE(resin_cooldown)
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/extinguisher/mini/nozzle/Initialize(mapload)
. = ..()
tank = loc
@@ -397,10 +369,6 @@
pass_flags = PASSTABLE
anchored = TRUE
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/effect/resin_container/proc/Smoke()
var/datum/effect_system/fluid_spread/foam/metal/resin/foaming = new
foaming.set_up(4, holder = src, location = loc)
@@ -441,10 +409,6 @@
fill_icon_thresholds = list(0, 15, 60)
fill_icon_state = "backpack"
-/datum/armor/item_watertank
- fire = 100
- acid = 30
-
/obj/item/reagent_containers/chemtank/ui_action_click()
toggle_injection()
diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm
index b53fc626f00..220a8688691 100644
--- a/code/game/objects/items/teleportation.dm
+++ b/code/game/objects/items/teleportation.dm
@@ -343,11 +343,6 @@
//How far the emergency teleport checks for a safe position
var/parallel_teleport_distance = 3
-/datum/armor/item_hand_tele
- bomb = 30
- fire = 100
- acid = 100
-
/obj/item/syndicate_teleporter/Initialize(mapload)
. = ..()
START_PROCESSING(SSobj, src)
@@ -517,11 +512,6 @@
/obj/item/storage/box/syndie_kit/syndicate_teleporter
name = "syndicate teleporter kit"
-/datum/armor/item_hand_tele
- bomb = 30
- fire = 100
- acid = 100
-
/obj/item/storage/box/syndie_kit/syndicate_teleporter/PopulateContents()
new /obj/item/syndicate_teleporter(src)
new /obj/item/paper/syndicate_teleporter(src)
diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm
index 94eeff6e96e..f4c730782f9 100644
--- a/code/game/objects/items/tools/crowbar.dm
+++ b/code/game/objects/items/tools/crowbar.dm
@@ -70,10 +70,6 @@
desc = "It's a bulky crowbar. It almost seems deliberately designed to not be able to fit inside of a backpack."
w_class = WEIGHT_CLASS_BULKY
-/datum/armor/item_crowbar
- fire = 50
- acid = 30
-
/obj/item/crowbar/large/heavy //from space ruin
name = "heavy crowbar"
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big. It feels oddly heavy.."
@@ -87,10 +83,6 @@
throwforce = 10
throw_speed = 2
-/datum/armor/item_crowbar
- fire = 50
- acid = 30
-
/obj/item/crowbar/large/old/Initialize(mapload)
. = ..()
if(prob(50))
@@ -111,10 +103,6 @@
toolspeed = 0.7
force_opens = TRUE
-/datum/armor/item_crowbar
- fire = 50
- acid = 30
-
/obj/item/crowbar/power/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -146,10 +134,6 @@
toolspeed = 0.5
force_opens = TRUE
-/datum/armor/item_crowbar
- fire = 50
- acid = 30
-
/obj/item/crowbar/power/examine()
. = ..()
. += " It's fitted with a [tool_behaviour == TOOL_CROWBAR ? "prying" : "cutting"] head."
diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm
index 6d302be3640..5f7e170041b 100644
--- a/code/game/objects/items/tools/screwdriver.dm
+++ b/code/game/objects/items/tools/screwdriver.dm
@@ -72,10 +72,6 @@
greyscale_config_inhand_left = null
greyscale_config_inhand_right = null
-/datum/armor/item_screwdriver
- fire = 50
- acid = 30
-
/obj/item/screwdriver/abductor/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_alien")
@@ -105,10 +101,6 @@
greyscale_config_inhand_left = null
greyscale_config_inhand_right = null
-/datum/armor/item_screwdriver
- fire = 50
- acid = 30
-
/obj/item/screwdriver/power/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -157,10 +149,6 @@
/obj/item/screwdriver/red
random_color = FALSE
-/datum/armor/item_screwdriver
- fire = 50
- acid = 30
-
/obj/item/screwdriver/red/Initialize(mapload)
. = ..()
set_greyscale(colors=list(screwdriver_colors["red"]))
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 88600ff793d..bb1f72fba2d 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -349,10 +349,6 @@
max_fuel = 40
custom_materials = list(/datum/material/glass=60)
-/datum/armor/item_weldingtool
- fire = 100
- acid = 30
-
/obj/item/weldingtool/largetank/flamethrower_screwdriver()
return
@@ -366,10 +362,6 @@
icon_state = "indwelder_cyborg"
toolspeed = 0.5
-/datum/armor/item_weldingtool
- fire = 100
- acid = 30
-
/obj/item/weldingtool/largetank/cyborg/cyborg_unequip(mob/user)
if(!isOn())
return
@@ -385,10 +377,6 @@
custom_materials = list(/datum/material/iron=30, /datum/material/glass=10)
change_icons = FALSE
-/datum/armor/item_weldingtool
- fire = 100
- acid = 30
-
/obj/item/weldingtool/mini/flamethrower_screwdriver()
return
@@ -406,10 +394,6 @@
light_range = 0
change_icons = FALSE
-/datum/armor/item_weldingtool
- fire = 100
- acid = 30
-
/obj/item/weldingtool/abductor/process()
if(get_fuel() <= max_fuel)
reagents.add_reagent(/datum/reagent/fuel, 1)
@@ -438,10 +422,6 @@
var/last_gen = 0
var/nextrefueltick = 0
-/datum/armor/item_weldingtool
- fire = 100
- acid = 30
-
/obj/item/weldingtool/experimental/process()
..()
if(get_fuel() < max_fuel && nextrefueltick < world.time)
diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm
index 6975ecdbac4..e5c609bad62 100644
--- a/code/game/objects/items/tools/wrench.dm
+++ b/code/game/objects/items/tools/wrench.dm
@@ -59,10 +59,6 @@
///var to hold the name of the person who suicided
var/suicider
-/datum/armor/item_wrench
- fire = 50
- acid = 30
-
/obj/item/wrench/medical/examine(mob/user)
. = ..()
if(suicider)
@@ -105,10 +101,6 @@
tool_behaviour = null
toolspeed = null
-/datum/armor/item_wrench
- fire = 50
- acid = 30
-
/obj/item/wrench/combat/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm
index 24f01dd8aad..9ba205ecbb7 100644
--- a/code/game/objects/items/weaponry.dm
+++ b/code/game/objects/items/weaponry.dm
@@ -55,10 +55,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
-/datum/armor/item_banhammer
- fire = 100
- acid = 70
-
/obj/item/sord/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is trying to impale [user.p_them()]self with [src]! It might be a suicide attempt if it weren't so shitty."), \
span_suicide("You try to impale yourself with [src], but it's USELESS..."))
@@ -114,10 +110,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
throw_range = 5
armour_penetration = 35
-/datum/armor/item_claymore
- fire = 100
- acid = 50
-
/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS
desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim."
flags_1 = CONDUCT_1
@@ -312,10 +304,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_continuous = list("hits", "bludgeons", "whacks", "bonks")
attack_verb_simple = list("hit", "bludgeon", "whack", "bonk")
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/wirerod/Initialize(mapload)
. = ..()
@@ -418,10 +406,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// Whether the switchblade starts extended or not.
var/start_extended = FALSE
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/switchblade/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_HANDS)
@@ -471,10 +455,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_simple = list("call", "ring")
hitsound = 'sound/weapons/ring.ogg'
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/phone/suicide_act(mob/living/user)
if(locate(/obj/structure/chair/stool) in user.loc)
user.visible_message(span_suicide("[user] begins to tie a noose with [src]'s cord! It looks like [user.p_theyre()] trying to commit suicide!"))
@@ -508,10 +488,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/iron = 600)
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/cane/white/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -582,10 +558,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/ectoplasm/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] is inhaling [src]! It looks like [user.p_theyre()] trying to visit the astral plane!"))
return OXYLOSS
@@ -618,10 +590,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
tool_behaviour = TOOL_SAW
toolspeed = 1
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/mounted_chainsaw/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
@@ -651,10 +619,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
attack_verb_simple = list("bust")
var/impressiveness = 45
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/statuebust/Initialize(mapload)
. = ..()
AddElement(/datum/element/art, impressiveness)
@@ -703,10 +667,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
///The vehicle counterpart for the board
var/board_item_type = /obj/vehicle/ridden/scooter/skateboard
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/melee/skateboard/attack_self(mob/user)
var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasn't my fault
S.buckle_mob(user)
@@ -765,10 +725,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// List of all thrown datums we sent.
var/list/thrown_datums = list()
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/melee/baseball_bat/Initialize(mapload)
. = ..()
if(prob(1))
@@ -887,10 +843,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
throwforce = 15
mob_thrower = TRUE
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers
playsound(src, pick('sound/weapons/effects/batreflect1.ogg', 'sound/weapons/effects/batreflect2.ogg'), 50, TRUE)
return TRUE
@@ -916,10 +868,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// How much extra damage the fly swatter does against mobs it is strong against
var/extra_strength_damage = 24
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/melee/flyswatter/Initialize(mapload)
. = ..()
splattable = typecacheof(list(
@@ -977,10 +925,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
name = "\improper ACME Extendo-Hand"
desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners."
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user, params)
var/dist = get_dist(M, user)
if(dist < min_reach)
@@ -1050,10 +994,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/// The previous target we attacked
var/datum/weakref/previous_target
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/highfrequencyblade/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, \
@@ -1145,10 +1085,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
layer = ABOVE_ALL_MOB_LAYER
plane = ABOVE_GAME_PLANE
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/effect/temp_visual/slash/Initialize(mapload, atom/target, x_slashed, y_slashed, slash_color)
. = ..()
if(!target)
@@ -1173,10 +1109,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
wound_bonus = 20
bare_wound_bonus = 25
-/datum/armor/item_katana
- fire = 100
- acid = 50
-
/obj/item/highfrequencyblade/wizard/attack_self(mob/user, modifiers)
if(!IS_WIZARD(user))
balloon_alert(user, "you're too weak!")
diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm
index 4f2235f53bf..4698c8469d2 100644
--- a/code/game/objects/structures/crates_lockers/crates/secure.dm
+++ b/code/game/objects/structures/crates_lockers/crates/secure.dm
@@ -55,14 +55,6 @@
name = "secure hydroponics crate"
icon_state = "hydrosecurecrate"
-/datum/armor/crate_secure
- melee = 30
- bullet = 50
- laser = 50
- energy = 100
- fire = 80
- acid = 80
-
/obj/structure/closet/crate/secure/freezer //for consistency with other "freezer" closets/crates
desc = "An insulated crate with a lock on it, used to secure perishables."
name = "secure kitchen crate"
@@ -74,14 +66,6 @@
req_access = list(ACCESS_KITCHEN)
tamperproof = 10
-/datum/armor/crate_secure
- melee = 30
- bullet = 50
- laser = 50
- energy = 100
- fire = 80
- acid = 80
-
/obj/structure/closet/crate/secure/freezer/pizza/PopulateContents()
. = ..()
new /obj/effect/spawner/random/food_or_drink/pizzaparty(src)
@@ -109,14 +93,6 @@
///Is the crate being bought by a person, or a budget card?
var/department_purchase = FALSE
-/datum/armor/crate_secure
- melee = 30
- bullet = 50
- laser = 50
- energy = 100
- fire = 80
- acid = 80
-
/obj/structure/closet/crate/secure/owned/examine(mob/user)
. = ..()
. += span_notice("It's locked with a privacy lock, and can only be unlocked by the buyer's ID.")
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index 6795bb7f7a4..785eeb330f3 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -233,12 +233,6 @@
var/obj/item/electronics/airlock/electronics
-/datum/armor/structure_displaycase
- melee = 30
- bomb = 10
- fire = 70
- acid = 100
-
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
if(I.tool_behaviour == TOOL_WRENCH) //The player can only deconstruct the wooden frame
to_chat(user, span_notice("You start disassembling [src]..."))
@@ -319,12 +313,6 @@
///the trophy message
var/trophy_message = ""
-/datum/armor/structure_displaycase
- melee = 30
- bomb = 10
- fire = 70
- acid = 100
-
/obj/structure/displaycase/trophy/Initialize(mapload)
. = ..()
GLOB.trophy_cases += src
@@ -441,12 +429,6 @@
/obj/item/showpiece_dummy
name = "holographic replica"
-/datum/armor/structure_displaycase
- melee = 30
- bomb = 10
- fire = 70
- acid = 100
-
/obj/item/showpiece_dummy/Initialize(mapload, path)
. = ..()
var/obj/item/item_path = path
@@ -472,12 +454,6 @@
///The Account which will receive payment for purchases. Set by the first ID to swipe the tray.
var/datum/bank_account/payments_acc = null
-/datum/armor/structure_displaycase
- melee = 30
- bomb = 10
- fire = 70
- acid = 100
-
/obj/structure/displaycase/forsale/update_icon_state()
icon_state = "[initial(icon_state)][broken ? "_broken" : (open ? "_open" : (!showpiece ? "_empty" : null))]"
return ..()
diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm
index dd4372139b7..941f86fd081 100644
--- a/code/game/objects/structures/holosign.dm
+++ b/code/game/objects/structures/holosign.dm
@@ -66,13 +66,6 @@
max_integrity = 20
var/allow_walk = TRUE //can we pass through it on walk intent
-/datum/armor/structure_holosign
- bullet = 50
- laser = 50
- energy = 50
- fire = 20
- acid = 20
-
/obj/structure/holosign/barrier/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(.)
@@ -90,13 +83,6 @@
icon = 'icons/effects/effects.dmi'
icon_state = "holosign"
-/datum/armor/structure_holosign
- bullet = 50
- laser = 50
- energy = 50
- fire = 20
- acid = 20
-
/obj/structure/holosign/barrier/wetsign/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(iscarbon(mover))
@@ -130,13 +116,6 @@
max_integrity = 150
icon_state = "holo_tram"
-/datum/armor/structure_holosign
- bullet = 50
- laser = 50
- energy = 50
- fire = 20
- acid = 20
-
/obj/structure/holosign/barrier/atmos/Initialize(mapload)
. = ..()
air_update_turf(TRUE, TRUE)
@@ -156,13 +135,6 @@
max_integrity = 10
allow_walk = FALSE
-/datum/armor/structure_holosign
- bullet = 50
- laser = 50
- energy = 50
- fire = 20
- acid = 20
-
/obj/structure/holosign/barrier/cyborg/bullet_act(obj/projectile/P)
take_damage((P.damage / 5) , BRUTE, MELEE, 1) //Doesn't really matter what damage flag it is.
if(istype(P, /obj/projectile/energy/electrode))
@@ -179,13 +151,6 @@
var/force_allaccess = FALSE
var/buzzcd = 0
-/datum/armor/structure_holosign
- bullet = 50
- laser = 50
- energy = 50
- fire = 20
- acid = 20
-
/obj/structure/holosign/barrier/medical/examine(mob/user)
. = ..()
. += span_notice("The biometric scanners are [force_allaccess ? "off" : "on"].")
@@ -231,13 +196,6 @@
max_integrity = 20
var/shockcd = 0
-/datum/armor/structure_holosign
- bullet = 50
- laser = 50
- energy = 50
- fire = 20
- acid = 20
-
/obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/projectile/P)
take_damage(P.damage, BRUTE, MELEE, 1) //Yeah no this doesn't get projectile resistance.
return BULLET_ACT_HIT
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index ddf3deb8080..eb7a0d0196e 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -86,11 +86,6 @@
canSmoothWith = SMOOTH_GROUP_CATWALK
obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP
-/datum/armor/structure_lattice
- melee = 50
- fire = 80
- acid = 50
-
/obj/structure/lattice/catwalk/deconstruction_hints(mob/user)
return span_notice("The supporting rods look like they could be cut.")
@@ -111,11 +106,6 @@
desc = "A heavily reinforced catwalk used to build bridges in hostile environments. It doesn't look like anything could make this budge."
resistance_flags = INDESTRUCTIBLE
-/datum/armor/structure_lattice
- melee = 50
- fire = 80
- acid = 50
-
/obj/structure/lattice/catwalk/mining/deconstruction_hints(mob/user)
return
@@ -133,11 +123,6 @@
obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP
resistance_flags = FIRE_PROOF | LAVA_PROOF
-/datum/armor/structure_lattice
- melee = 50
- fire = 80
- acid = 50
-
/obj/structure/lattice/lava/deconstruction_hints(mob/user)
return span_notice("The rods look like they could be cut, but the heat treatment will shatter off. There's space for a tile.")
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 588413bcc96..5baacb8a651 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -248,13 +248,6 @@
opacity = FALSE
rad_insulation = RAD_VERY_LIGHT_INSULATION
-/datum/armor/structure_mineral_door
- melee = 10
- energy = 100
- bomb = 10
- fire = 50
- acid = 50
-
/obj/structure/mineral_door/transparent/Close()
..()
set_opacity(FALSE)
@@ -281,13 +274,6 @@
max_integrity = 200
rad_insulation = RAD_VERY_LIGHT_INSULATION
-/datum/armor/structure_mineral_door
- melee = 10
- energy = 100
- bomb = 10
- fire = 50
- acid = 50
-
/obj/structure/mineral_door/wood/pickaxe_door(mob/living/user, obj/item/I)
return
@@ -314,13 +300,6 @@
resistance_flags = FLAMMABLE
max_integrity = 20
-/datum/armor/structure_mineral_door
- melee = 10
- energy = 100
- bomb = 10
- fire = 50
- acid = 50
-
/obj/structure/mineral_door/paperframe/Initialize(mapload)
. = ..()
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 173fe27f7af..bfef72d6ab1 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -484,10 +484,6 @@
smoothing_groups = SMOOTH_GROUP_WOOD_TABLES //Don't smooth with SMOOTH_GROUP_TABLES
canSmoothWith = SMOOTH_GROUP_WOOD_TABLES
-/datum/armor/table_glass
- fire = 80
- acid = 100
-
/obj/structure/table/wood/narsie_act(total_override = TRUE)
if(!total_override)
..()
@@ -516,10 +512,6 @@
canSmoothWith = SMOOTH_GROUP_FANCY_WOOD_TABLES
var/smooth_icon = 'icons/obj/smooth_structures/fancy_table.dmi' // see Initialize()
-/datum/armor/table_glass
- fire = 80
- acid = 100
-
/obj/structure/table/wood/fancy/Initialize(mapload)
. = ..()
// Needs to be set dynamically because table smooth sprites are 32x34,
@@ -653,15 +645,6 @@
smoothing_groups = SMOOTH_GROUP_BRONZE_TABLES //Don't smooth with SMOOTH_GROUP_TABLES
canSmoothWith = SMOOTH_GROUP_BRONZE_TABLES
-/datum/armor/table_reinforced
- melee = 10
- bullet = 30
- laser = 30
- energy = 100
- bomb = 20
- fire = 80
- acid = 70
-
/obj/structure/table/bronze/tablepush(mob/living/user, mob/living/pushed_mob)
..()
playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 50, TRUE)
@@ -725,15 +708,6 @@
var/mob/living/carbon/patient = null
var/obj/machinery/computer/operating/computer = null
-/datum/armor/table_reinforced
- melee = 10
- bullet = 30
- laser = 30
- energy = 100
- bomb = 20
- fire = 80
- acid = 70
-
/obj/structure/table/optable/Initialize(mapload)
. = ..()
for(var/direction in GLOB.alldirs)
@@ -807,15 +781,6 @@
pass_flags_self = LETPASSTHROW //You can throw objects over this, despite it's density.
max_integrity = 20
-/datum/armor/table_reinforced
- melee = 10
- bullet = 30
- laser = 30
- energy = 100
- bomb = 20
- fire = 80
- acid = 70
-
/obj/structure/rack/examine(mob/user)
. = ..()
. += span_notice("It's held together by a couple of bolts.")
@@ -897,15 +862,6 @@
custom_materials = list(/datum/material/iron=2000)
var/building = FALSE
-/datum/armor/table_reinforced
- melee = 10
- bullet = 30
- laser = 30
- energy = 100
- bomb = 20
- fire = 80
- acid = 70
-
/obj/item/rack_parts/attackby(obj/item/W, mob/user, params)
if (W.tool_behaviour == TOOL_WRENCH)
new /obj/item/stack/sheet/iron(user.loc)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 99d55960787..088a5c08b2e 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -740,13 +740,6 @@
glass_amount = 2
//there is a sub shuttle window in survival_pod.dm for mining pods
-/datum/armor/reinforced_plasma
- melee = 80
- bullet = 20
- bomb = 60
- fire = 99
- acid = 100
-
/obj/structure/window/reinforced/shuttle//this is called reinforced because it is reinforced w/titanium
name = "shuttle window"
desc = "A reinforced, air-locked pod window."
@@ -862,12 +855,6 @@
var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1)
var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1)
-/datum/armor/plasma_plastitanium
- melee = 95
- bomb = 50
- fire = 80
- acid = 100
-
/obj/structure/window/paperframe/Initialize(mapload)
. = ..()
update_appearance()
diff --git a/code/game/turfs/open/space/transit.dm b/code/game/turfs/open/space/transit.dm
index 77d6ad3f1ea..74ba0e6fb0a 100644
--- a/code/game/turfs/open/space/transit.dm
+++ b/code/game/turfs/open/space/transit.dm
@@ -7,36 +7,54 @@
flags_1 = NOJAUNT //This line goes out to every wizard that ever managed to escape the den. I'm sorry.
explosive_resistance = INFINITY
+/turf/open/space/transit/Initialize(mapload)
+ . = ..()
+ update_appearance()
+ RegisterSignal(src, COMSIG_TURF_RESERVATION_RELEASED, PROC_REF(launch_contents))
+
+ for(var/atom/movable/movable in src)
+ throw_atom(movable)
+
+/turf/open/space/transit/clear_signal_refs()
+ //Signals are NOT removed from turfs upon replacement, and we get replaced ALOT, so unregister our signal
+ UnregisterSignal(src, COMSIG_TURF_RESERVATION_RELEASED)
+
/turf/open/space/transit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
. = ..()
underlay_appearance.icon_state = "speedspace_ns_[get_transit_state(asking_turf)]"
underlay_appearance.transform = turn(matrix(), get_transit_angle(asking_turf))
-/turf/open/space/transit/south
- dir = SOUTH
+/turf/open/space/transit/update_icon()
+ . = ..()
+ transform = turn(matrix(), get_transit_angle(src))
-/turf/open/space/transit/north
- dir = NORTH
-
-/turf/open/space/transit/horizontal
- dir = WEST
-
-/turf/open/space/transit/west
- dir = WEST
-
-/turf/open/space/transit/east
- dir = EAST
+/turf/open/space/transit/update_icon_state()
+ icon_state = "speedspace_ns_[get_transit_state(src)]"
+ return ..()
/turf/open/space/transit/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs)
. = ..()
- if(!locate(/obj/structure/lattice) in src)
- throw_atom(arrived)
+
+ if(!HAS_TRAIT(arrived, TRAIT_HYPERSPACED) && !HAS_TRAIT(arrived, TRAIT_FREE_HYPERSPACE_MOVEMENT))
+ arrived.AddComponent(/datum/component/shuttle_cling, turn(dir, 180), old_loc)
+
+/turf/open/space/transit/Exited(atom/movable/gone, direction)
+ . = ..()
+
+ var/turf/location = gone.loc
+ if(istype(location, /turf/open/space) && !istype(location, src.type))//they got forced out of transit area into default space tiles
+ throw_atom(gone) //launch them into game space, away from transitspace
+
+///Get rid of all our contents, called when our reservation is released (which in our case means the shuttle arrived)
+/turf/open/space/transit/proc/launch_contents(datum/turf_reservation/reservation)
+ SIGNAL_HANDLER
+
+ for(var/atom/movable/movable in contents)
+ throw_atom(movable)
/turf/open/space/transit/proc/throw_atom(atom/movable/AM)
if(!AM || istype(AM, /obj/docking_port) || istype(AM, /obj/effect/abstract))
return
- if(AM.loc != src) // Multi-tile objects are "in" multiple locs but its loc is it's true placement.
- return // Don't move multi tile objects if their origin isn't in transit
var/max = world.maxx-TRANSITIONEDGE
var/min = 1+TRANSITIONEDGE
@@ -71,24 +89,23 @@
var/turf/T = locate(_x, _y, _z)
AM.forceMove(T)
-
/turf/open/space/transit/CanBuildHere()
return SSshuttle.is_in_shuttle_bounds(src)
+/turf/open/space/transit/south
+ dir = SOUTH
-/turf/open/space/transit/Initialize(mapload)
- . = ..()
- update_appearance()
- for(var/atom/movable/AM in src)
- throw_atom(AM)
+/turf/open/space/transit/north
+ dir = NORTH
-/turf/open/space/transit/update_icon()
- . = ..()
- transform = turn(matrix(), get_transit_angle(src))
+/turf/open/space/transit/horizontal
+ dir = WEST
-/turf/open/space/transit/update_icon_state()
- icon_state = "speedspace_ns_[get_transit_state(src)]"
- return ..()
+/turf/open/space/transit/west
+ dir = WEST
+
+/turf/open/space/transit/east
+ dir = EAST
/proc/get_transit_state(turf/T)
var/p = 9
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 7dfc03e22c7..c5a77df1b46 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1212,7 +1212,7 @@
else if(href_list["dupe_marked_datum"])
if(!check_rights(R_SPAWN))
return
- return DuplicateObject(marked_datum, perfectcopy=1, newloc=get_turf(usr))
+ return duplicate_object(marked_datum, spawning_location = get_turf(usr))
else if(href_list["object_list"]) //this is the laggiest thing ever
if(!check_rights(R_SPAWN))
diff --git a/code/modules/antagonists/blob/minions/blobbernaut.dm b/code/modules/antagonists/blob/minions/blobbernaut.dm
index 56e9846874e..b40aba1ed85 100644
--- a/code/modules/antagonists/blob/minions/blobbernaut.dm
+++ b/code/modules/antagonists/blob/minions/blobbernaut.dm
@@ -1,5 +1,6 @@
/datum/antagonist/blobbernaut
name = "\improper Blobbernaut"
+ antagpanel_category = "Biohazards"
show_name_in_check_antagonists = TRUE
show_to_ghosts = TRUE
diff --git a/code/modules/antagonists/blob/minions/blobspore.dm b/code/modules/antagonists/blob/minions/blobspore.dm
index 97b5b812628..c1d8f5595b0 100644
--- a/code/modules/antagonists/blob/minions/blobspore.dm
+++ b/code/modules/antagonists/blob/minions/blobspore.dm
@@ -1,5 +1,6 @@
/datum/antagonist/blobspore
name = "\improper Blob Spore"
+ antagpanel_category = "Biohazards"
show_name_in_check_antagonists = TRUE
show_to_ghosts = TRUE
diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm
index 991342ddf3f..b9f0337b295 100644
--- a/code/modules/antagonists/blob/structures/_blob.dm
+++ b/code/modules/antagonists/blob/structures/_blob.dm
@@ -355,10 +355,6 @@
health_regen = BLOB_REGULAR_HP_REGEN
brute_resist = BLOB_BRUTE_RESIST * 0.5
-/datum/armor/structure_blob
- fire = 80
- acid = 70
-
/obj/structure/blob/normal/Initialize(mapload, owner_overmind)
. = ..()
update_integrity(initial_integrity)
diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm
index 2d33d02ab91..0699d70f3f2 100644
--- a/code/modules/antagonists/blob/structures/shield.dm
+++ b/code/modules/antagonists/blob/structures/shield.dm
@@ -57,9 +57,5 @@
max_integrity = BLOB_REFLECTOR_MAX_HP
health_regen = BLOB_REFLECTOR_HP_REGEN
-/datum/armor/blob_shield
- fire = 90
- acid = 90
-
/obj/structure/blob/shield/reflective/core // Automatically generated by the core
point_return = 0
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index 375714eb6cf..04c9ebceb1f 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -520,11 +520,6 @@
armor_type = /datum/armor/space_changeling
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
-/datum/armor/space_changeling
- bio = 100
- fire = 90
- acid = 90
-
/obj/item/clothing/head/helmet/space/changeling/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
diff --git a/code/modules/antagonists/clown_ops/clown_weapons.dm b/code/modules/antagonists/clown_ops/clown_weapons.dm
index ef6b2d97d1f..2f0a44d45cc 100644
--- a/code/modules/antagonists/clown_ops/clown_weapons.dm
+++ b/code/modules/antagonists/clown_ops/clown_weapons.dm
@@ -98,16 +98,6 @@
/// Cooldown for making a trombone noise for failing to make a bananium desword
COOLDOWN_DECLARE(next_trombone_allowed)
-/datum/armor/banana_shoes_combat
- melee = 25
- bullet = 25
- laser = 25
- energy = 25
- bomb = 50
- bio = 50
- fire = 90
- acid = 50
-
/obj/item/melee/energy/sword/bananium/make_transformable()
AddComponent(/datum/component/transforming, \
throw_speed_on = 4, \
@@ -174,16 +164,6 @@
active_throw_speed = 1
can_clumsy_use = TRUE
-/datum/armor/banana_shoes_combat
- melee = 25
- bullet = 25
- laser = 25
- energy = 25
- bomb = 50
- bio = 50
- fire = 90
- acid = 50
-
/obj/item/shield/energy/bananium/on_transform(obj/item/source, mob/user, active)
. = ..()
adjust_comedy()
@@ -229,16 +209,6 @@
var/det_time = 50
var/obj/item/grenade/syndieminibomb/bomb
-/datum/armor/banana_shoes_combat
- melee = 25
- bullet = 25
- laser = 25
- energy = 25
- bomb = 50
- bio = 50
- fire = 90
- acid = 50
-
/obj/item/grown/bananapeel/bombanana/Initialize(mapload)
. = ..()
AddComponent(/datum/component/slippery, det_time)
@@ -266,16 +236,6 @@
icon_state = "moustacheg"
clumsy_check = GRENADE_NONCLUMSY_FUMBLE
-/datum/armor/banana_shoes_combat
- melee = 25
- bullet = 25
- laser = 25
- energy = 25
- bomb = 50
- bio = 50
- fire = 90
- acid = 50
-
/obj/item/grenade/chem_grenade/teargas/moustache/detonate(mob/living/lanced_by)
var/myloc = get_turf(src)
. = ..()
@@ -291,16 +251,6 @@
/obj/item/clothing/mask/fakemoustache/sticky
var/unstick_time = 600
-/datum/armor/banana_shoes_combat
- melee = 25
- bullet = 25
- laser = 25
- energy = 25
- bomb = 50
- bio = 50
- fire = 90
- acid = 50
-
/obj/item/clothing/mask/fakemoustache/sticky/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, STICKY_MOUSTACHE_TRAIT)
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index acb8709bd34..a2613f4477f 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -71,6 +71,7 @@
AddElement(/datum/element/simple_flying)
ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_SIXTHSENSE, INNATE_TRAIT)
+ ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT)
// Starting spells
var/datum/action/cooldown/spell/night_vision/revenant/vision = new(src)
diff --git a/code/modules/asset_cache/assets/research_designs.dm b/code/modules/asset_cache/assets/research_designs.dm
index 62a03040517..feeeee05c7c 100644
--- a/code/modules/asset_cache/assets/research_designs.dm
+++ b/code/modules/asset_cache/assets/research_designs.dm
@@ -23,9 +23,10 @@
// construct the icon and slap it into the resource cache
var/atom/item = initial(D.build_path)
if (!ispath(item, /atom))
- // biogenerator outputs to beakers by default
- if (initial(D.build_type) & BIOGENERATOR)
- item = /obj/item/reagent_containers/cup/beaker/large
+ // biogenerator reagent designs display their default container
+ if(initial(D.make_reagent))
+ var/datum/reagent/reagent = initial(D.make_reagent)
+ item = initial(reagent.default_container)
else
continue // shouldn't happen, but just in case
diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm
index 25adcb4a131..2a735bab880 100644
--- a/code/modules/atmospherics/machinery/airalarm.dm
+++ b/code/modules/atmospherics/machinery/airalarm.dm
@@ -933,11 +933,6 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm)
req_access = null
req_one_access = null
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/machinery/airalarm/syndicate //general syndicate access
req_access = list(ACCESS_SYNDICATE)
@@ -969,11 +964,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
var/static/list/options_map
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/item/circuit_component/air_alarm_general/populate_options()
if(!options_map)
options_map = list(
@@ -1086,11 +1076,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
var/list/alarm_duplicates = list()
var/max_alarm_duplicates = 20
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/item/circuit_component/air_alarm/ui_perform_action(mob/user, action)
if(length(alarm_duplicates) >= max_alarm_duplicates)
return
@@ -1140,11 +1125,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
circuit_size = 0
ui_buttons = list()
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/item/circuit_component/air_alarm/duplicate/removed_from(obj/item/integrated_circuit/removed_from)
if(!QDELING(src))
qdel(src)
@@ -1251,11 +1231,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
var/max_scrubber_duplicates = 20
var/list/scrubber_duplicates = list()
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/item/circuit_component/air_alarm_scrubbers/ui_perform_action(mob/user, action)
if(length(scrubber_duplicates) >= max_scrubber_duplicates)
return
@@ -1296,11 +1271,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
circuit_size = 0
ui_buttons = list()
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/item/circuit_component/air_alarm_scrubbers/duplicate/Destroy()
connected_alarm = null
return ..()
@@ -1480,11 +1450,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
var/max_vent_duplicates = 20
var/list/vent_duplicates = list()
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/item/circuit_component/air_alarm_vents/ui_perform_action(mob/user, action)
if(length(vent_duplicates) >= max_vent_duplicates)
return
@@ -1533,11 +1498,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 24)
circuit_size = 0
ui_buttons = list()
-/datum/armor/machinery_airalarm
- energy = 100
- fire = 90
- acid = 30
-
/obj/item/circuit_component/air_alarm_vents/duplicate/removed_from(obj/item/integrated_circuit/removed_from)
if(!QDELING(src))
qdel(src)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
index 40f371e044d..111380b92d3 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm
@@ -300,11 +300,6 @@
on = TRUE
icon_state = "thermo_base_1"
-/datum/armor/unary_thermomachine
- energy = 100
- fire = 80
- acid = 30
-
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/Initialize(mapload)
. = ..()
if(target_temperature == initial(target_temperature))
@@ -314,11 +309,6 @@
icon_state = "thermo_base_1"
greyscale_colors = COLOR_CYAN
-/datum/armor/unary_thermomachine
- energy = 100
- fire = 80
- acid = 30
-
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom/Initialize(mapload)
. = ..()
target_temperature = COLD_ROOM_TEMP
diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm
index 53722991054..12ac25680fd 100644
--- a/code/modules/atmospherics/machinery/other/meter.dm
+++ b/code/modules/atmospherics/machinery/other/meter.dm
@@ -162,10 +162,6 @@
///The component parent object
var/obj/machinery/meter/connected_meter
-/datum/armor/machinery_meter
- energy = 100
- fire = 40
-
/obj/item/circuit_component/atmos_meter/populate_ports()
request_data = add_input_port("Request Meter Data", PORT_TYPE_SIGNAL, trigger = PROC_REF(request_meter_data))
@@ -193,10 +189,6 @@
// why are you yelling?
/obj/machinery/meter/turf
-/datum/armor/machinery_meter
- energy = 100
- fire = 40
-
/obj/machinery/meter/turf/reattach_to_layer()
target = loc
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index cc3da760a5f..01d06951299 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -289,15 +289,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
temp_limit = 1e12
pressure_limit = 1e14
-/datum/armor/portable_atmospherics_canister
- melee = 50
- bullet = 50
- laser = 50
- energy = 100
- bomb = 10
- fire = 80
- acid = 50
-
/obj/machinery/portable_atmospherics/canister/fusion_test/create_gas()
air_contents.add_gases(/datum/gas/hydrogen, /datum/gas/tritium)
air_contents.gases[/datum/gas/hydrogen][MOLES] = 300
@@ -311,15 +302,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
greyscale_config = /datum/greyscale_config/canister/double_stripe
greyscale_colors = "#9fba6c#3d4680"
-/datum/armor/portable_atmospherics_canister
- melee = 50
- bullet = 50
- laser = 50
- energy = 100
- bomb = 10
- fire = 80
- acid = 50
-
/obj/machinery/portable_atmospherics/canister/anesthetic_mix/create_gas()
air_contents.add_gases(/datum/gas/oxygen, /datum/gas/nitrous_oxide)
air_contents.gases[/datum/gas/oxygen][MOLES] = (O2_ANESTHETIC * maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
@@ -370,15 +352,6 @@ GLOBAL_LIST_INIT(gas_id_to_canister, init_gas_id_to_canister())
* Called on Initialize(), fill the canister with the gas_type specified up to the filled level (half if 0.5, full if 1)
* Used for canisters spawned in maps and by admins
*/
-/datum/armor/portable_atmospherics_canister
- melee = 50
- bullet = 50
- laser = 50
- energy = 100
- bomb = 10
- fire = 80
- acid = 50
-
/obj/machinery/portable_atmospherics/canister/proc/create_gas()
if(!gas_type)
return
diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm
index 6904aa746cb..73da55ad2fe 100644
--- a/code/modules/awaymissions/mission_code/snowdin.dm
+++ b/code/modules/awaymissions/mission_code/snowdin.dm
@@ -391,25 +391,11 @@
desc = "High speed, low drag combat boots, now with an added layer of insulation."
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/item/gun/magic/wand/fireball/inert
name = "weakened wand of fireball"
desc = "This wand shoots scorching balls of fire that explode into destructive flames. The years of the cold have weakened the magic inside the wand."
max_charges = 4
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/item/gun/magic/wand/resurrection/inert
name = "weakened wand of healing"
desc = "This wand uses healing magics to heal and revive. The years of the cold have weakened the magic inside the wand."
@@ -417,142 +403,44 @@
//decals//--
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign
icon_state = "AOP1"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/two
icon_state = "AOP2"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/three
icon_state = "AOP3"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/four
icon_state = "AOP4"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/five
icon_state = "AOP5"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/six
icon_state = "AOP6"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/seven
icon_state = "AOP7"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/up
icon_state = "AOPU1"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/up/two
icon_state = "AOPU2"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/up/three
icon_state = "AOPU3"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/up/four
icon_state = "AOPU4"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/up/five
icon_state = "AOPU5"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/up/six
icon_state = "AOPU6"
-/datum/armor/syndicate_coldres
- melee = 20
- bullet = 10
- energy = 5
- fire = 25
- acid = 25
-
/obj/effect/turf_decal/snowdin_station_sign/up/seven
icon_state = "AOPU7"
diff --git a/code/modules/buildmode/submodes/copy.dm b/code/modules/buildmode/submodes/copy.dm
index 739f53e9bc8..9effd1d9c30 100644
--- a/code/modules/buildmode/submodes/copy.dm
+++ b/code/modules/buildmode/submodes/copy.dm
@@ -18,7 +18,7 @@
if(LAZYACCESS(modifiers, LEFT_CLICK))
var/turf/T = get_turf(object)
if(stored)
- DuplicateObject(stored, perfectcopy=1, sameloc=0,newloc=T)
+ duplicate_object(stored, spawning_location = T)
log_admin("Build Mode: [key_name(c)] copied [stored] to [AREACOORD(object)]")
else if(LAZYACCESS(modifiers, RIGHT_CLICK))
if(ismovable(object)) // No copying turfs for now.
diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm
index baec0b57829..8c25da21cf2 100644
--- a/code/modules/cargo/centcom_podlauncher.dm
+++ b/code/modules/cargo/centcom_podlauncher.dm
@@ -42,7 +42,7 @@
var/bayNumber //Quick reference to what bay we're in. Usually set to the loading_id variable for the related area type
var/customDropoff = FALSE
var/picking_dropoff_turf = FALSE
- var/launchClone = FALSE //If true, then we don't actually launch the thing in the bay. Instead we call duplicateObject() and send the result
+ var/launchClone = FALSE //If true, then we don't actually launch the thing in the bay. Instead we call duplicate_object() and send the result
var/launchRandomItem = FALSE //If true, lauches a single random item instead of everything on a turf.
var/launchChoice = LAUNCH_RANDOM //Determines if we launch all at once (0) , in order (1), or at random(2)
var/explosionChoice = 0 //Determines if there is no explosion (0), custom explosion (1), or just do a maxcap (2)
@@ -721,7 +721,7 @@
/datum/centcom_podlauncher/proc/launch(turf/target_turf) //Game time started
if (isnull(target_turf))
return
- var/obj/structure/closet/supplypod/centcompod/toLaunch = DuplicateObject(temp_pod) //Duplicate the temp_pod (which we have been varediting or configuring with the UI) and store the result
+ var/obj/structure/closet/supplypod/centcompod/toLaunch = duplicate_object(temp_pod) //Duplicate the temp_pod (which we have been varediting or configuring with the UI) and store the result
toLaunch.update_appearance()//we update_appearance() here so that the door doesnt "flicker on" right after it lands
var/shippingLane = GLOB.areas_by_type[/area/centcom/central_command_areas/supplypod/supplypod_temp_holding]
toLaunch.forceMove(shippingLane)
@@ -734,7 +734,7 @@
toLaunch.turfs_in_cargo += atom_to_launch.type
else
var/atom/movable/movable_to_launch = launch_candidate
- DuplicateObject(movable_to_launch).forceMove(toLaunch) //Duplicate a single atom/movable from launchList and forceMove it into the supplypod
+ duplicate_object(movable_to_launch).forceMove(toLaunch) //Duplicate a single atom/movable from launchList and forceMove it into the supplypod
else
for (var/launch_candidate in launchList)
if (isnull(launch_candidate))
@@ -744,7 +744,7 @@
toLaunch.turfs_in_cargo += turf_to_launch.type
else
var/atom/movable/movable_to_launch = launch_candidate
- DuplicateObject(movable_to_launch).forceMove(toLaunch) //Duplicate each atom/movable in launchList and forceMove them into the supplypod
+ duplicate_object(movable_to_launch).forceMove(toLaunch) //Duplicate each atom/movable in launchList and forceMove them into the supplypod
else
if(launchRandomItem)
var/atom/random_item = pick_n_take(launchList)
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index b9dfa4c755d..828f7eeb27e 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -577,15 +577,6 @@
icon_state = "LZ_Slider"
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
-/datum/armor/closet_supplypod
- melee = 30
- bullet = 50
- laser = 50
- energy = 100
- bomb = 100
- fire = 100
- acid = 80
-
/obj/effect/pod_landingzone_effect/Initialize(mapload, obj/structure/closet/supplypod/pod)
. = ..()
if(!pod)
diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm
index 0d5c0e64908..f252ed3b05f 100644
--- a/code/modules/clothing/chameleon.dm
+++ b/code/modules/clothing/chameleon.dm
@@ -594,13 +594,6 @@
armor_type = /datum/armor/none
// which means it offers no protection, it's just air and light
-/datum/armor/head_chameleon
- melee = 5
- bullet = 5
- laser = 5
- fire = 50
- acid = 50
-
/obj/item/clothing/head/chameleon/drone/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
@@ -670,14 +663,6 @@
// Can drones use the voice changer part? Let's not find out.
voice_change = 0
-/datum/armor/mask_chameleon
- melee = 5
- bullet = 5
- laser = 5
- bio = 100
- fire = 50
- acid = 50
-
/obj/item/clothing/mask/chameleon/drone/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
@@ -739,14 +724,6 @@
special_desc = "A pair of chameleon shoes with an anti-slip coating employed by the Syndicate in infiltration operations." // Skyrat edit
-/datum/armor/shoes_chameleon
- melee = 10
- bullet = 10
- laser = 10
- bio = 90
- fire = 50
- acid = 50
-
/obj/item/clothing/shoes/chameleon/noslip/broken/Initialize(mapload)
. = ..()
chameleon_action.emp_randomise(INFINITY)
@@ -758,14 +735,6 @@
var/datum/action/item_action/chameleon/change/chameleon_action
-/datum/armor/shoes_chameleon
- melee = 10
- bullet = 10
- laser = 10
- bio = 90
- fire = 50
- acid = 50
-
/obj/item/storage/backpack/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
@@ -796,14 +765,6 @@
var/datum/action/item_action/chameleon/change/chameleon_action
-/datum/armor/shoes_chameleon
- melee = 10
- bullet = 10
- laser = 10
- bio = 90
- fire = 50
- acid = 50
-
/obj/item/storage/belt/chameleon/Initialize(mapload)
. = ..()
@@ -836,14 +797,6 @@
var/datum/action/item_action/chameleon/change/chameleon_action
-/datum/armor/shoes_chameleon
- melee = 10
- bullet = 10
- laser = 10
- bio = 90
- fire = 50
- acid = 50
-
/obj/item/radio/headset/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
@@ -870,14 +823,6 @@
name = "tablet"
var/datum/action/item_action/chameleon/change/tablet/chameleon_action
-/datum/armor/shoes_chameleon
- melee = 10
- bullet = 10
- laser = 10
- bio = 90
- fire = 50
- acid = 50
-
/obj/item/modular_computer/pda/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
@@ -904,14 +849,6 @@
/obj/item/stamp/chameleon
var/datum/action/item_action/chameleon/change/chameleon_action
-/datum/armor/shoes_chameleon
- melee = 10
- bullet = 10
- laser = 10
- bio = 90
- fire = 50
- acid = 50
-
/obj/item/stamp/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
@@ -983,10 +920,6 @@
/// The badmin mode. Makes your projectiles act like the real deal.
var/real_hits = FALSE
-/datum/armor/neck_chameleon
- fire = 50
- acid = 50
-
/obj/item/gun/energy/laser/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 35eba387ee3..24ad308a413 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -245,10 +245,6 @@
inhand_icon_state = "glasses"
vision_correction = TRUE //corrects nearsightedness
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/regular/Initialize(mapload)
. = ..()
AddComponent(/datum/component/knockoff, 25, list(BODY_ZONE_PRECISE_EYES), slot_flags)
@@ -388,10 +384,6 @@
glass_colour_type = /datum/client_colour/glass_colour/gray
alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER // SKYRAT EDIT - Just so it works until I make the change upstream
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/welding/attack_self(mob/user)
weldingvisortoggle(user)
@@ -409,10 +401,6 @@
darkness_view = 1
dog_fashion = /datum/dog_fashion/head
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/blindfold/equipped(mob/living/carbon/human/user, slot)
. = ..()
if(slot & ITEM_SLOT_EYES)
@@ -435,10 +423,6 @@
inhand_icon_state = null
var/colored_before = FALSE
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/blindfold/white/visual_equipped(mob/living/carbon/human/user, slot)
if(ishuman(user) && (slot & ITEM_SLOT_EYES))
update_icon(ALL, user)
@@ -477,10 +461,6 @@
flash_protect = FLASH_PROTECTION_SENSITIVE
glass_colour_type = /datum/client_colour/glass_colour/red
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/thermal/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
@@ -492,10 +472,6 @@
desc = "A pair of xray goggles manufactured by the Syndicate."
vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/thermal/xray/equipped(mob/living/carbon/human/user, slot)
. = ..()
if(!(slot & ITEM_SLOT_EYES) || !istype(user))
@@ -535,10 +511,6 @@
icon_state = "thermoncle"
flags_1 = null //doesn't protect eyes because it's a monocle, duh
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/thermal/monocle/examine(mob/user) //Different examiners see a different description!
if(user.gender == MALE)
desc = replacetext(desc, "person", "man")
@@ -618,10 +590,6 @@
var/list/hudlist = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED, DATA_HUD_SECURITY_ADVANCED)
var/xray = FALSE
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/debug/equipped(mob/user, slot)
. = ..()
if(!(slot & ITEM_SLOT_EYES))
@@ -672,10 +640,6 @@
///Tells us who the current wearer([BIGSHOT]) is.
var/mob/living/carbon/human/bigshot
-/datum/armor/glasses_science
- fire = 80
- acid = 100
-
/obj/item/clothing/glasses/salesman/equipped(mob/living/carbon/human/user, slot)
..()
if(!(slot & ITEM_SLOT_EYES))
diff --git a/code/modules/clothing/gloves/plasmaman.dm b/code/modules/clothing/gloves/plasmaman.dm
index 3447fda2cf4..0ca552773ec 100644
--- a/code/modules/clothing/gloves/plasmaman.dm
+++ b/code/modules/clothing/gloves/plasmaman.dm
@@ -20,11 +20,6 @@
icon_state = "blackplasma"
greyscale_colors = "#2f2e31"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/plasmanitrile
name = "nitrile envirogloves"
desc = "Pricy nitrile gloves made for plasmamen."
@@ -32,82 +27,42 @@
greyscale_colors = "#913b00"
clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_FASTMED)
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/white
name = "white envirogloves"
icon_state = "whiteplasma"
greyscale_colors = "#ffffff"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/robot
name = "roboticist envirogloves"
icon_state = "robotplasma"
greyscale_colors = "#932500"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/janny
name = "janitor envirogloves"
icon_state = "jannyplasma"
greyscale_colors = "#883391"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/cargo
name = "cargo envirogloves"
icon_state = "cargoplasma"
greyscale_colors = "#bb9042"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/engineer
name = "engineering envirogloves"
icon_state = "engieplasma"
greyscale_colors = "#d75600"
siemens_coefficient = 0
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/atmos
name = "atmos envirogloves"
icon_state = "atmosplasma"
greyscale_colors = "#00a5ff"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/explorer
name = "explorer envirogloves"
icon_state = "explorerplasma"
greyscale_colors = "#47453d"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/botanic_leather
name = "botany envirogloves"
desc = "These leather gloves protect your boney hands against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
@@ -115,31 +70,16 @@
greyscale_colors = "#3164ff"
clothing_traits = list(TRAIT_PLANT_SAFE)
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/prototype
name = "prototype envirogloves"
icon_state = "protoplasma"
greyscale_colors = "#911801"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/clown
name = "clown envirogloves"
icon_state = "clownplasma"
greyscale_colors = "#ff0000"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/head_of_personnel
name = "head of personnel's envirogloves"
desc = "Covers up those scandalous, bony hands. Appears to be an attempt at making a replica of the captain's gloves."
@@ -147,62 +87,32 @@
inhand_icon_state = null
greyscale_colors = null
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/chief_engineer
name = "chief engineer's envirogloves"
icon_state = "ceplasma"
greyscale_colors = "#45ff00"
siemens_coefficient = 0
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/research_director
name = "research director's envirogloves"
icon_state = "rdplasma"
greyscale_colors = "#64008a"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/centcom_commander
name = "CentCom commander envirogloves"
icon_state = "commanderplasma"
greyscale_colors = "#009100"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/centcom_official
name = "CentCom official envirogloves"
icon_state = "officialplasma"
greyscale_colors = "#10af77"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/centcom_intern
name = "CentCom intern envirogloves"
icon_state = "internplasma"
greyscale_colors = "#00974b"
-/datum/armor/color_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/gloves/color/plasmaman/radio
name = "translation envirogloves"
desc = "Allows the less vocally-capable plasmamen to use sign language over comms."
diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm
index ff98ae5d12d..888ecac39ee 100644
--- a/code/modules/clothing/gloves/tacklers.dm
+++ b/code/modules/clothing/gloves/tacklers.dm
@@ -96,9 +96,6 @@
tackle_speed = 6
skill_mod = 7
-/datum/armor/combat_insulated
- bio = 50
-
/obj/item/clothing/gloves/tackler/offbrand
name = "improvised gripper gloves"
desc = "Ratty looking fingerless gloves wrapped with sticky tape. Beware anyone wearing these, for they clearly have no shame and nothing to lose."
@@ -110,9 +107,6 @@
min_distance = 2
skill_mod = -1
-/datum/armor/combat_insulated
- bio = 50
-
/obj/item/clothing/gloves/tackler/football
name = "football gloves"
desc = "Gloves for football players! Teaches them how to tackle like a pro."
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 2252a449cf2..eed0f15cf59 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -121,17 +121,6 @@
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
-/datum/armor/utility_hardhat
- melee = 15
- bullet = 5
- laser = 20
- energy = 10
- bomb = 20
- bio = 50
- fire = 100
- acid = 50
- wound = 10
-
/obj/item/clothing/head/utility/hardhat/atmos/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
. = ..()
if(!isinhands)
@@ -152,17 +141,6 @@
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
var/visor_sprite_path //SKYRAT EDIT --- Lets the visor not smush the snout
-/datum/armor/utility_hardhat
- melee = 15
- bullet = 5
- laser = 20
- energy = 10
- bomb = 20
- bio = 50
- fire = 100
- acid = 50
- wound = 10
-
/obj/item/clothing/head/utility/hardhat/weldhat/Initialize(mapload)
. = ..()
update_appearance()
@@ -244,17 +222,6 @@
worn_y_offset = 1
dog_fashion = /datum/dog_fashion/head/pumpkin/unlit
-/datum/armor/utility_hardhat
- melee = 15
- bullet = 5
- laser = 20
- energy = 10
- bomb = 20
- bio = 50
- fire = 100
- acid = 50
- wound = 10
-
/obj/item/clothing/head/utility/hardhat/pumpkinhead/set_light_on(new_value)
. = ..()
if(isnull(.))
@@ -288,17 +255,6 @@
light_color = "#76ff8e"
dog_fashion = /datum/dog_fashion/head/blumpkin/unlit
-/datum/armor/utility_hardhat
- melee = 15
- bullet = 5
- laser = 20
- energy = 10
- bomb = 20
- bio = 50
- fire = 100
- acid = 50
- wound = 10
-
/obj/item/clothing/head/utility/hardhat/pumpkinhead/blumpkin/turn_on(mob/user)
. = ..()
dog_fashion = /datum/dog_fashion/head/blumpkin/lit
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 6742499d835..cced74a950d 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -339,10 +339,6 @@
/// toggles between sell (TRUE) and get price post-fees (FALSE)
var/selling = FALSE
-/datum/armor/large_scarf_syndie
- fire = 50
- acid = 40
-
/obj/item/clothing/neck/necklace/dope/merchant/attack_self(mob/user)
. = ..()
selling = !selling
@@ -377,10 +373,6 @@
custom_price = PAYCHECK_CREW * 0.2
custom_materials = (list(/datum/material/plastic = 500))
-/datum/armor/large_scarf_syndie
- fire = 50
- acid = 40
-
/obj/item/clothing/neck/beads/Initialize(mapload)
. = ..()
color = color = pick("#ff0077","#d400ff","#2600ff","#00ccff","#00ff2a","#e5ff00","#ffae00","#ff0000", "#ffffff")
diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm
index 7b39acabd7d..64423040ce7 100644
--- a/code/modules/clothing/shoes/costume.dm
+++ b/code/modules/clothing/shoes/costume.dm
@@ -42,9 +42,6 @@
icon_state = "clockwork_treads"
can_be_tied = FALSE
-/datum/armor/shoes_roman
- bio = 10
-
/obj/item/clothing/shoes/bronze/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE)
diff --git a/code/modules/clothing/spacesuits/pirate.dm b/code/modules/clothing/spacesuits/pirate.dm
index 26ce700efb9..bfc4d056ffc 100644
--- a/code/modules/clothing/spacesuits/pirate.dm
+++ b/code/modules/clothing/spacesuits/pirate.dm
@@ -21,16 +21,6 @@
icon_state = "spacebandana"
inhand_icon_state = "space_bandana_helmet"
-/datum/armor/space_pirate
- melee = 30
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 60
- acid = 75
-
/obj/item/clothing/suit/space/pirate
name = "modified EVA suit"
desc = "A modified suit to allow space pirates to board shuttles and stations while avoiding the maw of the void. Comes with additional protection, and is lighter to move in."
diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm
index 7a7ded0c58d..000cb298551 100644
--- a/code/modules/clothing/spacesuits/syndi.dm
+++ b/code/modules/clothing/spacesuits/syndi.dm
@@ -27,31 +27,11 @@
cell = /obj/item/stock_parts/cell/hyper
//Green syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/green
name = "green space helmet"
icon_state = "syndicate-helm-green"
inhand_icon_state = "space_helmet_syndicate"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/green
name = "green space suit"
icon_state = "syndicate-green"
@@ -59,31 +39,11 @@
//Dark green syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/green/dark
name = "dark green space helmet"
icon_state = "syndicate-helm-green-dark"
inhand_icon_state = "syndicate-helm-green-dark"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/green/dark
name = "dark green space suit"
icon_state = "syndicate-green-dark"
@@ -91,62 +51,22 @@
//Orange syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/orange
name = "orange space helmet"
icon_state = "syndicate-helm-orange"
inhand_icon_state = "syndicate-helm-orange"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/orange
name = "orange space suit"
icon_state = "syndicate-orange"
inhand_icon_state = "syndicate-orange"
//Blue syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/blue
name = "blue space helmet"
icon_state = "syndicate-helm-blue"
inhand_icon_state = "syndicate-helm-blue"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/blue
name = "blue space suit"
icon_state = "syndicate-blue"
@@ -154,31 +74,11 @@
//Black syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/black
name = "black space helmet"
icon_state = "syndicate-helm-black"
inhand_icon_state = "syndicate-helm-black"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/black
name = "black space suit"
icon_state = "syndicate-black"
@@ -186,31 +86,11 @@
//Black-green syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/black/green
name = "black space helmet"
icon_state = "syndicate-helm-black-green"
inhand_icon_state = "syndicate-helm-black-green"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/black/green
name = "black and green space suit"
icon_state = "syndicate-black-green"
@@ -218,31 +98,11 @@
//Black-blue syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/black/blue
name = "black space helmet"
icon_state = "syndicate-helm-black-blue"
inhand_icon_state = "syndicate-helm-black-blue"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/black/blue
name = "black and blue space suit"
icon_state = "syndicate-black-blue"
@@ -250,31 +110,11 @@
//Black medical syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/black/med
name = "black space helmet"
icon_state = "syndicate-helm-black-med"
inhand_icon_state = "syndicate-helm-black"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/black/med
name = "green space suit"
icon_state = "syndicate-black-med"
@@ -282,31 +122,11 @@
//Black-orange syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/black/orange
name = "black space helmet"
icon_state = "syndicate-helm-black-orange"
inhand_icon_state = "syndicate-helm-black"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/black/orange
name = "black and orange space suit"
icon_state = "syndicate-black-orange"
@@ -314,47 +134,17 @@
//Black-red syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/black/red
name = "black space helmet"
icon_state = "syndicate-helm-black-red"
inhand_icon_state = "syndicate-helm-black-red"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/black/red
name = "black and red space suit"
icon_state = "syndicate-black-red"
inhand_icon_state = "syndicate-black-red"
//Black-red syndicate contract varient
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/contract
name = "contractor helmet"
desc = "A specialised black and gold helmet that's more compact than its standard Syndicate counterpart. Can be ultra-compressed into even the tightest of spaces."
@@ -362,16 +152,6 @@
icon_state = "syndicate-contract-helm"
inhand_icon_state = "contractor_helmet"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/contract
name = "contractor space suit"
desc = "A specialised black and gold space suit that's quicker, and more compact than its standard Syndicate counterpart. Can be ultra-compressed into even the tightest of spaces."
@@ -381,31 +161,11 @@
inhand_icon_state = null
//Black with yellow/red engineering syndicate space suit
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/head/helmet/space/syndicate/black/engie
name = "black space helmet"
icon_state = "syndicate-helm-black-engie"
inhand_icon_state = "syndicate-helm-black"
-/datum/armor/space_syndicate
- melee = 40
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 80
- acid = 85
-
/obj/item/clothing/suit/space/syndicate/black/engie
name = "black engineering space suit"
icon_state = "syndicate-black-engie"
diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm
index 3040e103ad5..3b323dfb48c 100644
--- a/code/modules/clothing/suits/_suits.dm
+++ b/code/modules/clothing/suits/_suits.dm
@@ -20,8 +20,10 @@
. = ..()
setup_shielding()
-///obj/item/clothing/suit/worn_overlays(isinhands = FALSE) //ORIGINAL
-/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use, mutant_styles = NONE)
+/// SKYRAT EDIT CHANGE BEGIN - taurs and teshis
+// /obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE) // ORIGINAL
+/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE)
+// SKYRAT EDIT CHANGE END
. = ..()
if(isinhands)
return
@@ -46,7 +48,7 @@
if(istype(U) && U.attached_accessory)
var/obj/item/clothing/accessory/A = U.attached_accessory
if(A.above_suit)
- . += U.accessory_overlay
+ . += U.modify_accessory_overlay() // SKYRAT EDIT CHANGE - ORIGINAL: . += U.accessory_overlay
/obj/item/clothing/suit/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED)
..()
diff --git a/code/modules/clothing/suits/ablativecoat.dm b/code/modules/clothing/suits/ablativecoat.dm
index 49a18330b3f..98df168aa56 100644
--- a/code/modules/clothing/suits/ablativecoat.dm
+++ b/code/modules/clothing/suits/ablativecoat.dm
@@ -36,14 +36,6 @@
equip_delay_other = 40
var/hit_reflect_chance = 50
-/datum/armor/hooded_ablative
- melee = 10
- bullet = 10
- laser = 60
- energy = 60
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/hooded/ablative/Initialize(mapload)
. = ..()
allowed = GLOB.security_vest_allowed
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 74a93969069..145c337e8ca 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -504,17 +504,6 @@
material_flags = MATERIAL_EFFECTS | MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS//Can change color and add prefix
armor_type = /datum/armor/knight_greyscale
-/datum/armor/knight_greyscale
- melee = 35
- bullet = 10
- laser = 10
- energy = 10
- bomb = 10
- bio = 10
- fire = 40
- acid = 40
- wound = 15
-
/obj/item/clothing/suit/armor/vest/durathread
name = "durathread vest"
desc = "A vest made of durathread with strips of leather acting as trauma plates."
diff --git a/code/modules/clothing/suits/chaplainsuits.dm b/code/modules/clothing/suits/chaplainsuits.dm
index 30b93e38173..2ec40c5a333 100644
--- a/code/modules/clothing/suits/chaplainsuits.dm
+++ b/code/modules/clothing/suits/chaplainsuits.dm
@@ -27,15 +27,6 @@
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/cup/glass/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
//Suits
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/holidaypriest
name = "holiday priest"
desc = "This is a nice holiday, my son."
@@ -44,15 +35,6 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/nun
name = "nun robe"
desc = "Maximum piety in this star system."
@@ -61,15 +43,6 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
flags_inv = HIDEJUMPSUIT
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/bishoprobe
name = "bishop's robes"
desc = "Glad to see the tithes you collected were well spent."
@@ -78,15 +51,6 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/armor/studentuni
name = "student robe"
desc = "The uniform of a bygone institute of learning."
@@ -94,15 +58,6 @@
inhand_icon_state = null
body_parts_covered = ARMS|CHEST
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/armor/witchhunter
name = "witchunter garb"
desc = "This worn outfit saw much use back in the day."
@@ -110,15 +65,6 @@
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|ARMS
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/hooded/chaplainsuit/monkhabit
name = "monk's habit"
desc = "A few steps above rended sackcloth."
@@ -129,15 +75,6 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS
hoodtype = /obj/item/clothing/head/hooded/monkhabit
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/head/hooded/monkhabit
name = "monk's hood"
desc = "For when a man wants to cover up his tonsure."
@@ -148,15 +85,6 @@
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/monkrobeeast
name = "eastern monk's robes"
desc = "Best combined with a shaved head."
@@ -165,15 +93,6 @@
body_parts_covered = GROIN|LEGS
flags_inv = HIDEJUMPSUIT
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/whiterobe
name = "white robe"
desc = "Good for clerics and sleepy crewmembers."
@@ -182,15 +101,6 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/suit/chaplainsuit/clownpriest
name = "Robes of the Honkmother"
desc = "Meant for a clown of the cloth."
@@ -200,15 +110,6 @@
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/megaphone/clown, /obj/item/soap, /obj/item/food/pie/cream, /obj/item/bikehorn, /obj/item/bikehorn/golden, /obj/item/bikehorn/airhorn, /obj/item/instrument/bikehorn, /obj/item/reagent_containers/cup/soda_cans/canned_laughter, /obj/item/toy/crayon, /obj/item/toy/crayon/spraycan, /obj/item/toy/crayon/spraycan/lubecan, /obj/item/grown/bananapeel, /obj/item/food/grown/banana)
-/datum/armor/chaplainsuit_armor
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
- wound = 20
-
/obj/item/clothing/head/helmet/chaplain/clock
name = "forgotten helmet"
desc = "It has the unyielding gaze of a god eternally forgotten."
@@ -237,14 +138,6 @@
slowdown = 0
clothing_flags = NONE
-/datum/armor/chaplain_clock
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/head/helmet/chaplain
name = "crusader helmet"
desc = "Deus Vult."
@@ -275,14 +168,6 @@
slowdown = 0
clothing_flags = NONE
-/datum/armor/helmet_chaplain
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/head/helmet/chaplain/cage
name = "cage"
desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is."
@@ -291,42 +176,18 @@
inhand_icon_state = null
worn_y_offset = 7
-/datum/armor/helmet_chaplain
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/head/helmet/chaplain/ancient
name = "ancient helmet"
desc = "None may pass!"
icon_state = "knight_ancient"
inhand_icon_state = null
-/datum/armor/helmet_chaplain
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/suit/chaplainsuit/armor/ancient
name = "ancient armour"
desc = "Defend the treasure..."
icon_state = "knight_ancient"
inhand_icon_state = null
-/datum/armor/helmet_chaplain
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/head/helmet/chaplain/witchunter_hat
name = "witchunter hat"
desc = "This hat saw much use back in the day."
@@ -335,14 +196,6 @@
flags_cover = HEADCOVERSEYES
flags_inv = HIDEEYES
-/datum/armor/helmet_chaplain
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/head/helmet/chaplain/adept
name = "adept hood"
desc = "Its only heretical when others do it."
@@ -351,28 +204,12 @@
flags_cover = HEADCOVERSEYES
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
-/datum/armor/helmet_chaplain
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/suit/chaplainsuit/armor/adept
name = "adept robes"
desc = "The ideal outfit for burning the unfaithful."
icon_state = "crusader"
inhand_icon_state = null
-/datum/armor/helmet_chaplain
- melee = 50
- bullet = 10
- laser = 10
- energy = 10
- fire = 80
- acid = 80
-
/obj/item/clothing/suit/chaplainsuit/armor/crusader
name = "Crusader's Armour"
desc = "Armour that's comprised of metal and cloth."
@@ -394,27 +231,9 @@
/obj/item/clothing/suit/chaplainsuit/armor/crusader/red
icon_state = "crusader-red"
-/datum/armor/armor_crusader
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 60
- fire = 60
- acid = 60
-
/obj/item/clothing/suit/chaplainsuit/armor/crusader/blue
icon_state = "crusader-blue"
-/datum/armor/armor_crusader
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 60
- fire = 60
- acid = 60
-
/obj/item/clothing/suit/hooded/chaplain_hoodie
name = "follower hoodie"
desc = "Hoodie made for acolytes of the chaplain."
@@ -426,15 +245,6 @@
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/cup/glass/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
hoodtype = /obj/item/clothing/head/hooded/chaplain_hood
-/datum/armor/armor_crusader
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 60
- fire = 60
- acid = 60
-
/obj/item/clothing/head/hooded/chaplain_hood
name = "follower hood"
desc = "Hood made for acolytes of the chaplain."
@@ -444,15 +254,6 @@
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
-/datum/armor/armor_crusader
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 60
- fire = 60
- acid = 60
-
/obj/item/clothing/suit/hooded/chaplain_hoodie/leader
name = "leader hoodie"
desc = "Now you're ready for some 50 dollar bling water."
@@ -460,29 +261,11 @@
inhand_icon_state = null
hoodtype = /obj/item/clothing/head/hooded/chaplain_hood/leader
-/datum/armor/armor_crusader
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 60
- fire = 60
- acid = 60
-
/obj/item/clothing/head/hooded/chaplain_hood/leader
name = "leader hood"
desc = "I mean, you don't /have/ to seek bling water. I just think you should."
icon_state = "chaplain_hood_leader"
-/datum/armor/armor_crusader
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 60
- fire = 60
- acid = 60
-
/obj/item/clothing/suit/chaplainsuit/shrinehand
name = "shrinehand robe"
desc = "Won't help you communicate with spirits, but you'll certainly look the part."
diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm
index fcb2228efd5..aef6b5b9a58 100644
--- a/code/modules/clothing/suits/costume.dm
+++ b/code/modules/clothing/suits/costume.dm
@@ -35,16 +35,6 @@
strip_delay = 40
equip_delay_other = 20
-/datum/armor/pirate_armored
- melee = 30
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 60
- acid = 75
-
/obj/item/clothing/suit/costume/pirate/captain
name = "pirate captain coat"
desc = "Yarr."
@@ -56,16 +46,6 @@
strip_delay = 40
equip_delay_other = 20
-/datum/armor/pirate_armored
- melee = 30
- bullet = 50
- laser = 30
- energy = 40
- bomb = 30
- bio = 30
- fire = 60
- acid = 75
-
/obj/item/clothing/suit/costume/cyborg_suit
name = "cyborg suit"
desc = "Suit for a cyborg costume."
@@ -495,14 +475,6 @@
icon_state = "clockwork_cuirass_old"
armor_type = /datum/armor/costume_bronze
-/datum/armor/costume_bronze
- melee = 5
- laser = -5
- energy = -15
- bomb = 10
- fire = 20
- acid = 20
-
/obj/item/clothing/suit/hooded/mysticrobe
name = "mystic's robe"
desc = "Wearing this makes you feel more attuned with the nature of the universe... as well as a bit more irresponsible. "
diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm
index f527fc61de1..d441db0efad 100644
--- a/code/modules/clothing/suits/jacket.dm
+++ b/code/modules/clothing/suits/jacket.dm
@@ -91,9 +91,6 @@
inhand_icon_state = null
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/radio)
-/datum/armor/puffer_vest
- bio = 30
-
/obj/item/clothing/suit/jacket/letterman
name = "letterman jacket"
desc = "A classic brown letterman jacket. Looks pretty hot and heavy."
@@ -101,9 +98,6 @@
inhand_icon_state = null
species_exception = list(/datum/species/golem)
-/datum/armor/puffer_vest
- bio = 30
-
/obj/item/clothing/suit/jacket/letterman_red
name = "red letterman jacket"
desc = "A letterman jacket in a sick red color. Radical."
@@ -111,9 +105,6 @@
inhand_icon_state = null
species_exception = list(/datum/species/golem)
-/datum/armor/puffer_vest
- bio = 30
-
/obj/item/clothing/suit/jacket/letterman_syndie
name = "blood-red letterman jacket"
desc = "Oddly, this jacket seems to have a large S on the back..."
@@ -121,9 +112,6 @@
inhand_icon_state = null
species_exception = list(/datum/species/golem)
-/datum/armor/puffer_vest
- bio = 30
-
/obj/item/clothing/suit/jacket/letterman_nanotrasen
name = "blue letterman jacket"
desc = "A blue letterman jacket with a proud Nanotrasen N on the back. The tag says that it was made in Space China."
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index a5a3d669045..e04da705b22 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -80,11 +80,6 @@
desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder."
icon_state = "labcoat_chem"
-/datum/armor/toggle_labcoat
- bio = 50
- fire = 50
- acid = 50
-
/obj/item/clothing/suit/toggle/labcoat/chemist/Initialize(mapload)
. = ..()
allowed += /obj/item/storage/bag/chemistry
@@ -94,11 +89,6 @@
desc = "A suit that protects against minor chemical spills. Has a green stripe on the shoulder."
icon_state = "labcoat_vir"
-/datum/armor/toggle_labcoat
- bio = 50
- fire = 50
- acid = 50
-
/obj/item/clothing/suit/toggle/labcoat/virologist/Initialize(mapload)
. = ..()
allowed += /obj/item/storage/bag/bio
@@ -108,11 +98,6 @@
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
icon_state = "labcoat_sci"
-/datum/armor/toggle_labcoat
- bio = 50
- fire = 50
- acid = 50
-
/obj/item/clothing/suit/toggle/labcoat/science/Initialize(mapload)
. = ..()
allowed += /obj/item/storage/bag/xeno
diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm
index ee1c379b92d..39190066b52 100644
--- a/code/modules/clothing/suits/reactive_armour.dm
+++ b/code/modules/clothing/suits/reactive_armour.dm
@@ -122,10 +122,6 @@
reactivearmor_cooldown_duration = 10 SECONDS
var/tele_range = 6
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/teleport/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
owner.visible_message(span_danger("The reactive teleport system flings [owner] clear of [attack_text]!"))
playsound(get_turf(owner),'sound/magic/blink.ogg', 100, TRUE)
@@ -150,10 +146,6 @@
cooldown_message = span_danger("The reactive incendiary armor activates, but fails to send out flames as it is still recharging its flame jets!")
emp_message = span_warning("The reactive incendiary armor's targeting system begins rebooting...")
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/fire/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
owner.visible_message(span_danger("[src] blocks [attack_text], sending out jets of flame!"))
playsound(get_turf(owner),'sound/magic/fireball.ogg', 100, TRUE)
@@ -190,10 +182,6 @@
var/animation_time = 2 SECONDS
var/in_stealth = FALSE
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/stealth/cooldown_activation(mob/living/carbon/human/owner)
if(in_stealth)
return //we don't want the cooldown message either)
@@ -243,10 +231,6 @@
/// What flags do we pass to the zaps we give off?
var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/tesla/cooldown_activation(mob/living/carbon/human/owner)
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
sparks.set_up(1, 1, src)
@@ -276,10 +260,6 @@
emp_message = span_warning("The repulse generator is reset to default settings...")
var/repulse_force = MOVE_FORCE_EXTREMELY_STRONG
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/repulse/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
playsound(get_turf(owner),'sound/magic/repulse.ogg', 100, TRUE)
owner.visible_message(span_danger("[src] blocks [attack_text], converting the attack into a wave of force!"))
@@ -316,10 +296,6 @@
emp_message = span_danger("The reactive table armor's fabricators click and whirr ominously for a moment...")
var/tele_range = 10
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/table/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
owner.visible_message(span_danger("The reactive teleport system flings [owner] clear of [attack_text] and slams [owner.p_them()] into a fabricated table!"))
owner.visible_message("[owner] GOES ON THE TABLE!!!")
@@ -352,10 +328,6 @@
emp_message = span_warning("You feel the backsurge of a mind pulse.")
clothing_traits = list(TRAIT_MADNESS_IMMUNE)
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/hallucinating/cooldown_activation(mob/living/carbon/human/owner)
var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread
sparks.set_up(1, 1, src)
@@ -396,10 +368,6 @@
var/static/list/l_legs
var/static/list/r_legs
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/bioscrambling/Initialize(mapload)
. = ..()
if(!chests)
@@ -469,10 +437,6 @@
cooldown_message = span_danger("The reactive barrier system is still recharging! It fails to activate!")
reactivearmor_cooldown_duration = 10 SECONDS
-/datum/armor/armor_reactive
- fire = 100
- acid = 100
-
/obj/item/clothing/suit/armor/reactive/barricade/reactive_activation(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
playsound(get_turf(owner),'sound/magic/repulse.ogg', 100, TRUE)
owner.visible_message(span_danger("The reactive armor interposes matter from another world between [src] and [attack_text]!"))
diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm
index 96e6c0bca92..64ecc0b5c18 100644
--- a/code/modules/clothing/suits/wintercoats.dm
+++ b/code/modules/clothing/suits/wintercoats.dm
@@ -326,11 +326,6 @@
armor_type = /datum/armor/medical_cmo
// Chemist
-/datum/armor/medical_cmo
- bio = 50
- fire = 20
- acid = 30
-
/obj/item/clothing/suit/hooded/wintercoat/medical/chemistry
name = "chemistry winter coat"
desc = "A lab-grade winter coat made with acid resistant polymers. For the enterprising chemist who was exiled to a frozen wasteland on the go."
@@ -435,10 +430,6 @@
armor_type = /datum/armor/science_rd
// Roboticist
-/datum/armor/science_rd
- bomb = 20
- fire = 30
-
/obj/item/clothing/suit/hooded/wintercoat/science/robotics
name = "robotics winter coat"
desc = "A black winter coat with a badass flaming robotic skull for the zipper tab. This one has bright red designs and a few useless buttons."
@@ -526,10 +517,6 @@
armor_type = /datum/armor/engineering_ce
// Atmospherics Technician
-/datum/armor/engineering_ce
- fire = 30
- acid = 10
-
/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
name = "atmospherics winter coat"
desc = "A yellow and blue winter coat. The zipper pull-tab is made to look like a miniature breath mask."
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 5c8de11bb68..0dfa32e4b05 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -59,7 +59,7 @@
return screentip_change ? CONTEXTUAL_SCREENTIP_SET : NONE
-/obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
+/obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use = null, mutant_styles = NONE)
. = ..()
if(isinhands)
return
@@ -69,7 +69,7 @@
if(GET_ATOM_BLOOD_DNA_LENGTH(src))
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood")
if(accessory_overlay)
- . += accessory_overlay
+ . += modify_accessory_overlay() // SKYRAT EDIT CHANGE - ORIGINAL: . += accessory_overlay
/obj/item/clothing/under/attackby(obj/item/I, mob/user, params)
if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil))
@@ -365,10 +365,6 @@
/obj/item/clothing/under/rank
dying_key = DYE_REGISTRY_UNDER
-/datum/armor/clothing_under
- bio = 10
- wound = 5
-
/obj/item/clothing/under/proc/dump_attachment()
if(!attached_accessory)
return
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index 9e3a3e06fb5..55778bba1e2 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -268,12 +268,6 @@
species_exception = list(/datum/species/golem)
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/buttondown/slacks
name = "buttondown shirt with slacks"
desc = "A fancy buttondown shirt with slacks."
@@ -284,12 +278,6 @@
greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C"
flags_1 = IS_PLAYER_COLORABLE_1
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/buttondown/shorts
name = "buttondown shirt with shorts"
desc = "A fancy buttondown shirt with shorts."
@@ -300,12 +288,6 @@
greyscale_colors = "#EEEEEE#EE8E2E#222227#D8D39C"
flags_1 = IS_PLAYER_COLORABLE_1
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/jackbros
name = "jack bros outfit"
desc = "For when it's time to hee some hos."
@@ -313,24 +295,12 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/deckers
name = "deckers outfit"
icon_state = "decker_jumpsuit"
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/football_suit
name = "football uniform"
icon_state = "football_suit"
@@ -341,12 +311,6 @@
greyscale_colors = "#D74722"
flags_1 = IS_PLAYER_COLORABLE_1
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/swagoutfit
name = "Swag outfit"
desc = "Why don't you go secure some bitches?"
@@ -354,12 +318,6 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/referee
name = "referee uniform"
desc = "A standard black and white striped uniform to signal authority."
@@ -367,36 +325,18 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/joker
name = "comedian suit"
desc = "The worst part of having a mental illness is people expect you to behave as if you don't."
icon_state = "joker"
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/yuri
name = "yuri initiate jumpsuit"
icon_state = "yuri_uniform"
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/dutch
name = "dutch's suit"
desc = "You can feel a god damn plan coming on."
@@ -404,24 +344,12 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/osi
name = "O.S.I. jumpsuit"
icon_state = "osi_jumpsuit"
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/costume_russian_officer
- melee = 10
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/costume/tmc
name = "Lost MC clothing"
icon_state = "tmc_jumpsuit"
diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
index a96c987957c..52a85cf31cf 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
@@ -124,11 +124,6 @@
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
-/datum/armor/under_plasmaman
- bio = 100
- fire = 95
- acid = 95
-
/obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H)
if(!istype(H))
return
diff --git a/code/modules/clothing/under/jobs/Plasmaman/command.dm b/code/modules/clothing/under/jobs/Plasmaman/command.dm
index 7f5765b47d0..c3b92bc874b 100644
--- a/code/modules/clothing/under/jobs/Plasmaman/command.dm
+++ b/code/modules/clothing/under/jobs/Plasmaman/command.dm
@@ -28,13 +28,6 @@
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 100
- fire = 95
- acid = 95
- wound = 10
-
/obj/item/clothing/under/plasmaman/chief_engineer
name = "chief engineer's plasma envirosuit"
desc = "An air-tight suit designed to be used by plasmamen insane enough to achieve the rank of \"Chief Engineer\"."
diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm
index c51b257e5bf..087cf57cdd9 100644
--- a/code/modules/clothing/under/jobs/command.dm
+++ b/code/modules/clothing/under/jobs/command.dm
@@ -23,10 +23,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_captain
- bio = 10
- wound = 15
-
/obj/item/clothing/under/rank/captain/suit
name = "captain's suit"
desc = "A green suit and yellow necktie. Exemplifies authority."
@@ -34,10 +30,6 @@
inhand_icon_state = "dg_suit"
can_adjust = FALSE
-/datum/armor/rank_captain
- bio = 10
- wound = 15
-
/obj/item/clothing/under/rank/captain/suit/skirt
name = "green suitskirt"
desc = "A green suitskirt and yellow necktie. Exemplifies authority."
@@ -48,10 +40,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_captain
- bio = 10
- wound = 15
-
/obj/item/clothing/under/rank/captain/parade
name = "captain's formal uniform"
desc = "A captain's luxury-wear, for special occasions."
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index 3760a1003a2..b99e3fc90ec 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -33,22 +33,12 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/engineering_chief_engineer
- bio = 10
- fire = 80
- acid = 40
-
/obj/item/clothing/under/rank/engineering/atmospheric_technician
desc = "It's a jumpsuit worn by atmospheric technicians. Made from fire resistant materials."
name = "atmospheric technician's jumpsuit"
icon_state = "atmos"
inhand_icon_state = "atmos_suit"
-/datum/armor/engineering_chief_engineer
- bio = 10
- fire = 80
- acid = 40
-
/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt
name = "atmospheric technician's jumpskirt"
desc = "It's a jumpskirt worn by atmospheric technicians. Made from fire resistant materials."
@@ -59,11 +49,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/engineering_chief_engineer
- bio = 10
- fire = 80
- acid = 40
-
/obj/item/clothing/under/rank/engineering/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. Made from fire resistant materials."
name = "engineer's jumpsuit"
@@ -71,11 +56,6 @@
inhand_icon_state = "engi_suit"
species_exception = list(/datum/species/golem/uranium)
-/datum/armor/engineering_chief_engineer
- bio = 10
- fire = 80
- acid = 40
-
/obj/item/clothing/under/rank/engineering/engineer/hazard
name = "engineer's hazard jumpsuit"
desc = "A high visibility jumpsuit. Made from fire resistant materials."
@@ -83,11 +63,6 @@
inhand_icon_state = "syndicate-orange"
alt_covers_chest = TRUE
-/datum/armor/engineering_chief_engineer
- bio = 10
- fire = 80
- acid = 40
-
/obj/item/clothing/under/rank/engineering/engineer/skirt
name = "engineer's jumpskirt"
desc = "It's an orange high visibility jumpskirt worn by engineers. Made from fire resistant materials."
diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm
index 79224669e98..4014814ee23 100644
--- a/code/modules/clothing/under/jobs/medical.dm
+++ b/code/modules/clothing/under/jobs/medical.dm
@@ -12,9 +12,6 @@
icon_state = "medical"
inhand_icon_state = "w_suit"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/doctor/skirt
name = "medical doctor's jumpskirt"
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel."
@@ -25,18 +22,12 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/chief_medical_officer
desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
name = "chief medical officer's jumpsuit"
icon_state = "cmo"
inhand_icon_state = "w_suit"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
name = "chief medical officer's jumpskirt"
desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
@@ -47,18 +38,12 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/chief_medical_officer/scrubs
name = "chief medical officer's scrubs"
desc = "A distinctive set of white and turquoise scrubs given to chief medical officers who desire a clinical look."
icon_state = "scrubscmo"
inhand_icon_state = "w_suit"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck
name = "chief medical officer's turtleneck"
desc = "A light blue turtleneck and tan khakis, for a chief medical officer with a superior sense of style."
@@ -68,9 +53,6 @@
alt_covers_chest = TRUE
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck/skirt
name = "chief medical officer's turtleneck skirt"
desc = "A light blue turtleneck and tan khaki skirt, for a chief medical officer with a superior sense of style."
@@ -81,18 +63,12 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/virologist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
name = "virologist's jumpsuit"
icon_state = "virology"
inhand_icon_state = "w_suit"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/virologist/skirt
name = "virologist's jumpskirt"
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
@@ -103,36 +79,21 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/scrubs
name = "medical scrubs"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/scrubs/blue
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/scrubs/green
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/scrubs/purple
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubswine"
-/datum/armor/rank_medical
- bio = 50
-
/obj/item/clothing/under/rank/medical/chemist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it."
name = "chemist's jumpsuit"
@@ -155,22 +116,12 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/medical_chemist
- bio = 10
- fire = 50
- acid = 65
-
/obj/item/clothing/under/rank/medical/paramedic
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
name = "paramedic jumpsuit"
icon_state = "paramedic"
inhand_icon_state = "w_suit"
-/datum/armor/medical_chemist
- bio = 10
- fire = 50
- acid = 65
-
/obj/item/clothing/under/rank/medical/paramedic/skirt
name = "paramedic jumpskirt"
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
@@ -181,11 +132,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/medical_chemist
- bio = 10
- fire = 50
- acid = 65
-
/obj/item/clothing/under/rank/medical/doctor/nurse
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
name = "nurse's suit"
diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm
index 72a3ff5a2a0..b761f8ee4c9 100644
--- a/code/modules/clothing/under/jobs/rnd.dm
+++ b/code/modules/clothing/under/jobs/rnd.dm
@@ -20,11 +20,6 @@
has_sensor = NO_SENSORS
random_sensor = FALSE
-/datum/armor/rnd_research_director
- bomb = 10
- bio = 10
- acid = 35
-
/obj/item/clothing/under/rank/rnd/research_director/skirt
name = "research director's vest suitskirt"
desc = "It's a suitskirt worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants."
@@ -35,11 +30,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rnd_research_director
- bomb = 10
- bio = 10
- acid = 35
-
/obj/item/clothing/under/rank/rnd/research_director/alt
desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants."
name = "research director's tan suit"
@@ -48,11 +38,6 @@
can_adjust = TRUE
alt_covers_chest = TRUE
-/datum/armor/rnd_research_director
- bomb = 10
- bio = 10
- acid = 35
-
/obj/item/clothing/under/rank/rnd/research_director/alt/skirt
name = "research director's tan suitskirt"
desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants."
@@ -63,11 +48,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rnd_research_director
- bomb = 10
- bio = 10
- acid = 35
-
/obj/item/clothing/under/rank/rnd/research_director/turtleneck
desc = "A Nanotrasen-purple turtleneck and black jeans, for a director with a superior sense of style."
name = "research director's turtleneck"
@@ -76,11 +56,6 @@
can_adjust = TRUE
alt_covers_chest = TRUE
-/datum/armor/rnd_research_director
- bomb = 10
- bio = 10
- acid = 35
-
/obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt
name = "research director's turtleneck skirt"
desc = "A Nanotrasen-purple turtleneck and a black skirt, for a director with a superior sense of style."
@@ -91,11 +66,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rnd_research_director
- bomb = 10
- bio = 10
- acid = 35
-
/obj/item/clothing/under/rank/rnd/scientist
desc = "It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist."
name = "scientist's jumpsuit"
@@ -116,9 +86,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rnd_scientist
- bio = 50
-
/obj/item/clothing/under/rank/rnd/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
name = "roboticist's jumpsuit"
@@ -126,9 +93,6 @@
inhand_icon_state = null
resistance_flags = NONE
-/datum/armor/rnd_scientist
- bio = 50
-
/obj/item/clothing/under/rank/rnd/roboticist/skirt
name = "roboticist's jumpskirt"
desc = "It's a slimming black with reinforced seams; great for industrial work."
@@ -139,9 +103,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rnd_scientist
- bio = 50
-
/obj/item/clothing/under/rank/rnd/geneticist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it."
name = "geneticist's jumpsuit"
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index c5845769932..a204f899910 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -30,26 +30,12 @@
icon_state = "rsecurity"
inhand_icon_state = "r_suit"
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/officer/grey
name = "grey security jumpsuit"
desc = "A tactical relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood."
icon_state = "security"
inhand_icon_state = "gy_suit"
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/officer/skirt
name = "security skirt"
desc = "A \"tactical\" security uniform with the legs replaced by a skirt."
@@ -60,13 +46,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/officer/blueshirt
name = "blue shirt and tie"
desc = "I'm a little busy right now, Calhoun."
@@ -74,13 +53,6 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/officer/formal
name = "security officer's formal uniform"
desc = "The latest in fashionable security outfits."
@@ -88,13 +60,6 @@
inhand_icon_state = null
alt_covers_chest = TRUE
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/constable
name = "constable outfit"
desc = "A british looking outfit."
@@ -104,39 +69,18 @@
custom_price = PAYCHECK_COMMAND
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/warden
name = "security suit"
desc = "A formal security suit for officers complete with Nanotrasen belt buckle."
icon_state = "rwarden"
inhand_icon_state = "r_suit"
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/warden/grey
name = "grey security suit"
desc = "A formal relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood."
icon_state = "warden"
inhand_icon_state = "gy_suit"
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/warden/skirt
name = "warden's suitskirt"
desc = "A formal security suitskirt for officers complete with Nanotrasen belt buckle."
@@ -147,13 +91,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/warden/formal
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
name = "warden's formal uniform"
@@ -164,13 +101,6 @@
/*
* Detective
*/
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/detective
name = "hard-worn suit"
desc = "Someone who wears this means business."
@@ -178,13 +108,6 @@
inhand_icon_state = "det"
alt_covers_chest = TRUE
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/detective/skirt
name = "detective's suitskirt"
desc = "Someone who wears this means business."
@@ -196,13 +119,6 @@
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/detective/noir
name = "noir suit"
desc = "A hard-boiled private investigator's dark suit, complete with tie clip."
@@ -210,13 +126,6 @@
inhand_icon_state = null
alt_covers_chest = TRUE
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/detective/noir/skirt
name = "noir suitskirt"
desc = "A hard-boiled private investigator's grey suitskirt, complete with tie clip."
@@ -231,13 +140,6 @@
/*
* Head of Security
*/
-/datum/armor/rank_security
- melee = 10
- bio = 10
- fire = 30
- acid = 30
- wound = 10
-
/obj/item/clothing/under/rank/security/head_of_security
name = "head of security's uniform"
desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security."
@@ -263,26 +165,12 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/head_of_security/grey
name = "head of security's grey jumpsuit"
desc = "There are old men, and there are bold men, but there are very few old, bold men."
icon_state = "hos"
inhand_icon_state = "gy_suit"
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/head_of_security/alt
name = "head of security's turtleneck"
desc = "A stylish alternative to the normal head of security jumpsuit, complete with tactical pants."
@@ -290,13 +178,6 @@
inhand_icon_state = "bl_suit"
alt_covers_chest = TRUE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/head_of_security/alt/skirt
name = "head of security's turtleneck skirt"
desc = "A stylish alternative to the normal head of security jumpsuit, complete with a tactical skirt."
@@ -308,13 +189,6 @@
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/head_of_security/parade
name = "head of security's parade uniform"
desc = "A male head of security's luxury-wear, for special occasions."
@@ -322,13 +196,6 @@
inhand_icon_state = "r_suit"
can_adjust = FALSE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/head_of_security/parade/female
name = "head of security's formal uniform"
desc = "A female head of security's luxury-wear, for special occasions."
@@ -337,13 +204,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
can_adjust = FALSE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/head_of_security/formal
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
name = "head of security's formal uniform"
@@ -355,13 +215,6 @@
*Spacepol
*/
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/officer/spacepol
name = "police uniform"
desc = "Space not controlled by megacorporations, planets, or pirates is under the jurisdiction of Spacepol."
@@ -369,13 +222,6 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/prisoner
name = "prison jumpsuit"
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
@@ -393,13 +239,6 @@
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/prisoner/skirt
name = "prison jumpskirt"
desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position."
@@ -417,13 +256,6 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/officer/beatcop
name = "space police uniform"
desc = "A police uniform often found in the lines at donut shops."
@@ -431,13 +263,6 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/detective/disco
name = "superstar cop uniform"
desc = "Flare cut trousers and a dirty shirt that might have been classy before someone took a piss in the armpits. It's the dress of a superstar."
@@ -445,13 +270,6 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/security_head_of_security
- melee = 10
- bio = 10
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/under/rank/security/detective/kim
name = "aerostatic suit"
desc = "A crisp and well-pressed suit; professional, comfortable and curiously authoritative."
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 6a2b7d4c69c..68749df3ed0 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -75,16 +75,6 @@
can_adjust = FALSE
has_sensor = NO_SENSORS
-/datum/armor/misc_adminsuit
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/item/clothing/under/misc/overalls
name = "laborer's overalls"
desc = "A set of durable overalls for getting the job done."
@@ -93,16 +83,6 @@
can_adjust = FALSE
custom_price = PAYCHECK_CREW
-/datum/armor/misc_adminsuit
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/item/clothing/under/misc/assistantformal
name = "assistant's formal uniform"
desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown."
@@ -110,16 +90,6 @@
inhand_icon_state = "gy_suit"
can_adjust = FALSE
-/datum/armor/misc_adminsuit
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/item/clothing/under/misc/durathread
name = "durathread jumpsuit"
desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer."
@@ -159,12 +129,6 @@
inhand_icon_state = null
can_adjust = FALSE
-/datum/armor/misc_bouncer
- melee = 5
- bio = 10
- fire = 30
- acid = 30
-
/obj/item/clothing/under/misc/syndicate_souvenir
name = "syndicate souvenir tee"
desc = "I got kidnapped by a Syndicate operative and all I got was this lousy t-shirt!"
diff --git a/code/modules/forensics/forensics_helpers.dm b/code/modules/forensics/forensics_helpers.dm
index 558153a3fdc..081d6f25d4f 100644
--- a/code/modules/forensics/forensics_helpers.dm
+++ b/code/modules/forensics/forensics_helpers.dm
@@ -76,6 +76,11 @@
forensics = new(src, blood_DNA = blood_DNA_to_add)
return TRUE
+/obj/item/add_blood_DNA(list/blood_DNA_to_add)
+ if(item_flags & NO_BLOOD_ON_ITEM)
+ return FALSE
+ return ..()
+
/obj/item/clothing/gloves/add_blood_DNA(list/blood_dna, list/datum/disease/diseases)
transfer_blood = rand(2, 4)
return ..()
diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm
deleted file mode 100644
index 054f5d59abc..00000000000
--- a/code/modules/holodeck/area_copy.dm
+++ /dev/null
@@ -1,147 +0,0 @@
-//Vars that will not be copied when using /DuplicateObject
-GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
- "tag", "datum_components", "area", "type", "loc", "locs", "vars", "parent", "parent_type", "verbs", "ckey", "key",
- "power_supply", "contents", "reagents", "stat", "x", "y", "z", "group", "atmos_adjacent_turfs", "comp_lookup",
- "important_recursive_contents", "bodyparts", "internal_organs", "hand_bodyparts", "overlays_standing", "hud_list",
- "actions", "AIStatus", "appearance", "managed_overlays", "managed_vis_overlays", "computer_id", "lastKnownIP", "implants",
- "tgui_shared_states"
- ))
-
-/proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc, atom/newloc = null, nerf, holoitem)
- RETURN_TYPE(original.type)
- if(!original)
- return
- var/atom/O
-
- if(sameloc)
- O = new original.type(original.loc)
- else
- O = new original.type(newloc)
-
- if(perfectcopy && O && original)
- for(var/V in original.vars - GLOB.duplicate_forbidden_vars)
- if(islist(original.vars[V]))
- var/list/L = original.vars[V]
- O.vars[V] = L.Copy()
- else if(istype(original.vars[V], /datum) || ismob(original.vars[V]))
- continue // this would reference the original's object, that will break when it is used or deleted.
- else
- O.vars[V] = original.vars[V]
-
- if(isobj(O))
- var/obj/N = O
- if(holoitem)
- N.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF // holoitems do not burn
-
- if(nerf && isitem(O))
- var/obj/item/I = O
- I.damtype = STAMINA // thou shalt not
-
- N.update_appearance()
- if(ismachinery(O))
- var/obj/machinery/M = O
- M.power_change()
- if(istype(O, /obj/machinery/button))
- var/obj/machinery/button/B = O
- B.setup_device()
-
- if(holoitem)
- O.flags_1 |= HOLOGRAM_1
- for(var/atom/thing in O)
- thing.flags_1 |= HOLOGRAM_1
- if(ismachinery(O))
- var/obj/machinery/M = O
- for(var/atom/contained_atom in M.component_parts)
- contained_atom.flags_1 |= HOLOGRAM_1
- if(M.circuit)
- M.circuit.flags_1 |= HOLOGRAM_1
-
- if(ismob(O)) //Overlays are carried over despite disallowing them, if a fix is found remove this.
- var/mob/M = O
- M.cut_overlays()
- M.regenerate_icons()
- return O
-
-
-/area/proc/copy_contents_to(area/A , platingRequired = 0, nerf_weapons = 0 )
- //Takes: Area. Optional: If it should copy to areas that don't have plating
- //Returns: Nothing.
- //Notes: Attempts to move the contents of one area to another area.
- // Movement based on lower left corner. Tiles that do not fit
- // into the new area will not be moved.
-
- if(!A || !src)
- return 0
-
- var/list/turfs_src = get_area_turfs(src.type)
- var/list/turfs_trg = get_area_turfs(A.type)
-
- var/src_min_x = 99999
- var/src_min_y = 99999
- var/list/refined_src = new/list()
-
- for (var/turf/T in turfs_src)
- src_min_x = min(src_min_x,T.x)
- src_min_y = min(src_min_y,T.y)
- for (var/turf/T in turfs_src)
- refined_src[T] = "[T.x - src_min_x].[T.y - src_min_y]"
-
- var/trg_min_x = 99999
- var/trg_min_y = 99999
- var/list/refined_trg = new/list()
-
- for (var/turf/T in turfs_trg)
- trg_min_x = min(trg_min_x,T.x)
- trg_min_y = min(trg_min_y,T.y)
- for (var/turf/T in turfs_trg)
- refined_trg["[T.x - trg_min_x].[T.y - trg_min_y]"] = T
-
- var/list/toupdate = new/list()
-
- var/copiedobjs = list()
-
- for (var/turf/T in refined_src)
- var/coordstring = refined_src[T]
- var/turf/B = refined_trg[coordstring]
- if(!istype(B))
- continue
-
- if(platingRequired)
- if(isspaceturf(B))
- continue
-
- var/old_dir1 = T.dir
- var/old_icon_state1 = T.icon_state
- var/old_icon1 = T.icon
-
- B = B.ChangeTurf(T.type)
- B.setDir(old_dir1)
- B.icon = old_icon1
- B.icon_state = old_icon_state1
-
- for(var/obj/O in T)
- var/obj/O2 = DuplicateObject(O , perfectcopy=TRUE, newloc = B, nerf=nerf_weapons, holoitem=TRUE)
- if(!O2)
- continue
- copiedobjs += O2.get_all_contents()
-
- for(var/mob/M in T)
- if(iscameramob(M))
- continue // If we need to check for more mobs, I'll add a variable
- var/mob/SM = DuplicateObject(M , perfectcopy=TRUE, newloc = B, holoitem=TRUE)
- copiedobjs += SM.get_all_contents()
-
- for(var/V in T.vars - GLOB.duplicate_forbidden_vars)
- if(V == "air")
- var/turf/open/O1 = B
- var/turf/open/O2 = T
- O1.air.copy_from(O2.return_air())
- continue
- B.vars[V] = T.vars[V]
- toupdate += B
-
- if(toupdate.len)
- for(var/turf/T1 in toupdate)
- CALCULATE_ADJACENT_TURFS(T1, KILL_EXCITED)
-
- return copiedobjs
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index fee4b6da3ee..b80fa655795 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -344,7 +344,7 @@
/obj/machinery/biogenerator/proc/create_product(datum/design/design, amount)
- if(design.make_reagents.len > 0)
+ if(design.make_reagent)
if(!beaker)
return FALSE
@@ -355,7 +355,7 @@
if(!use_biomass(design.materials, amount))
return FALSE
- beaker.reagents.add_reagent(design.make_reagents[1], amount)
+ beaker.reagents.add_reagent(design.make_reagent, amount)
if(design.build_path)
if(!use_biomass(design.materials, amount))
@@ -485,7 +485,7 @@
cat["items"] += list(list(
"id" = design.id,
"name" = design.name,
- "is_reagent" = design.make_reagents.len > 0,
+ "is_reagent" = design.make_reagent != null,
"cost" = design.materials[GET_MATERIAL_REF(/datum/material/biomass)] / efficiency,
))
data["categories"] += list(cat)
@@ -518,7 +518,7 @@
return
var/datum/design/design = SSresearch.techweb_design_by_id(id)
- amount = clamp(amount, 1, (design.make_reagents.len > 0 && beaker ? beaker.reagents.maximum_volume - beaker.reagents.total_volume : max_output))
+ amount = clamp(amount, 1, (design.make_reagent && beaker ? beaker.reagents.maximum_volume - beaker.reagents.total_volume : max_output))
if(design && !istype(design, /datum/design/error_design))
create_product(design, amount)
diff --git a/code/modules/industrial_lift/industrial_lift.dm b/code/modules/industrial_lift/industrial_lift.dm
index 5410939ba0f..8c4e82fdea8 100644
--- a/code/modules/industrial_lift/industrial_lift.dm
+++ b/code/modules/industrial_lift/industrial_lift.dm
@@ -732,11 +732,6 @@ GLOBAL_LIST_EMPTY(lifts)
lift_id = DEBUG_LIFT_ID
radial_travel = TRUE
-/datum/armor/structure_industrial_lift
- melee = 50
- fire = 80
- acid = 50
-
/obj/structure/industrial_lift/debug/open_lift_radial(mob/living/user)
var/starting_position = loc
if (!can_open_lift_radial(user,starting_position))
diff --git a/code/modules/jobs/job_types/cargo_technician.dm b/code/modules/jobs/job_types/cargo_technician.dm
index 0887ea0c084..e796c5452d8 100644
--- a/code/modules/jobs/job_types/cargo_technician.dm
+++ b/code/modules/jobs/job_types/cargo_technician.dm
@@ -32,7 +32,7 @@
/obj/item/gun/ballistic/rifle/boltaction = 1
)
rpg_title = "Merchantman"
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CAN_BE_INTERN
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
/datum/outfit/job/cargo_tech
diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm
index c1ec62d792f..78befe1b7bd 100644
--- a/code/modules/jobs/job_types/chaplain.dm
+++ b/code/modules/jobs/job_types/chaplain.dm
@@ -31,7 +31,7 @@
/obj/item/toy/plush/ratplush = 1
)
rpg_title = "Paladin"
- job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CAN_BE_INTERN
+ job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN
voice_of_god_power = 2 //Chaplains are very good at speaking with the voice of god
diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm
index 07becbc4140..5e5dbb1b38e 100644
--- a/code/modules/jobs/job_types/chemist.dm
+++ b/code/modules/jobs/job_types/chemist.dm
@@ -2,7 +2,7 @@
title = JOB_CHEMIST
description = "Supply the doctors with chemicals, make medicine, as well as \
less likable substances in the comfort of a fully reinforced room."
- department_head = list("Chief Medical Officer")
+ department_head = list(JOB_CHIEF_MEDICAL_OFFICER)
faction = FACTION_STATION
total_positions = 2
spawn_positions = 2
diff --git a/code/modules/library/bookcase.dm b/code/modules/library/bookcase.dm
index 5d5090ea2bd..897d88cc19b 100644
--- a/code/modules/library/bookcase.dm
+++ b/code/modules/library/bookcase.dm
@@ -187,9 +187,6 @@
/obj/structure/bookcase/manuals/engineering
name = "engineering manuals bookcase"
-/datum/armor/structure_bookcase
- fire = 50
-
/obj/structure/bookcase/manuals/engineering/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/engineering_construction(src)
@@ -201,9 +198,6 @@
/obj/structure/bookcase/manuals/research_and_development
name = "\improper R&D manuals bookcase"
-/datum/armor/structure_bookcase
- fire = 50
-
/obj/structure/bookcase/manuals/research_and_development/Initialize(mapload)
. = ..()
new /obj/item/book/manual/wiki/research_and_development(src)
diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm
index 8a42121310f..9365b307d88 100644
--- a/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm
+++ b/code/modules/mapfluff/ruins/lavalandruin_code/puzzle.dm
@@ -316,15 +316,6 @@
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "prison_cube"
-/datum/armor/puzzle_element_prison
- melee = 50
- bullet = 50
- laser = 50
- energy = 50
- bomb = 50
- fire = 50
- acid = 50
-
/obj/item/prisoncube/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(!proximity_flag || !isliving(target))
diff --git a/code/modules/mapping/space_management/space_reservation.dm b/code/modules/mapping/space_management/space_reservation.dm
index 48811b63b6a..b6ec8801a7e 100644
--- a/code/modules/mapping/space_management/space_reservation.dm
+++ b/code/modules/mapping/space_management/space_reservation.dm
@@ -17,6 +17,10 @@
var/list/reserved_copy = reserved_turfs.Copy()
SSmapping.used_turfs -= reserved_turfs
reserved_turfs = list()
+
+ for(var/turf/reserved_turf as anything in reserved_copy)
+ SEND_SIGNAL(reserved_turf, COMSIG_TURF_RESERVATION_RELEASED, src)
+
// Makes the linter happy, even tho we don't await this
INVOKE_ASYNC(SSmapping, TYPE_PROC_REF(/datum/controller/subsystem/mapping, reserve_turfs), reserved_copy)
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index a04f051c744..22ee4c99ea3 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -49,16 +49,6 @@
armor_type = /datum/armor/hooded_explorer
resistance_flags = FIRE_PROOF
-/datum/armor/hooded_explorer
- melee = 30
- bullet = 10
- laser = 10
- energy = 20
- bomb = 50
- fire = 50
- acid = 50
- wound = 10
-
/obj/item/clothing/suit/hooded/explorer/Initialize(mapload)
. = ..()
AddComponent(/datum/component/armor_plate)
diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm
index 7bed98ad96a..001e9f37e85 100644
--- a/code/modules/mining/lavaland/megafauna_loot.dm
+++ b/code/modules/mining/lavaland/megafauna_loot.dm
@@ -315,15 +315,6 @@
greyscale_config_worn = /datum/greyscale_config/heck_helmet/worn
flags_1 = IS_PLAYER_COLORABLE_1
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/clothing/head/hooded/hostile_environment/Initialize(mapload)
. = ..()
update_appearance()
@@ -389,15 +380,6 @@
/// Cooldown between attacks
COOLDOWN_DECLARE(attack_cooldown)
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/soulscythe/Initialize(mapload)
. = ..()
soul = new(src)
@@ -606,15 +588,6 @@
/// Blood level, used for movement and abilities in a soulscythe
var/blood_level = MAX_BLOOD_LEVEL
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/mob/living/simple_animal/soulscythe/get_status_tab_items()
. = ..()
. += "Blood: [blood_level]/[MAX_BLOOD_LEVEL]"
@@ -633,15 +606,6 @@
light_power = 1
light_color = LIGHT_COLOR_BLOOD_MAGIC
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/projectile/soulscythe/on_hit(atom/target, blocked = FALSE)
if(ishostile(target))
damage *= 2
@@ -670,15 +634,6 @@
var/summon_cooldown = 0
var/list/mob/dead/observer/spirits
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/melee/ghost_sword/Initialize(mapload)
. = ..()
spirits = list()
@@ -756,15 +711,6 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "vial"
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/dragons_blood/attack_self(mob/living/carbon/human/user)
if(!istype(user))
return
@@ -831,15 +777,6 @@
var/timer = 0
var/static/list/banned_turfs = typecacheof(list(/turf/open/space/transit, /turf/closed))
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/lava_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
if(timer > world.time)
@@ -921,15 +858,6 @@
/// Throwforce when the saw is opened.
var/open_throwforce = 20
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/melee/cleaving_saw/Initialize(mapload)
. = ..()
AddComponent(/datum/component/transforming, \
@@ -1041,15 +969,6 @@
var/static/list/excluded_areas = list(/area/space)
var/list/targeted_turfs = list()
-/datum/armor/hooded_hostile_environment
- melee = 70
- bullet = 40
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/storm_staff/examine(mob/user)
. = ..()
. += span_notice("It has [thunder_charges] charges remaining.")
diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm
index 1b017ffc124..c220f593629 100644
--- a/code/modules/mining/lavaland/tendril_loot.dm
+++ b/code/modules/mining/lavaland/tendril_loot.dm
@@ -718,15 +718,6 @@
/// Status of berserk
var/berserk_active = FALSE
-/datum/armor/hooded_berserker
- melee = 30
- bullet = 30
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/clothing/head/hooded/berserker/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
@@ -810,15 +801,6 @@
custom_materials = null
var/datum/action/cooldown/scan/scan_ability
-/datum/armor/hooded_berserker
- melee = 30
- bullet = 30
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/clothing/glasses/godeye/Initialize(mapload)
. = ..()
scan_ability = new(src)
@@ -860,15 +842,6 @@
cooldown_time = 45 SECONDS
ranged_mousepointer = 'icons/effects/mouse_pointers/scan_target.dmi'
-/datum/armor/hooded_berserker
- melee = 30
- bullet = 30
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/datum/action/cooldown/scan/IsAvailable(feedback = FALSE)
return ..() && isliving(owner)
@@ -911,15 +884,6 @@
range_mid = 5
range_far = 15
-/datum/armor/hooded_berserker
- melee = 30
- bullet = 30
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/datum/status_effect/agent_pinpointer/scan/scan_for_target()
return
@@ -938,15 +902,6 @@
extend_sound = 'sound/items/unsheath.ogg'
retract_sound = 'sound/items/sheath.ogg'
-/datum/armor/hooded_berserker
- melee = 30
- bullet = 30
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/organ/internal/cyberimp/arm/katana/attack_self(mob/user, modifiers)
. = ..()
to_chat(user, span_userdanger("The mass goes up your arm and goes inside it!"))
@@ -1016,15 +971,6 @@
ATTACK_SHATTER = list(COMBO_STEPS = list(RIGHT_SLASH, LEFT_SLASH, RIGHT_SLASH, LEFT_SLASH), COMBO_PROC = PROC_REF(shatter)),
)
-/datum/armor/hooded_berserker
- melee = 30
- bullet = 30
- laser = 10
- energy = 20
- bomb = 50
- fire = 100
- acid = 100
-
/obj/item/cursed_katana/Initialize(mapload)
. = ..()
for(var/combo in combo_list)
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index f7163499d0d..4460db4de9a 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -259,7 +259,7 @@
generate_mineral(alloy.build_path)
/obj/machinery/mineral/processing_unit/proc/can_smelt(datum/design/D, delta_time = 2)
- if(D.make_reagents.len)
+ if(D.make_reagent)
return FALSE
var/build_amount = SMELT_AMOUNT * delta_time
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index 66ab8ec2931..73b12cd957b 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -71,7 +71,7 @@
/obj/machinery/mineral/ore_redemption/proc/can_smelt_alloy(datum/design/D)
var/datum/component/material_container/mat_container = materials.mat_container
- if(!mat_container || D.make_reagents.len)
+ if(!mat_container || D.make_reagent)
return FALSE
var/build_amount = 0
diff --git a/code/modules/mining/mining_ltsrbt.dm b/code/modules/mining/mining_ltsrbt.dm
deleted file mode 100644
index 81e6fd80c15..00000000000
--- a/code/modules/mining/mining_ltsrbt.dm
+++ /dev/null
@@ -1,103 +0,0 @@
-/obj/item/circuitboard/machine/mining_ltsrbt
- name = "Mining LTSRBT"
- icon_state = "bluespacearray"
- build_path = /obj/machinery/mining_ltsrbt
- req_components = list(
- /obj/item/stack/ore/bluespace_crystal = 2,
- /obj/item/stock_parts/subspace/ansible = 1,
- /obj/item/stock_parts/micro_laser = 1,
- )
- def_components = list(
- /obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial,
- )
-
-/**
- * Mining LTSRBT
- *
- * Recieves orders from the mining produce console
- * Uses power (scaling with parts) to get that item delivered
- * Only works if it's enabled, and can only be enabled on-station.
- */
-/obj/machinery/mining_ltsrbt
- name = "mining LTSRBT"
- desc = "A variant of the Long-To-Short-Range-Bluespace-Transceiver used to deliver Mining equipment to the station as required. Nanotrasen denies the existence of any other forms of the LTSRBT."
- icon_state = "exonet_node"
- circuit = /obj/item/circuitboard/machine/mining_ltsrbt
- density = TRUE
-
- ///Boolean on whether the machine is active or not
- var/enabled = FALSE
- ///The amount of power each use of the machine costs.
- var/power_usage_per_teleport = 10000
-
-/obj/machinery/mining_ltsrbt/Initialize(mapload)
- . = ..()
- GLOB.mining_ltsrbt += src
- register_context()
-
-/obj/machinery/mining_ltsrbt/Destroy()
- GLOB.mining_ltsrbt -= src
- return ..()
-
-/obj/machinery/mining_ltsrbt/add_context(atom/source, list/context, obj/item/held_item, mob/user)
- . = ..()
- if(!held_item)
- context[SCREENTIP_CONTEXT_LMB] = "turn [enabled ? "off" : "on"]"
- return CONTEXTUAL_SCREENTIP_SET
-
- if(held_item.tool_behaviour == TOOL_SCREWDRIVER)
- context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel"
- return CONTEXTUAL_SCREENTIP_SET
- if(held_item.tool_behaviour == TOOL_CROWBAR && panel_open)
- context[SCREENTIP_CONTEXT_LMB] = "Deconstruct"
- return CONTEXTUAL_SCREENTIP_SET
- return .
-
-/obj/machinery/mining_ltsrbt/attack_hand(mob/living/user, list/modifiers)
- . = ..()
- if(!is_station_level(z))
- balloon_alert(user, "not on station!")
- user.playsound_local(loc, 'sound/machines/buzz-two.ogg', 30, TRUE)
- return
- enabled = !enabled
- balloon_alert(user, "turned [enabled ? "on" : "off"]")
- update_appearance(UPDATE_ICON)
-
-/obj/machinery/mining_ltsrbt/update_icon_state()
- . = ..()
- icon_state = enabled ? initial(icon_state) : "[icon_state]_idle"
-
-/obj/machinery/mining_ltsrbt/RefreshParts()
- . = ..()
- for(var/obj/item/stock_parts/micro_laser/laser in component_parts)
- power_usage_per_teleport = (initial(power_usage_per_teleport) % laser.rating)
-
-/obj/machinery/mining_ltsrbt/screwdriver_act(mob/living/user, obj/item/tool)
- . = ..()
- if(enabled)
- enabled = FALSE
- update_appearance(UPDATE_ICON)
- default_deconstruction_screwdriver(user, icon_state, icon_state, tool)
- return TRUE
-
-/obj/machinery/mining_ltsrbt/crowbar_act(mob/living/user, obj/item/tool)
- . = ..()
- default_deconstruction_crowbar(tool)
- return TRUE
-
-/**
- * # Recieve order
- *
- * Recieves the order and, if successfully goes through, returns TRUE
- * Otherwise will return FALSE to cancel the order.
- */
-/obj/machinery/mining_ltsrbt/proc/recieve_order(datum/supply_order/order)
- if(!enabled)
- return FALSE
- order.generate(get_turf(src))
- use_power(power_usage_per_teleport)
- var/datum/effect_system/spark_spread/sparks = new
- sparks.set_up(5, 1, get_turf(src))
- sparks.attach(src)
- sparks.start()
- return TRUE
diff --git a/code/modules/mob/living/basic/retaliate/ghost.dm b/code/modules/mob/living/basic/retaliate/ghost.dm
index f687fc373e0..ca6aef5e381 100644
--- a/code/modules/mob/living/basic/retaliate/ghost.dm
+++ b/code/modules/mob/living/basic/retaliate/ghost.dm
@@ -68,14 +68,14 @@
ghost_facial_hairstyle = random_facial_hairstyle()
ghost_facial_hair_color = ghost_hair_color
- if(!isnull(ghost_hairstyle))
+ if(!isnull(ghost_hairstyle) && ghost_hairstyle != "Bald") //Bald hairstyle and the Shaved facial hairstyle lack an associated sprite and will not properly generate hair, and just cause runtimes.
var/datum/sprite_accessory/hair_style = GLOB.hairstyles_list[ghost_hairstyle] //We use the hairstyle name to get the sprite accessory, which we copy the icon_state from.
ghost_hair = mutable_appearance('icons/mob/species/human/human_face.dmi', "[hair_style.icon_state]", -HAIR_LAYER)
ghost_hair.alpha = 200
ghost_hair.color = ghost_hair_color
add_overlay(ghost_hair)
- if(!isnull(ghost_facial_hairstyle))
+ if(!isnull(ghost_facial_hairstyle) && ghost_facial_hairstyle != "Shaved")
var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hairstyles_list[ghost_facial_hairstyle]
ghost_facial_hair = mutable_appearance('icons/mob/species/human/human_face.dmi', "[facial_hair_style.icon_state]", -HAIR_LAYER)
ghost_facial_hair.alpha = 200
diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm
index 5869cf37be4..24d75d0e23f 100644
--- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm
+++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm
@@ -88,6 +88,7 @@
apply_colour()
ADD_TRAIT(src, TRAIT_HEALS_FROM_CARP_RIFTS, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
+ ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT)
if (cell_line)
AddElement(/datum/element/swabable, cell_line, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5)
diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm
index fe60ea64dbd..d6a9edb6710 100644
--- a/code/modules/mob/living/carbon/carbon_update_icons.dm
+++ b/code/modules/mob/living/carbon/carbon_update_icons.dm
@@ -462,9 +462,10 @@
//Overlays for the worn overlay so you can overlay while you overlay
//eg: ammo counters, primed grenade flashing, etc.
//"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file
-//SKYRAT EDIT CHANGE - CUSTOMIZATION
-///obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file) (original)
+// SKYRAT EDIT CHANGE BEGIN - CUSTOMIZATION
+// obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file) - original
/obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, mutant_styles = NONE)
+// SKYRAT EDIT CHANGE END
SHOULD_CALL_PARENT(TRUE)
RETURN_TYPE(/list)
diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm
index 12de610c6e3..d48c21e8375 100644
--- a/code/modules/mob/living/carbon/human/human_update_icons.dm
+++ b/code/modules/mob/living/carbon/human/human_update_icons.dm
@@ -102,6 +102,7 @@ There are several things that need to be remembered:
var/handled_by_bodytype = TRUE
var/icon_file
var/woman
+ var/mutant_styles = NONE // SKYRAT EDIT ADDITON - mutant styles to pass down to build_worn_icon.
//BEGIN SPECIES HANDLING
if((dna?.species.bodytype & BODYTYPE_MONKEY) && (uniform.supports_variations_flags & CLOTHING_MONKEY_VARIATION))
icon_file = MONKEY_UNIFORM_FILE
@@ -121,6 +122,12 @@ There are several things that need to be remembered:
icon_file = DEFAULT_UNIFORM_FILE
handled_by_bodytype = FALSE
+ // SKYRAT EDIT ADDITION START - Taur-friendly suits!
+ if(dna.species.bodytype & BODYTYPE_TAUR)
+ if(istype(uniform) && uniform.gets_cropped_on_taurs)
+ mutant_styles |= get_taur_mode()
+ // SKYRAT EDIT END
+
//END SPECIES HANDLING
uniform_overlay = uniform.build_worn_icon(
default_layer = UNIFORM_LAYER,
@@ -129,7 +136,7 @@ There are several things that need to be remembered:
female_uniform = woman ? uniform.female_sprite_flags : null,
override_state = target_overlay,
override_file = handled_by_bodytype ? icon_file : null,
- taur_bodytype = uniform.gets_cropped_on_taurs && (dna.species.bodytype & BODYTYPE_TAUR), // SKYRAT EDIT ADDITION - Taur-friendly uniforms!
+ mutant_styles = mutant_styles, // SKYRAT EDIT ADDITION - Taur-friendly uniforms!
)
if(!handled_by_bodytype && (OFFSET_UNIFORM in dna.species.offset_features)) // SKYRAT EDIT CHANGE
@@ -491,6 +498,7 @@ There are several things that need to be remembered:
var/icon_file
var/mutant_override = FALSE // SKYRAT EDIT ADDITION
+ var/mutant_styles = NONE // SKYRAT EDIT ADDITON - mutant styles to pass down to build_worn_icon.
//More currently unused digitigrade handling
if(dna.species.bodytype & BODYTYPE_DIGITIGRADE)
if(worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)
@@ -508,11 +516,13 @@ There are several things that need to be remembered:
icon_file = DEFAULT_SUIT_FILE
// SKYRAT EDIT ADDITION START - Taur-friendly suits!
- var/obj/item/clothing/suit/worn_suit = wear_suit
- if(!istype(wear_suit))
- worn_suit = null
+ if(dna.species.bodytype & BODYTYPE_TAUR)
+ var/obj/item/clothing/suit/worn_suit = wear_suit
+ if(istype(worn_suit) && worn_suit.gets_cropped_on_taurs)
+ mutant_styles |= get_taur_mode()
// SKYRAT EDIT END
- var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null, taur_bodytype = worn_suit?.gets_cropped_on_taurs && (dna.species.bodytype & BODYTYPE_TAUR)) // SKYRAT EDIT CHANGE - Mutant bodytypes and Taur-friendly suits!
+
+ var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file, override_file = mutant_override ? icon_file : null, mutant_styles = mutant_styles) // SKYRAT EDIT CHANGE - Mutant bodytypes and Taur-friendly suits!
if(!mutant_override && (OFFSET_UNIFORM in dna.species.offset_features)) // SKYRAT EDIT CHANGE
suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1]
@@ -792,10 +802,10 @@ in this situation default_icon_file is expected to match either the lefthand_ or
female_uniform: A value matching a uniform item's female_sprite_flags var, if this is anything but NO_FEMALE_UNIFORM, we
generate/load female uniform sprites matching all previously decided variables
-taur_bodytype: The taur bodytype associated to the item we're trying to wear. Can be NONE even on a taur, if the item isn't meant to be cropped. // SKYRAT EDIT ADDITION - Taur-friendly suits and uniforms
+mutant_styles: The mutant style - taur bodytype, STYLE_TESHARI, etc. // SKYRAT EDIT ADDITION - Taur-friendly suits and uniforms
*/
-/obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, female_uniform = NO_FEMALE_UNIFORM, override_state = null, override_file = null, taur_bodytype = NONE) // SKYRAT EDIT - Taur-friendly outfits (added `taur_bodytype` argument)
+/obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, female_uniform = NO_FEMALE_UNIFORM, override_state = null, override_file = null, mutant_styles = NONE) // SKYRAT EDIT - Further outfit modification for outfits (added `mutant_styles` argument)
//Find a valid icon_state from variables+arguments
var/t_state
@@ -819,13 +829,13 @@ taur_bodytype: The taur bodytype associated to the item we're trying to wear. Ca
if(!standing)
standing = mutable_appearance(file2use, t_state, -layer2use)
// SKYRAT EDIT ADDITION START - Taur-friendly uniforms and suits
- if(taur_bodytype)
+ if(mutant_styles & STYLE_TAUR_ALL)
standing = wear_taur_version(standing.icon_state, standing.icon, layer2use, female_uniform, greyscale_colors)
// SKYRAT EDIT END
//Get the overlays for this item when it's being worn
//eg: ammo counters, primed grenade flashes, etc.
- var/list/worn_overlays = worn_overlays(standing, isinhands, file2use)
+ var/list/worn_overlays = worn_overlays(standing, isinhands, file2use, mutant_styles) // SKYRAT EDIT CHANGE - ORIGINAL: var/list/worn_overlays = worn_overlays(standing, isinhands)
if(worn_overlays?.len)
standing.overlays.Add(worn_overlays)
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 1dbcc6af203..b9564c4b7cf 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -969,15 +969,6 @@
var/last_gong_time = 0
var/gong_cooldown = 150
-/datum/armor/structure_cloth_pile
- melee = 90
- bullet = 90
- laser = 25
- energy = 80
- bomb = 50
- fire = -50
- acid = -50
-
/datum/species/golem/bronze/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
if(!(world.time > last_gong_time + gong_cooldown))
return ..()
@@ -1152,15 +1143,6 @@
BODY_ZONE_CHEST = /obj/item/bodypart/chest/golem/durathread,
)
-/datum/armor/structure_cloth_pile
- melee = 90
- bullet = 90
- laser = 25
- energy = 80
- bomb = 50
- fire = -50
- acid = -50
-
/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target)
. = ..()
target.apply_status_effect(/datum/status_effect/strandling)
@@ -1211,15 +1193,6 @@
)
var/datum/action/innate/bonechill/bonechill
-/datum/armor/structure_cloth_pile
- melee = 90
- bullet = 90
- laser = 25
- energy = 80
- bomb = 50
- fire = -50
- acid = -50
-
/datum/species/golem/bone/on_species_gain(mob/living/carbon/C, datum/species/old_species)
..()
if(ishuman(C))
@@ -1269,15 +1242,6 @@
var/last_use
var/snas_chance = 3
-/datum/armor/structure_cloth_pile
- melee = 90
- bullet = 90
- laser = 25
- energy = 80
- bomb = 50
- fire = -50
- acid = -50
-
/datum/action/innate/bonechill/Activate()
if(world.time < last_use + cooldown)
to_chat(owner, span_warning("You aren't ready yet to rattle your bones again!"))
@@ -1340,15 +1304,6 @@
/// A ref to our cryobeam spell we get on species gain.
var/datum/action/cooldown/spell/pointed/projectile/cryo/cryo
-/datum/armor/structure_cloth_pile
- melee = 90
- bullet = 90
- laser = 25
- energy = 80
- bomb = 50
- fire = -50
- acid = -50
-
/datum/species/golem/snow/spec_death(gibbed, mob/living/carbon/human/H)
H.visible_message(span_danger("[H] turns into a pile of snow!"))
for(var/obj/item/W in H)
@@ -1398,15 +1353,6 @@
)
examine_limb_id = SPECIES_GOLEM
-/datum/armor/structure_cloth_pile
- melee = 90
- bullet = 90
- laser = 25
- energy = 80
- bomb = 50
- fire = -50
- acid = -50
-
/datum/species/golem/mhydrogen/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
ADD_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index cb3c03bf649..9939c85ac39 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -358,6 +358,7 @@
if(!eye_lights)
eye_lights = new()
if(lamp_enabled || lamp_doom)
+ eye_lights.icon_state = "[model.special_light_key ? "[model.special_light_key]" : "[model.cyborg_base_icon]"]_l"
set_light_range(max(MINIMUM_USEFUL_LIGHT_RANGE, lamp_intensity))
set_light_color(lamp_doom ? COLOR_RED : lamp_color) //Red for doomsday killborgs, borg's choice otherwise
SET_PLANE_EXPLICIT(eye_lights, ABOVE_LIGHTING_PLANE, src) //glowy eyes
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
index 8fd467220b0..4d4335c51d9 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -363,16 +363,6 @@ While using this makes the system rely on OnFire, it still gives options for tim
throw_speed = 3
throw_range = 5
-/datum/armor/structure_elite_tumor
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/item/tumor_shard/afterattack(atom/target, mob/user, proximity_flag)
. = ..()
if(istype(target, /mob/living/simple_animal/hostile/asteroid/elite) && proximity_flag)
@@ -411,16 +401,6 @@ While using this makes the system rely on OnFire, it still gives options for tim
var/datum/weakref/activator_ref
var/datum/weakref/ourelite_ref
-/datum/armor/structure_elite_tumor
- melee = 100
- bullet = 100
- laser = 100
- energy = 100
- bomb = 100
- bio = 100
- fire = 100
- acid = 100
-
/obj/effect/temp_visual/elite_tumor_wall/Initialize(mapload, new_caster)
. = ..()
if(smoothing_flags & (SMOOTH_CORNERS|SMOOTH_BITMASK))
diff --git a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
index 8971a45a01e..bfce764fa7b 100644
--- a/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/space_dragon.dm
@@ -86,6 +86,7 @@
. = ..()
AddElement(/datum/element/simple_flying)
ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT)
+ ADD_TRAIT(src, TRAIT_FREE_HYPERSPACE_MOVEMENT, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT)
ADD_TRAIT(src, TRAIT_HEALS_FROM_CARP_RIFTS, INNATE_TRAIT)
AddElement(/datum/element/content_barfer)
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 41829f16335..4ac695e9a61 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -253,6 +253,7 @@
sharpness = SHARP_POINTY
armour_penetration = 20
bare_wound_bonus = 10
+ item_flags = NO_BLOOD_ON_ITEM
light_system = MOVABLE_LIGHT
light_range = 1.5
light_power = 0.75
diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm
index 70fe6f86fa0..8b0769ec8e6 100644
--- a/code/modules/power/floodlight.dm
+++ b/code/modules/power/floodlight.dm
@@ -45,7 +45,7 @@
return
if(istype(O, /obj/item/lightreplacer))
var/obj/item/lightreplacer/L = O
- if(state == FLOODLIGHT_NEEDS_LIGHTS && L.CanUse(user))
+ if(state == FLOODLIGHT_NEEDS_LIGHTS && L.can_use(user))
L.Use(user)
to_chat(user, span_notice("You put lights in [src]."))
new /obj/machinery/power/floodlight(loc)
diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm
index 3ad66fc93bb..6d7d651fe25 100644
--- a/code/modules/power/lighting/light.dm
+++ b/code/modules/power/lighting/light.dm
@@ -337,7 +337,7 @@
//Light replacer code
if(istype(tool, /obj/item/lightreplacer))
var/obj/item/lightreplacer/replacer = tool
- replacer.ReplaceLight(src, user)
+ replacer.replace_light(src, user)
return
// attempt to insert light
diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm
index 3c03e1ff707..775efbaf35f 100644
--- a/code/modules/reagents/reagent_containers/cups/_cup.dm
+++ b/code/modules/reagents/reagent_containers/cups/_cup.dm
@@ -467,10 +467,6 @@
spillable = TRUE
var/obj/item/grinded
-/datum/armor/bucket_wooden
- melee = 10
- acid = 50
-
/obj/item/reagent_containers/cup/mortar/AltClick(mob/user)
if(grinded)
grinded.forceMove(drop_location())
diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm
index 451b0ab611f..4d2710783c3 100644
--- a/code/modules/recycling/disposal/bin.dm
+++ b/code/modules/recycling/disposal/bin.dm
@@ -298,14 +298,6 @@
icon_state = "disposal"
// attack by item places it in to disposal
-/datum/armor/machinery_disposal
- melee = 25
- bullet = 10
- laser = 10
- energy = 100
- fire = 90
- acid = 30
-
/obj/machinery/disposal/bin/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/storage/bag/trash)) //Not doing component overrides because this is a specific type.
var/obj/item/storage/bag/trash/T = I
@@ -486,14 +478,6 @@
icon_state = "intake"
pressure_charging = FALSE // the chute doesn't need charging and always works
-/datum/armor/machinery_disposal
- melee = 25
- bullet = 10
- laser = 10
- energy = 100
- fire = 90
- acid = 30
-
/obj/machinery/disposal/delivery_chute/place_item_in_disposal(obj/item/I, mob/user)
if(I.CanEnterDisposals())
..()
diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm
index 836d5807981..e35be284bad 100644
--- a/code/modules/recycling/disposal/pipe.dm
+++ b/code/modules/recycling/disposal/pipe.dm
@@ -203,14 +203,6 @@
// next direction to move
// if coming in from secondary dirs, then next is primary dir
// if coming in from primary dir, then next is equal chance of other dirs
-/datum/armor/structure_disposalpipe
- melee = 25
- bullet = 10
- laser = 10
- energy = 100
- fire = 90
- acid = 30
-
/obj/structure/disposalpipe/junction/nextdir(obj/structure/disposalholder/H)
var/flipdir = turn(H.dir, 180)
if(flipdir != dir) // came from secondary dir, so exit through primary
@@ -247,14 +239,6 @@
icon_state = "pipe-t"
var/obj/linked // the linked obj/machinery/disposal or obj/disposaloutlet
-/datum/armor/structure_disposalpipe
- melee = 25
- bullet = 10
- laser = 10
- energy = 100
- fire = 90
- acid = 30
-
/obj/structure/disposalpipe/trunk/Initialize(mapload)
. = ..()
getlinked()
@@ -327,13 +311,5 @@
// broken pipes always have dpdir=0 so they're not found as 'real' pipes
// i.e. will be treated as an empty turf
-/datum/armor/structure_disposalpipe
- melee = 25
- bullet = 10
- laser = 10
- energy = 100
- fire = 90
- acid = 30
-
/obj/structure/disposalpipe/broken/deconstruct()
qdel(src)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 1106d4247ff..5bdb0e93dd9 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -35,8 +35,8 @@ other types of metals and chemistry for reagents).
var/construction_time
/// The typepath of the object produced by this design
var/build_path = null
- /// List of reagents produced by this design. Currently only supported by the biogenerator.
- var/list/make_reagents = list()
+ /// Reagent produced by this design. Currently only supported by the biogenerator.
+ var/make_reagent
/// What categories this design falls under. Used for sorting in production machines.
var/list/category = list()
/// List of reagents required to create one unit of the product.
diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm
index 6984ad751a2..045f5ee7c4b 100644
--- a/code/modules/research/designs/biogenerator_designs.dm
+++ b/code/modules/research/designs/biogenerator_designs.dm
@@ -7,7 +7,7 @@
id = "milk"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.4)
- make_reagents = list(/datum/reagent/consumable/milk = 1)
+ make_reagent = /datum/reagent/consumable/milk
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/soymilk
@@ -15,7 +15,7 @@
id = "soymilk"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.4)
- make_reagents = list(/datum/reagent/consumable/soymilk = 1)
+ make_reagent = /datum/reagent/consumable/soymilk
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/ethanol
@@ -23,7 +23,7 @@
id = "ethanol"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.6)
- make_reagents = list(/datum/reagent/consumable/ethanol = 1)
+ make_reagent = /datum/reagent/consumable/ethanol
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/cream
@@ -31,7 +31,7 @@
id = "cream"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.6)
- make_reagents = list(/datum/reagent/consumable/cream = 1)
+ make_reagent = /datum/reagent/consumable/cream
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/black_pepper
@@ -39,7 +39,7 @@
id = "black_pepper"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.6)
- make_reagents = list(/datum/reagent/consumable/blackpepper = 1)
+ make_reagent = /datum/reagent/consumable/blackpepper
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/enzyme
@@ -47,7 +47,7 @@
id = "enzyme"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.6)
- make_reagents = list(/datum/reagent/consumable/enzyme = 1)
+ make_reagent = /datum/reagent/consumable/enzyme
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/flour
@@ -55,7 +55,7 @@
id = "flour_sack"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.6)
- make_reagents = list(/datum/reagent/consumable/flour = 1)
+ make_reagent = /datum/reagent/consumable/flour
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/sugar
@@ -63,7 +63,7 @@
id = "sugar"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.6)
- make_reagents = list(/datum/reagent/consumable/sugar = 1)
+ make_reagent = /datum/reagent/consumable/sugar
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_FOOD)
/datum/design/monkey_cube
@@ -87,7 +87,7 @@
id = "ez_nut"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.1)
- make_reagents = list(/datum/reagent/plantnutriment/eznutriment = 1)
+ make_reagent = /datum/reagent/plantnutriment/eznutriment
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/l4z_nut
@@ -95,7 +95,7 @@
id = "l4z_nut"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.1)
- make_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 1)
+ make_reagent = /datum/reagent/plantnutriment/left4zednutriment
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/rh_nut
@@ -103,7 +103,7 @@
id = "rh_nut"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.2)
- make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 1)
+ make_reagent = /datum/reagent/plantnutriment/robustharvestnutriment
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/end_gro
@@ -111,7 +111,7 @@
id = "end_gro"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.3)
- make_reagents = list(/datum/reagent/plantnutriment/endurogrow = 1)
+ make_reagent = /datum/reagent/plantnutriment/endurogrow
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/liq_earth
@@ -119,7 +119,7 @@
id = "liq_earth"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.3)
- make_reagents = list(/datum/reagent/plantnutriment/liquidearthquake = 1)
+ make_reagent = /datum/reagent/plantnutriment/liquidearthquake
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/weed_killer
@@ -127,7 +127,7 @@
id = "weed_killer"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.2)
- make_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 1)
+ make_reagent = /datum/reagent/toxin/plantbgone/weedkiller
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/pest_spray
@@ -135,7 +135,7 @@
id = "pest_spray"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.4)
- make_reagents = list(/datum/reagent/toxin/pestkiller = 1)
+ make_reagent = /datum/reagent/toxin/pestkiller
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/org_pest_spray
@@ -143,7 +143,7 @@
id = "org_pest_spray"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 0.6)
- make_reagents = list(/datum/reagent/toxin/pestkiller/organic = 1)
+ make_reagent = /datum/reagent/toxin/pestkiller/organic
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_BIO_CHEMICALS)
/datum/design/leather
diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
index 0faee3b578a..c1c522b5849 100644
--- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
@@ -39,9 +39,6 @@ Slimecrossing Armor
actions_types = list(/datum/action/item_action/change_prism_colour, /datum/action/item_action/place_light_prism)
var/glasses_color = "#FFFFFF"
-/datum/armor/mask_nobreath
- bio = 50
-
/obj/item/clothing/glasses/prism_glasses/item_action_slot_check(slot)
if(slot & ITEM_SLOT_EYES)
return TRUE
@@ -55,9 +52,6 @@ Slimecrossing Armor
anchored = TRUE
max_integrity = 10
-/datum/armor/mask_nobreath
- bio = 50
-
/obj/structure/light_prism/Initialize(mapload, newcolor)
. = ..()
color = newcolor
@@ -73,9 +67,6 @@ Slimecrossing Armor
button_icon = 'icons/obj/xenobiology/slimecrossing.dmi'
button_icon_state = "prismcolor"
-/datum/armor/mask_nobreath
- bio = 50
-
/datum/action/item_action/change_prism_colour/Trigger(trigger_flags)
if(!IsAvailable(feedback = TRUE))
return
@@ -90,9 +81,6 @@ Slimecrossing Armor
button_icon = 'icons/obj/xenobiology/slimecrossing.dmi'
button_icon_state = "lightprism"
-/datum/armor/mask_nobreath
- bio = 50
-
/datum/action/item_action/place_light_prism/Trigger(trigger_flags)
if(!IsAvailable(feedback = TRUE))
return
@@ -123,9 +111,6 @@ Slimecrossing Armor
throw_speed = 1
throw_range = 3
-/datum/armor/mask_nobreath
- bio = 50
-
/obj/item/clothing/head/peaceflower/proc/at_peace_check(mob/user)
if(iscarbon(user))
var/mob/living/carbon/carbon_user = user
@@ -156,9 +141,6 @@ Slimecrossing Armor
slowdown = 4
var/hit_reflect_chance = 40
-/datum/armor/mask_nobreath
- bio = 50
-
/obj/item/clothing/suit/armor/heavy/adamantine/IsReflect(def_zone)
if(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) && prob(hit_reflect_chance))
return TRUE
diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm
index 4702b6646f1..bd6b8ffcd56 100644
--- a/code/modules/research/xenobiology/crossbreeding/_misc.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_misc.dm
@@ -176,14 +176,6 @@ Slimecrossing Items
icon = 'icons/obj/xenobiology/slimecrossing.dmi'
icon_state = "capturedevice"
-/datum/armor/structure_ice_stasis
- melee = 30
- bullet = 50
- laser = -50
- energy = -50
- fire = -80
- acid = 30
-
/obj/item/capturedevice/attack(mob/living/M, mob/user)
if(length(contents))
to_chat(user, span_warning("The device already has something inside."))
diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm
index 7ca3af5ad3a..bd08d342c6c 100644
--- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm
@@ -102,14 +102,6 @@ Slimecrossing Weapons
ammo_type = /obj/item/ammo_casing/magic/bloodchill
fire_sound = 'sound/effects/attackblob.ogg'
-/datum/armor/shield_adamantineshield
- melee = 50
- bullet = 50
- laser = 50
- bomb = 30
- fire = 80
- acid = 70
-
/obj/item/gun/magic/bloodchill/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
@@ -138,14 +130,6 @@ Slimecrossing Weapons
nodamage = TRUE
hitsound = 'sound/effects/splat.ogg'
-/datum/armor/shield_adamantineshield
- melee = 50
- bullet = 50
- laser = 50
- bomb = 30
- fire = 80
- acid = 70
-
/obj/projectile/magic/bloodchill/on_hit(mob/living/target)
. = ..()
if(isliving(target))
diff --git a/code/modules/unit_tests/designs.dm b/code/modules/unit_tests/designs.dm
index 7ba2bbec997..a9cda144649 100644
--- a/code/modules/unit_tests/designs.dm
+++ b/code/modules/unit_tests/designs.dm
@@ -14,10 +14,10 @@
if (isnull(current_design.name) || current_design.name == default_design.name) //Designs with ID must have non default/null Name
TEST_FAIL("Design [current_design.type] has default or null name var but has an ID")
if ((!isnull(current_design.materials) && LAZYLEN(current_design.materials)) || (!isnull(current_design.reagents_list) && LAZYLEN(current_design.reagents_list))) //Design requires materials
- if ((isnull(current_design.build_path) || current_design.build_path == default_design.build_path) && (isnull(current_design.make_reagents) || current_design.make_reagents == default_design.make_reagents)) //Check if design gives any output
- TEST_FAIL("Design [current_design.type] requires materials but does not have have any build_path or make_reagents set")
+ if ((isnull(current_design.build_path) || current_design.build_path == default_design.build_path) && (isnull(current_design.make_reagent) || current_design.make_reagent == default_design.make_reagent)) //Check if design gives any output
+ TEST_FAIL("Design [current_design.type] requires materials but does not have have any build_path or make_reagent set")
else if (!isnull(current_design.build_path) || !isnull(current_design.build_path)) // //Design requires no materials but creates stuff
- TEST_FAIL("Design [current_design.type] requires NO materials but has build_path or make_reagents set")
+ TEST_FAIL("Design [current_design.type] requires NO materials but has build_path or make_reagent set")
for(var/path in subtypesof(/datum/design/surgery))
var/datum/design/surgery/current_design = new path //Create an instance of each design
diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm
index 9e02742c7c6..eedfbed358c 100644
--- a/code/modules/vehicles/atv.dm
+++ b/code/modules/vehicles/atv.dm
@@ -41,14 +41,6 @@
scan_range = 7
density = FALSE
-/datum/armor/ridden_atv
- melee = 50
- bullet = 25
- laser = 20
- bomb = 50
- fire = 60
- acid = 60
-
/obj/vehicle/ridden/atv/turret/Initialize(mapload)
. = ..()
turret = new(loc)
diff --git a/code/modules/vehicles/cars/vim.dm b/code/modules/vehicles/cars/vim.dm
index add9d00d9a3..8079f7cc6b6 100644
--- a/code/modules/vehicles/cars/vim.dm
+++ b/code/modules/vehicles/cars/vim.dm
@@ -126,14 +126,6 @@
/// Whether the mech headlights are currently on.
var/datum/port/output/are_headlights_on
-/datum/armor/car_vim
- melee = 70
- bullet = 40
- laser = 40
- bomb = 30
- fire = 80
- acid = 80
-
/obj/item/circuit_component/vim/populate_ports()
are_headlights_on = add_output_port("Are Headlights On", PORT_TYPE_NUMBER)
chime = add_output_port("On Chime Used", PORT_TYPE_SIGNAL)
diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm
index 7667f2fc95a..ca14358bcde 100644
--- a/code/modules/vehicles/mecha/combat/durand.dm
+++ b/code/modules/vehicles/mecha/combat/durand.dm
@@ -142,15 +142,6 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/
name = "Toggle an energy shield that blocks all attacks from the faced direction at a heavy power cost."
button_icon_state = "mech_defense_mode_off"
-/datum/armor/mecha_durand
- melee = 40
- bullet = 35
- laser = 15
- energy = 10
- bomb = 20
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/mech_defense_mode/Trigger(trigger_flags, forced_state = FALSE)
SEND_SIGNAL(chassis, COMSIG_MECHA_ACTION_TRIGGER, owner, args) //Signal sent to the mech, to be handed to the shield. See durand.dm for more details
diff --git a/code/modules/vehicles/mecha/combat/gygax.dm b/code/modules/vehicles/mecha/combat/gygax.dm
index 5da945a0893..57732016fba 100644
--- a/code/modules/vehicles/mecha/combat/gygax.dm
+++ b/code/modules/vehicles/mecha/combat/gygax.dm
@@ -38,14 +38,6 @@
name = "Toggle leg actuators overload"
button_icon_state = "mech_overload_off"
-/datum/armor/mecha_gygax
- melee = 25
- bullet = 20
- laser = 30
- energy = 15
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/mech_overload_mode/Trigger(trigger_flags, forced_state = null)
if(!owner || !chassis || !(owner in chassis.occupants))
return
diff --git a/code/modules/vehicles/mecha/combat/marauder.dm b/code/modules/vehicles/mecha/combat/marauder.dm
index 320f6225100..c24c368cdf0 100644
--- a/code/modules/vehicles/mecha/combat/marauder.dm
+++ b/code/modules/vehicles/mecha/combat/marauder.dm
@@ -46,15 +46,6 @@
MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster),
)
-/datum/armor/mecha_marauder
- melee = 50
- bullet = 55
- laser = 40
- energy = 30
- bomb = 30
- fire = 100
- acid = 100
-
/obj/vehicle/sealed/mecha/marauder/add_cell(obj/item/stock_parts/cell/C=null)
if(C)
C.forceMove(src)
@@ -66,15 +57,6 @@
name = "Smoke"
button_icon_state = "mech_smoke"
-/datum/armor/mecha_marauder
- melee = 50
- bullet = 55
- laser = 40
- energy = 30
- bomb = 30
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/mech_smoke/Trigger(trigger_flags)
if(!owner || !chassis || !(owner in chassis.occupants))
return
@@ -87,15 +69,6 @@
name = "Zoom"
button_icon_state = "mech_zoom_off"
-/datum/armor/mecha_marauder
- melee = 50
- bullet = 55
- laser = 40
- energy = 30
- bomb = 30
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/mech_zoom/Trigger(trigger_flags)
if(!owner?.client || !chassis || !(owner in chassis.occupants))
return
diff --git a/code/modules/vehicles/mecha/combat/phazon.dm b/code/modules/vehicles/mecha/combat/phazon.dm
index 56c86e0e15a..9303d04c945 100644
--- a/code/modules/vehicles/mecha/combat/phazon.dm
+++ b/code/modules/vehicles/mecha/combat/phazon.dm
@@ -39,15 +39,6 @@
name = "Reconfigure arm microtool arrays"
button_icon_state = "mech_damtype_brute"
-/datum/armor/mecha_phazon
- melee = 30
- bullet = 30
- laser = 30
- energy = 30
- bomb = 30
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/mech_switch_damtype/Trigger(trigger_flags)
if(!owner || !chassis || !(owner in chassis.occupants))
return
@@ -71,15 +62,6 @@
name = "Toggle Phasing"
button_icon_state = "mech_phasing_off"
-/datum/armor/mecha_phazon
- melee = 30
- bullet = 30
- laser = 30
- energy = 30
- bomb = 30
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/mech_toggle_phasing/Trigger(trigger_flags)
if(!owner || !chassis || !(owner in chassis.occupants))
return
diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
index af3e44c889c..a571b2fb261 100644
--- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
+++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm
@@ -78,15 +78,6 @@
///skyfall builds up in charges every 2 seconds, when it reaches 5 charges the ability actually starts
var/skyfall_charge_level = 0
-/datum/armor/mecha_savannah_ivanov
- melee = 45
- bullet = 40
- laser = 30
- energy = 30
- bomb = 40
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/skyfall/Trigger(trigger_flags)
if(!owner || !chassis || !(owner in chassis.occupants))
return
@@ -253,15 +244,6 @@
var/rockets_left = 0
var/aiming_missile = FALSE
-/datum/armor/mecha_savannah_ivanov
- melee = 45
- bullet = 40
- laser = 30
- energy = 30
- bomb = 40
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/ivanov_strike/Destroy()
if(aiming_missile)
end_missile_targeting()
@@ -372,15 +354,6 @@
///reference to mecha following
var/obj/vehicle/sealed/mecha/mecha
-/datum/armor/mecha_savannah_ivanov
- melee = 45
- bullet = 40
- laser = 30
- energy = 30
- bomb = 40
- fire = 100
- acid = 100
-
/obj/effect/skyfall_landingzone/Initialize(mapload, obj/vehicle/sealed/mecha/mecha)
. = ..()
if(!mecha)
diff --git a/code/modules/vehicles/mecha/working/clarke.dm b/code/modules/vehicles/mecha/working/clarke.dm
index 3c711e4b25a..fabce1c9163 100644
--- a/code/modules/vehicles/mecha/working/clarke.dm
+++ b/code/modules/vehicles/mecha/working/clarke.dm
@@ -63,15 +63,6 @@
/// Var to avoid istype checking every time the topic button is pressed. This will only work inside Clarke mechs.
var/obj/vehicle/sealed/mecha/working/clarke/hostmech
-/datum/armor/working_clarke
- melee = 20
- bullet = 10
- laser = 20
- energy = 10
- bomb = 60
- fire = 100
- acid = 100
-
/obj/item/mecha_parts/mecha_equipment/orebox_manager/attach(obj/vehicle/sealed/mecha/M, attach_right = FALSE)
. = ..()
if(istype(M, /obj/vehicle/sealed/mecha/working/clarke))
@@ -94,15 +85,6 @@
button_icon_state = "mech_search_ruins"
COOLDOWN_DECLARE(search_cooldown)
-/datum/armor/working_clarke
- melee = 20
- bullet = 10
- laser = 20
- energy = 10
- bomb = 60
- fire = 100
- acid = 100
-
/datum/action/vehicle/sealed/mecha/mech_search_ruins/Trigger(trigger_flags)
if(!owner || !chassis || !(owner in chassis.occupants))
return
@@ -140,15 +122,6 @@
range_mid = 20
range_far = 50
-/datum/armor/working_clarke
- melee = 20
- bullet = 10
- laser = 20
- energy = 10
- bomb = 60
- fire = 100
- acid = 100
-
/datum/status_effect/agent_pinpointer/ruin/scan_for_target()
return
diff --git a/code/modules/vehicles/mecha/working/ripley.dm b/code/modules/vehicles/mecha/working/ripley.dm
index fd7bce49926..b9e4e5ab745 100644
--- a/code/modules/vehicles/mecha/working/ripley.dm
+++ b/code/modules/vehicles/mecha/working/ripley.dm
@@ -147,15 +147,6 @@
desc = "An old, dusty mining Ripley."
name = "\improper APLU \"Miner\""
-/datum/armor/ripley_mk2
- melee = 40
- bullet = 30
- laser = 30
- energy = 30
- bomb = 60
- fire = 100
- acid = 100
-
/obj/vehicle/sealed/mecha/working/ripley/mining/Initialize(mapload)
. = ..()
take_damage(125) // Low starting health
@@ -191,15 +182,6 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/working/ripley/cargo)
base_icon_state = "hauler"
max_integrity = 100 //Has half the health of a normal RIPLEY mech, so it's harder to use as a weapon.
-/datum/armor/ripley_mk2
- melee = 40
- bullet = 30
- laser = 30
- energy = 30
- bomb = 60
- fire = 100
- acid = 100
-
/obj/vehicle/sealed/mecha/working/ripley/cargo/Initialize(mapload)
. = ..()
if(cell)
@@ -237,15 +219,6 @@ GLOBAL_DATUM(cargo_ripley, /obj/vehicle/sealed/mecha/working/ripley/cargo)
equipment_slot = MECHA_UTILITY
detachable = FALSE
-/datum/armor/ripley_mk2
- melee = 40
- bullet = 30
- laser = 30
- energy = 30
- bomb = 60
- fire = 100
- acid = 100
-
/obj/item/mecha_parts/mecha_equipment/ejector/get_snowflake_data()
var/list/data = list("snowflake_id" = MECHA_SNOWFLAKE_ID_EJECTOR, "cargo" = list())
var/obj/vehicle/sealed/mecha/working/ripley/miner = chassis
diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm
index 31ce2ec092f..f1df828bf4f 100644
--- a/code/modules/vending/_vending.dm
+++ b/code/modules/vending/_vending.dm
@@ -1264,11 +1264,6 @@
var/list/base64_cache = list()
panel_type = "panel20"
-/datum/armor/machinery_vending
- melee = 20
- fire = 50
- acid = 70
-
/obj/machinery/vending/custom/compartmentLoadAccessCheck(mob/user)
. = FALSE
if(!isliving(user))
@@ -1426,11 +1421,6 @@
icon_state = "refill_custom"
custom_premium_price = PAYCHECK_CREW
-/datum/armor/machinery_vending
- melee = 20
- fire = 50
- acid = 70
-
/obj/machinery/vending/custom/greed //name and like decided by the spawn
icon_state = "greed"
icon_deny = "greed-deny"
diff --git a/html/changelogs/AutoChangeLog-pr-18001.yml b/html/changelogs/AutoChangeLog-pr-18001.yml
new file mode 100644
index 00000000000..819e8339c89
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18001.yml
@@ -0,0 +1,8 @@
+author: "RimiNosha"
+delete-after: True
+changes:
+ - bugfix: "Non-standard brained synths can now use ghost roles once again. Woops!"
+ - bugfix: "Items will now no longer be given twice to ghost roles."
+ - bugfix: "Ghost cafe boxes no longer drop on spawn."
+ - imageadd: "Ghost cafe costuming boxes no longer look like they've been bought from the syndicate. We managed to at least repackage their products this time."
+ - qol: "You can finally put stuff back into said ghost cafe costuming kit. Nice."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18161.yml b/html/changelogs/AutoChangeLog-pr-18161.yml
deleted file mode 100644
index 3fb92616511..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18161.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "YakumoChen"
-delete-after: True
-changes:
- - qol: "Department guards now spawn with all the gear they need to police their department"
- - qol: "Department guard lockers contain a full, spare set of gear, for people getting a job change."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18362.yml b/html/changelogs/AutoChangeLog-pr-18362.yml
deleted file mode 100644
index e2e6207f35f..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18362.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Melbert"
-delete-after: True
-changes:
- - bugfix: "Ethereals and Flypeople and Aliens who learn Uncommon language can speak it with their tongues like they could speak Common, no this doesn't mean they can naturally speak or understand Uncommon"
- - refactor: "Refactored how tongues set up their languages lists"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18447.yml b/html/changelogs/AutoChangeLog-pr-18447.yml
deleted file mode 100644
index 91774216a69..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18447.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Tattle"
-delete-after: True
-changes:
- - bugfix: "projectile hits on mobs are logged globally"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18451.yml b/html/changelogs/AutoChangeLog-pr-18451.yml
deleted file mode 100644
index 732c67db023..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18451.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Improvedname"
-delete-after: True
-changes:
- - bugfix: "fixes cummerbunds holding 7 items instead of 3(as fannypacks do)"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18458.yml b/html/changelogs/AutoChangeLog-pr-18458.yml
deleted file mode 100644
index 52bb0bc7538..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18458.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - bugfix: "Those with kitchen access should now once again be the only one who are allowed to vending-machine-restock individual snacking items via their trusty tray."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18465.yml b/html/changelogs/AutoChangeLog-pr-18465.yml
new file mode 100644
index 00000000000..8f821870ed4
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18465.yml
@@ -0,0 +1,4 @@
+author: "softcerv"
+delete-after: True
+changes:
+ - bugfix: "Alter Form now longer shows parts that it shouldn't"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18467.yml b/html/changelogs/AutoChangeLog-pr-18467.yml
deleted file mode 100644
index 6b6b78def67..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18467.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - qol: "Mining order consoles are now named 'order console'."
- - qol: "Orders from said mining order consoles can now no longer be cancelled, and are listed as 'mp' (mining points) in the Cargo console instead of 'cr'."
- - qol: "Order consoles now have a + button that will instantly add 1 of the item."
- - bugfix: "Departmental orders can no longer be cancelled through the NTos cargo application."
- - bugfix: "Wearing an ID will no longer break order consoles."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18485.yml b/html/changelogs/AutoChangeLog-pr-18485.yml
deleted file mode 100644
index 19cd76ebc1f..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18485.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Improvedname"
-delete-after: True
-changes:
- - bugfix: "Adds missing contrabrand spawners to deltastation locker"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18488.yml b/html/changelogs/AutoChangeLog-pr-18488.yml
deleted file mode 100644
index 97bd7b88420..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18488.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Zonespace27"
-delete-after: True
-changes:
- - balance: "ERT smartgun now fires faster while doing less damage and having nearly all wounding potential removed"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18492.yml b/html/changelogs/AutoChangeLog-pr-18492.yml
deleted file mode 100644
index f87cfac5e0c..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18492.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - rscadd: "Hope you saved for a rainy day: Added the 'Cursed' quirk which causes excessive slippage and... other difficulties."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18526.yml b/html/changelogs/AutoChangeLog-pr-18526.yml
deleted file mode 100644
index ce0e8457224..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18526.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Paxilmaniac"
-delete-after: True
-changes:
- - imageadd: "The colors on the cutting board have been changed to be less dull and more like the mortars"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18535.yml b/html/changelogs/AutoChangeLog-pr-18535.yml
deleted file mode 100644
index bc5245a2d2e..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18535.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - bugfix: "You should now no longer get a confusing message whenever you try to add flour from a flour sack into a bowl."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18536.yml b/html/changelogs/AutoChangeLog-pr-18536.yml
deleted file mode 100644
index 4ab93c66ac4..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18536.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Melbert"
-delete-after: True
-changes:
- - bugfix: "Fixes runtimes from cursed people dying"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18546.yml b/html/changelogs/AutoChangeLog-pr-18546.yml
deleted file mode 100644
index f34bb1445a3..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18546.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - rscadd: "RTD Rapid Tiling Device"
- - imageadd: "Sprite for RTD"
- - code_imp: "moved update_overlays() from rcd to obj/item/construction so anyone can use it"
- - rscdel: "cooldown of 3 seconds when changing turf type"
- - qol: "Faster Turf decoration"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18616.yml b/html/changelogs/AutoChangeLog-pr-18616.yml
deleted file mode 100644
index 02fd2601b1d..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18616.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - rscadd: "Faithless will now also break lights and drag victims around"
- - refactor: "Faithless into basic mob"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18644.yml b/html/changelogs/AutoChangeLog-pr-18644.yml
deleted file mode 100644
index 19c1746d1be..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18644.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - spellcheck: "Head-spears are now named properly when using alternate spear types."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18645.yml b/html/changelogs/AutoChangeLog-pr-18645.yml
deleted file mode 100644
index b266cd0e6e4..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18645.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - qol: "Successfully fending off a blob now has a cross station news report again. More pressing reports will take priority over it, though."
- - qol: "Successfully killing a wizard (and all of their apprentices) now has a cross station news report again."
- - qol: "If more than half of a cultist team manages to escape on the shuttle (rather than summoning Nar'sie), they will send a unique cross station news report. This is still a loss, by the way. Summon Nar'sie!"
- - qol: "Nuclear Operatives successfully nuking the station now has its unique cross station news report again, and no longer uses the generic \"The station was nuked\" report."
- - qol: "Nuking the station to stop a blob infection now has a unique cross station news report again. Good luck convincing admins to allow this."
- - qol: "Cult ghosts from \"Spirit Realm\" no longer persist on the cult's team after being desummoned, meaning they will not show up on roundend report."
- - qol: "Heads of staff will now always show up on revolution roundend report - even if their body was fully destroyed."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18646.yml b/html/changelogs/AutoChangeLog-pr-18646.yml
deleted file mode 100644
index ddf381a3ce9..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18646.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - bugfix: "Boxes created through the crafting menu no longer spawn with their contents full"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18653.yml b/html/changelogs/AutoChangeLog-pr-18653.yml
deleted file mode 100644
index 87aee6b18ca..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18653.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - bugfix: "There is no longer a button on a window at the CentCom Thunderdome."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18657.yml b/html/changelogs/AutoChangeLog-pr-18657.yml
deleted file mode 100644
index d5094e9175d..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18657.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - rscadd: "Adds ear surgery to repair damaged ears/deafness."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18660.yml b/html/changelogs/AutoChangeLog-pr-18660.yml
deleted file mode 100644
index 8c13170f950..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18660.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - bugfix: "you can nolonger use a goldgrub as a shield to kill colossus"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18662.yml b/html/changelogs/AutoChangeLog-pr-18662.yml
deleted file mode 100644
index 05d6edf4f13..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18662.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - qol: "fixes chisels"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18665.yml b/html/changelogs/AutoChangeLog-pr-18665.yml
deleted file mode 100644
index 5b46e4ad9ce..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18665.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - bugfix: "pancakes no longer show an error sprite when added to a stack"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18674.yml b/html/changelogs/AutoChangeLog-pr-18674.yml
deleted file mode 100644
index eb692a63a5e..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18674.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "PestoVerde, Imaginos, Wallem"
-delete-after: True
-changes:
- - imageadd: "New material and ore sprites by PestoVerde & Imaginos"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18678.yml b/html/changelogs/AutoChangeLog-pr-18678.yml
deleted file mode 100644
index 7560aee556b..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18678.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Rhials"
-delete-after: True
-changes:
- - qol: "The Scrubber Clog event now gives an orbit popup to ghosts!"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18681.yml b/html/changelogs/AutoChangeLog-pr-18681.yml
deleted file mode 100644
index cabc9f3fc3f..00000000000
--- a/html/changelogs/AutoChangeLog-pr-18681.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "SkyratBot"
-delete-after: True
-changes:
- - bugfix: "viewing the botkeeper app as an observer will no longer runtime."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18682.yml b/html/changelogs/AutoChangeLog-pr-18682.yml
new file mode 100644
index 00000000000..6d70016637a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18682.yml
@@ -0,0 +1,5 @@
+author: "SkyratBot"
+delete-after: True
+changes:
+ - bugfix: "Fix blood overlays on energy daggers"
+ - code_imp: "Add `NO_BLOOD_ON_ITEM` bitfield for items"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18692.yml b/html/changelogs/AutoChangeLog-pr-18692.yml
new file mode 100644
index 00000000000..7c2d4e4d630
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18692.yml
@@ -0,0 +1,4 @@
+author: "softcerv"
+delete-after: True
+changes:
+ - bugfix: "Cryopods now remove players from the global list of joined players, stopping the persistent scars system from runtiming"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18698.yml b/html/changelogs/AutoChangeLog-pr-18698.yml
new file mode 100644
index 00000000000..bb9d854f137
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18698.yml
@@ -0,0 +1,5 @@
+author: "SkyratBot"
+delete-after: True
+changes:
+ - code_imp: "Removes double CAN_BE_INTERN flag in chaplain and cargo tech job flags"
+ - code_imp: "Replaces a string in chemist departamental head variable with a job define."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18699.yml b/html/changelogs/AutoChangeLog-pr-18699.yml
new file mode 100644
index 00000000000..6b3f1e5cee9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18699.yml
@@ -0,0 +1,4 @@
+author: "Melbert"
+delete-after: True
+changes:
+ - bugfix: "Fixed not getting moodlet from freshly laundered clothing"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18700.yml b/html/changelogs/AutoChangeLog-pr-18700.yml
new file mode 100644
index 00000000000..1b11285a00d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18700.yml
@@ -0,0 +1,4 @@
+author: "SkyratBot"
+delete-after: True
+changes:
+ - spellcheck: "fixed grammar/typo in Nanotrasen Pay System add"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18701.yml b/html/changelogs/AutoChangeLog-pr-18701.yml
new file mode 100644
index 00000000000..55e6c48610b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18701.yml
@@ -0,0 +1,4 @@
+author: "SkyratBot"
+delete-after: True
+changes:
+ - bugfix: "Cyborgs turning their lights on and off can now be seen doing so."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18702.yml b/html/changelogs/AutoChangeLog-pr-18702.yml
new file mode 100644
index 00000000000..320bb3e8226
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18702.yml
@@ -0,0 +1,4 @@
+author: "SkyratBot"
+delete-after: True
+changes:
+ - rscadd: "Added atmos holofans to metastation's ordnance lab."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-18704.yml b/html/changelogs/AutoChangeLog-pr-18704.yml
new file mode 100644
index 00000000000..a0d76d50e40
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-18704.yml
@@ -0,0 +1,4 @@
+author: "SkyratBot"
+delete-after: True
+changes:
+ - refactor: "Duplicating mobs now should now give properly functioning mobs, as duplications in general have been reworked. Admins can feel free to use the pod feature on people."
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-01.yml b/html/changelogs/archive/2023-01.yml
index 40d4087b775..8a6ea5d1a7b 100644
--- a/html/changelogs/archive/2023-01.yml
+++ b/html/changelogs/archive/2023-01.yml
@@ -471,3 +471,91 @@
- rscadd: you can now use regex for text highlighting. The syntax is /[regex expression]/,
eg /dog[0-9]/. There are no quantifiers, but you can use capture groups. The
regex must read a minimum of two characters.
+2023-01-14:
+ Improvedname:
+ - bugfix: Adds missing contrabrand spawners to deltastation locker
+ - bugfix: fixes cummerbunds holding 7 items instead of 3(as fannypacks do)
+ Melbert:
+ - bugfix: Ethereals and Flypeople and Aliens who learn Uncommon language can speak
+ it with their tongues like they could speak Common, no this doesn't mean they
+ can naturally speak or understand Uncommon
+ - refactor: Refactored how tongues set up their languages lists
+ - bugfix: Fixed a runtime from neck slices on headless mobs.
+ - qol: Neck sliced folk now have an examine message saying as much.
+ - bugfix: Fixes runtimes from cursed people dying
+ Paxilmaniac:
+ - imageadd: The colors on the cutting board have been changed to be less dull and
+ more like the mortars
+ PestoVerde, Imaginos, Wallem:
+ - imageadd: New material and ore sprites by PestoVerde & Imaginos
+ Rhials:
+ - qol: The Scrubber Clog event now gives an orbit popup to ghosts!
+ - qol: the light replacer now allows you to click on either the light, or the floor
+ beneath it, to refill lights.
+ - code_imp: light replacer code is now a bit prettier.
+ ShizCalev:
+ - qol: Airlock interfaces will now open up automatically if access is restored early
+ while an AI is hacking it.
+ SkyratBot:
+ - bugfix: pancakes no longer show an error sprite when added to a stack
+ - rscadd: Adds ear surgery to repair damaged ears/deafness.
+ - bugfix: There is no longer a button on a window at the CentCom Thunderdome.
+ - qol: Successfully fending off a blob now has a cross station news report again.
+ More pressing reports will take priority over it, though.
+ - qol: Successfully killing a wizard (and all of their apprentices) now has a cross
+ station news report again.
+ - qol: If more than half of a cultist team manages to escape on the shuttle (rather
+ than summoning Nar'sie), they will send a unique cross station news report.
+ This is still a loss, by the way. Summon Nar'sie!
+ - qol: Nuclear Operatives successfully nuking the station now has its unique cross
+ station news report again, and no longer uses the generic "The station was nuked"
+ report.
+ - qol: Nuking the station to stop a blob infection now has a unique cross station
+ news report again. Good luck convincing admins to allow this.
+ - qol: Cult ghosts from "Spirit Realm" no longer persist on the cult's team after
+ being desummoned, meaning they will not show up on roundend report.
+ - qol: Heads of staff will now always show up on revolution roundend report - even
+ if their body was fully destroyed.
+ - qol: fixes chisels
+ - rscadd: Faithless will now also break lights and drag victims around
+ - refactor: Faithless into basic mob
+ - bugfix: Bald/Shaved ghosts will no longer cause a runtime and spawn without a
+ name.
+ - rscadd: RTD Rapid Tiling Device
+ - imageadd: Sprite for RTD
+ - code_imp: moved update_overlays() from rcd to obj/item/construction so anyone
+ can use it
+ - rscdel: cooldown of 3 seconds when changing turf type
+ - qol: Faster Turf decoration
+ - qol: Biogenerator shows default reagent containers instead of beakers
+ - bugfix: viewing the botkeeper app as an observer will no longer runtime.
+ - bugfix: Those with kitchen access should now once again be the only one who are
+ allowed to vending-machine-restock individual snacking items via their trusty
+ tray.
+ - qol: Pinpointers now tell what they are tracking when examined
+ - qol: Mining order consoles are now named 'order console'.
+ - qol: Orders from said mining order consoles can now no longer be cancelled, and
+ are listed as 'mp' (mining points) in the Cargo console instead of 'cr'.
+ - qol: Order consoles now have a + button that will instantly add 1 of the item.
+ - bugfix: Departmental orders can no longer be cancelled through the NTos cargo
+ application.
+ - bugfix: Wearing an ID will no longer break order consoles.
+ - bugfix: You should now no longer get a confusing message whenever you try to add
+ flour from a flour sack into a bowl.
+ - bugfix: you can nolonger use a goldgrub as a shield to kill colossus
+ - spellcheck: Head-spears are now named properly when using alternate spear types.
+ - rscadd: 'Hope you saved for a rainy day: Added the ''Cursed'' quirk which causes
+ excessive slippage and... other difficulties.'
+ - bugfix: Boxes created through the crafting menu no longer spawn with their contents
+ full
+ Tastyfish:
+ - bugfix: Teshari uniform accessory rendering now works as expected again.
+ Tattle:
+ - bugfix: projectile hits on mobs are logged globally
+ YakumoChen:
+ - qol: Department guards now spawn with all the gear they need to police their department
+ - qol: Department guard lockers contain a full, spare set of gear, for people getting
+ a job change.
+ Zonespace27:
+ - balance: ERT smartgun now fires faster while doing less damage and having nearly
+ all wounding potential removed
diff --git a/modular_skyrat/master_files/code/modules/client/preferences/brain.dm b/modular_skyrat/master_files/code/modules/client/preferences/brain.dm
index 037f447b7fd..7a0d4008ced 100644
--- a/modular_skyrat/master_files/code/modules/client/preferences/brain.dm
+++ b/modular_skyrat/master_files/code/modules/client/preferences/brain.dm
@@ -16,9 +16,17 @@
var/obj/item/organ/internal/brain/new_brain = target.prefs_get_brain_to_use(value)
- var/obj/old_brain = target.getorganslot(ORGAN_SLOT_BRAIN)
+ var/obj/item/organ/internal/brain/old_brain = target.getorganslot(ORGAN_SLOT_BRAIN)
if(!new_brain || new_brain == old_brain.type)
return
+ var/datum/mind/keep_me_safe = target.mind
+
new_brain = new new_brain()
- new_brain.Insert(target, TRUE, FALSE)
+ new_brain.Insert(target, drop_if_replaced = FALSE)
+
+ // Prefs can be applied to mindless mobs, let's not try to move the non-existent mind back in!
+ if(!keep_me_safe)
+ return
+
+ keep_me_safe.transfer_to(target, TRUE)
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm
index bf6d9accf03..bddc24e1481 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm
+++ b/modular_skyrat/master_files/code/modules/clothing/under/jobs/cargo.dm
@@ -25,11 +25,6 @@
armor_type = /datum/armor/utility_syndicate
has_sensor = NO_SENSORS
-/datum/armor/utility_syndicate
- melee = 10
- fire = 50
- acid = 40
-
/obj/item/clothing/under/rank/cargo/tech/skyrat/long
name = "cargo technician's long jumpsuit"
desc = "For crate-pushers who'd rather protect their legs than show them off."
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm
index 08dfb27fcd3..4cd45ad912a 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm
+++ b/modular_skyrat/master_files/code/modules/clothing/under/jobs/command.dm
@@ -117,11 +117,6 @@
armor_type = /datum/armor/utility_syndicate
has_sensor = NO_SENSORS
-/datum/armor/utility_syndicate
- melee = 10
- fire = 50
- acid = 40
-
/obj/item/clothing/under/rank/captain/skyrat/imperial/generic
desc = "A grey naval suit with a rank badge denoting an Officer. Doesn't protect against blaster fire."
name = "grey officer's naval jumpsuit"
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm
index 75761ddb1b7..01461e3ed7e 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm
+++ b/modular_skyrat/master_files/code/modules/clothing/under/jobs/engineering.dm
@@ -25,11 +25,6 @@
armor_type = /datum/armor/utility_syndicate
has_sensor = NO_SENSORS
-/datum/armor/utility_syndicate
- melee = 10
- fire = 50
- acid = 40
-
/obj/item/clothing/under/rank/engineering/engineer/skyrat/trouser
name = "engineer's trousers"
desc = "An engineering-orange set of trousers. Their waistband proudly displays an 'anti-radiation' symbol, though the effectiveness of radiation-proof-pants-only is still up for debate."
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm
index dbf5fb1d49c..0538d3123e5 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm
+++ b/modular_skyrat/master_files/code/modules/clothing/under/jobs/medical.dm
@@ -43,11 +43,6 @@
* SCRUBS
*/
-/datum/armor/utility_syndicate
- melee = 10
- fire = 50
- acid = 40
-
/obj/item/clothing/under/rank/medical/scrubs/skyrat/red
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in a deep red."
icon_state = "scrubsred"
diff --git a/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm b/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm
index b8c8fe6dc48..732e8ea3c2b 100644
--- a/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm
+++ b/modular_skyrat/master_files/code/modules/clothing/under/jobs/rnd.dm
@@ -30,11 +30,6 @@
armor_type = /datum/armor/utility_syndicate
has_sensor = NO_SENSORS
-/datum/armor/utility_syndicate
- melee = 10
- fire = 50
- acid = 40
-
/obj/item/clothing/under/rank/rnd/scientist/skyrat/hlscience
name = "ridiculous scientist outfit"
desc = "The tie is mandatory."
diff --git a/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm b/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
index d6034afde67..d9e8c1ae51a 100644
--- a/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
+++ b/modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
@@ -8,7 +8,7 @@
if(appearance_choice == "Yes")
load_prefs = TRUE
- var/mob/living/carbon/human/spawned_human = ..()
+ var/mob/living/carbon/human/spawned_human = ..(mob_possessor, newname, load_prefs)
if(!load_prefs)
return spawned_human
@@ -23,3 +23,13 @@
spawned_human.equip_outfit_and_loadout(outfit, spawned_human.client.prefs)
return spawned_human
+
+/// This edit would cause somewhat ugly diffs, so I'm just replacing it.
+/// Original proc in code/modules/mob_spawn/mob_spawn.dm ~line 39.
+/obj/effect/mob_spawn/create(mob/mob_possessor, newname, is_pref_loaded)
+ var/mob/living/spawned_mob = new mob_type(get_turf(src)) //living mobs only
+ name_mob(spawned_mob, newname)
+ special(spawned_mob, mob_possessor)
+ if(!is_pref_loaded)
+ equip(spawned_mob)
+ return spawned_mob
diff --git a/modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi b/modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi
index fb5c38e7ca3..afec444d880 100644
Binary files a/modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi and b/modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi differ
diff --git a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi b/modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi
index 03ce692af5f..08778840e27 100644
Binary files a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi and b/modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi differ
diff --git a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi b/modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi
index f35d8689a3f..6e014e618fb 100644
Binary files a/modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi and b/modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi differ
diff --git a/modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi b/modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi
index cba71a988f3..ce141e98765 100644
Binary files a/modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi and b/modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi differ
diff --git a/modular_skyrat/master_files/icons/obj/plushes.dmi b/modular_skyrat/master_files/icons/obj/plushes.dmi
index 18fcb682a86..65c3b1d56be 100644
Binary files a/modular_skyrat/master_files/icons/obj/plushes.dmi and b/modular_skyrat/master_files/icons/obj/plushes.dmi differ
diff --git a/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm b/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm
index 0011a7ec3f0..8a8fe353fa9 100644
--- a/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm
+++ b/modular_skyrat/modules/SEVA_suit/code/seva_obj.dm
@@ -47,17 +47,6 @@
resistance_flags = FIRE_PROOF
supports_variations_flags = CLOTHING_SNOUTED_VARIATION //I can't find the snout sprite so I'm just gonna force it to do this
-/datum/armor/hooded_seva
- melee = 20
- bullet = 10
- laser = 10
- energy = 10
- bomb = 30
- bio = 50
- fire = 100
- acid = 50
- wound = 10
-
/obj/item/clothing/mask/gas/seva
name = "SEVA mask"
desc = "A head-covering mask that can be connected to an external air supply. Intended for use with the SEVA Suit."
diff --git a/modular_skyrat/modules/aesthetics/storage/storage.dmi b/modular_skyrat/modules/aesthetics/storage/storage.dmi
index c261adf75cb..7921f657597 100644
Binary files a/modular_skyrat/modules/aesthetics/storage/storage.dmi and b/modular_skyrat/modules/aesthetics/storage/storage.dmi differ
diff --git a/modular_skyrat/modules/blueshield/code/blueshield_clothing.dm b/modular_skyrat/modules/blueshield/code/blueshield_clothing.dm
index 1074ecec5e9..3f8fad686a8 100644
--- a/modular_skyrat/modules/blueshield/code/blueshield_clothing.dm
+++ b/modular_skyrat/modules/blueshield/code/blueshield_clothing.dm
@@ -39,9 +39,9 @@
icon = 'modular_skyrat/master_files/icons/obj/clothing/head/plasmaman_hats.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/head/plasmaman_head.dmi'
icon_state = "bs_envirohelm"
- armor_type = /datum/armor/plasmaman_blueshield
+ armor_type = /datum/armor/helmet_plasmaman_blueshield
-/datum/armor/plasmaman_blueshield
+/datum/armor/helmet_plasmaman_blueshield
melee = 30
melee = 20
laser = 20
@@ -57,11 +57,11 @@
icon = 'modular_skyrat/master_files/icons/obj/clothing/under/plasmaman.dmi'
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/under/plasmaman.dmi'
icon_state = "bs_envirosuit"
- armor_type = /datum/armor/plasmaman_blueshield
+ armor_type = /datum/armor/under_plasmaman_blueshield
sensor_mode = SENSOR_COORDS
random_sensor = FALSE
-/datum/armor/plasmaman_blueshield
+/datum/armor/under_plasmaman_blueshield
melee = 10
laser = 10
bomb = 5
diff --git a/modular_skyrat/modules/cryosleep/code/cryopod.dm b/modular_skyrat/modules/cryosleep/code/cryopod.dm
index 453aa644195..73d777b9557 100644
--- a/modular_skyrat/modules/cryosleep/code/cryopod.dm
+++ b/modular_skyrat/modules/cryosleep/code/cryopod.dm
@@ -160,6 +160,9 @@ GLOBAL_LIST_EMPTY(valid_cryopods)
/// Has the occupant been tucked in?
var/tucked = FALSE
+ /// What was the ckey of the client that entered the cryopod?
+ var/stored_ckey = null
+
/obj/machinery/cryopod/quiet
quiet = TRUE
@@ -203,6 +206,7 @@ GLOBAL_LIST_EMPTY(valid_cryopods)
var/mob/living/mob_occupant = occupant
if(mob_occupant && mob_occupant.stat != DEAD)
to_chat(occupant, span_notice("You feel cool air surround you. You go numb as your senses turn inward."))
+ stored_ckey = mob_occupant.ckey
COOLDOWN_START(src, despawn_world_time, time_till_despawn)
icon_state = "cryopod"
@@ -213,6 +217,7 @@ GLOBAL_LIST_EMPTY(valid_cryopods)
set_density(TRUE)
name = initial(name)
tucked = FALSE
+ stored_ckey = null
/obj/machinery/cryopod/container_resist_act(mob/living/user)
visible_message(span_notice("[occupant] emerges from [src]!"),
@@ -364,6 +369,8 @@ GLOBAL_LIST_EMPTY(valid_cryopods)
control_computer.frozen_item += item_content
else mob_occupant.transferItemToLoc(item_content, drop_location(), force = TRUE, silent = TRUE)
+ GLOB.joined_player_list -= stored_ckey
+
handle_objectives()
QDEL_NULL(occupant)
open_machine()
diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm
index 0325b181380..0593b540bd9 100644
--- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm
+++ b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm
@@ -1414,4 +1414,16 @@
worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/suit.dmi'
icon_state = "razurath_coat"
-
+// Donation reward for MaSvedish
+/obj/item/clothing/mask/holocigarette/masvedishcigar
+ name = "holocigar"
+ desc = "A soft buzzing device that, using holodeck technology, replicates a slow burn cigar. Now with less-shock technology."
+ icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/masks.dmi'
+ worn_icon = 'modular_skyrat/master_files/icons/donator/mob/clothing/mask.dmi'
+ lefthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_left.dmi'
+ righthand_file = 'modular_skyrat/master_files/icons/donator/mob/inhands/donator_right.dmi'
+ inhand_icon_state = "masvedishcigar_off"
+ worn_icon_state = "masvedishcigar_off"
+ icon_state = "masvedishcigar_off"
+ icon_on = "masvedishcigar_on"
+ icon_off = "masvedishcigar_off"
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm
index ff6d09de807..e8ce1ed8dd5 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm
@@ -59,17 +59,17 @@
/datum/sprite_accessory/genital/penis/get_special_icon(mob/living/carbon/human/H)
var/returned = icon
- if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"])
- var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]]
- if(!(SP.taur_mode & STYLE_TAUR_SNAKE))
+ var/taur_mode = H.get_taur_mode()
+ if(taur_mode && H.dna.features["penis_taur_mode"])
+ if(!(taur_mode & STYLE_TAUR_SNAKE))
returned = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_penis_onmob.dmi'
return returned
/datum/sprite_accessory/genital/penis/get_special_x_dimension(mob/living/carbon/human/H)
var/returned = dimension_x
- if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"])
- var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]]
- if(!(SP.taur_mode & STYLE_TAUR_SNAKE))
+ var/taur_mode = H.get_taur_mode()
+ if(taur_mode && H.dna.features["penis_taur_mode"])
+ if(!(taur_mode & STYLE_TAUR_SNAKE))
returned = 64
return returned
@@ -139,17 +139,17 @@
/datum/sprite_accessory/genital/testicles/get_special_icon(mob/living/carbon/human/H)
var/returned = icon
- if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"])
- var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]]
- if(!(SP.taur_mode & STYLE_TAUR_SNAKE))
+ var/taur_mode = H.get_taur_mode()
+ if(taur_mode && H.dna.features["penis_taur_mode"])
+ if(!(taur_mode & STYLE_TAUR_SNAKE))
returned = 'modular_skyrat/master_files/icons/mob/sprite_accessory/genitals/taur_testicles_onmob.dmi'
return returned
/datum/sprite_accessory/genital/testicles/get_special_x_dimension(mob/living/carbon/human/H)
var/returned = dimension_x
- if(H.dna.species.mutant_bodyparts["taur"] && H.dna.features["penis_taur_mode"])
- var/datum/sprite_accessory/taur/SP = GLOB.sprite_accessories["taur"][H.dna.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]]
- if(!(SP.taur_mode & STYLE_TAUR_SNAKE))
+ var/taur_mode = H.get_taur_mode()
+ if(taur_mode && H.dna.features["penis_taur_mode"])
+ if(!(taur_mode & STYLE_TAUR_SNAKE))
returned = 64
return returned
diff --git a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
index fef1d850a1c..c89006b0d4a 100644
--- a/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
+++ b/modular_skyrat/modules/customization/modules/mob/dead/new_player/sprite_accessories/taur_types.dm
@@ -1,3 +1,20 @@
+/**
+ * Get a human's taur mode in a standardized way.
+ *
+ * Returns STYLE_TAUR_* or NONE.
+ */
+/mob/living/carbon/human/proc/get_taur_mode()
+ var/taur_mutant_bodypart = dna.species.mutant_bodyparts["taur"]
+ if(!taur_mutant_bodypart)
+ return NONE
+
+ var/bodypart_name = taur_mutant_bodypart[MUTANT_INDEX_NAME]
+ var/datum/sprite_accessory/taur/taur = GLOB.sprite_accessories["taur"][bodypart_name]
+ if(!taur)
+ return NONE
+
+ return taur.taur_mode
+
/datum/sprite_accessory/taur
icon = 'modular_skyrat/master_files/icons/mob/sprite_accessory/taur.dmi'
key = "taur"
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/carbon_update_icons.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/carbon_update_icons.dm
deleted file mode 100644
index 72c0224d02d..00000000000
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/carbon_update_icons.dm
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-/*
-/mob/living/carbon/update_worn_head()
- remove_overlay(HEAD_LAYER)
-
- if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated
- return
-
- if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1])
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1]
- inv.update_icon()
-
- if(head)
- var/desired_icon = head.worn_icon
- var/used_style = NONE
- if(dna?.species.id == SPECIES_VOX)
- used_style = STYLE_VOX
- else if(dna?.species.mutant_bodyparts["snout"])
- var/datum/sprite_accessory/snouts/S = GLOB.sprite_accessories["snout"][dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME]]
- if(S.use_muzzled_sprites && head.supports_variations_flags & CLOTHING_SNOUTED_VARIATION)
- used_style = CLOTHING_SNOUTED_VARIATION
- else if(isteshari(src))
- used_style = STYLE_TESHARI
- switch(used_style)
- if(CLOTHING_SNOUTED_VARIATION)
- desired_icon = head.worn_icon_muzzled || 'modular_skyrat/master_files/icons/mob/clothing/head_muzzled.dmi'
- if(STYLE_VOX)
- desired_icon = head.worn_icon_vox || 'modular_skyrat/master_files/icons/mob/clothing/head_vox.dmi'
- if(STYLE_TESHARI)
- if(head.worn_icon_teshari)
- desired_icon = head.worn_icon_teshari
- else
- var/static/list/tesh_icon_states = icon_states(TESHARI_HEAD_ICON)
- if((head.worn_icon_state || head.icon_state) in tesh_icon_states)
- desired_icon = TESHARI_HEAD_ICON
-
- overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/hats.dmi', override_file = desired_icon, mutant_styles = used_style)
- update_hud_head(head)
-
- apply_overlay(HEAD_LAYER)
-
-/mob/living/carbon/update_worn_mask()
- remove_overlay(FACEMASK_LAYER)
-
- if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated
- return
-
- if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1])
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1]
- inv.update_icon()
-
- if(wear_mask)
- var/desired_icon = wear_mask.worn_icon
- var/used_style = NONE
- if(dna?.species.id == SPECIES_VOX)
- used_style = STYLE_VOX
- else if(dna?.species.mutant_bodyparts["snout"])
- var/datum/sprite_accessory/snouts/S = GLOB.sprite_accessories["snout"][dna.species.mutant_bodyparts["snout"][MUTANT_INDEX_NAME]]
- if(S.use_muzzled_sprites && wear_mask.supports_variations_flags & CLOTHING_SNOUTED_VARIATION)
- used_style = CLOTHING_SNOUTED_VARIATION
- else if(isteshari(src))
- used_style = STYLE_TESHARI
-
- switch(used_style)
- if(CLOTHING_SNOUTED_VARIATION)
- desired_icon = wear_mask.worn_icon_muzzled || 'modular_skyrat/master_files/icons/mob/clothing/mask_muzzled.dmi'
- if(STYLE_VOX)
- desired_icon = wear_mask.worn_icon_vox || 'modular_skyrat/master_files/icons/mob/clothing/mask_vox.dmi'
- if(STYLE_TESHARI)
- if(wear_mask.worn_icon_teshari)
- desired_icon = wear_mask.worn_icon_teshari
- else
- var/static/list/tesh_icon_states = icon_states(TESHARI_MASK_ICON)
- if((wear_mask.worn_icon_state || wear_mask.icon_state) in tesh_icon_states)
- desired_icon = TESHARI_MASK_ICON
-
- if(!(check_obscured_slots() & ITEM_SLOT_MASK))
- overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi', override_file = desired_icon, mutant_styles = used_style)
- update_hud_wear_mask(wear_mask)
-
- apply_overlay(FACEMASK_LAYER)
-
-/mob/living/carbon/update_inv_neck()
- remove_overlay(NECK_LAYER)
-
- if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1])
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]
- inv.update_appearance()
-
- if(wear_neck)
- var/icon_file = wear_neck.worn_icon
- var/applied_styles = NONE
- if(isteshari(src))
- applied_styles = STYLE_TESHARI
- icon_file = TESHARI_NECK_ICON
-
- if(!(check_obscured_slots() & ITEM_SLOT_NECK))
- overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck.dmi', override_file = icon_file, mutant_styles = applied_styles, species = dna.species.species_clothing_path)
- update_hud_neck(wear_neck)
-
- apply_overlay(NECK_LAYER)
-
-/mob/living/carbon/update_worn_back()
- remove_overlay(BACK_LAYER)
-
- if(client && hud_used?.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1])
- var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1]
- inv.update_appearance()
-
- if(back)
- var/icon_file = back.worn_icon
- var/applied_styles = NONE
- if(isteshari(src))
- var/static/list/tesh_icon_states = icon_states(TESHARI_BACK_ICON)
- if((back.worn_icon_state || back.icon_state) in tesh_icon_states)
- icon_file = TESHARI_BACK_ICON
- applied_styles = STYLE_TESHARI
-
- overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi', override_file = icon_file, mutant_styles = applied_styles)
- update_hud_back(back)
-
- apply_overlay(BACK_LAYER)
-*/
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
index 9dab28092de..b061898d931 100644
--- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm
@@ -63,6 +63,21 @@
var/slime_restricted = TRUE
///Is the person using this ability oversized?
var/oversized_user = FALSE
+ ///List containing all of the avalible parts
+ var/static/list/available_choices
+
+/datum/action/innate/alter_form/New(Target)
+ . = ..()
+ if(length(available_choices))
+ return
+
+ available_choices = GLOB.sprite_accessories.Copy()
+ for(var/parts_list in available_choices)
+ for(var/parts in available_choices[parts_list])
+ var/datum/sprite_accessory/part = available_choices[parts_list][parts]
+ if(part.locked)
+ available_choices[parts_list] -= parts
+
/datum/action/innate/alter_form/unrestricted
slime_restricted = FALSE
@@ -322,7 +337,8 @@
)
if(!chosen_key)
return
- var/choice_list = GLOB.sprite_accessories[chosen_key]
+
+ var/choice_list = available_choices[chosen_key]
var/chosen_name_key = tgui_input_list(
alterer,
"What do you want the part to become?",
diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm
new file mode 100644
index 00000000000..91660ed9367
--- /dev/null
+++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/worn_overlays.dm
@@ -0,0 +1,27 @@
+/**
+ * Setup the final version of accessory_overlay given custom species options.
+ */
+/obj/item/clothing/under/proc/modify_accessory_overlay()
+ if(!ishuman(loc))
+ return accessory_overlay
+
+ var/mob/living/carbon/human/human_wearer = loc
+
+ // Handle custom_worn_icons[LOADOUT_ITEM_ACCESSORY]
+ if(LOADOUT_ITEM_ACCESSORY in human_wearer.dna.species.custom_worn_icons)
+ var/icon/custom_accessory_icon = human_wearer.dna.species.custom_worn_icons[LOADOUT_ITEM_ACCESSORY]
+
+ var/list/custom_accessory_states = icon_states(custom_accessory_icon)
+ if(accessory_overlay.icon_state in custom_accessory_states)
+ // Make new appearance so we don't break the real accessory overlay for other species, and treat it as final.
+ return mutable_appearance(custom_accessory_icon, accessory_overlay.icon_state)
+
+ // Apply an offset only if we didn't apply a different appearance.
+ if(OFFSET_ACCESSORY in human_wearer.dna.species.offset_features)
+ accessory_overlay.pixel_x = human_wearer.dna.species.offset_features[OFFSET_ACCESSORY][1]
+ accessory_overlay.pixel_y = human_wearer.dna.species.offset_features[OFFSET_ACCESSORY][2]
+ else
+ accessory_overlay.pixel_x = 0
+ accessory_overlay.pixel_y = 0
+
+ return accessory_overlay
diff --git a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm b/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm
index 8fdf5e8cf27..7e06d94ed27 100644
--- a/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm
+++ b/modular_skyrat/modules/emergency_spacesuit/code/emergency_spacesuit.dm
@@ -74,9 +74,6 @@
// Lil box to hold em in
-/datum/armor/space_emergency
- bio = 20
-
/obj/item/storage/box/emergency_spacesuit
name = "emergency space suit case"
desc = "A small case containing an emergency space suit and helmet."
diff --git a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm
index 8f551d227b8..4d776678811 100644
--- a/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm
+++ b/modular_skyrat/modules/emotes/code/additionalemotes/turf_emote.dm
@@ -62,12 +62,10 @@
if(tail.fluffy)
user.allowed_turfs += "tails"
- if(human_user.dna.species.mutant_bodyparts["taur"])
- var/name = human_user.dna.species.mutant_bodyparts["taur"][MUTANT_INDEX_NAME]
- var/datum/sprite_accessory/taur/taur = GLOB.sprite_accessories["taur"][name]
- if(taur.taur_mode & STYLE_TAUR_SNAKE)
- user.allowed_turfs -= list("pawprint", "hoofprint", "clawprint")
- user.allowed_turfs += "constrict"
+ var/taur_mode = human_user.get_taur_mode()
+ if(taur_mode & STYLE_TAUR_SNAKE)
+ user.allowed_turfs -= list("pawprint", "hoofprint", "clawprint")
+ user.allowed_turfs += "constrict"
//clothing
var/obj/item/shoes = user.get_item_by_slot(ITEM_SLOT_FEET)
diff --git a/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm b/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm
index 48e61b07b57..2336f4059c6 100644
--- a/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm
+++ b/modular_skyrat/modules/ghostcafe/code/ghost_role_spawners.dm
@@ -5,12 +5,6 @@
flavour_text = "You are a robot. This probably shouldn't be happening."
mob_type = /mob/living/silicon/robot
-/obj/effect/mob_spawn/ghost_role/robot/Initialize(mapload)
- . = ..()
-
-/obj/effect/mob_spawn/ghost_role/robot/equip(mob/living/silicon/robot/R)
- . = ..()
-
/obj/effect/mob_spawn/ghost_role/robot/ghostcafe
name = "Cafe Robotic Storage"
prompt_name = "a ghost cafe robot"
@@ -65,7 +59,6 @@
ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, GHOSTROLE_TRAIT)
to_chat(new_spawn,span_warning("Ghosting is free!"))
var/datum/action/toggle_dead_chat_mob/D = new(new_spawn)
- new_spawn.put_in_hands(new /obj/item/storage/box/syndie_kit/chameleon/ghostcafe, LEFT_HANDS, forced = TRUE)
new_spawn.equip_outfit_and_loadout(/datum/outfit/ghostcafe, new_spawn.client.prefs, FALSE, null)
SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn)
D.Grant(new_spawn)
@@ -75,6 +68,8 @@
uniform = /obj/item/clothing/under/color/random
shoes = /obj/item/clothing/shoes/sneakers/black
id = /obj/item/card/id/advanced/ghost_cafe
+ back = /obj/item/storage/backpack/chameleon
+ backpack_contents = list(/obj/item/storage/box/syndie_kit/chameleon/ghostcafe = 1)
/datum/action/toggle_dead_chat_mob
button_icon = 'icons/mob/simple/mob.dmi'
@@ -96,6 +91,13 @@
/obj/item/storage/box/syndie_kit/chameleon/ghostcafe
name = "cafe costuming kit"
desc = "Look just the way you did in life - or better!"
+ icon_state = "ghostcostuming"
+
+/obj/item/storage/box/syndie_kit/chameleon/ghostcafe/Initialize(mapload)
+ . = ..()
+ atom_storage.max_specific_storage = WEIGHT_CLASS_HUGE // This is ghost cafe only, balance is not given a shit about.
+ atom_storage.max_slots = 14 // Holds all the starting stuff, plus a bit of change.
+ atom_storage.max_total_storage = 50 // To actually acommodate the stuff being added.
/obj/item/storage/box/syndie_kit/chameleon/ghostcafe/PopulateContents() // Doesn't contain a PDA, for isolation reasons.
new /obj/item/clothing/under/chameleon(src)
@@ -106,7 +108,6 @@
new /obj/item/clothing/head/chameleon(src)
new /obj/item/clothing/mask/chameleon(src)
new /obj/item/clothing/neck/chameleon(src)
- new /obj/item/storage/backpack/chameleon(src)
new /obj/item/storage/belt/chameleon(src)
new /obj/item/card/id/advanced/chameleon(src)
new /obj/item/hhmirror/syndie(src)
diff --git a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm
index ffbdae3102f..c50af2b55af 100644
--- a/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm
+++ b/modular_skyrat/modules/gladiator/code/game/objects/items/gladiator_items.dm
@@ -77,16 +77,6 @@
resistance_flags = INDESTRUCTIBLE
actions_types = list(/datum/action/item_action/berserk_mode)
-/datum/armor/berserker_gatsu
- melee = 40
- bullet = 40
- laser = 20
- energy = 25
- bomb = 70
- bio = 100
- fire = 100
- acid = 100
-
/obj/item/clothing/head/hooded/berserker/gatsu/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
@@ -138,6 +128,7 @@
armour_penetration = 35 //this boss is really hard and this sword is really big
block_chance = 25
sharpness = SHARP_EDGED
+ item_flags = NO_BLOOD_ON_ITEM
// aughhghghgh this really should be elementized but this works for now
var/faction_bonus_force = 100
var/static/list/nemesis_factions = list("mining", "boss")
@@ -150,9 +141,6 @@
. = ..()
. += span_warning("Tempered against lavaland foes and bosses through supernatural energies. Right click to dodge at the cost of stamina.")
-/obj/item/claymore/dragonslayer/add_blood_DNA(list/blood_dna) //110% stain-proof! or so they tell me
- return FALSE
-
/obj/item/claymore/dragonslayer/attack(mob/living/target, mob/living/carbon/human/user)
var/is_nemesis_faction = FALSE
for(var/found_faction in target.faction)
diff --git a/modular_skyrat/modules/hev_suit/code/hev_suit.dm b/modular_skyrat/modules/hev_suit/code/hev_suit.dm
index dd8bb205927..533e4722e5e 100644
--- a/modular_skyrat/modules/hev_suit/code/hev_suit.dm
+++ b/modular_skyrat/modules/hev_suit/code/hev_suit.dm
@@ -176,17 +176,6 @@
/// On first activation, we play the user a nice song!
var/first_use = TRUE
-/datum/armor/space_hev_suit
- melee = 20
- bullet = 20
- laser = 20
- energy = 20
- bomb = 30
- bio = 40
- fire = 40
- acid = 40
- wound = 10
-
/obj/item/clothing/suit/space/hev_suit/Initialize(mapload)
. = ..()
internal_radio = new(src)
@@ -906,17 +895,6 @@
acid_static_cooldown = PCV_COOLDOWN_ACID
suit_name = "PCV MARK II"
-/datum/armor/hev_suit_pcv
- melee = 30
- bullet = 30
- laser = 30
- energy = 30
- bomb = 30
- bio = 20
- fire = 20
- acid = 20
- wound = 10
-
/obj/item/clothing/suit/space/hev_suit/pcv/AltClick(mob/living/user)
reskin_obj(user)
. = ..()
diff --git a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm b/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
index c579300f410..e143d01bd25 100644
--- a/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
+++ b/modular_skyrat/modules/loadouts/loadout_items/donator/personal/donator_personal.dm
@@ -617,3 +617,8 @@
name = "Golden Nanotrasen Officer Coat"
item_path = /obj/item/clothing/suit/razurathcoat
ckeywhitelist = list("razurath")
+
+/datum/loadout_item/pocket_items/masvedishcigar
+ name = "Holocigar"
+ item_path = /obj/item/clothing/mask/holocigarette/masvedishcigar
+ ckeywhitelist = list("masvedish")
diff --git a/modular_skyrat/modules/mapping/code/interdyne_mining.dm b/modular_skyrat/modules/mapping/code/interdyne_mining.dm
index 8a05b38f6a4..53e5e6a3967 100644
--- a/modular_skyrat/modules/mapping/code/interdyne_mining.dm
+++ b/modular_skyrat/modules/mapping/code/interdyne_mining.dm
@@ -9,7 +9,6 @@
circuit = /obj/item/circuitboard/computer/order_console/mining/interdyne
forced_express = TRUE
express_cost_multiplier = 1
- uses_ltsrbt = FALSE
order_categories = list(
CATEGORY_MINING,
CATEGORY_CONSUMABLES,
diff --git a/modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm b/modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm
index 44f87bdb2c9..7b70095ceb0 100644
--- a/modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm
+++ b/modular_skyrat/modules/medievalcrate_skyrat/code/vintageitems.dm
@@ -22,15 +22,6 @@
clothing_flags = null
armor_type = /datum/armor/plate_larp
-/datum/armor/plate_larp
- melee = 10
- bullet = 5
- laser = 5
- energy = 5
- bomb = 5
- fire = 60
- acid = 60
-
/obj/item/clothing/shoes/plate/larp/red
icon_state = "crusader-red"
diff --git a/modular_skyrat/modules/modular_items/code/ciggies.dm b/modular_skyrat/modules/modular_items/code/ciggies.dm
index 377686b5eb0..359a90efe4a 100644
--- a/modular_skyrat/modules/modular_items/code/ciggies.dm
+++ b/modular_skyrat/modules/modular_items/code/ciggies.dm
@@ -31,13 +31,16 @@
var/mob/living/carbon/smoker = owner
if(smoked.lit == FALSE)
smoked.icon_state = smoked.icon_on
+ smoked.worn_icon_state = smoked.icon_on
smoked.inhand_icon_state = smoked.icon_on
smoked.lit = TRUE
smoked.name = "lit [smoked.name]"
else
smoked.icon_state = smoked.icon_off
+ smoked.worn_icon_state = smoked.icon_off
smoked.inhand_icon_state = smoked.icon_off
smoked.lit = FALSE
smoked.name = copytext_char(smoked.name, 5) //5 == length_char("lit ") + 1
smoked.update_icon()
smoker.update_worn_mask()
+ smoker.update_held_items()
diff --git a/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm b/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm
index 23f3a7b22ee..d4afe12cf0e 100644
--- a/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm
+++ b/modular_skyrat/modules/nanotrasen_rep/code/clothing.dm
@@ -49,9 +49,9 @@
icon_state = "beret_badge"
/obj/item/clothing/head/beret/centcom_formal/nt_consultant
- armor_type = /datum/armor/centcom_formal_nt_consultant
+ armor_type = /datum/armor/beret_centcom_formal_nt_consultant
-/datum/armor/centcom_formal_nt_consultant
+/datum/armor/beret_centcom_formal_nt_consultant
melee = 15
bullet = 5
laser = 15
@@ -62,9 +62,9 @@
wound = 4
/obj/item/clothing/suit/armor/centcom_formal/nt_consultant
- armor_type = /datum/armor/centcom_formal_nt_consultant
+ armor_type = /datum/armor/armor_centcom_formal_nt_consultant
-/datum/armor/centcom_formal_nt_consultant
+/datum/armor/armor_centcom_formal_nt_consultant
melee = 35
bullet = 30
laser = 30
diff --git a/modular_skyrat/modules/novaya_ert/code/head.dm b/modular_skyrat/modules/novaya_ert/code/head.dm
index b8b3891be8d..c3bdf047387 100644
--- a/modular_skyrat/modules/novaya_ert/code/head.dm
+++ b/modular_skyrat/modules/novaya_ert/code/head.dm
@@ -119,17 +119,6 @@
visor_flags = STOPSPRESSUREDAMAGE
slowdown = 0
-/datum/armor/hev_suit_nri
- melee = 25
- bullet = 25
- laser = 25
- energy = 25
- bomb = 25
- bio = 20
- fire = 20
- acid = 20
- wound = 10
-
/obj/item/clothing/head/helmet/space/hev_suit/nri/captain
name = "\improper VOSKHOD-2 powered combat armor helmet"
desc = "A black composite polyurea coated graphene-plastitanium helmet with durathread inner padding, complete with a deployable airtight tinted plasmaglass visor and a kevlar-lined respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back."
diff --git a/tgstation.dme b/tgstation.dme
index 793fb296be4..81b7029d3b9 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -406,6 +406,7 @@
#include "code\__HELPERS\dates.dm"
#include "code\__HELPERS\datums.dm"
#include "code\__HELPERS\dna.dm"
+#include "code\__HELPERS\duplicating.dm"
#include "code\__HELPERS\files.dm"
#include "code\__HELPERS\filters.dm"
#include "code\__HELPERS\forensics.dm"
@@ -674,6 +675,7 @@
#include "code\controllers\subsystem\weather.dm"
#include "code\controllers\subsystem\wiremod_composite.dm"
#include "code\controllers\subsystem\movement\ai_movement.dm"
+#include "code\controllers\subsystem\movement\hyperspace_drift.dm"
#include "code\controllers\subsystem\movement\move_handler.dm"
#include "code\controllers\subsystem\movement\movement.dm"
#include "code\controllers\subsystem\movement\movement_types.dm"
@@ -1003,6 +1005,7 @@
#include "code\datums\components\shell.dm"
#include "code\datums\components\shielded.dm"
#include "code\datums\components\shrink.dm"
+#include "code\datums\components\shuttle_cling.dm"
#include "code\datums\components\shy.dm"
#include "code\datums\components\shy_in_room.dm"
#include "code\datums\components\sign_language.dm"
@@ -3341,7 +3344,6 @@
#include "code\modules\holiday\foreign_calendar.dm"
#include "code\modules\holiday\holidays.dm"
#include "code\modules\holiday\nth_week.dm"
-#include "code\modules\holodeck\area_copy.dm"
#include "code\modules\holodeck\computer.dm"
#include "code\modules\holodeck\holo_effect.dm"
#include "code\modules\holodeck\holodeck_map_templates.dm"
@@ -3652,7 +3654,6 @@
#include "code\modules\mining\machine_unloading.dm"
#include "code\modules\mining\mine_items.dm"
#include "code\modules\mining\minebot.dm"
-#include "code\modules\mining\mining_ltsrbt.dm"
#include "code\modules\mining\money_bag.dm"
#include "code\modules\mining\ores_coins.dm"
#include "code\modules\mining\satchel_ore_boxdm.dm"
@@ -5734,7 +5735,6 @@
#include "modular_skyrat\modules\customization\modules\mob\living\living.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\living_defines.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\living_verbs.dm"
-#include "modular_skyrat\modules\customization\modules\mob\living\carbon\carbon_update_icons.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\damage_procs.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\custom_bodytype.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\human.dm"
@@ -5742,6 +5742,7 @@
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\human_defines.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\species.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\status_procs.dm"
+#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\worn_overlays.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_accessory_handler.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_actions.dm"
#include "modular_skyrat\modules\customization\modules\mob\living\carbon\human\MOD_sprite_accessories\mod_themes.dm"
diff --git a/tgui/packages/tgui/interfaces/NtosPay.tsx b/tgui/packages/tgui/interfaces/NtosPay.tsx
index 175a965cfad..4064550661e 100644
--- a/tgui/packages/tgui/interfaces/NtosPay.tsx
+++ b/tgui/packages/tgui/interfaces/NtosPay.tsx
@@ -82,7 +82,7 @@ const TransferSection = (props, context) => {
{
const CheckoutTab = (props, context) => {
const { data, act } = useBackend(context);
- const { ltsrbt_available, forced_express, order_datums, total_cost } = data;
+ const {
+ purchase_tooltip,
+ express_tooltip,
+ forced_express,
+ order_datums,
+ total_cost,
+ } = data;
const checkout_list = order_datums.filter((food) => food && (food.amt || 0));
return (
@@ -160,40 +166,19 @@ const CheckoutTab = (props, context) => {
fluid
icon="plane-departure"
content="Purchase"
- tooltip={multiline`
- Your groceries will arrive at cargo,
- and hopefully get delivered by them.
- `}
+ tooltip={purchase_tooltip}
tooltipPosition="top"
onClick={() => act('purchase')}
/>
)}
- {!!ltsrbt_available && (
-
-
- )}