Merge branch 'Skyrat-SS13:master' into master

This commit is contained in:
ReturnToZender
2023-01-14 13:53:16 -06:00
committed by GitHub
248 changed files with 1242 additions and 4297 deletions
+2
View File
@@ -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]')"
+1
View File
@@ -3,6 +3,7 @@ on:
push:
branches:
- master
- 'project/**'
jobs:
triage:
runs-on: ubuntu-20.04
@@ -9,6 +9,7 @@ on:
pull_request:
branches:
- master
- 'project/**'
jobs:
has_515_compatibility:
name: Has 515 Compatibility
@@ -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
},
@@ -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
},
@@ -4735,7 +4735,6 @@
dir = 4
},
/obj/machinery/computer/order_console/mining{
uses_ltsrbt = 0;
forced_express = 1;
express_cost_multiplier = 1
},
@@ -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
},
@@ -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
},
+263 -261
View File
@@ -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
@@ -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()
+2
View File
@@ -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
+2
View File
@@ -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
+1 -1
View File
@@ -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
+1
View File
@@ -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
+4
View File
@@ -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"
@@ -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)
+93
View File
@@ -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
+1
View File
@@ -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(
-3
View File
@@ -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)
+2 -2
View File
@@ -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)
@@ -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
@@ -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()
@@ -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))
+1 -1
View File
@@ -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
+158
View File
@@ -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
+19 -9
View File
@@ -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)
+5 -5
View File
@@ -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
+1 -1
View File
@@ -355,7 +355,7 @@
. += span_notice("The status display reads: Storing up to <b>[materials.max_amount]</b> material units.<br>Material consumption at <b>[creation_efficiency*100]%</b>.")
/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)
-27
View File
@@ -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
@@ -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)
@@ -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,
@@ -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
@@ -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
@@ -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
-16
View File
@@ -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)
+31 -52
View File
@@ -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))
-9
View File
@@ -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
-18
View File
@@ -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)
-9
View File
@@ -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))
-8
View File
@@ -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)
-21
View File
@@ -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))
-9
View File
@@ -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
@@ -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)
-9
View File
@@ -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
-8
View File
@@ -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)
@@ -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
-32
View File
@@ -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
-40
View File
@@ -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)
. = ..()
-16
View File
@@ -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
+103 -92
View File
@@ -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
@@ -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"
+1 -9
View File
@@ -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)
-4
View File
@@ -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"
-32
View File
@@ -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))
-12
View File
@@ -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
-15
View File
@@ -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(!.)
+1 -27
View File
@@ -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()
+1 -3
View File
@@ -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."
+5
View File
@@ -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)
@@ -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
-30
View File
@@ -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)
-32
View File
@@ -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, \
@@ -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, \
-8
View File
@@ -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)
@@ -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))
@@ -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), \
))
@@ -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
@@ -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)
+1 -3
View File
@@ -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
@@ -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()
-10
View File
@@ -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)
-16
View File
@@ -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."
@@ -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"]))
@@ -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)
-8
View File
@@ -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, \
-68
View File
@@ -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 = "<b><i>THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!</i></b>\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!")
@@ -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.")
@@ -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 ..()
-42
View File
@@ -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 <b>[force_allaccess ? "off" : "on"]</b>.")
@@ -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
-15
View File
@@ -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 <b>cut</b>.")
@@ -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 <b>cut</b>, but the <i>heat treatment will shatter off</i>. There's space for a <i>tile</i>.")
@@ -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))
@@ -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 <b>bolts</b>.")
@@ -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)
-13
View File
@@ -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()
+46 -29
View File
@@ -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
+1 -1
View File
@@ -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))
@@ -1,5 +1,6 @@
/datum/antagonist/blobbernaut
name = "\improper Blobbernaut"
antagpanel_category = "Biohazards"
show_name_in_check_antagonists = TRUE
show_to_ghosts = TRUE
@@ -1,5 +1,6 @@
/datum/antagonist/blobspore
name = "\improper Blob Spore"
antagpanel_category = "Biohazards"
show_name_in_check_antagonists = TRUE
show_to_ghosts = TRUE
@@ -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)
@@ -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
@@ -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)
@@ -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)
@@ -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)
@@ -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
@@ -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)
@@ -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
@@ -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
@@ -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
@@ -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"
+1 -1
View File
@@ -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.
+4 -4
View File
@@ -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)

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