diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 0e51a86a8d3..2b9fa0915a1 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -5853,6 +5853,7 @@
"ciC" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3"},/area/toxins/test_area)
"ciD" = (/obj/machinery/camera{c_tag = "Research Toxins Test Chamber East"; dir = 8; network = list("Toxins","Research","SS13")},/obj/machinery/light{dir = 4},/turf/simulated/floor/airless,/area/toxins/test_area)
"ciE" = (/turf/simulated/wall/r_wall,/area/storage/tech)
+"ciF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 1; name = "Engineering Hardsuit Storage APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/hardsuitstorage)
"ciG" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/storage/tech)
"ciH" = (/obj/machinery/camera{c_tag = "Tech Storage"; dir = 2; network = list("SS13")},/obj/machinery/power/apc{dir = 1; name = "Tech Storage APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/cyborgrecharger{pixel_x = -4; pixel_y = -2},/obj/item/weapon/circuitboard/mech_bay_power_console{pixel_x = 2; pixel_y = 2},/obj/item/weapon/circuitboard/mech_recharger,/obj/item/weapon/circuitboard/mechfab{pixel_y = 3},/turf/simulated/floor/plating,/area/storage/tech)
"ciI" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/healthanalyzer,/turf/simulated/floor/plating,/area/storage/tech)
@@ -7057,10 +7058,10 @@
"cFL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/light{dir = 1},/obj/item/weapon/cartridge/engineering{pixel_x = 3},/obj/item/weapon/cartridge/engineering{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cartridge/engineering{pixel_x = 4; pixel_y = 5},/turf/simulated/floor,/area/engine/engineering)
"cFM" = (/obj/machinery/power/apc{cell_type = 15000; dir = 1; name = "Engineering APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/engine/engineering)
"cFN" = (/obj/effect/spawner/window/reinforced,/turf/simulated/floor/plating,/area/engine/hardsuitstorage)
-"cFO" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 1; name = "Engineering Hardsuit Storage APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/engine/hardsuitstorage)
-"cFP" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/hardsuitstorage)
-"cFQ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor,/area/engine/hardsuitstorage)
-"cFR" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/engine/hardsuitstorage)
+"cFO" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/item/device/radio/intercom{broadcasting = 0; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor,/area/engine/hardsuitstorage)
+"cFP" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/engine/hardsuitstorage)
+"cFQ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/engine/hardsuitstorage)
+"cFR" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Secure Storage APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure)
"cFS" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cFT" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/structure/table/reinforced,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/device/megaphone,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cFU" = (/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's Desk"; departmentType = 3; name = "Chief Engineer Requests Console"; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/photocopier,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
@@ -7450,8 +7451,7 @@
"cNo" = (/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"cNp" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "Engineering Secure Storage North"; dir = 4; network = list("SS13")},/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/storage/secure)
"cNq" = (/obj/machinery/shield_capacitor,/turf/simulated/floor/plating,/area/storage/secure)
-"cNr" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Secure Storage APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure)
-"cNs" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure)
+"cNr" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/alarm{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure)
"cNt" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/storage/secure)
"cNu" = (/obj/machinery/camera{c_tag = "Engineering West"; dir = 4; network = list("SS13")},/obj/structure/dispenser,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/engineering)
"cNv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/engine/engineering)
@@ -8410,14 +8410,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaabaaaczocAkczqaabczocAkczqaaaczocAkczqaaaaaaaaaaaaaaaaaaaabaabaabaaaaabaaaaabaabaaaaaacybcCicvKcCjcCkcCkcClcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcvKcCmcCncCmcCocCmcrmcCpcCqcFbcCtcCtcCtcCucCvcBCcCwcCxcCycCzcCAcCBcBIcCCcCDcCEcCFcHzcCHcHAcCJaabcCKcCKcCKcCKcCKcHBcoAcHDcHCcIGcHHcIHctackycjocjnckuckycCScGucupcHwcCScoAcusbGycoAaaaaaackPcxOcxOcxOcAQcCTczbcCUcCVcCWcCXcCZcCZcDacqUcDbckPaabaabaaaaaaaaacIKaaaaaaaaabwobxXcvzcyJbxXbxXbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGacGafxaabaaaczocAkczqaabczocAkczqaaaczocAkczqaabaaaaaaaaaaaaaaaaaaaaaaaaaabcDccDdcDdcDdcDdcybcDecwWcDfcDgcDhcDhcDicDjcDkcDlcDlcDlcDlcDmcDncDocDncDncDpcDpcDncDqcDrcDscDtcDtcDucDvcDwcDxcDycDzcDzcDAcDBcDCcDDcDEcDFcCAcDGcBIcDHcDIcDJcDKcILcDMcIMcDOcDPcDQcDRcDScDTcCKcHBcoDcEhclUcvscvqcIOcINcxLckxckwdcrclUcuqczVcuqczVcuqcoAcusbGycoAcoAaaackPcwAcwAcwAcwAcEkcqUcCbcElcEmcCecqUcEncEocEocEpcEqcXYaabaaaaaaaaaaaaaaaaaaaaabwobxXcGybxXbxXcIPbwoaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGaaaaabaaaaabaabcEraabaabaabcEraabaaaaabcEraabaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccEscEtcEucEvcEwcExcEycDfcDfcEzcEAcvKcvKcEBcECcECcECcECcEDcEEcEFcEEcEEcEEcDtcDtcEGcEHcEIcEJcEKcDzcELcDwcDzcDzcDzcDzcEMcBCcENcEOcCycDFcCAcDFcBIcDHcDIcEPcEQcERcEScETcEUaabcEVcEWcDTcEXcCKcHBcoDcHDcHCcxKcxJczVcxMclUcIIclQdcsclUcIQcIRczVcuqcyWclUcusbGycITcoAaaackPcwtcwucwvcFjcARczbcFkcJJcJIcJKcJKcFocFpcFqcJLckPaabaabaabaaaaaaaaaaaaaaaaaabwocJMcvzbwobwobwobwobwoaabaabaabcJNcJNcJNcJNcJNcJNaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcFMcFNcFOcFPcFQcFRcFScFTcFUcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAaaackPcxOcxPcxOcGAcxRcqUcGBcJPcGCcqUcqUcGDcwAcwAcwAckPaaaaaaaabaabaaaaaaaaaaaaaaabwocyKcvzbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaafxaabcFscFtcFtcFucFvcFwcFwcFwcFvcFwcFwcFwcFvcFwcFwcFxcFtcFtcFtcFtcFtcFycFzcFAcFBcFCcFDcFEcFFcFGcfRcwWcFHcDfcvKcvKcvKcFIcEBcECcFJcFKcFLcFMcFNciFcFPcFOcFQcFScFTcFUcFVcFWcFXcFScFYcFZcDwcGacDzcDzcDzcGbcBCcGccGccDFcGdcGecGfcGgcGhcGicGjcGkcGlcGmcGncDOcGocDQcGpcDTcDTcCKcHBcoDcEhclUcyMcyLcyNcFfclUcnkclTcFfclUcyQcyScyRcyTcyTclUcusbGycJOcoAaaackPcxOcxPcxOcGAcxRcqUcGBcJPcGCcqUcqUcGDcwAcwAcwAckPaaaaaaaabaabaaaaaaaaaaaaaaabwocyKcvzbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGaaaaabaaaaabaabcGFaabaaaaabcGFaabaaaaabcGFaabaaaaaaaaaaaaaaaaaaaaaaaacDccDccDccGGcGHcGIcDdcGJcfRcGKcExcExcExcExcGLcExcFGcECcGMcGNcGOcGPcGQcGRcGScGTcGUcGVcGWcGXcGYcGZcHacHbcFYcELcDwcHccHdcDzcDzcHecBCcHfcHgcDFcHhcCAcHicHjcHkcHlcHmcHncHocHpcHocHqaabcCKcCKcCKcCKcCKcHBcoAcEhclUcIJcyVcyYcyXczNcJQczPczOcJhczQcyLczVczVczSclUcusbGycJRcoAaaackPcxOcxOcxOcFjcHEcHFcHGcJScHIcCZcCZcCZcHJcHKcHLcHMaaaaaaaaaaabaabaaaaaaaaaaaabwobwocvzbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaacGacGafxaabaabczocHOczqaaaczocHOczqaaaczocHOczqaabaaaaaaaaaaaaaaaaaaaaaaabaabcDccDdcDdcDdcDdcHPcHQcHRcfRcHScfRcfRcEBcHTcfRcECcHUcHVcGOcHWcFNcHXcHYcHZcIacIbcIccIdcIecIfcIgcIbcIhcIicIjcIkcIlcImcIncIocIpcIqcGfcIrcIscItcIucIvcIwcIxcIycIzcIAcIBcICcIDcDPcDQcIEcIFcIFcCKcHBcoAcEhclUclUclUclUclUcAOcANcBRcAPcBTcBScBUcAPcBWcBVclUcuscGqcGrcGrcGrcJTcJTcJTcJTcJTcJUcKTcKbcKUcIUczbcIVczbcIWczbcIXcHMaaaaaaaaaaaaaabaabaaaaaaaaaaaabwocvzbwoaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJaaaaaaaaaacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaczocHOczqaabczocHOczqaaaczocHOczqaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJbcJbcJbcJbcJbcJbcJbcJccJbcJbcECcJdcJecGOcHWcFNcJfcFNcJgcLhcDtcJicJjcFWcJkcJlcDtcJmcDzcDwcJncJocJpcIncJqcJrcJscJtcJucJvcJwcJtcJxcJycJzcJAcDFcJBcJCcJDcJEaabcEVcJFcJGcJHcCKcHBcoDcKWcKVcKVcKVcKXclUcBXcyLcCLcBYcyScCMcyTcyTcyScCNclUcuscGvbVibGycKYcKZcoAaaaaaackPcJVcJWcJXcJYcJVcJWcJZcKacJVcJWcLackPaabaabaabaabaabaabaabaabaabaabbwocvzbwobwobwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaabczocHOczqaaaczocHOczqaaaczocHOczqaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJbcKjcKjcKkcKlcKmcKmcKncKocKocKpcKqcKrcGOcHWcGOcKscGOcGOcGOcDtcKtcKucKvcKwcKxcKycKzcKAcKBcKCcKCcKCcKDcKEcKFcKGcKHcKIcHhcCAcKJcKKcKLcKMcKNcDFcJBcKOcKPcKQcKRcDQcKScIFcIFcCKcHBcoDcEhbVibVibVibYDclUcCPcCOczVcCQcyScCRcCScyTcDUcCRclUcuscGvbVibGycyHbGycoAaaaaaackPcLicLjcLkcwAcLlcLmcLncwAcLocLpcLqckPaabaabaaaaaaaaaaaaaaaaaaaaaaaabwocvzbxXbxXbwoaabaabaaaaaaaaaaaaaaaaaaaaaaaacJaaaaaaacJaaaaaaacJacJacJacJacJacJacJaaaaaaacJaaaaaaacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaabczocHOczqaaaczocHOczqaabczocHOczqaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJbcKjcKjcKkcLscLscLscLtcLucLvcECcLwcLxcLycLzcLAcLBcLCcLDcLDcLEcLFcLGcGOcGOcGOcLHcLIcLJcLKcLLcLMcLNcLOcLPcECcLQcLQcLRcHhcCAcLScLTcLUcLVcLWcDFcLXcLYcLZcMacMbcCKcCKcCKcCKcCKcHBcoDcEhcLbbGybGybYDclUcDVczVcDXcDWcDZcDYcEacyTcEccEbclUcuscGvczhbGychCcITcoAaaaaaackPcMpcxOcxOcwAcMpcxOcxOcwAcMpcxOcxOckPaaaaabaabaaaaaaaaaaaaaaaaaaaaabwocLccyJbxXbwobwobwocJNcJNaabaabaabaabaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaagiaabczocMqczqaaaczocMqczqaaaczocMqczqaabafxaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJbcMrcMscLscLscLscMtcMucMucMucMucMucMucMucMvcMwcMxcMycMzcMzcMzcMAcMBcMCcMzcMzcMzcMBcMDcMEcMFcLMcMGcLOcLPcMHcMIcMJcMKcMLcMMcMNcMOcKNcMPcMQcMRcMScMTcMUcIDcMVcDQcMWcMXcMXcCKcHBcoAcEhbVicozcLdbYDclUcEeczVczVcEfcyScYucEgcyTcEgcYuclUcuscGvbVibGybVibVicoAaabaabckPcNncBZcxOcwAcNncBZcxOcwAcNncBZcxOckPaaaaaaaabaabaaaaaaaaaaaaaaaaaabwocvzcyJcLecyJcLfbwoaabaabaabaaaaaaaaaaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaafxaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJbcNocLscLscLscLscLscMucNpcNqcNrcNscNtcMucNucNvcNwcJecGOcGOcNxcNycNzcNAcNBcNCcNCcNDcECcNEcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUcMcdbkcMecMdcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAaaaaaackPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPaaaaaaaaaaabaabaaaaaaaaaaaaaaabwocvzcyJbxXbxXbxXcxHaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaafxaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaafxaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJbcNocLscLscLscLscLscMucNpcNqcFRcNrcNtcMucNucNvcNwcJecGOcGOcNxcNycNzcNAcNBcNCcNCcNDcECcNEcMFcLMcNFcLOcNGcECcNHcLQcNIcNJcDFcMNcMOcNKcDFcMQcMRcJBcJCcNLcJEcNMcEVcNNcNOcNPcCKcHBcoAcEhbVicLgcLgbYDclUcMcdbkcMecMdcEZclUclUclUclUclUclUcuscGvbVibGybGycMfcoAaaaaaackPcOacxOcxOcwAcOacxOcxOcwAcOacxOcxOckPaaaaaaaaaaabaabaaaaaaaaaaaaaaabwocvzcyJbxXbxXbxXcxHaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJaaaacJacJacJacJacJacJacJacJacJaaaacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaacGacGafxacGacGagiafxafxafxafxacGafxafxacGcOcaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJbcOdcLucOecOfcOgcOhcMucOicOjcOkcOlcOmcOncOocOpcOqcOrcGOcOscOtcOucOvcOwcOxcOycOzcOAcOBcNwcJecOCcODcLKcOEcECcOFcLQcOGcOHcDFcMNcMOcKNcDFcOIcMRcJBcOJcOKcKQcOLcDQcOMcMXcMXcCKcHBcoDcEhcMgchCbJGbYDclUclUclUcMhclUdblcFacFcbVicMjcMibGycuscGvbVibGycMkcITcoAaaaaaackPckPckPckPckPckPckPckPckPckPckPckPckPaaaaaaaaaaaaaabaabaaaaaabwobwobwocvzcyJcMmcMlbxXcxHaaaaaaaaaaaaaaaaaaaaaaaacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcJbcJbcJbcOWcOXcOXcOXcMucOYcOZcPacPacPbcPccMzcPdcPecPfcPgcPhcPhcPicPjcPkcPlcPmcPncPicPocPpcPqcPrcPscPtcPucPvcNHcLQcPwcPxcDFcMNcDFcPycDFcMQcMRcJBcJCcPzcJEcNMcCKcCKcCKcCKcCKcHBcoDcMncKXchCcITcMYcMocMocMocMZbVicFgcFecFhbVicNacKVcKVcNbcHrczhbGybGycoAcoAaaaaaacONaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaabaaabwocyKcNccNdcyJcNfcNebxXcxHaaaaaaaaaaaaaaaaaaaahaaacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabcPEcPFcPGcOXaabaabcMucPHcPIcPacPacPJcMucPKcPLcPMcPNcPOcPPcPQcECcPRcPScPTcGOcPUcECcPVcPWcPXcPNcPNcPYcPZcECcQacLQcQbcQccDFcMNcDFcLScLTcQdcQecMScQfcQgcIDcQhcDQcQicQjcQjcCKcHBcoDcNhcNgbVibVicEhbVibVibGycNibVibVicGwbVibVicNkcNjcNmcNlcNQcoAcoAcoAcoAaaaaaaaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaabaabbwocNRcunbOMcyJcyJcyJbxXbwoaabaaaaaaaaaaaaaaaaaaaaacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJacJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/_maps/map_files/cyberiad/z4.dmm b/_maps/map_files/cyberiad/z4.dmm
index 047f634de9a..93ca54c6b4a 100644
--- a/_maps/map_files/cyberiad/z4.dmm
+++ b/_maps/map_files/cyberiad/z4.dmm
@@ -105,7 +105,7 @@
"ca" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engiestation)
"cb" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/engineering{input_attempt = 1; input_level = 50000; inputting = 1; output_level = 15000},/turf/simulated/floor{icon_state = "dark"},/area/engiestation)
"cc" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engiestation)
-"cd" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor,/area/engiestation)
+"cd" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/head/helmet/space/rig/engineering,/turf/simulated/floor,/area/engiestation)
"ce" = (/obj/machinery/driver_button{id_tag = "constructiondriver1"; name = "Construction Driver #1"; pixel_x = 25},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/engiestation)
"cf" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars)
"cg" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk12"; icon_state = "catwalk12"},/area/engiestation/solars)
@@ -603,3 +603,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 3f287964e02..ac699c42a53 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -42,7 +42,7 @@ Pipelines + Other Objects -> Pipe network
pipe_color = null
..()
-
+
/obj/machinery/atmospherics/initialize()
..()
@@ -54,7 +54,7 @@ Pipelines + Other Objects -> Pipe network
M.remove_ventcrawl()
M.forceMove(loc)
if(pipe_image)
- del(pipe_image) //we have to del it, or it might keep a ref somewhere else
+ qdel(pipe_image) //we have to del it, or it might keep a ref somewhere else
return ..()
// Icons/overlays/underlays
@@ -213,7 +213,7 @@ Pipelines + Other Objects -> Pipe network
dir = D
initialize_directions = P
var/turf/T = loc
- level = T.intact ? 2 : 1
+ level = T.intact ? 2 : 1
add_fingerprint(usr)
initialize()
var/list/nodes = pipeline_expansion()
diff --git a/code/ATMOSPHERICS/pipes/pipe.dm b/code/ATMOSPHERICS/pipes/pipe.dm
index b02d990b432..8e22e40b06e 100644
--- a/code/ATMOSPHERICS/pipes/pipe.dm
+++ b/code/ATMOSPHERICS/pipes/pipe.dm
@@ -35,7 +35,7 @@
if(parent && isnull(parent.gcDestroyed))
qdel(parent)
parent = null
-
+
/obj/machinery/atmospherics/pipe/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/device/analyzer))
atmosanalyzer_scan(parent.air, user)
@@ -51,7 +51,7 @@
/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure)
//Return 1 if parent should continue checking other pipes
- //Return null if parent should stop checking other pipes. Recall: del(src) will by default return null
+ //Return null if parent should stop checking other pipes. Recall: qdel(src) will by default return null
return 1
diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm
index c4b5e645e4a..b498f073328 100644
--- a/code/LINDA/LINDA_fire.dm
+++ b/code/LINDA/LINDA_fire.dm
@@ -61,6 +61,8 @@
set_light(3, 1, color)
air_master.hotspots += src
perform_exposure()
+ dir = pick(cardinal)
+ air_update_turf()
/obj/effect/hotspot/proc/perform_exposure()
var/turf/simulated/location = loc
@@ -178,12 +180,6 @@
T.to_be_destroyed = 0
T.max_fire_temperature_sustained = 0
-/obj/effect/hotspot/New()
- ..()
- dir = pick(cardinal)
- air_update_turf()
- return
-
/obj/effect/hotspot/Crossed(mob/living/L)
..()
if(isliving(L))
diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm
index fd467e7a054..b1781de3314 100644
--- a/code/__DEFINES/language.dm
+++ b/code/__DEFINES/language.dm
@@ -17,3 +17,4 @@
#define NONGLOBAL 32 // Do not add to general languages list
#define INNATE 64 // All mobs can be assumed to speak and understand this language (audible emotes)
#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
+#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
\ No newline at end of file
diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm
index 836d0dee4f1..9987fe47511 100644
--- a/code/_onclick/hud/action.dm
+++ b/code/_onclick/hud/action.dm
@@ -48,7 +48,8 @@
if(button)
if(T.client)
T.client.screen -= button
- del(button)
+ qdel(button)
+ button = null
T.actions.Remove(src)
T.update_action_buttons()
owner = null
@@ -249,4 +250,35 @@
if(owner.mind)
if(target in owner.mind.spell_list)
return 0
- return !(target in owner.spell_list)
\ No newline at end of file
+ return !(target in owner.spell_list)
+
+ //Action button controlling a mob's research examine ability.
+/datum/action/scan_mode
+ name = "Toggle Research Scanner"
+ button_icon_state = "scan_mode"
+ check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUNNED|AB_CHECK_ALIVE
+ action_type = AB_INNATE
+ var/devices = 0 //How may enabled scanners the mob has
+
+/datum/action/scan_mode/Activate()
+ active = 1
+ owner.research_scanner = 1
+ owner << " Research analyzer is now active."
+
+/datum/action/scan_mode/Deactivate()
+ active = 0
+ owner.research_scanner = 0
+ owner << " Research analyzer deactivated."
+
+/datum/action/scan_mode/Grant(mob/living/T)
+ devices += 1
+ ..(T)
+
+/datum/action/scan_mode/CheckRemoval(mob/living/user)
+ if(devices)
+ return 0
+ return 1
+
+/datum/action/scan_mode/Remove(mob/living/T)
+ owner.research_scanner = 0
+ ..(T)
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index 6592bb3e229..763269c2af7 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -135,10 +135,9 @@
nightvisionicon.name = "night vision"
nightvisionicon.screen_loc = ui_alien_nightvision
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = 'icons/mob/screen1_alien.dmi'
- mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
+ mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_pull_resist
alien_plasma_display = new /obj/screen()
@@ -171,4 +170,4 @@
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.toxin, mymob.fire, mymob.healths, nightvisionicon, mymob.pullin, alien_plasma_display, mymob.pullin, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
mymob.client.screen += src.adding + src.other
- mymob.client.screen += mymob.client.void
\ No newline at end of file
+ mymob.client.screen += mymob.client.void
\ No newline at end of file
diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm
index f24d8c29c0c..4c9b7b651c1 100644
--- a/code/_onclick/hud/alien_larva.dm
+++ b/code/_onclick/hud/alien_larva.dm
@@ -56,10 +56,9 @@
nightvisionicon.name = "night vision"
nightvisionicon.screen_loc = ui_alien_nightvision
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = 'icons/mob/screen1_alien.dmi'
- mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
+ mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_pull_resist
mymob.blind = new /obj/screen()
@@ -69,7 +68,7 @@
mymob.blind.screen_loc = "CENTER-7,CENTER-7"
mymob.blind.layer = 0
mymob.blind.mouse_opacity = 0
-
+
mymob.flash = new /obj/screen()
mymob.flash.icon = 'icons/mob/screen1_alien.dmi'
mymob.flash.icon_state = "blank"
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 138af2ed822..f55951b5f37 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -422,10 +422,9 @@
mymob.nutrition_icon.name = "nutrition"
mymob.nutrition_icon.screen_loc = ui_nutrition
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = ui_style
- mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
+ mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_pull_resist
src.hotkeybuttons += mymob.pullin
diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm
index e9f98c60b97..fce38a8b465 100644
--- a/code/_onclick/hud/monkey.dm
+++ b/code/_onclick/hud/monkey.dm
@@ -233,10 +233,9 @@
mymob.nutrition_icon.name = "nutrition"
mymob.nutrition_icon.screen_loc = ui_nutrition
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = ui_style
- mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
+ mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_pull_resist
src.hotkeybuttons += mymob.pullin
@@ -299,6 +298,6 @@
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.healthdoll, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, mymob.gun_setting_icon) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
mymob.client.screen += src.adding + src.hotkeybuttons
- mymob.client.screen += mymob.client.void
+ mymob.client.screen += mymob.client.void
return
diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm
index a17611c99ff..e2923055324 100644
--- a/code/_onclick/hud/other_mobs.dm
+++ b/code/_onclick/hud/other_mobs.dm
@@ -18,10 +18,9 @@
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_health
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = 'icons/mob/screen1_corgi.dmi'
- mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
+ mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_construct_pull
mymob.oxygen = new /obj/screen()
@@ -67,4 +66,4 @@
mymob.client.screen = list()
mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay)
- mymob.client.screen += mymob.client.void
\ No newline at end of file
+ mymob.client.screen += mymob.client.void
\ No newline at end of file
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 7fe1f4594e3..bd782657ce9 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -125,10 +125,9 @@
mymob.fire.name = "fire"
mymob.fire.screen_loc = ui_fire
- mymob.pullin = new /obj/screen()
+ mymob.pullin = new /obj/screen/pull()
mymob.pullin.icon = 'icons/mob/screen1_robot.dmi'
- mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
+ mymob.pullin.update_icon(mymob)
mymob.pullin.screen_loc = ui_borg_pull
mymob.blind = new /obj/screen()
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index ea5202fd03f..4b46be13722 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -170,6 +170,21 @@
overlays.Cut()
overlays += image('icons/mob/zone_sel.dmi', "[selecting]")
+/obj/screen/pull
+ name = "stop pulling"
+ icon = 'icons/mob/screen1_Midnight.dmi'
+ icon_state = "pull"
+
+/obj/screen/pull/Click()
+ usr.stop_pulling()
+
+/obj/screen/pull/update_icon(mob/mymob)
+ if(!mymob) return
+ if(mymob.pulling)
+ icon_state = "pull"
+ else
+ icon_state = "pull0"
+
/obj/screen/Click(location, control, params)
if(!usr) return 1
@@ -347,9 +362,6 @@
if("disarm")
usr.a_intent = I_DISARM
usr.hud_used.action_intent.icon_state = "intent_disarm"
-
- if("pull")
- usr.stop_pulling()
if("throw")
if(!usr.stat && isturf(usr.loc) && !usr.restrained())
usr:toggle_throw_mode()
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index e9d77ca626c..f356a1a9ca7 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -164,14 +164,14 @@
var/list/overflow_whitelist = list() //whitelist for overflow
var/disable_away_missions = 0 // disable away missions
-
+
var/autoconvert_notes = 0 //if all connecting player's notes should attempt to be converted to the database
-
+
var/ooc_allowed = 1
var/looc_allowed = 1
var/dooc_allowed = 1
var/dsay_allowed = 1
-
+
var/disable_lobby_music = 0 // Disables the lobby music
/datum/configuration/New()
@@ -341,13 +341,13 @@
if ("forumurl")
config.forumurl = value
-
+
if ("rulesurl")
config.rulesurl = value
-
+
if ("donationsurl")
config.donationsurl = value
-
+
if ("repositoryurl")
config.repositoryurl = value
@@ -544,11 +544,11 @@
config.disable_away_missions = 1
if("autoconvert_notes")
- config.autoconvert_notes = 1
+ config.autoconvert_notes = 1
if("disable_lobby_music")
- config.disable_lobby_music = 1
-
+ config.disable_lobby_music = 1
+
else
diary << "Unknown setting in configuration: '[name]'"
@@ -678,7 +678,7 @@
var/datum/game_mode/M = new T()
if (M.config_tag && M.config_tag == mode_name)
return M
- del(M)
+ qdel(M)
return new /datum/game_mode/extended()
/datum/configuration/proc/get_runnable_modes()
@@ -687,10 +687,10 @@
var/datum/game_mode/M = new T()
//world << "DEBUG: [T], tag=[M.config_tag], prob=[probabilities[M.config_tag]]"
if (!(M.config_tag in modes))
- del(M)
+ qdel(M)
continue
if (probabilities[M.config_tag]<=0)
- del(M)
+ qdel(M)
continue
if (M.can_start())
runnable_modes[M] = probabilities[M.config_tag]
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 0d135e29bd5..f781ace9a90 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -587,7 +587,7 @@
objectives.Insert(objective_pos, new_objective)
else
objectives += new_objective
-
+
log_admin("[key_name(usr)] has updated [key_name(current)]'s objectives: [new_objective]")
message_admins("[key_name_admin(usr)] has updated [key_name_admin(current)]'s objectives: [new_objective]")
@@ -595,7 +595,7 @@
var/datum/objective/objective = locate(href_list["obj_delete"])
if(!istype(objective)) return
objectives -= objective
-
+
log_admin("[key_name(usr)] has removed one of [key_name(current)]'s objectives: [objective]")
message_admins("[key_name_admin(usr)] has removed one of [key_name_admin(current)]'s objectives: [objective]")
@@ -603,7 +603,7 @@
var/datum/objective/objective = locate(href_list["obj_completed"])
if(!istype(objective)) return
objective.completed = !objective.completed
-
+
log_admin("[key_name(usr)] has toggled the completion of one of [key_name(current)]'s objectives")
message_admins("[key_name_admin(usr)] has toggled the completion of one of [key_name_admin(current)]'s objectives")
@@ -628,7 +628,7 @@
var/obj/item/organ/external/affected = H.organs_by_name["head"]
affected.implants += L
L.part = affected
-
+
log_admin("[key_name(usr)] has given [key_name(current)] a loyalty implant")
message_admins("[key_name_admin(usr)] has given [key_name_admin(current)] a loyalty implant")
@@ -864,7 +864,7 @@
current << "Your powers are awoken. A flash of memory returns to us...we are a changeling!"
log_admin("[key_name(usr)] has changelinged [key_name(current)]")
message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]")
-
+
if("autoobjectives")
ticker.mode.forge_changeling_objectives(src)
usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually."
@@ -901,7 +901,7 @@
current << "Your powers are awoken. Your lust for blood grows... You are a Vampire!"
log_admin("[key_name(usr)] has vampired [key_name(current)]")
message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]")
-
+
if("autoobjectives")
ticker.mode.forge_vampire_objectives(src)
usr << "\blue The objectives for vampire [key] have been generated. You can edit them and announce manually."
@@ -961,7 +961,7 @@
return
log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative")
message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative")
-
+
if("tellcode")
var/code
for (var/obj/machinery/nuclearbomb/bombue in machines)
@@ -1177,10 +1177,10 @@
var/list/L = current.get_contents()
for (var/t in L)
if (istype(t, /obj/item/device/pda))
- if (t:uplink) del(t:uplink)
+ if (t:uplink) qdel(t:uplink)
t:uplink = null
else if (istype(t, /obj/item/device/radio))
- if (t:traitorradio) del(t:traitorradio)
+ if (t:traitorradio) qdel(t:traitorradio)
t:traitorradio = null
t:traitor_frequency = 0.0
else if (istype(t, /obj/item/weapon/SWF_uplink) || istype(t, /obj/item/weapon/syndicate_uplink))
@@ -1189,7 +1189,7 @@
R.loc = current.loc
R.traitorradio = null
R.traitor_frequency = 0.0
- del(t)
+ qdel(t)
// remove wizards spells
//If there are more special powers that need removal, they can be procced into here./N
diff --git a/code/datums/modules.dm b/code/datums/modules.dm
index 896d920f994..d01bded3254 100644
--- a/code/datums/modules.dm
+++ b/code/datums/modules.dm
@@ -24,7 +24,8 @@ var/list/modules = list( // global associative list
var/mneed = mods.inmodlist(type) // find if this type has modules defined
if(!mneed) // not found in module list?
- del(src) // delete self, thus ending proc
+ qdel(src) // delete self, thus ending proc
+ return
var/needed = mods.getbitmask(type) // get a bitmask for the number of modules in this object
status = needed
diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm
deleted file mode 100644
index a6927491092..00000000000
--- a/code/defines/procs/sd_Alert.dm
+++ /dev/null
@@ -1,168 +0,0 @@
-/* sd_Alert library
- by Shadowdarke (shadowdarke@byond.com)
-
- sd_Alert() is a powerful and flexible alternative to the built in BYOND
- alert() proc. sd_Alert offers timed popups, unlimited buttons, custom
- appearance, and even the option to popup without stealing keyboard focus
- from the map or command line.
-
- Please see demo.dm for detailed examples.
-
-FORMAT
- sd_Alert(who, message, title, buttons, default, duration, unfocus, \
- size, table, style, tag, select, flags)
-
-ARGUMENTS
- who - the client or mob to display the alert to.
- message - text message to display
- title - title of the alert box
- buttons - list of buttons
- Default Value: list("Ok")
- default - default button selestion
- Default Value: the first button in the list
- duration - the number of ticks before this alert expires. If not
- set, the alert lasts until a button is clicked.
- Default Value: 0 (unlimited)
- unfocus - if this value is set, the popup will not steal keyboard
- focus from the map or command line.
- Default Value: 1 (do not take focus)
- size - size of the popup window in px
- Default Value: "300x200"
- table - optional parameters for the HTML table in the alert
- Default Value: "width=100% height=100%" (fill the window)
- style - optional style sheet information
- tag - lets you specify a certain tag for this sd_Alert so you may manipulate it
- externally. (i.e. force the alert to close, change options and redisplay,
- reuse the same window, etc.)
- select - if set, the buttons will be replaced with a selection box with a number of
- lines displayed equal to this value.
- Default value: 0 (use buttons)
- flags - optional flags effecting the alert display. These flags may be ORed (|)
- together for multiple effects.
- SD_ALERT_SCROLL = display a scrollbar
- SD_ALERT_SELECT_MULTI = forces selection box display (instead of
- buttons) allows the user to select multiple
- choices.
- SD_ALERT_LINKS = display each choice as a plain text link.
- Any selection box style overrides this flag.
- SD_ALERT_NOVALIDATE = don't validate responses
- Default value: SD_ALERT_SCROLL
- (button display with scroll bar, validate responses)
-RETURNS
- The text of the selected button, or null if the alert duration expired
- without a button click.
-
-Version 1 changes (from version 0):
-* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer.
-* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more
- customization by developers. Primarily developers would want to use Display() to change
- the display of active tagged windows
-
-*/
-
-
-#define SD_ALERT_SCROLL 1
-#define SD_ALERT_SELECT_MULTI 2
-#define SD_ALERT_LINKS 4
-#define SD_ALERT_NOVALIDATE 8
-
-proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\
- default, duration = 0, unfocus = 1, size = "300x200", \
- table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL)
-
- if(ismob(who))
- var/mob/M = who
- who = M.client
- if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])")
-
- var/sd_alert/T = locate(tag)
- if(T)
- if(istype(T)) del(T)
- else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])")
- T = new(who, tag)
- if(duration)
- spawn(duration)
- if(T) del(T)
- return
- T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags)
- . = T.Response()
-
-sd_alert
- var
- client/target
- response
- list/validation
-
- Destroy()
- target << browse(null,"window=\ref[src]")
- return ..()
-
- New(who, tag)
- ..()
- target = who
- src.tag = tag
-
- Topic(href,params[])
- if(usr.client != target) return
- response = params["clk"]
-
- proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags)
- if(unfocus) spawn() target << browse(null,null)
- if(istext(buttons)) buttons = list(buttons)
- if(!default) default = buttons[1]
- if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy()
-
- var/html = {"
[title][style]"
-
- target << browse(html,"window=\ref[src];size=[size];can_close=0")
-
- proc/Response()
- var/validated
- while(!validated)
- while(target && !response) // wait for a response
- sleep(2)
-
- if(response && validation)
- if(istype(response, /list))
- var/list/L = response - validation
- if(L.len) response = null
- else validated = 1
- else if(response in validation) validated = 1
- else response=null
- else validated = 1
- spawn(2) del(src)
- return response
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index f6bcfef4171..ecd7a5db8f0 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -34,7 +34,6 @@
if(reagents)
qdel(reagents)
reagents = null
- set_opacity(0)
invisibility = 101
return ..()
diff --git a/code/game/gamemodes/borer/borer.dm b/code/game/gamemodes/borer/borer.dm
index 6ec8a9f7888..ebebe739f5a 100644
--- a/code/game/gamemodes/borer/borer.dm
+++ b/code/game/gamemodes/borer/borer.dm
@@ -94,7 +94,7 @@
M.perform_infestation(first_host.current)
forge_borer_objectives(borer, first_host)
- del(original)
+ qdel(original)
log_admin("Created [borers.len] borers.")
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index eab6a665646..17f02d42fbe 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -103,7 +103,7 @@ var/global/datum/controller/gameticker/ticker
can_continue = src.mode.pre_setup()//Setup special modes
job_master.DivideOccupations() //Distribute jobs
if(!can_continue)
- del(mode)
+ qdel(mode)
current_state = GAME_STATE_PREGAME
world << "Error setting up [master_mode]. Reverting to pre-game lobby."
job_master.ResetOccupations()
@@ -138,7 +138,7 @@ var/global/datum/controller/gameticker/ticker
for(var/obj/effect/landmark/start/S in landmarks_list)
//Deleting Startpoints but we need the ai point to AI-ize people later
if (S.name != "AI")
- del(S)
+ qdel(S)
// take care of random spesspod spawning
var/list/obj/effect/landmark/spacepod/random/L = list()
@@ -149,7 +149,7 @@ var/global/datum/controller/gameticker/ticker
var/obj/effect/landmark/spacepod/random/S = pick(L)
new /obj/spacepod/random(S.loc)
for(var/obj/effect/landmark/spacepod/random/R in L)
- del(R)
+ qdel(R)
world << "Enjoy the game!"
world << sound('sound/AI/welcome.ogg') // Skie
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 0b3592ded97..1848a8e6a0f 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -115,7 +115,7 @@ proc/issyndicate(mob/living/M as mob)
for(var/obj/effect/landmark/A in landmarks_list)
if(A.name == "Syndicate-Spawn")
synd_spawn += get_turf(A)
- del(A)
+ qdel(A)
continue
var/obj/effect/landmark/uplinklocker = locate("landmark*Syndicate-Uplink") //i will be rewriting this shortly
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index da997300aa1..8c0598d6d21 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -159,7 +159,7 @@
var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc)
M.real_name = "Corpse"
M.death()
- del(A)
+ qdel(A)
continue
if (A.name == "Corpse-Engineer")
var/mob/living/carbon/human/M = new /mob/living/carbon/human(A.loc)
@@ -247,6 +247,6 @@
else
M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit)
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head)
- del(A)
+ qdel(A)
continue
*/
diff --git a/code/game/gamemodes/xenos/xenos.dm b/code/game/gamemodes/xenos/xenos.dm
index fa6390a1935..91bdefd0639 100644
--- a/code/game/gamemodes/xenos/xenos.dm
+++ b/code/game/gamemodes/xenos/xenos.dm
@@ -65,7 +65,7 @@
for(var/obj/effect/landmark/A in landmarks_list)
if(A.name == "Xenos-Spawn")
xenos_spawn += get_turf(A)
- del(A)
+ qdel(A)
continue
var/xenoqueen_selected = 0
@@ -82,7 +82,7 @@
else
O.key = xeno_mind.current.key
xeno_mind.name = O.name
- //del(xeno_mind)
+ //qdel(xeno_mind)
xenoqueen_selected = 1
spawnpos++
continue
@@ -94,7 +94,7 @@
else
O.key = xeno_mind.current.key
xeno_mind.name = O.name
- //del(xeno_mind)
+ //qdel(xeno_mind)
spawnpos++
spawn (rand(waittime_l, waittime_h))
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index b0a05d5d3bb..92f3cb8211e 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -35,9 +35,11 @@
update_icon()
/obj/machinery/portable_atmospherics/Destroy()
+ disconnect()
qdel(air_contents)
+ air_contents = null
qdel(holding)
-
+ holding = null
return ..()
/obj/machinery/portable_atmospherics/update_icon()
@@ -71,7 +73,7 @@
connected_port = null
return 1
-
+
/obj/machinery/portable_atmospherics/portableConnectorReturnAir()
return air_contents
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 68f9f03f0d4..9f344a8171b 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -14,6 +14,10 @@
crew_monitor = new(src)
..()
+/obj/machinery/computer/crew/Destroy()
+ qdel(crew_monitor)
+ crew_monitor = null
+ return ..()
/obj/machinery/computer/crew/attack_ai(mob/user)
attack_hand(user)
diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm
index c1836fdb21a..a549dd5b64d 100644
--- a/code/game/machinery/computer/power.dm
+++ b/code/game/machinery/computer/power.dm
@@ -15,30 +15,32 @@
..()
power_monitors += src
power_monitors = sortAtom(power_monitors)
- power_monitor = new(src)
- powermonitor_repository.update_cache()
+ power_monitor = new(src)
+ powermonitor_repository.update_cache()
powernet = find_powernet()
-
+
/obj/machinery/computer/monitor/Destroy()
power_monitors -= src
- powermonitor_repository.update_cache()
- return ..()
-
+ powermonitor_repository.update_cache()
+ qdel(power_monitor)
+ power_monitor = null
+ return ..()
+
/obj/machinery/computer/monitor/power_change()
..()
- powermonitor_repository.update_cache()
-
-/obj/machinery/computer/monitor/proc/find_powernet()
+ powermonitor_repository.update_cache()
+
+/obj/machinery/computer/monitor/proc/find_powernet()
var/obj/structure/cable/attached = null
var/turf/T = loc
if(isturf(T))
attached = locate() in T
if(attached)
return attached.get_powernet()
-
+
/obj/machinery/computer/monitor/attack_ai(mob/user)
attack_hand(user)
-
+
/obj/machinery/computer/monitor/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
@@ -52,4 +54,3 @@
/obj/machinery/computer/monitor/interact(mob/user)
power_monitor.ui_interact(user)
-
\ No newline at end of file
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 5f3ababb864..24c7acc269e 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -317,7 +317,7 @@
occupant.unEquip(W)
W.loc = src
- if(W.contents.len) //Make sure we catch anything not handled by del() on the items.
+ if(W.contents.len) //Make sure we catch anything not handled by qdel() on the items.
var/preserve = null
for(var/T in preserve_items)
if(istype(W,T))
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 4c492d20cf2..aa848a1b097 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -141,7 +141,8 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/holopad/proc/clear_holo()
// hologram.set_light(0)//Clear lighting. //handled by the lighting controller when its ower is deleted
- del(hologram)//Get rid of hologram.
+ qdel(hologram)//Get rid of hologram.
+ hologram = null
if(master.holo == src)
master.holo = null
master = null//Null the master, since no-one is using it now.
@@ -222,9 +223,9 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
qdel(src)
return
-/obj/machinery/hologram/Destroy()
+/obj/machinery/hologram/holopad/Destroy()
if(hologram)
- src:clear_holo()
+ clear_holo()
return ..()
/*
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index 987739b1a5f..b5baada5773 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -139,7 +139,7 @@
if(input_obj)
if(isturf(input_obj.loc))
input_plate = input_obj.loc
- del(input_obj)
+ qdel(input_obj)
break
if(!input_plate)
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index eadc838c33e..a0b84ea2575 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -448,9 +448,7 @@ Class Procs:
var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts
var/P
if(W.works_from_distance)
- user << "Following parts detected in the machine:"
- for(var/var/obj/item/C in component_parts)
- user << " [C.name]"
+ display_parts(user)
for(var/obj/item/weapon/stock_parts/A in component_parts)
for(var/D in CB.req_components)
if(ispath(A.type, D))
@@ -469,15 +467,23 @@ Class Procs:
break
RefreshParts()
else
- user << "Following parts detected in the machine:"
- for(var/var/obj/item/C in component_parts)
- user << " [C.name]"
+ display_parts(user)
if(shouldplaysound)
W.play_rped_sound()
return 1
else
return 0
+/obj/machinery/proc/display_parts(mob/user)
+ user << "Following parts detected in the machine:"
+ for(var/obj/item/C in component_parts)
+ user << "\icon[C] [C.name]"
+
+/obj/machinery/examine(mob/user)
+ ..(user)
+ if(user.research_scanner && component_parts)
+ display_parts(user)
+
/obj/machinery/proc/dismantle()
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc)
diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm
index d4d25346c60..edca612efd0 100644
--- a/code/game/machinery/magnet.dm
+++ b/code/game/machinery/magnet.dm
@@ -164,7 +164,7 @@
if(prob(electricity_level))
explosion(loc, 0, 1, 2, 3) // ooo dat shit EXPLODES son
spawn(2)
- del(src)
+ qdel(src)
*/
updateicon()
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 0165aaa1d37..68df2d59ed1 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -145,7 +145,7 @@
//Allow you to push disposal pipes into it (for those with density 1)
/obj/machinery/pipedispenser/disposal/Crossed(var/obj/structure/disposalconstruct/pipe as obj)
if(istype(pipe) && !pipe.anchored)
- del(pipe)
+ qdel(pipe)
Nah
*/
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 7eb83f7d369..8bd43923ad6 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -86,6 +86,11 @@
setup()
+/obj/machinery/porta_turret/Destroy()
+ qdel(spark_system)
+ spark_system = null
+ return ..()
+
/obj/machinery/porta_turret/centcom/New()
..()
if(req_one_access && req_one_access.len)
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 9313acda3cb..e697eed0fea 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -34,7 +34,7 @@
SUIT_TYPE = /obj/item/clothing/suit/space/eva
HELMET_TYPE = /obj/item/clothing/head/helmet/space/eva
MASK_TYPE = /obj/item/clothing/mask/breath
-
+
/obj/machinery/suit_storage_unit/captain
SUIT_TYPE = /obj/item/clothing/suit/space/captain
HELMET_TYPE = /obj/item/clothing/head/helmet/space/capspace
@@ -496,7 +496,7 @@
src.update_icon()
// for(var/obj/O in src)
-// del(O)
+// qdel(O)
src.add_fingerprint(usr)
src.updateUsrDialog()
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index cc5481e9be4..47a47cbd7e5 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -89,7 +89,6 @@
add_cell()
add_iterators()
removeVerb(/obj/mecha/verb/disconnect_from_port)
- removeVerb(/atom/movable/verb/pull)
log_message("[src.name] created.")
loc.Entered(src)
mechas_list += src //global mech list
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index 05b538ab64c..1be64e3c31e 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -90,6 +90,11 @@ would spawn and follow the beaker, even if it is carried or thrown.
var/atom/holder
var/setup = 0
+ Destroy()
+ holder = null
+ location = null
+ return ..()
+
proc/set_up(n = 3, c = 0, turf/loc)
if(n > 10)
n = 10
@@ -449,6 +454,11 @@ steam.start() -- spawns the effect
var/direction
var/obj/chemholder
+ Destroy()
+ qdel(chemholder)
+ chemholder = null
+ return ..()
+
New()
..()
chemholder = new/obj()
@@ -543,35 +553,6 @@ steam.start() -- spawns the effect
if(smoke) smoke.delete()
src.total_smoke--
-// Goon compat.
-/datum/effect/effect/system/chem_smoke_spread/fart
-
- set_up(var/mob/M, n = 5, c = 0, loca, direct)
- if(n > 20)
- n = 20
- number = n
- cardinals = c
-
- chemholder.reagents.add_reagent("space_drugs", rand(1,10))
-
- if(istype(loca, /turf/))
- location = loca
- else
- location = get_turf(loca)
- if(direct)
- direction = direct
-
- var/contained = "\[[chemholder.reagents.get_reagent_ids()]\]"
- var/area/A = get_area(location)
-
- var/where = "[A.name] | [location.x], [location.y]"
- var/whereLink=formatJumpTo(location,where)
-
- var/more = "(?)"
- message_admins("[M][more] produced a toxic fart in ([whereLink])[contained].", 0, 1)
- log_game("[M][more] produced a toxic fart in ([where])[contained].")
-
-
/////////////////////////////////////////////
// Sleep smoke
/////////////////////////////////////////////
@@ -772,6 +753,10 @@ steam.start() -- spawns the effect
var/processing = 1
var/on = 1
+/datum/effect/effect/system/ion_trail_follow/Destroy()
+ oldposition = null
+ return ..()
+
/datum/effect/effect/system/ion_trail_follow/set_up(atom/atom)
attach(atom)
@@ -805,6 +790,12 @@ steam.start() -- spawns the effect
/datum/effect/effect/system/ion_trail_follow/space_trail
var/turf/oldloc // secondary ion trail loc
var/turf/currloc
+
+/datum/effect/effect/system/ion_trail_follow/space_trail/Destroy()
+ oldloc = null
+ currloc = null
+ return ..()
+
/datum/effect/effect/system/ion_trail_follow/space_trail/start()
if(!src.on)
src.on = 1
@@ -865,6 +856,10 @@ steam.start() -- spawns the effect
var/processing = 1
var/on = 1
+ Destroy()
+ oldposition = null
+ return ..()
+
set_up(atom/atom)
attach(atom)
oldposition = get_turf(atom)
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 136efaab9a0..5cc9eefd1cb 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -14,7 +14,7 @@
switch(name) //some of these are probably obsolete
if("shuttle")
shuttle_z = z
- del(src)
+ qdel(src)
if("airtunnel_stop")
airtunnel_stop = x
@@ -27,35 +27,35 @@
if("monkey")
monkeystart += loc
- del(src)
+ qdel(src)
if("start")
newplayer_start += loc
- del(src)
+ qdel(src)
if("wizard")
wizardstart += loc
- del(src)
+ qdel(src)
if("JoinLate")
latejoin += loc
- del(src)
+ qdel(src)
if("JoinLateGateway")
latejoin_gateway += loc
- del(src)
+ qdel(src)
if("JoinLateCryo")
latejoin_cryo += loc
- del(src)
+ qdel(src)
if("JoinLateCyborg")
latejoin_cyborg += loc
- del(src)
+ qdel(src)
//prisoners
if("prisonwarp")
prisonwarp += loc
- del(src)
+ qdel(src)
// if("mazewarp")
// mazewarp += loc
if("Holding Facility")
@@ -74,19 +74,19 @@
//not prisoners
if("prisonsecuritywarp")
prisonsecuritywarp += loc
- del(src)
+ qdel(src)
if("blobstart")
blobstart += loc
- del(src)
+ qdel(src)
if("xeno_spawn")
xeno_spawn += loc
- del(src)
+ qdel(src)
if("ninjastart")
ninjastart += loc
- del(src)
+ qdel(src)
if("carpspawn")
carplist += loc
@@ -99,7 +99,8 @@
/obj/effect/landmark/Destroy()
landmarks_list -= src
- return ..()
+ ..()
+ return QDEL_HINT_HARDDEL_NOW
/obj/effect/landmark/nations
name = "nations"
@@ -134,51 +135,51 @@
var/list/options = typesof(/obj/effect/landmark/costume)
var/PICK= options[rand(1,options.len)]
new PICK(src.loc)
- del(src)
+ qdel(src)
//SUBCLASSES. Spawn a bunch of items and disappear likewise
/obj/effect/landmark/costume/chicken/New()
new /obj/item/clothing/suit/chickensuit(src.loc)
new /obj/item/clothing/head/chicken(src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/gladiator/New()
new /obj/item/clothing/under/gladiator(src.loc)
new /obj/item/clothing/head/helmet/gladiator(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/madscientist/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/suit/storage/labcoat/mad(src.loc)
new /obj/item/clothing/glasses/gglasses(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/elpresidente/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/mask/cigarette/cigar/havana(src.loc)
new /obj/item/clothing/shoes/jackboots(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/nyangirl/New()
new /obj/item/clothing/under/schoolgirl(src.loc)
new /obj/item/clothing/head/kitty(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/maid/New()
new /obj/item/clothing/under/blackskirt(src.loc)
var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/butler/New()
new /obj/item/clothing/suit/wcoat(src.loc)
new /obj/item/clothing/under/suit_jacket(src.loc)
new /obj/item/clothing/head/that(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/scratch/New()
new /obj/item/clothing/gloves/color/white(src.loc)
@@ -186,12 +187,12 @@
new /obj/item/clothing/under/scratch(src.loc)
if (prob(30))
new /obj/item/clothing/head/cueball(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/highlander/New()
new /obj/item/clothing/under/kilt(src.loc)
new /obj/item/clothing/head/beret(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/prig/New()
new /obj/item/clothing/suit/wcoat(src.loc)
@@ -202,24 +203,24 @@
new /obj/item/weapon/cane(src.loc)
new /obj/item/clothing/under/sl_suit(src.loc)
new /obj/item/clothing/mask/fakemoustache(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/plaguedoctor/New()
new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc)
new /obj/item/clothing/head/plaguedoctorhat(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/nightowl/New()
new /obj/item/clothing/under/owl(src.loc)
new /obj/item/clothing/mask/gas/owl_mask(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/waiter/New()
new /obj/item/clothing/under/waiter(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
new CHOICE(src.loc)
new /obj/item/clothing/suit/apron(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/pirate/New()
new /obj/item/clothing/under/pirate(src.loc)
@@ -227,46 +228,46 @@
var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/eyepatch(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/commie/New()
new /obj/item/clothing/under/soviet(src.loc)
new /obj/item/clothing/head/ushanka(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/imperium_monk/New()
new /obj/item/clothing/suit/imperium_monk(src.loc)
if (prob(25))
new /obj/item/clothing/mask/gas/cyborg(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/holiday_priest/New()
new /obj/item/clothing/suit/holidaypriest(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/marisawizard/fake/New()
new /obj/item/clothing/head/wizard/marisa/fake(src.loc)
new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/cutewitch/New()
new /obj/item/clothing/under/sundress(src.loc)
new /obj/item/clothing/head/witchwig(src.loc)
new /obj/item/weapon/twohanded/staff/broom(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/fakewizard/New()
new /obj/item/clothing/suit/wizrobe/fake(src.loc)
new /obj/item/clothing/head/wizard/fake(src.loc)
new /obj/item/weapon/twohanded/staff/(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/sexyclown/New()
new /obj/item/clothing/mask/gas/sexyclown(src.loc)
new /obj/item/clothing/under/sexyclown(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/costume/sexymime/New()
new /obj/item/clothing/mask/gas/sexymime(src.loc)
new /obj/item/clothing/under/sexymime(src.loc)
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm
index ea7ee2764b1..e34b136cb45 100644
--- a/code/game/objects/effects/spawners/bombspawner.dm
+++ b/code/game/objects/effects/spawners/bombspawner.dm
@@ -102,7 +102,7 @@
p4.air_contents.temperature = btemp + T0C
p2.secured = 1
- del(src)
+ qdel(src)
*/
/obj/effect/spawner/newbomb
@@ -169,4 +169,4 @@
V.update_icon()
- del(src)
+ qdel(src)
diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm
index e91105f5df9..35cc039a08a 100644
--- a/code/game/objects/effects/spawners/vaultspawner.dm
+++ b/code/game/objects/effects/spawners/vaultspawner.dm
@@ -23,4 +23,4 @@
else
new /turf/simulated/floor/vault(locate(i,j,z),type)
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 77ff6660206..6f4597ef7d8 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -136,7 +136,31 @@
if(5.0)
size = "huge"
- return ..(user, distance, "", "It is a [size] item.")
+ ..(user, distance, "", "It is a [size] item.")
+
+ if(user.research_scanner) //Mob has a research scanner active.
+ var/msg = "*--------*
"
+
+ if(origin_tech)
+ msg += "Testing potentials:
"
+ var/list/techlvls = params2list(origin_tech)
+ for(var/T in techlvls) //This needs to use the better names.
+ msg += "Tech: [CallTechName(T)] | Magnitude: [techlvls[T]]
"
+ msg += "Research reliability: [reliability]%
"
+ if(crit_fail)
+ msg += "Critical failure detected in subject!
"
+ else
+ msg += "No tech origins detected.
"
+
+
+ if(materials.len)
+ msg += "Extractable materials:
"
+ for(var/mat in materials)
+ msg += "[CallMaterialName(mat)]
" //Capitize first word, remove the "$"
+ else
+ msg += "No extractable materials detected.
"
+ msg += "*--------*"
+ user << msg
/obj/item/attack_hand(mob/user as mob)
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 670d02af975..6ccbbc04c13 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -114,6 +114,10 @@
radio = new /obj/item/radio/integrated/signal(src)
..()
+/obj/item/weapon/cartridge/signal/Destroy()
+ qdel(radio)
+ return ..()
+
/obj/item/weapon/cartridge/quartermaster
name = "Space Parts & Space Vendors Cartridge"
desc = "Perfect for the Quartermaster on the go!"
diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm
index f622a516b82..f1b04b9ed98 100644
--- a/code/game/objects/items/weapons/hydroponics.dm
+++ b/code/game/objects/items/weapons/hydroponics.dm
@@ -168,7 +168,7 @@
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
else
usr << "All the leaves have fallen off the nettle from violent whacking."
- del(src)
+ qdel(src)
/obj/item/weapon/grown/nettle/changePotency(newValue) //-QualityVan
potency = newValue
@@ -220,7 +220,7 @@
else
usr << "All the leaves have fallen off the deathnettle from violent whacking."
- del(src)
+ qdel(src)
/obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan
potency = newValue
@@ -235,6 +235,6 @@
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || istype(W, /obj/item/weapon/kitchen/utensil/knife) || istype(W, /obj/item/weapon/kitchenknife) || istype(W, /obj/item/weapon/kitchenknife/ritual))
user << "You use [W] to fashion a pipe out of the corn cob!"
new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
- del(src)
+ qdel(src)
return
*/
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 5b700bf7181..034483583fd 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -248,7 +248,7 @@
usr.client.screen -= S
S.dropped(usr)
if(!S.amount)
- del(S)
+ qdel(S)
else
S.loc = src
@@ -293,7 +293,7 @@
N.amount = stacksize
S.amount -= stacksize
if(!S.amount)
- del(S) // todo: there's probably something missing here
+ qdel(S) // todo: there's probably something missing here
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index f409324844b..83bc2eedb6c 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -476,9 +476,9 @@
else target.ex_act(1)
if (isobj(target))
if (target)
- del(target)
+ qdel(target)
if (src)
- del(src)
+ qdel(src)
*/
/obj/item/weapon/storage/belt/bluespace/attack(mob/M as mob, mob/user as mob, def_zone)
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index ac1aba944ba..33ddaf498f2 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -10,6 +10,10 @@
verbs -= /obj/item/verb/verb_pickup //make sure this is never picked up.
..()
+/obj/item/weapon/storage/internal/Destroy()
+ master_item = null
+ return ..()
+
/obj/item/weapon/storage/internal/attack_hand()
return //make sure this is never picked up
diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm
index 15fc8a7b0b5..36bc01d05e0 100644
--- a/code/game/objects/items/weapons/tanks/jetpack.dm
+++ b/code/game/objects/items/weapons/tanks/jetpack.dm
@@ -19,6 +19,10 @@
src.ion_trail.set_up(src)
return
+/obj/item/weapon/tank/jetpack/Destroy()
+ qdel(ion_trail)
+ ion_trail = null
+ return ..()
/obj/item/weapon/tank/jetpack/examine(mob/user)
if(!..(user, 0))
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 0fc9a950580..9fc267f35fe 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -53,7 +53,7 @@
//If you want to re-add fire, just add "fire" = 15 to the pick list.
/*if ("fire")
new /obj/structure/closet/firecloset(src.loc)
- del(src)*/
+ qdel(src)*/
/obj/structure/closet/emcloset/legacy/New()
new /obj/item/weapon/tank/oxygen(src)
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index b12907a150f..6b27e8104d2 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -66,7 +66,7 @@
/obj/structure/lattice/proc/updateOverlays()
//if(!(istype(src.loc, /turf/space)))
- // del(src)
+ // qdel(src)
spawn(1)
overlays = list()
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 38f67bf51be..2f0d1567624 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -7,8 +7,6 @@
var/propelled = 0 // Check for fire-extinguisher-driven chairs
/obj/structure/stool/bed/chair/New()
- if(anchored)
- src.verbs -= /atom/movable/verb/pull
..()
spawn(3) //sorry. i don't think there's a better way to do this.
handle_rotation()
diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
index 61459684816..eabfcba148b 100644
--- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
+++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm
@@ -90,7 +90,7 @@
moving = 0
-// Should I return a copy here? If the caller edits or del()s the returned
+// Should I return a copy here? If the caller edits or qdel()s the returned
// datum, there might be problems if I don't...
/obj/structure/transit_tube_pod/return_air()
var/datum/gas_mixture/GM = new()
diff --git a/code/game/response_team.dm b/code/game/response_team.dm
index 47b230ead54..b25b2a87621 100644
--- a/code/game/response_team.dm
+++ b/code/game/response_team.dm
@@ -112,7 +112,7 @@ var/send_emergency_team
return
var/client/C = src.client
var/mob/living/carbon/human/new_commando = C.create_response_team(L.loc)
- del(L) // Do not qdel landmarks!
+ qdel(L)
new_commando.mind.key = usr.key
new_commando.key = usr.key
new_commando.update_icons()
@@ -322,12 +322,12 @@ var/send_emergency_team
if("Commander")
command_slots = 0
-
+
// Override name and age for the commander
- M.real_name = "[pick("Lieutenant", "Captain", "Major")] [pick(last_names)]"
+ M.real_name = "[pick("Lieutenant", "Captain", "Major")] [pick(last_names)]"
M.name = M.real_name
M.age = rand(35,45)
-
+
M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/ert/commander(M), slot_back)
M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/responseteam(M), slot_in_backpack)
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 536972a527a..9d33e96382d 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -44,55 +44,39 @@
/turf/simulated/Entered(atom/A, atom/OL)
..()
- if(ishuman(A))
- var/mob/living/carbon/human/M = A
- if(M.lying) return
+ if(ismob(A)) //only mobs make dirt
if(prob(80))
dirt++
+
var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt) in src
if(dirt >= 100)
if(!dirtoverlay)
dirtoverlay = new/obj/effect/decal/cleanable/dirt(src)
dirtoverlay.alpha = 10
else if(dirt > 100)
- dirtoverlay.alpha = min(dirtoverlay.alpha+10, 200)
- if(istype(M.shoes, /obj/item/clothing/shoes/clown_shoes))
- var/obj/item/clothing/shoes/clown_shoes/O = M.shoes
- if(M.m_intent == "run")
- if(O.footstep >= 2)
- O.footstep = 0
- playsound(src, "clownstep", 50, 1) // this will get annoying very fast.
- else
- O.footstep++
- else
- playsound(src, "clownstep", 20, 1)
- if(istype(M.shoes, /obj/item/clothing/shoes/jackboots))
- var/obj/item/clothing/shoes/jackboots/O = M.shoes
- if(M.m_intent == "run")
- if(O.footstep >= 2)
- O.footstep = 0
- playsound(src, "jackboot", 50, 1) // this will get annoying very fast.
- else
- O.footstep++
- else
- playsound(src, "jackboot", 20, 1)
+ dirtoverlay.alpha = min(dirtoverlay.alpha + 10, 200)
+
+ if(ishuman(A))
+ var/mob/living/carbon/human/M = A
+ if(M.lying)
+ return 1
if(M.flying)
return ..()
// Tracking blood
var/list/bloodDNA = null
- var/bloodcolor=""
+ var/bloodcolor = ""
if(M.shoes)
var/obj/item/clothing/shoes/S = M.shoes
if(S.track_blood && S.blood_DNA)
bloodDNA = S.blood_DNA
- bloodcolor=S.blood_color
+ bloodcolor = S.blood_color
S.track_blood--
else
if(M.track_blood && M.feet_blood_DNA)
bloodDNA = M.feet_blood_DNA
- bloodcolor=M.feet_blood_color
+ bloodcolor = M.feet_blood_color
M.track_blood--
if (bloodDNA)
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 26757340fc8..d565f163781 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -210,26 +210,7 @@ var/list/wood_icons = list("wood","wood-broken")
var/obj/item/stack/tile/light/T = floor_tile
T.on = !T.on
update_icon()
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
-
-// if(M==user) //temporary hack to stop runtimes. ~Carn
-// user.stop_pulling() //but...fixed the root of the problem
-// return //shoudn't be needed now, unless somebody fucks with pulling again.
-
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
+ ..()
/turf/simulated/floor/proc/gets_drilled()
return
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index 03d158b8501..9c74178259f 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -324,7 +324,7 @@
/** ACT UNSIMULATED! **/
/*
assume_air(datum/gas_mixture/giver) //use this for machines to adjust air
- del(giver)
+ qdel(giver)
return 0
return_air()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 30f3e69a5ad..699569bfe87 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -277,6 +277,7 @@
user << "\blue You push the wall but nothing happens!"
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
src.add_fingerprint(user)
+ ..()
return
/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index 09656143c3c..c7b992ec9b0 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -31,6 +31,7 @@
user << "\blue You push the wall but nothing happens!"
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
src.add_fingerprint(user)
+ ..()
return
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 9cafaf48198..d2b75dd22c6 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -31,23 +31,6 @@
else
set_light(0)
-/turf/space/attack_hand(mob/user as mob)
- if ((user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/atom/movable/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
/turf/space/attackby(obj/item/C as obj, mob/user as mob, params)
if (istype(C, /obj/item/stack/rods))
@@ -87,10 +70,10 @@
/turf/space/Entered(atom/movable/A as mob|obj)
..()
- if ((!(A) || src != A.loc))
+ if ((!(A) || src != A.loc))
return
- if(destination_z)
+ if(destination_z)
A.x = destination_x
A.y = destination_y
A.z = destination_z
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 09890dc7617..85494318fa9 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -1,6 +1,6 @@
/turf
icon = 'icons/turf/floors.dmi'
- level = 1.0
+ level = 1
luminosity = 1
//for floors, use is_plating(), is_plasteel_floor() and is_light_floor()
@@ -20,12 +20,6 @@
var/temperature = T20C
var/blocks_air = 0
- var/icon_old = null
- var/pathweight = 1
-
- //Mining resource generation stuff.
- var/has_resources
- var/list/resources
var/PathNode/PNode = null //associated PathNode in the A* algorithm
@@ -39,7 +33,6 @@
..()
for(var/atom/movable/AM in src)
Entered(AM)
- return
/turf/Destroy()
// Adds the adjacent turfs to the current atmos processing
@@ -52,6 +45,9 @@
..()
return QDEL_HINT_HARDDEL_NOW
+/turf/attack_hand(mob/user as mob)
+ user.Move_Pulled(src)
+
/turf/ex_act(severity)
return 0
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index cd36c4a1bb5..b10885c7467 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -3,23 +3,6 @@
icon = 'icons/turf/floors.dmi'
icon_state = "Floor3"
-/turf/unsimulated/floor/attack_hand(var/mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
/turf/unsimulated/floor/grass
icon_state = "grass1"
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index fbb4a981811..635ee587290 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -71,6 +71,26 @@
spacepods_list += src
/obj/spacepod/Destroy()
+ qdel(equipment_system)
+ equipment_system = null
+ qdel(battery)
+ battery = null
+ qdel(cabin_air)
+ cabin_air = null
+ qdel(internal_tank)
+ internal_tank = null
+ qdel(pr_int_temp_processor)
+ pr_int_temp_processor = null
+ qdel(pr_give_air)
+ pr_give_air = null
+ qdel(ion_trail)
+ ion_trail = null
+ if(occupant)
+ occupant.forceMove(get_turf(src))
+ occupant = null
+ if(occupant2)
+ occupant2.forceMove(get_turf(src))
+ occupant2 = null
spacepods_list -= src
return ..()
diff --git a/code/game/vehicles/vehicle.dm b/code/game/vehicles/vehicle.dm
index a61015cf6d6..04413a62f44 100644
--- a/code/game/vehicles/vehicle.dm
+++ b/code/game/vehicles/vehicle.dm
@@ -74,7 +74,6 @@
add_cell()
add_iterators()
removeVerb(/obj/mecha/verb/disconnect_from_port)
- removeVerb(/atom/movable/verb/pull)
log_message("[src.name]'s functions initialised. Work protocols active - Entering IDLE mode.")
loc.Entered(src)
return
diff --git a/code/game/verbs/atom_verbs.dm b/code/game/verbs/atom_verbs.dm
deleted file mode 100644
index 4f77bf52f4c..00000000000
--- a/code/game/verbs/atom_verbs.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/atom/movable/verb/pull()
- set name = "Pull"
- set category = null
- set src in oview(1)
-
- if(Adjacent(usr))
- usr.start_pulling(src)
- return
diff --git a/code/modules/admin/buildmode.dm b/code/modules/admin/buildmode.dm
index 88077425c67..b7b2a0d3683 100644
--- a/code/modules/admin/buildmode.dm
+++ b/code/modules/admin/buildmode.dm
@@ -50,6 +50,12 @@
icon = 'icons/misc/buildmode.dmi'
var/obj/effect/bmode/buildholder/master = null
+/obj/effect/bmode/Destroy()
+ if(master && master.cl)
+ master.cl.screen -= src
+ master = null
+ return ..()
+
/obj/effect/bmode/builddir
icon_state = "build"
screen_loc = "NORTH,WEST"
@@ -133,6 +139,19 @@
var/turf/cornerB = null
var/generator_path = null
+/obj/effect/bmode/buildholder/Destroy()
+ qdel(builddir)
+ builddir = null
+ qdel(buildhelp)
+ buildhelp = null
+ qdel(buildmode)
+ buildmode = null
+ qdel(buildquit)
+ buildquit = null
+ throw_atom = null
+ cl = null
+ return ..()
+
/obj/effect/bmode/buildmode
icon_state = "buildmode1"
screen_loc = "NORTH,WEST+2"
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 17a2fc42239..9a62cc44a34 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -16,7 +16,7 @@ var/list/admin_datums = list()
/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey)
if(!ckey)
error("Admin datum created without a ckey argument. Datum has been deleted")
- del(src)
+ qdel(src)
return
admincaster_signature = "Nanotrasen Officer #[rand(0,9)][rand(0,9)][rand(0,9)]"
rank = initial_rank
@@ -86,7 +86,7 @@ you will have to do something like if(client.holder.rights & R_ADMIN) yourself.
holder.disassociate()
del(holder)
return 1
-
+
//This proc checks whether subject has at least ONE of the rights specified in rights_required.
/proc/check_rights_for(client/subject, rights_required)
if(subject && subject.holder)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 1b21829f739..c58d9edf765 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -25,7 +25,7 @@
message_admins("[key_name_admin(usr)] rejected [key_name_admin(C.mob)]'s admin help")
log_admin("[key_name(usr)] rejected [key_name(C.mob)]'s admin help")
-
+
if(href_list["stickyban"])
stickyban(href_list["stickyban"],href_list)
@@ -1062,7 +1062,7 @@
message_admins("\blue [key_name_admin(usr)] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
del(M.client)
- //del(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
+ //qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
if("No")
var/reason = input(usr,"Please state the reason","Reason") as message|null
if(!reason)
@@ -1086,7 +1086,7 @@
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
del(M.client)
- //del(M)
+ //qdel(M)
if("Cancel")
return
@@ -2173,7 +2173,7 @@
log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]")
else
usr << "You may only use this when the game is running."
-
+
else if(href_list["memoeditlist"])
if(!check_rights(R_SERVER)) return
var/sql_key = sanitizeSQL("[href_list["memoeditlist"]]")
@@ -2216,7 +2216,7 @@
if (M.client)
M.client.perspective = MOB_PERSPECTIVE
M.client.eye = M
- del(O)
+ qdel(O)
ok = 1*/
if("monkey")
feedback_inc("admin_secrets_fun_used",1)
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index 5fcfa3a12c3..3442edb9298 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -17,7 +17,7 @@
/client/proc/SDQL2_query(query_text as message)
set category = "Debug"
-
+
if(!check_rights(R_PROCCALL)) //Shouldn't happen... but just to be safe.
message_admins("ERROR: Non-admin [key_name_admin(usr)] attempted to execute a SDQL query!")
log_admin("Non-admin [key_name(usr)] attempted to execute a SDQL query!")
@@ -95,7 +95,7 @@
if("delete")
for(var/datum/d in objs)
- del d
+ del(d)
if("select")
var/text = ""
@@ -474,4 +474,3 @@
if(word != "")
query_list += word
return query_list
-
\ No newline at end of file
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index cc7f9f1befa..e46d72c338e 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -40,8 +40,8 @@ var/intercom_range_display_status = 0
/client/proc/camera_view()
set category = "Mapping"
set name = "Camera Range Display"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
if(camera_range_display_status)
@@ -50,7 +50,7 @@ var/intercom_range_display_status = 0
camera_range_display_status = 1
for(var/obj/effect/debugging/camera_range/C in world)
- del(C)
+ qdel(C)
if(camera_range_display_status)
for(var/obj/machinery/camera/C in cameranet.cameras)
@@ -60,8 +60,8 @@ var/intercom_range_display_status = 0
/client/proc/sec_camera_report()
set category = "Mapping"
set name = "Camera Report"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
var/list/obj/machinery/camera/CL = list()
@@ -99,8 +99,8 @@ var/intercom_range_display_status = 0
/client/proc/intercom_view()
set category = "Mapping"
set name = "Intercom Range Display"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
if(intercom_range_display_status)
@@ -109,17 +109,17 @@ var/intercom_range_display_status = 0
intercom_range_display_status = 1
for(var/obj/effect/debugging/marker/M in world)
- del(M)
+ qdel(M)
if(intercom_range_display_status)
for(var/obj/item/device/radio/intercom/I in world)
for(var/turf/T in orange(7,I))
var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
if (!(F in view(7,I.loc)))
- del(F)
+ qdel(F)
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-var/list/admin_verbs_show_debug_verbs = list(
+var/list/admin_verbs_show_debug_verbs = list(
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
@@ -128,7 +128,7 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/powerdebug, //check power
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
- /client/proc/cmd_assume_direct_control,
+ /client/proc/cmd_assume_direct_control,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
@@ -140,12 +140,12 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/forceEvent,
/client/proc/nanomapgen_DumpImage
)
-
+
/client/proc/enable_debug_verbs()
set category = "Debug"
set name = "Debug verbs"
- if(!check_rights(R_DEBUG))
+ if(!check_rights(R_DEBUG))
return
verbs += admin_verbs_show_debug_verbs
@@ -155,10 +155,10 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/count_objects_on_z_level()
set category = "Mapping"
set name = "Count Objects On Level"
-
- if(!check_rights(R_DEBUG))
- return
-
+
+ if(!check_rights(R_DEBUG))
+ return
+
var/level = input("Which z-level?","Level?") as text
if(!level) return
var/num_level = text2num(level)
@@ -193,8 +193,8 @@ var/list/admin_verbs_show_debug_verbs = list(
/client/proc/count_objects_all()
set category = "Mapping"
set name = "Count Objects All"
-
- if(!check_rights(R_DEBUG))
+
+ if(!check_rights(R_DEBUG))
return
var/type_text = input("Which type path?","") as text
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 93e5bb5c078..ad25fab49ce 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -279,12 +279,12 @@ client/proc/one_click_antag()
for (var/obj/effect/landmark/A in /area/syndicate_station/start)//Because that's the only place it can BE -Sieve
if (A.name == "Syndicate-Gear-Closet")
new /obj/structure/closet/syndicate/personal(A.loc)
- del(A)
+ qdel(A)
continue
if (A.name == "Syndicate-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(A.loc)
- del(A)
+ qdel(A)
continue
for(var/datum/mind/synd_mind in ticker.mode.syndicates)
diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm
index adea7ceaad6..9d4f9565e50 100644
--- a/code/modules/admin/verbs/striketeam.dm
+++ b/code/modules/admin/verbs/striketeam.dm
@@ -84,7 +84,7 @@ var/global/sent_strike_team = 0
var/obj/item/weapon/paper/P = new(L.loc)
P.info = "Good morning soldier!. This compact guide will familiarize you with standard operating procedure. There are three basic rules to follow:
#1 Work as a team.
#2 Accomplish your objective at all costs.
#3 Leave no witnesses.
You are fully equipped and stocked for your mission--before departing on the Spec. Ops. Shuttle due South, make sure that all operatives are ready. Actual mission objective will be relayed to you by Central Command through your headsets.
If deemed appropriate, Central Command will also allow members of your team to equip assault power-armor for the mission. You will find the armor storage due West of your position. Once you are ready to leave, utilize the Special Operations shuttle console and toggle the hull doors via the other console.
In the event that the team does not accomplish their assigned objective in a timely manner, or finds no other way to do so, attached below are instructions on how to operate a Nanotrasen Nuclear Device. Your operations LEADER is provided with a nuclear authentication disk and a pin-pointer for this reason. You may easily recognize them by their rank: Lieutenant, Captain, or Major. The nuclear device itself will be present somewhere on your destination.
Hello and thank you for choosing Nanotrasen for your nuclear information needs. Today's crash course will deal with the operation of a Fission Class Nanotrasen made Nuclear Device.
First and foremost, DO NOT TOUCH ANYTHING UNTIL THE BOMB IS IN PLACE. Pressing any button on the compacted bomb will cause it to extend and bolt itself into place. If this is done to unbolt it one must completely log in which at this time may not be possible.
To make the device functional:
#1 Place bomb in designated detonation zone
#2 Extend and anchor bomb (attack with hand).
#3 Insert Nuclear Auth. Disk into slot.
#4 Type numeric code into keypad ([nuke_code]).
Note: If you make a mistake press R to reset the device.
#5 Press the E button to log onto the device.
You now have activated the device. To deactivate the buttons at anytime, for example when you have already prepped the bomb for detonation, remove the authentication disk OR press the R on the keypad. Now the bomb CAN ONLY be detonated using the timer. A manual detonation is not an option.
Note: Toggle off the SAFETY.
Use the - - and + + to set a detonation time between 5 seconds and 10 minutes. Then press the timer toggle button to start the countdown. Now remove the authentication disk so that the buttons deactivate.
Note: THE BOMB IS STILL SET AND WILL DETONATE
Now before you remove the disk if you need to move the bomb you can: Toggle off the anchor, move it, and re-anchor.
The nuclear authorization code is: [nuke_code ? nuke_code : "None provided"]
Good luck, soldier!
"
P.name = "Spec. Ops Manual"
- P.icon = "pamphlet-ds"
+ P.icon = "pamphlet-ds"
var/obj/item/weapon/stamp/centcom/stamp = new
P.stamp(stamp)
qdel(stamp)
@@ -92,7 +92,7 @@ var/global/sent_strike_team = 0
for (var/obj/effect/landmark/L in landmarks_list)
if (L.name == "Commando-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
- del(L)
+ qdel(L)
message_admins("\blue [key_name_admin(usr)] has spawned a CentCom strike squad.", 1)
log_admin("[key_name(usr)] used Spawn Death Squad.")
diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm
index 03992278776..d609b5f8ac7 100644
--- a/code/modules/admin/verbs/striketeam_syndicate.dm
+++ b/code/modules/admin/verbs/striketeam_syndicate.dm
@@ -93,7 +93,7 @@ var/global/sent_syndicate_strike_team = 0
for (var/obj/effect/landmark/L in landmarks_list)
if (L.name == "Syndicate-Commando-Bomb")
new /obj/effect/spawner/newbomb/timer/syndicate(L.loc)
- del(L)
+ qdel(L)
message_admins("\blue [key_name_admin(usr)] has spawned a Syndicate strike squad.", 1)
log_admin("[key_name(usr)] used Spawn Syndicate Squad.")
@@ -121,7 +121,7 @@ var/global/sent_syndicate_strike_team = 0
new_syndicate_commando.mind.special_role = "Syndicate Commando"
ticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list.
new_syndicate_commando.equip_syndicate_commando(syndicate_leader_selected)
- del(spawn_location)
+ qdel(spawn_location)
return new_syndicate_commando
/mob/living/carbon/human/proc/equip_syndicate_commando(syndicate_leader_selected = 0)
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index f472b070830..4612979c125 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -84,7 +84,7 @@
if(src.coffin == 1)
var/obj/structure/closet/coffin/sarcophagus/sarc = locate(/obj/structure/closet/coffin/sarcophagus) in loc
if(sarc) M.loc = sarc
- del(src)
+ qdel(src)
diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm
index 5c2ccfe7166..3ae2da35068 100644
--- a/code/modules/awaymissions/loot.dm
+++ b/code/modules/awaymissions/loot.dm
@@ -21,4 +21,4 @@
continue
new loot_path(get_turf(src))
- del(src)
\ No newline at end of file
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm
index daf34508f5b..0ec790896f6 100644
--- a/code/modules/awaymissions/maploader/reader.dm
+++ b/code/modules/awaymissions/maploader/reader.dm
@@ -321,7 +321,7 @@ var/global/dmm_suite/preloader/_preloader = null
/dmm_suite/preloader/New(var/list/the_attributes, var/path)
.=..()
if(!the_attributes.len)
- Del()
+ del(src)
return
attributes = the_attributes
target_path = path
@@ -329,4 +329,4 @@ var/global/dmm_suite/preloader/_preloader = null
/dmm_suite/preloader/proc/load(atom/what)
for(var/attribute in attributes)
what.vars[attribute] = attributes[attribute]
- Del()
\ No newline at end of file
+ del(src)
\ No newline at end of file
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 209ce95acbe..42042932135 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -79,9 +79,27 @@
/obj/item/clothing/glasses/science
name = "Science Goggles"
- desc = "nothing"
+ desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items."
icon_state = "purple"
item_state = "glasses"
+ prescription_upgradable = 0
+
+/obj/item/clothing/glasses/science/equipped(mob/user, slot)
+ if(slot == slot_glasses)
+ user.scanner.Grant(user)
+ ..(user, slot)
+
+/obj/item/clothing/glasses/science/dropped(mob/user)
+ user.scanner.devices -= 1
+ ..(user)
+
+/obj/item/clothing/glasses/science/night
+ name = "Night Vision Science Goggle"
+ desc = "Now you can science in darkness."
+ icon_state = "nvpurple"
+ item_state = "glasses"
+ darkness_view = 8
+ see_darkness = 0
/obj/item/clothing/glasses/janitor
name = "Janitorial Goggles"
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 7a07fe249a2..46df4374a99 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -1,3 +1,5 @@
+/obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek
+
/obj/item/clothing/shoes/syndigaloshes
desc = "A pair of brown shoes. They seem to have extra grip."
name = "brown shoes"
@@ -61,6 +63,18 @@
var/footstep = 1 //used for squeeks whilst walking
species_restricted = null
+/obj/item/clothing/shoes/clown_shoes/step_action(var/mob/living/carbon/human/H)
+ if(!istype(H)) return 0
+
+ if(H.m_intent == "run")
+ if(footstep >= 2)
+ playsound(src, "clownstep", 50, 1)
+ footstep = 0
+ else
+ footstep++
+ else
+ playsound(src, "clownstep", 20, 1)
+
/obj/item/clothing/shoes/jackboots
name = "jackboots"
desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
@@ -68,7 +82,19 @@
item_state = "jackboots"
item_color = "hosred"
siemens_coefficient = 0.7
- var/footstep=1
+ var/footstep = 1
+
+/obj/item/clothing/shoes/jackboots/step_action(var/mob/living/carbon/human/H)
+ if(!istype(H)) return 0
+
+ if(H.m_intent == "run")
+ if(footstep >= 2)
+ playsound(src, "jackboot", 50, 1)
+ footstep = 0
+ else
+ footstep++
+ else
+ playsound(src, "jackboot", 20, 1)
/obj/item/clothing/shoes/jackboots/jacksandals
name = "jacksandals"
@@ -132,11 +158,10 @@
icon_state = "griffinboots"
item_state = "griffinboots"
flags = NODROP
-
+
/obj/item/clothing/shoes/fluff/noble_boot
name = "noble boots"
desc = "The boots are economically designed to balance function and comfort, so that you can step on peasants without having to worry about blisters. The leather also resists unwanted blood stains."
icon_state = "noble_boot"
item_color = "noble_boot"
item_state = "noble_boot"
-
\ No newline at end of file
diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm
index 12c21e2a70e..8ff83a239a8 100644
--- a/code/modules/clothing/suits/storage.dm
+++ b/code/modules/clothing/suits/storage.dm
@@ -8,6 +8,11 @@
pockets.max_w_class = 2 //fit only pocket sized items
pockets.max_combined_w_class = 4
+/obj/item/clothing/suit/storage/Destroy()
+ qdel(pockets)
+ pockets = null
+ return ..()
+
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
if (pockets.handle_attack_hand(user))
..(user)
diff --git a/code/modules/computer3/laptop.dm b/code/modules/computer3/laptop.dm
index b0789d6a740..037b505d779 100644
--- a/code/modules/computer3/laptop.dm
+++ b/code/modules/computer3/laptop.dm
@@ -52,7 +52,7 @@
O.forceMove(loc)
usr << "\The [src] crumbles to pieces."
spawn(5)
- qdel(src)
+ qdel(src)
return
if(!stored_computer.manipulating)
@@ -65,7 +65,7 @@
spawn(5)
stored_computer.manipulating = 0
- qdel(src)
+ qdel(src)
else
usr << "\red You are already opening the computer!"
@@ -73,8 +73,9 @@
AltClick()
if(Adjacent(usr))
open_computer()
-
+
Destroy()
+ ..()
return QDEL_HINT_HARDDEL_NOW // Warning: GC'ing will cause the laptop to vanish when it next closes
//Quickfix until Snapshot works out how he wants to redo power. ~Z
diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm
index 72407ae289c..b1c01eb9c76 100644
--- a/code/modules/fish/fishtank.dm
+++ b/code/modules/fish/fishtank.dm
@@ -366,7 +366,7 @@
else //We are deconstructing, make glass sheets instead of shards
var/sheets = shard_count + 1 //Deconstructing it salvages all the glass used to build the tank
new /obj/item/stack/sheet/glass(get_turf(src), sheets) //Produce the appropriate number of glass sheets, in a single stack
- qdel(src) //QDel the tank and it's contents
+ qdel(src) //qdel the tank and it's contents
T.air_update_turf(1) //Update the air for the turf, to avoid permanent atmos sealing with wall tanks
/obj/machinery/fishtank/proc/spill_water()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index a8045fdbd38..0151136b580 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -442,18 +442,18 @@ Gunshots/explosions/opening doors/less rare audio (done)
/obj/effect/fake_attacker/proc/updateimage()
-// del src.currentimage
+// qdel(src.currentimage)
if(src.dir == NORTH)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(up,src)
else if(src.dir == SOUTH)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(down,src)
else if(src.dir == EAST)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(right,src)
else if(src.dir == WEST)
- del(src.currentimage)
+ qdel(src.currentimage)
src.currentimage = new /image(left,src)
my_target << currentimage
diff --git a/code/modules/food/cooker.dm b/code/modules/food/cooker.dm
index 7512209fc1b..e50cdac3dec 100644
--- a/code/modules/food/cooker.dm
+++ b/code/modules/food/cooker.dm
@@ -125,7 +125,7 @@
setCooked(I, newfood)
newfood.cooktype[thiscooktype] = 1
turnoff(I)
- //del(I)
+ //qdel(I)
// MAKE SURE TO OVERRIDE THESE ON THE MACHINE IF IT HAS SPECIAL FOOD INTERACTIONS!
// FAILURE TO OVERRIDE WILL RESULT IN FAILURE TO PROPERLY HANDLE SPECIAL INTERACTIONS! --FalseIncarnate
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 9f0f22f8bcc..033221ce5f2 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -395,13 +395,13 @@
var/obj/item/stack/medical/bruise_pack/tajaran/poultice = new /obj/item/stack/medical/bruise_pack/tajaran(user.loc)
poultice.heal_brute = potency
user << "You mash the leaves into a poultice."
- del(src)
+ qdel(src)
return
if("mtear")
var/obj/item/stack/medical/ointment/tajaran/poultice = new /obj/item/stack/medical/ointment/tajaran(user.loc)
poultice.heal_burn = potency
user << "You mash the petals into a poultice."
- del(src)
+ qdel(src)
return
*/
diff --git a/code/modules/jungle/jungle.dm b/code/modules/jungle/jungle.dm
index 54819de1dda..f22f0dede9a 100644
--- a/code/modules/jungle/jungle.dm
+++ b/code/modules/jungle/jungle.dm
@@ -93,7 +93,7 @@
//world << "falsewall_spawner found in wall"
var/obj/structure/temple_falsewall/fwall = new(F.loc)
fwall.mineral = mineral
- del(F)
+ qdel(F)
for(var/obj/effect/landmark/door_spawner/D in T.contents)
//world << "door_spawner found in wall"
@@ -101,7 +101,7 @@
T.icon_state = "dark"
var/spawn_type = text2path("/obj/machinery/door/airlock/[door_mineral]")
new spawn_type(T)
- del(D)*/
+ qdel(D)*/
//a shuttle has crashed somewhere on the map, it should have a power cell to let the adventurers get home
/area/jungle/crash_ship_source
diff --git a/code/modules/jungle/jungle_temple.dm b/code/modules/jungle/jungle_temple.dm
index 1ecdab55973..a021631bb64 100644
--- a/code/modules/jungle/jungle_temple.dm
+++ b/code/modules/jungle/jungle_temple.dm
@@ -49,7 +49,7 @@
New()
if(prob(10))
new /obj/effect/glowshroom(src.loc)
- del(src)
+ qdel(src)
/obj/effect/landmark/loot_spawn
name = "loot spawner"
@@ -267,7 +267,7 @@
for(var/i=0,i(range*0.60))
- deep_count++
- else if(cell>(range*0.40))
- rare_count++
- else
- surface_count++
-
- if(surface_count < MIN_SURFACE_COUNT || surface_count > MAX_SURFACE_COUNT) return 0
- if(rare_count < MIN_RARE_COUNT || rare_count > MAX_RARE_COUNT) return 0
- if(deep_count < MIN_DEEP_COUNT || deep_count > MAX_DEEP_COUNT) return 0
- return 1
-
-//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array.
-/datum/ore_distribution/proc/populate_distribution_map()
-
- //Announce it!
- world << "Generating resource distribution map."
-
- //Seed beginning values.
- var/x = 1
- var/y = 1
- var/size = real_size-1
- map[MAP_TOP_LEFT] = (range/3)+rand(range/5)
- map[MAP_TOP_RIGHT] = (range/3)+rand(range/5)
- map[MAP_BOTTOM_LEFT] = (range/3)+rand(range/5)
- map[MAP_BOTTOM_RIGHT] = (range/3)+rand(range/5)
-
- //Fill in and smooth it out.
- var/attempts = 0
- do
- attempts++
- generate_distribution_map(1,1,size)
- while(attempts < ITERATE_BEFORE_FAIL && !map_is_sane())
-
- if(attempts >= ITERATE_BEFORE_FAIL)
- world << "Could not generate a sane distribution map. Aborting."
- map = null
- return
- else
- apply_to_asteroid()
-
-/datum/ore_distribution/proc/clear_distribution_map()
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
- map[MAP_CELL] = 0
-
-/datum/ore_distribution/proc/print_distribution_map()
- var/line = ""
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
- line += num2text(round(map[MAP_CELL]/25.5))
- world << line
- line = ""
-
-/datum/ore_distribution/proc/generate_distribution_map(var/x,var/y,var/input_size)
-
- var/size = input_size
-
- map[MAP_MID_TOP] = (map[MAP_TOP_LEFT] + map[MAP_TOP_RIGHT])/2
- map[MAP_MID_RIGHT] = (map[MAP_BOTTOM_RIGHT] + map[MAP_TOP_RIGHT])/2
- map[MAP_MID_BOTTOM] = (map[MAP_BOTTOM_LEFT] + map[MAP_BOTTOM_RIGHT])/2
- map[MAP_MID_LEFT] = (map[MAP_TOP_LEFT] + map[MAP_BOTTOM_RIGHT])/2
- map[MAP_CENTRE] = (map[MAP_MID_LEFT]+map[MAP_MID_RIGHT]+map[MAP_MID_BOTTOM]+map[MAP_MID_TOP])/4
-
- if(prob(random_variance_chance))
- map[MAP_CENTRE] *= (rand(1) ? (1.0-random_element) : (1.0+random_element))
- map[MAP_CENTRE] = max(0,min(range,map[MAP_CENTRE]))
-
- if(size>3)
- generate_distribution_map(x,y,input_size/2)
- generate_distribution_map(x+(input_size/2),y,input_size/2)
- generate_distribution_map(x,y+(input_size/2),input_size/2)
- generate_distribution_map(x+(input_size/2),y+(input_size/2),input_size/2)
-
-/datum/ore_distribution/proc/apply_to_asteroid()
-
- // THESE VALUES DETERMINE THE AREA THAT THE DISTRIBUTION MAP IS APPLIED TO.
- // IF YOU DO NOT RUN OFFICIAL BAYCODE ASTEROID MAP YOU NEED TO CHANGE THEM.
- // ORIGIN IS THE BOTTOM LEFT CORNER OF THE SQUARE CONTAINING ALL ASTEROID
- // TILES YOU WISH TO APPLY THE DISTRIBUTION MAP TO.
-
- var/origin_x = 13 //We start here...
- var/origin_y = 32 //...and here...
- var/limit_x = 217 //...and iterate until here...
- var/limit_y = 223 //...and here...
- var/asteroid_z = 5 //...on this Z-level.
-
- var/tx = origin_x
- var/ty = origin_y
-
- for(var/y = 1, y <= real_size, y++)
-
- for(var/x = 1, x <= real_size, x++)
-
- var/turf/target_turf
-
- for(var/i=0,i limit_x || ty+i > limit_y)
- continue
-
- target_turf = locate(tx+j, ty+i, asteroid_z)
-
- if(target_turf && target_turf.has_resources)
-
- target_turf.resources = list()
- target_turf.resources["silicates"] = rand(3,5)
- target_turf.resources["carbonaceous rock"] = rand(3,5)
-
- switch(map[MAP_CELL])
- if(0 to 100)
- target_turf.resources["iron"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
- target_turf.resources["gold"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["silver"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["diamond"] = 0
- target_turf.resources["plasma"] = 0
- target_turf.resources["osmium"] = 0
- target_turf.resources["hydrogen"] = 0
- if(100 to 124)
- target_turf.resources["iron"] = 0
- target_turf.resources["gold"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["silver"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["uranium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["diamond"] = 0
- target_turf.resources["plasma"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["osmium"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
- target_turf.resources["hydrogen"] = 0
- if(125 to 255)
- target_turf.resources["iron"] = 0
- target_turf.resources["gold"] = 0
- target_turf.resources["silver"] = 0
- target_turf.resources["uranium"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["diamond"] = rand(RESOURCE_LOW_MIN,RESOURCE_LOW_MAX)
- target_turf.resources["plasma"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
- target_turf.resources["osmium"] = rand(RESOURCE_HIGH_MIN,RESOURCE_HIGH_MAX)
- target_turf.resources["hydrogen"] = rand(RESOURCE_MID_MIN,RESOURCE_MID_MAX)
-
- tx += chunk_size
- tx = origin_x
- ty += chunk_size
-
- world << "Resource map generation complete."
- return
-
-#undef MAP_CELL
-#undef MAP_CENTRE
-#undef MAP_TOP_LEFT
-#undef MAP_TOP_RIGHT
-#undef MAP_BOTTOM_LEFT
-#undef MAP_BOTTOM_RIGHT
-#undef MAP_MID_TOP
-#undef MAP_MID_BOTTOM
-#undef MAP_MID_LEFT
-#undef MAP_MID_RIGHT
-
-#undef MIN_SURFACE_COUNT
-#undef MAX_SURFACE_COUNT
-#undef MIN_RARE_COUNT
-#undef MAX_RARE_COUNT
-#undef MIN_DEEP_COUNT
-#undef MAX_DEEP_COUNT
-#undef ITERATE_BEFORE_FAIL
-
-#undef RESOURCE_HIGH_MAX
-#undef RESOURCE_HIGH_MIN
-#undef RESOURCE_MID_MAX
-#undef RESOURCE_MID_MIN
-#undef RESOURCE_LOW_MAX
-#undef RESOURCE_LOW_MIN
diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm
deleted file mode 100644
index 09888cdb3fa..00000000000
--- a/code/modules/mining/drilling/drill.dm
+++ /dev/null
@@ -1,392 +0,0 @@
-/obj/machinery/mining
- icon = 'icons/obj/mining_drill.dmi'
- anchored = 0
- use_power = 0 //The drill takes power directly from a cell.
- density = 1
- layer = MOB_LAYER+0.1 //So it draws over mobs in the tile north of it.
-
-/obj/machinery/mining/drill
- name = "mining drill head"
- desc = "An enormous drill."
- icon_state = "mining_drill"
- var/braces_needed = 2
- var/list/supports = list()
- var/supported = 0
- var/active = 0
- var/list/resource_field = list()
- var/open = 0
-
- var/ore_types = list(
- "iron" = /obj/item/weapon/ore/iron,
- "uranium" = /obj/item/weapon/ore/uranium,
- "gold" = /obj/item/weapon/ore/gold,
- "silver" = /obj/item/weapon/ore/silver,
- "diamond" = /obj/item/weapon/ore/diamond,
- "plasma" = /obj/item/weapon/ore/plasma,
- "osmium" = /obj/item/weapon/ore/osmium,
- "hydrogen" = /obj/item/weapon/ore/hydrogen,
- "silicates" = /obj/item/weapon/ore/glass,
- "carbonaceous rock" = /obj/item/weapon/ore/coal
- )
-
- //Upgrades
- var/obj/item/weapon/stock_parts/matter_bin/storage
- var/obj/item/weapon/stock_parts/micro_laser/cutter
- var/obj/item/weapon/stock_parts/capacitor/cellmount
- var/obj/item/weapon/stock_parts/cell/cell
-
- //Flags
- var/need_update_field = 0
- var/need_player_check = 0
-
-/obj/machinery/mining/drill/New()
-
- ..()
-
- storage = new(src)
- cutter = new(src)
- cellmount = new(src)
-
- cell = new(src)
- cell.maxcharge = 10000
- cell.charge = cell.maxcharge
-
-/obj/machinery/mining/drill/process()
-
- if(need_player_check)
- return
-
- check_supports()
-
- if(!active) return
-
- if(!anchored || !use_cell_power())
- system_error("system configuration or charge error")
- return
-
- if(need_update_field)
- get_resource_field()
-
- if(world.time % 10 == 0)
- update_icon()
-
- if(!active)
- return
-
- //Drill through the flooring, if any.
- if(istype(get_turf(src),/turf/simulated/floor/plating/airless/asteroid))
- var/turf/simulated/floor/plating/airless/asteroid/T = get_turf(src)
- if(!T.dug)
- T.gets_dug()
- else if(istype(get_turf(src),/turf/simulated/floor))
- var/turf/simulated/floor/T = get_turf(src)
- T.ex_act(2.0)
-
- //Dig out the tasty ores.
- if(resource_field.len)
- var/turf/harvesting = pick(resource_field)
-
- while(resource_field.len && !harvesting.resources)
- harvesting.has_resources = 0
- harvesting.resources = null
- resource_field -= harvesting
- harvesting = pick(resource_field)
-
- if(!harvesting) return
-
- var/total_harvest = get_harvest_capacity() //Ore harvest-per-tick.
- var/found_resource = 0 //If this doesn't get set, the area is depleted and the drill errors out.
-
- for(var/metal in ore_types)
-
- if(contents.len >= get_storage_capacity())
- system_error("insufficient storage space")
- active = 0
- need_player_check = 1
- update_icon()
- return
-
- if(contents.len + total_harvest >= get_storage_capacity())
- total_harvest = get_storage_capacity() - contents.len
-
- if(total_harvest <= 0) break
- if(harvesting.resources[metal])
-
- found_resource = 1
-
- var/create_ore = 0
- if(harvesting.resources[metal] >= total_harvest)
- harvesting.resources[metal] -= total_harvest
- create_ore = total_harvest
- total_harvest = 0
- else
- total_harvest -= harvesting.resources[metal]
- create_ore = harvesting.resources[metal]
- harvesting.resources[metal] = 0
-
- for(var/i=1,i<=create_ore,i++)
- var/oretype = ore_types[metal]
- new oretype(src)
-
- if(!found_resource)
- harvesting.has_resources = 0
- harvesting.resources = null
- resource_field -= harvesting
- else
- active = 0
- need_player_check = 1
- update_icon()
-
-/obj/machinery/mining/drill/attack_ai(var/mob/user as mob)
- return src.attack_hand(user)
-
-/obj/machinery/mining/drill/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if(istype(W,/obj/item/weapon/screwdriver))
- if(active) return
- open = !open
- user << "\blue You [open ? "open" : "close"] the maintenance panel." //TODO: Sprite.
- return
- else
- if(!open || active) return ..()
- if(istype(W,/obj/item/weapon/crowbar))
- if(cell)
- user << "You pry out \the [cell]."
- cell.loc = get_turf(src)
- cell = null
- else if(storage)
- user << "You slip the bolt and pry out \the [storage]."
- storage.loc = get_turf(src)
- storage = null
- else if(cutter)
- user << "You carefully detatch and pry out \the [cutter]."
- cutter.loc = get_turf(src)
- cutter = null
- else if(cellmount)
- user << "You yank out a few wires and pry out \the [cellmount]."
- cellmount.loc = get_turf(src)
- cellmount = null
- else
- user << "There's nothing inside the drilling rig to remove."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/matter_bin))
- if(storage)
- user << "The drill already has a matter bin installed."
- else
- user.drop_item()
- W.loc = src
- storage = W
- user << "You install \the [W]."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/micro_laser))
- if(cutter)
- user << "The drill already has a cutting head installed."
- else
- user.drop_item()
- W.loc = src
- cutter = W
- user << "You install \the [W]."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/capacitor))
- if(cellmount)
- user << "The drill already has a cell capacitor installed."
- else
- user.drop_item()
- W.loc = src
- cellmount = W
- user << "You install \the [W]."
- return
- else if(istype(W,/obj/item/weapon/stock_parts/cell))
- if(cell)
- user << "The drill already has a cell installed."
- else
- user.drop_item()
- W.loc = src
- cell = W
- user << "You install \the [W]."
- return
- ..()
-/obj/machinery/mining/drill/attack_hand(mob/user as mob)
- check_supports()
-
- if(need_player_check)
- user << "You hit the manual override and reset the drill's error checking."
- need_player_check = 0
- if(anchored) get_resource_field()
- update_icon()
- return
-
- else if(supported)
- if(use_cell_power())
- active = !active
- if(active)
- user << "\blue You engage \the [src] and it lurches downwards, grinding noisily."
- need_update_field = 1
- else
- user << "\blue You disengage \the [src] and it shudders to a grinding halt."
- else
- user << "\blue The drill is unpowered."
- else
- user << "\blue Turning on a piece of industrial machinery without sufficient bracing is a bad idea."
-
- update_icon()
-
-/obj/machinery/mining/drill/update_icon()
- if(need_player_check)
- icon_state = "mining_drill_error"
- else if(active)
- icon_state = "mining_drill_active"
- else if(supported)
- icon_state = "mining_drill_braced"
- else
- icon_state = "mining_drill"
- return
-
-/obj/machinery/mining/drill/proc/check_supports()
-
- supported = 0
-
- if((!supports || !supports.len) && initial(anchored) == 0)
- icon_state = "mining_drill"
- anchored = 0
- active = 0
- else
- anchored = 1
-
- if(supports && supports.len >= braces_needed)
- supported = 1
-
- update_icon()
-
-/obj/machinery/mining/drill/proc/system_error(var/error)
-
- if(error) src.visible_message("\red \The [src] flashes a '[error]' warning.")
- need_player_check = 1
- active = 0
- update_icon()
-
-/obj/machinery/mining/drill/proc/get_harvest_capacity()
- return (cutter ? cutter.rating : 0)
-
-/obj/machinery/mining/drill/proc/get_storage_capacity()
- return 200 * (storage ? storage.rating : 0)
-
-/obj/machinery/mining/drill/proc/get_charge_use()
- return 50 - (10 * (cellmount ? cellmount.rating : 0))
-
-/obj/machinery/mining/drill/proc/get_resource_field()
-
- resource_field = list()
- need_update_field = 0
-
- var/turf/T = get_turf(src)
- if(!istype(T)) return
-
- var/tx = T.x-2
- var/ty = T.y-2
- var/turf/mine_turf
- for(var/iy=0,iy<5,iy++)
- for(var/ix=0,ix<5,ix++)
- mine_turf = locate(tx+ix,ty+iy,T.z)
- if(mine_turf && istype(mine_turf) && mine_turf.has_resources)
- resource_field += mine_turf
-
- if(!resource_field.len)
- system_error("resources depleted")
-
-/obj/machinery/mining/drill/proc/use_cell_power()
- if(!cell) return 0
- var/req = get_charge_use()
- if(cell.charge >= req)
- cell.use(req)
- return 1
- return 0
-
-/obj/machinery/mining/drill/verb/unload()
- set name = "Unload Drill"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat) return
-
- var/obj/structure/ore_box/B = locate() in orange(1)
- if(B)
- for(var/obj/item/weapon/ore/O in contents)
- O.loc = B
- usr << "\red You unload the drill's storage cache into the ore box."
- else
- usr << "\red You must move an ore box up to the drill before you can unload it."
-
-
-/obj/machinery/mining/brace
- name = "mining drill brace"
- desc = "A machinery brace for an industrial drill. It looks easily two feet thick."
- icon_state = "mining_brace"
- var/obj/machinery/mining/drill/connected
-
-/obj/machinery/mining/brace/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
- if(istype(W,/obj/item/weapon/wrench))
-
- if(istype(get_turf(src),/turf/space))
- user << "\blue You can't anchor something to empty space. Idiot."
- return
-
- if(connected && connected.active)
- user << "\blue You can't unanchor the brace of a running drill!"
- return
-
- playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
- user << "\blue You [anchored ? "un" : ""]anchor the brace."
-
- anchored = !anchored
- if(anchored)
- connect()
- else
- disconnect()
-
-/obj/machinery/mining/brace/proc/connect()
-
- var/turf/T = get_step(get_turf(src), src.dir)
-
- if(!T.has_resources)
- src.visible_message("\red The terrain near the brace is unsuitable!")
- return
-
- for(var/thing in T.contents)
- if(istype(thing,/obj/machinery/mining/drill))
- connected = thing
- break
-
- if(!connected) return
-
- if(!connected.supports) connected.supports = list()
-
- icon_state = "mining_brace_active"
-
- connected.supports += src
- connected.check_supports()
-
-/obj/machinery/mining/brace/proc/disconnect()
-
- if(!connected) return
-
- if(!connected.supports) connected.supports = list()
-
- icon_state = "mining_brace"
-
- connected.supports -= src
- connected.check_supports()
- connected = null
-
-/obj/machinery/mining/brace/verb/rotate()
- set name = "Rotate"
- set category = "Object"
- set src in oview(1)
-
- if(usr.stat) return
-
- if (src.anchored)
- usr << "It is anchored in place!"
- return 0
-
- src.dir = turn(src.dir, 90)
- return 1
\ No newline at end of file
diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm
deleted file mode 100644
index 91ff1e12f8e..00000000000
--- a/code/modules/mining/drilling/scanner.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/item/weapon/mining_scanner
- name = "ore detector"
- desc = "A complex device used to locate ore deep underground."
- icon = 'icons/obj/device.dmi'
- icon_state = "forensic0-old" //GET A BETTER SPRITE.
- item_state = "electronic"
-// matter = list("metal" = 150)
-
- origin_tech = "magnets=1;engineering=1"
-
-/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
-
- user << "You begin sweeping \the [src] about, scanning for metal deposits."
-
- if(!do_after(user,50, target = src)) return
-
- if(!user || !src) return
-
- var/list/metals = list(
- "surface minerals" = 0,
- "precious metals" = 0,
- "nuclear fuel" = 0,
- "exotic matter" = 0
- )
-
- for(var/turf/T in oview(3,get_turf(user)))
-
- if(!T.has_resources)
- continue
-
- for(var/metal in T.resources)
-
- var/ore_type
-
- switch(metal)
- if("silicates" || "carbonaceous rock" || "iron") ore_type = "surface minerals"
- if("gold" || "silver" || "diamond") ore_type = "precious metals"
- if("uranium") ore_type = "nuclear fuel"
- if("plasma" || "osmium" || "hydrogen") ore_type = "exotic matter"
-
- if(ore_type) metals[ore_type] += T.resources[metal]
-
- user << "\icon[src] \blue The scanner beeps and displays a readout."
-
- for(var/ore_type in metals)
-
- var/result = "no sign"
-
- switch(metals[ore_type])
- if(1 to 50) result = "trace amounts"
- if(51 to 150) result = "significant amounts"
- if(151 to INFINITY) result = "huge quantities"
-
- user << "- [result] of [ore_type]."
\ No newline at end of file
diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm
index 4b293e71350..41d54ca1279 100644
--- a/code/modules/mining/laborcamp/laborshuttle.dm
+++ b/code/modules/mining/laborcamp/laborshuttle.dm
@@ -40,7 +40,7 @@ proc/move_labor_shuttle() //TODO: Security Access only; add moving the shuttle t
*/
if(istype(T, /turf/simulated))
- del(T)
+ qdel(T)
for(var/mob/living/carbon/bug in toArea) // If someone somehow is still in the shuttle's docking area...
bug.gib()
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index fad5c590e1b..03ed2d630b4 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -125,7 +125,7 @@
name = "Noise"
desc = "Noises"
key = ""
- flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG
+ flags = RESTRICTED|NONGLOBAL|INNATE|NO_TALK_MSG|NO_STUTTER
/datum/language/noise/format_message(message, verb)
return "[message]"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 194e64100e2..d6b8a18fc7b 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -86,6 +86,6 @@
else
new_xeno.key = key
new_xeno.mind.name = new_xeno.name
- del(src)
+ qdel(src)
return
*/
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index ce94cb4c8a2..2b6407398d2 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -230,13 +230,6 @@
else
healths.icon_state = "health6"
- if(pullin)
- if(pulling)
- pullin.icon_state = "pull"
- else
- pullin.icon_state = "pull0"
-
-
if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index eb32d6b974f..f27ac91d398 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -117,7 +117,7 @@
else
new_xeno.key = key
new_xeno.mind.name = new_xeno.name
- del(src)
+ qdel(src)
else
src << "We already have an alive empress."
return
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index f9a2b945410..8ddae961d5f 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -255,4 +255,4 @@
else
var/mob/living/carbon/alien/humanoid/A = new(loc)
A.key = key
- del(src) */
\ No newline at end of file
+ qdel(src) */
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index b54c7f5ee36..55265498284 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -73,3 +73,12 @@
/mob/living/carbon/human/mob_negates_gravity()
return shoes && shoes.negates_gravity()
+
+/mob/living/carbon/human/Move(NewLoc, direct)
+ . = ..()
+ if(shoes)
+ if(!lying && !buckled)
+ if(!has_gravity(loc))
+ return
+ var/obj/item/clothing/shoes/S = shoes
+ S.step_action(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 8967e1519d6..a1f7c39281d 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1289,12 +1289,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
if(pressure)
pressure.icon_state = "pressure[pressure_alert]"
- if(pullin)
- if(pulling) pullin.icon_state = "pull1"
- else pullin.icon_state = "pull0"
-// if(rest) //Not used with new UI
-// if(resting || lying || sleeping) rest.icon_state = "rest1"
-// else rest.icon_state = "rest0"
if(toxin)
if(hal_screwyhud == 4 || toxins_alert) toxin.icon_state = "tox1"
else toxin.icon_state = "tox0"
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index 9cd0301b885..26ef94d472a 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -462,7 +462,7 @@
if(D.client)
D.loc = H.loc
else
- del(D)
+ qdel(D)
H.visible_message(""
*/
+//mob verbs are a lot faster than object verbs
+//for more info on why this is not atom/pull, see examinate() in mob.dm
+/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1))
+ set name = "Pull"
+ set category = "Object"
+
+ if(AM.Adjacent(src))
+ src.start_pulling(AM)
+ return
+
//same as above
/mob/living/pointed(atom/A as mob|obj|turf in view())
if(src.stat || !src.canmove || src.restrained())
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 437f9882a99..40b9d11c4d8 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -158,9 +158,10 @@ proc/get_radio_key_from_channel(var/channel)
message = handle_autohiss(message, speaking)
- var/list/handle_s = handle_speech_problems(message, verb)
- message = handle_s[1]
- verb = handle_s[2]
+ if(speaking && !(speaking.flags & NO_STUTTER))
+ var/list/handle_s = handle_speech_problems(message, verb)
+ message = handle_s[1]
+ verb = handle_s[2]
if(!message || message == "")
return 0
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 6a157225c2c..ef0e1f712f8 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -42,10 +42,6 @@
set src = usr.contents
return 0
-/mob/aiEye/pull()
- set popup_menu = 0
- set src = usr.contents
- return 0
// Use this when setting the aiEye's location.
// It will also stream the chunk that the new loc is in.
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index cbc449410fc..bd7b023b5b6 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -68,6 +68,7 @@
//Some tidying-up.
flavor_text = "It's a tiny little repair drone. The casing is stamped with an NT logo and the subscript: 'Nanotrasen Recursive Repair Systems: Fixing Tomorrow's Problem, Today!'"
+ scanner.Grant(src)
update_icons()
/mob/living/silicon/robot/drone/init()
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 5113c719dbb..4d0fc33ca06 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -65,7 +65,7 @@
for(var/V in components)
var/datum/robot_component/C = components[V]
C.consume_power()
-
+
var/amt = Clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell.
cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick
@@ -287,7 +287,6 @@
src.bodytemp.icon_state = "temp-2"
- if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]"
//Oxygen and fire does nothing yet!!
// if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]"
// if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]"
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 5127277a053..1fd0280cf1e 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -150,6 +150,7 @@ var/list/robot_verbs_default = list(
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
+ scanner.Grant(src)
/mob/living/silicon/robot/proc/init(var/alien=0)
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 9a44a61d3bd..8546c793876 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -32,8 +32,13 @@
src.emag.name = "Placeholder Emag Item"
/obj/item/weapon/robot_module/Destroy()
+ for(var/module in modules)
+ qdel(module)
modules.Cut()
+ qdel(emag)
emag = null
+ qdel(jetpack)
+ jetpack = null
return ..()
/obj/item/weapon/robot_module/proc/fix_modules()
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index 6d5cd3ba6bd..a7d07c8485c 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -30,7 +30,6 @@
/mob/living/simple_animal/bee/New(loc, var/obj/machinery/apiary/new_parent)
..()
parent = new_parent
- verbs -= /atom/movable/verb/pull
/mob/living/simple_animal/bee/Destroy()
if(parent)
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
index ae21a0a3d8f..ef5a8ec3719 100644
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ b/code/modules/mob/living/simple_animal/corpse.dm
@@ -78,7 +78,7 @@
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
- del(src)
+ qdel(src)
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 0b904097fa3..b7e705e2079 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -38,9 +38,6 @@
if(fire)
if(fire_alert) fire.icon_state = "fire[fire_alert]" //fire_alert is either 0 if no alert, 1 for heat and 2 for cold.
else fire.icon_state = "fire0"
- if(pullin)
- if(pulling) pullin.icon_state = "pull1"
- else pullin.icon_state = "pull0"
if(oxygen)
if(oxygen_alert) oxygen.icon_state = "oxy1"
else oxygen.icon_state = "oxy0"
@@ -189,6 +186,7 @@
var/list/allowed_types = list(
/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/suit/space/deathsquad,
+ /obj/item/clothing/suit/space/rig/engineering,
/obj/item/device/radio,
/obj/item/device/radio/off,
/obj/item/clothing/suit/cardborg,
@@ -369,6 +367,11 @@
desc = "That's not red paint. That's real corgi blood."
valid = 1
+ if(/obj/item/clothing/head/helmet/space/rig/engineering)
+ name = "Space Explorer [real_name]"
+ desc = "That's one small step for a corgi. One giant yap for corgikind."
+ valid = 1
+
if(/obj/item/clothing/mask/fakemoustache)
name = "Definitely Not [real_name]"
desc = "That's Definitely Not [real_name]"
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index f25e44927f8..274326bd78f 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -63,7 +63,7 @@
health = min(maxHealth, health + MED.heal_brute)
MED.amount -= 1
if(MED.amount <= 0)
- del(MED)
+ qdel(MED)
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\blue [user] applies the [MED] on [src]")
diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm
index 1a1304dbd19..5f902a9eeb4 100644
--- a/code/modules/mob/login.dm
+++ b/code/modules/mob/login.dm
@@ -30,7 +30,7 @@
client.images = null //remove the images such as AIs being unable to see runes
client.screen = list() //remove hud items just in case
- if(hud_used) del(hud_used) //remove the hud objects
+ if(hud_used) qdel(hud_used) //remove the hud objects
hud_used = new /datum/hud(src)
next_move = 1
@@ -46,7 +46,7 @@
if(ckey in deadmins)
- verbs += /client/proc/readmin
+ verbs += /client/proc/readmin
//Clear ability list and update from mob.
client.verbs -= ability_verbs
@@ -58,12 +58,12 @@
var/mob/living/carbon/human/H = src
if(H.species && H.species.abilities)
client.verbs |= H.species.abilities
-
+
client.screen += client.void
-
+
CallHook("Login", list("client" = src.client, "mob" = src))
-
+
// Calling update_interface() in /mob/Login() causes the Cyborg to immediately be ghosted; because of winget().
// Calling it in the overriden Login, such as /mob/living/Login() doesn't cause this.
/mob/proc/update_interface()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 084ff2d3935..10157afd00a 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -844,6 +844,30 @@ var/list/slot_equipment_priority = list( \
if(istype(M,/mob/living/silicon/ai)) return
show_inv(usr)
+//this and stop_pulling really ought to be /mob/living procs
+/mob/proc/start_pulling(atom/movable/AM)
+ if ( !AM || !src || src==AM || !isturf(AM.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
+ return
+ if (!( AM.anchored ))
+ AM.add_fingerprint(src)
+
+ // If we're pulling something then drop what we're currently pulling and pull this instead.
+ if(pulling)
+ // Are we trying to pull something we are already pulling? Then just stop here, no need to continue.
+ if(AM == pulling)
+ return
+ stop_pulling()
+
+ src.pulling = AM
+ AM.pulledby = src
+ if(pullin)
+ pullin.update_icon(src)
+ if(ismob(AM))
+ var/mob/M = AM
+ if(!iscarbon(src))
+ M.LAssailant = null
+ else
+ M.LAssailant = usr
/mob/verb/stop_pulling()
@@ -853,37 +877,8 @@ var/list/slot_equipment_priority = list( \
if(pulling)
pulling.pulledby = null
pulling = null
-
-/mob/proc/start_pulling(var/atom/movable/AM)
-
- if ( !AM || !usr || src==AM || !isturf(src.loc) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
- return
-
- if (AM.anchored)
- usr << "It won't budge!"
- return
-
- var/mob/M = AM
- if(ismob(AM))
- if(!iscarbon(src))
- M.LAssailant = null
- else
- M.LAssailant = usr
-
- if(pulling)
- var/pulling_old = pulling
- stop_pulling()
- // Are we pulling the same thing twice? Just stop pulling.
- if(pulling_old == AM)
- return
-
- src.pulling = AM
- AM.pulledby = src
-
- //Attempted fix for people flying away through space when cuffed and dragged.
- if(ismob(AM))
- var/mob/pulled = AM
- pulled.inertia_dir = 0
+ if(pullin)
+ pullin.update_icon(src)
/mob/proc/can_use_hands()
return
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 37af6e961a9..4f3ad8d2d6b 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -131,6 +131,9 @@
var/datum/hud/hud_used = null
+ var/research_scanner = 0 //For research scanner equipped mobs. Enable to show research data when examining.
+ var/datum/action/scan_mode/scanner = new
+
var/list/grabbed_by = list( )
var/list/requests = list( )
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index f62186ba2f6..d8586c243c5 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -447,5 +447,27 @@
/mob/proc/mob_negates_gravity()
return 0
+/mob/proc/Move_Pulled(atom/A)
+ if (!canmove || restrained() || !pulling)
+ return
+ if (pulling.anchored)
+ return
+ if (!pulling.Adjacent(src))
+ return
+ if (A == loc && pulling.density)
+ return
+ if (!Process_Spacemove(get_dir(pulling.loc, A)))
+ return
+ if (ismob(pulling))
+ var/mob/M = pulling
+ var/atom/movable/t = M.pulling
+ M.stop_pulling()
+ step(pulling, get_dir(pulling.loc, A))
+ if(M)
+ M.start_pulling(t)
+ else
+ step(pulling, get_dir(pulling.loc, A))
+ return
+
/mob/proc/update_gravity()
return
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index da87a2b7537..9624e8fe53b 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -481,6 +481,7 @@
domutcheck(new_character)
new_character.dna.UpdateSE()
+ new_character.sync_organ_dna() //just fucking incase I guess
// Do the initial caching of the player's body icons.
new_character.force_update_limbs()
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 142f350131e..6f9e9ad1440 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -189,9 +189,9 @@ datum/preferences
return clothes_s
proc/update_preview_icon(var/for_observer=0) //seriously. This is horrendous.
- del(preview_icon_front)
- del(preview_icon_side)
- del(preview_icon)
+ qdel(preview_icon_front)
+ qdel(preview_icon_side)
+ qdel(preview_icon)
var/g = "m"
if(gender == FEMALE) g = "f"
@@ -806,8 +806,8 @@ datum/preferences
preview_icon_front = new(preview_icon, dir = SOUTH)
preview_icon_side = new(preview_icon, dir = WEST)
- del(eyes_s)
- del(underwear_s)
- del(undershirt_s)
- del(socks_s)
- del(clothes_s)
+ qdel(eyes_s)
+ qdel(underwear_s)
+ qdel(undershirt_s)
+ qdel(socks_s)
+ qdel(clothes_s)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 41e294eba58..a4aa85c0d17 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -1046,7 +1046,7 @@
src.occupier.mind.transfer_to(src.occupier.parent)
src.occupier.parent.adjustOxyLoss(src.occupier.getOxyLoss())
src.occupier.parent.cancel_camera()
- del(src.occupier) // qdel
+ qdel(src.occupier) // qdel
if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA)
for(var/obj/item/weapon/pinpointer/point in world)
for(var/datum/mind/AI_mind in ticker.mode.malf_ai)
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 247c5d5d752..081fd35e3f8 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -610,7 +610,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
if(ismob(loc)) //handle mob icon update
var/mob/M = loc
M.unEquip(src)
- qqdel(src)
+ qdel(src)
return 1
else
amount -= used
diff --git a/code/modules/power/engine.dm b/code/modules/power/engine.dm
index 614a7393d9a..1d7a97406e4 100644
--- a/code/modules/power/engine.dm
+++ b/code/modules/power/engine.dm
@@ -1,20 +1,6 @@
/turf/simulated/floor/engine/attack_hand(var/mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored)
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/atom/movable/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
+ user.Move_Pulled(src)
/turf/simulated/floor/engine/ex_act(severity)
switch(severity)
diff --git a/code/modules/power/switch.dm b/code/modules/power/switch.dm
index 2bb312c12f0..0f36d7274bf 100644
--- a/code/modules/power/switch.dm
+++ b/code/modules/power/switch.dm
@@ -80,5 +80,5 @@
else
icon_state = icon_state_off
for(var/obj/structure/cable/C in src.loc)
- del(C)
+ qdel(C)
*/
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index dbc001bb548..cbe75d884ef 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -229,12 +229,12 @@
f.hotspot_expose(1000,CELL_VOLUME)
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
//world << "deleting"
- //del(src) //Delete if it passes the world edge
+ //qdel(src) //Delete if it passes the world edge
broken = 1
return
if(kill_count < 1)
//world << "deleting"
- //del(src)
+ //qdel(src)
broken = 1
kill_count--
//world << "[x] [y]"
@@ -271,401 +271,4 @@
if(istype(target, /mob/living))
var/mob/living/M = target
M.playsound_local(src, "explosion", 50, 1)
- ..()
-
-/*
-/*
- * Use: Caches beam state images and holds turfs that had these images overlaid.
- * Structure:
- * beam_master
- * icon_states/dirs of beams
- * image for that beam
- * references for fired beams
- * icon_states/dirs for each placed beam image
- * turfs that have that icon_state/dir
- */
-var/list/beam_master = list()
-
-// Special laser the captains gun uses
-/obj/item/projectile/beam/captain
- name = "captain laser"
- damage = 40
-
-/obj/item/projectile/beam/lightning
- invisibility = 101
- name = "lightning"
- damage = 0
- icon = 'icons/obj/lightning.dmi'
- icon_state = "lightning"
- stun = 10
- weaken = 10
- stutter = 50
- eyeblur = 50
- var/tang = 0
- layer = 3
- var/turf/last = null
- kill_count = 6
-
- proc/adjustAngle(angle)
- angle = round(angle) + 45
- if(angle > 180)
- angle -= 180
- else
- angle += 180
- if(!angle)
- angle = 1
- /*if(angle < 0)
- //angle = (round(abs(get_angle(A, user))) + 45) - 90
- angle = round(angle) + 45 + 180
- else
- angle = round(angle) + 45*/
- return angle
-
- process()
- var/first = 1 //So we don't make the overlay in the same tile as the firer
- var/broke = 0
- var/broken
- var/atom/curr = current
- var/Angle=round(Get_Angle(firer,curr))
- var/icon/I=new('icons/obj/zap.dmi',"lightning")
- I.Turn(Angle)
- var/DX=(32*curr.x+curr.pixel_x)-(32*firer.x+firer.pixel_x)
- var/DY=(32*curr.y+curr.pixel_y)-(32*firer.y+firer.pixel_y)
- var/N=0
- var/length=round(sqrt((DX)**2+(DY)**2))
- var/count = 0
- for(N,N= kill_count)
- break
- count++
- var/obj/effect/overlay/beam/X=new(loc)
- X.BeamSource=src
- if(N+32>length)
- var/icon/II=new(icon,icon_state)
- II.DrawBox(null,1,(length-N),32,32)
- II.Turn(Angle)
- X.icon=II
- else X.icon=I
- var/Pixel_x=round(sin(Angle)+32*sin(Angle)*(N+16)/32)
- var/Pixel_y=round(cos(Angle)+32*cos(Angle)*(N+16)/32)
- if(DX==0) Pixel_x=0
- if(DY==0) Pixel_y=0
- if(Pixel_x>32)
- for(var/a=0, a<=Pixel_x,a+=32)
- X.x++
- Pixel_x-=32
- if(Pixel_x<-32)
- for(var/a=0, a>=Pixel_x,a-=32)
- X.x--
- Pixel_x+=32
- if(Pixel_y>32)
- for(var/a=0, a<=Pixel_y,a+=32)
- X.y++
- Pixel_y-=32
- if(Pixel_y<-32)
- for(var/a=0, a>=Pixel_y,a-=32)
- X.y--
- Pixel_y+=32
- X.pixel_x=Pixel_x
- X.pixel_y=Pixel_y
- var/turf/TT = get_turf(X.loc)
- if(TT == firer.loc)
- continue
- if(TT.density)
- del(X)
- break
- for(var/atom/O in TT)
- if(!O.CanPass(src))
- del(X)
- broke = 1
- break
- for(var/mob/living/O in TT.contents)
- if(istype(O, /mob/living))
- if(O.density)
- del(X)
- broke = 1
- break
- if(broke)
- if(X)
- del(X)
- break
- spawn
- while(src) //Move until we hit something
- if(first)
- icon = midicon
- if((!( current ) || loc == current)) //If we pass our target
- broken = 1
- icon = endicon
- tang = adjustAngle(get_angle(original,current))
- if(tang > 180)
- tang -= 180
- else
- tang += 180
- icon_state = "[tang]"
- var/turf/simulated/floor/f = current
- if(f && istype(f))
- f.break_tile()
- f.hotspot_expose(1000,CELL_VOLUME)
- if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
- //world << "deleting"
- //del(src) //Delete if it passes the world edge
- broken = 1
- return
- if(kill_count < 1)
- //world << "deleting"
- //del(src)
- broken = 1
- kill_count--
- //world << "[x] [y]"
- if(!bumped && !isturf(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- icon = endicon
- if(!broken)
- tang = adjustAngle(get_angle(original,current))
- if(tang > 180)
- tang -= 180
- else
- tang += 180
- icon_state = "[tang]"
- Bump(original)
- first = 0
- if(broken)
- //world << "breaking"
- break
- else
- last = get_turf(src.loc)
- step_towards(src, current) //Move~
- if(src.loc != current)
- tang = adjustAngle(get_angle(src.loc,current))
- icon_state = "[tang]"
- del(src)
- return
- /*cleanup(reference) //Waits .3 seconds then removes the overlay.
- //world << "setting invisibility"
- sleep(50)
- src.invisibility = 101
- return*/
- on_hit(atom/target, blocked = 0)
- if(istype(target, /mob/living))
- var/mob/living/M = target
- M.playsound_local(src, "explosion", 50, 1)
- ..()
-
-/obj/item/projectile/beam
- name = "laser"
- icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 40
- damage_type = BURN
- hitsound = 'sound/weapons/sear.ogg'
- flag = "laser"
- eyeblur = 4
- var/frequency = 1
-
- process()
- var/reference = "\ref[src]" //So we do not have to recalculate it a ton
- var/first = 1 //So we don't make the overlay in the same tile as the firer
- spawn while(src) //Move until we hit something
-
- if((!( current ) || loc == current)) //If we pass our target
- current = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z)
- if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
- del(src) //Delete if it passes the world edge
- return
- step_towards(src, current) //Move~
-
- if(kill_count < 1)
- del(src)
- return
- kill_count--
-
- if(!bumped && !isturf(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- Bump(original)
-
- if(!first) //Add the overlay as we pass over tiles
- var/target_dir = get_dir(src, current) //So we don't call this too much
-
- //If the icon has not been added yet
- if( !("[icon_state][target_dir]" in beam_master) )
- var/image/I = image(icon,icon_state,10,target_dir) //Generate it.
- beam_master["[icon_state][target_dir]"] = I //And cache it!
-
- //Finally add the overlay
- src.loc.overlays += beam_master["[icon_state][target_dir]"]
-
- //Add the turf to a list in the beam master so they can be cleaned up easily.
- if(reference in beam_master)
- var/list/turf_master = beam_master[reference]
- if("[icon_state][target_dir]" in turf_master)
- var/list/turfs = turf_master["[icon_state][target_dir]"]
- turfs += loc
- else
- turf_master["[icon_state][target_dir]"] = list(loc)
- else
- var/list/turfs = list()
- turfs["[icon_state][target_dir]"] = list(loc)
- beam_master[reference] = turfs
- else
- first = 0
- cleanup(reference)
- return
- dumbfire(var/dir)
- var/reference = "\ref[src]" //So we do not have to recalculate it a ton
- var/first = 1 //So we don't make the overlay in the same tile as the firer
- if(!dir)
- del(src)
- spawn while(src) //Move until we hit something
- if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
- del(src) //Delete if it passes the world edge
- return
- var/turf/T = get_step(src, dir)
- step_towards(src, T) //Move~
-
- if(kill_count < 1)
- del(src)
- kill_count--
-
- if(!bumped && !isturf(original))
- if(loc == get_turf(original))
- if(!(original in permutated))
- Bump(original)
-
- if(!first) //Add the overlay as we pass over tiles
- var/target_dir = dir //So we don't call this too much
-
- //If the icon has not been added yet
- if( !("[icon_state][target_dir]" in beam_master) )
- var/image/I = image(icon,icon_state,10,target_dir) //Generate it.
- beam_master["[icon_state][target_dir]"] = I //And cache it!
-
- //Finally add the overlay
- src.loc.overlays += beam_master["[icon_state][target_dir]"]
-
- //Add the turf to a list in the beam master so they can be cleaned up easily.
- if(reference in beam_master)
- var/list/turf_master = beam_master[reference]
- if("[icon_state][target_dir]" in turf_master)
- var/list/turfs = turf_master["[icon_state][target_dir]"]
- turfs += loc
- else
- turf_master["[icon_state][target_dir]"] = list(loc)
- else
- var/list/turfs = list()
- turfs["[icon_state][target_dir]"] = list(loc)
- beam_master[reference] = turfs
- else
- first = 0
- cleanup(reference)
- return
-
- proc/cleanup(reference) //Waits .3 seconds then removes the overlay.
- src = null // Redundant.
- spawn(3)
- var/list/turf_master = beam_master[reference]
- for(var/laser_state in turf_master)
- var/list/turfs = turf_master[laser_state]
- for(var/turf/T in turfs)
- T.overlays -= beam_master[laser_state]
- return
-
-/obj/item/projectile/beam/practice
- name = "laser"
- icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
- eyeblur = 2
-
-//Heavy lasers now deal slightly more damage, but have a slower firing rate; overall DPS still identical to lasers.
-/obj/item/projectile/beam/heavylaser
- name = "heavy laser"
- icon_state = "heavylaser"
- damage = 50
-
-/obj/item/projectile/beam/xray
- name = "xray beam"
- icon_state = "xray"
- damage = 15
- irradiate = 30
- kill_count = 50
-
-
-/obj/item/projectile/beam/pulse
- name = "pulse"
- icon_state = "u_laser"
- damage = 50
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target,/turf/)||istype(target,/obj/structure/))
- target.ex_act(2)
- ..()
-
-
-/obj/item/projectile/beam/deathlaser
- name = "death laser"
- icon_state = "heavylaser"
- damage = 60
-
-/obj/item/projectile/beam/emitter
- name = "emitter beam"
- icon_state = "emitter"
- damage = 30
-
-
-/obj/item/projectile/beam/lastertag/blue
- name = "lasertag beam"
- icon_state = "bluelaser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
-
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/M = target
- if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
- M.Weaken(5)
- return 1
-
-/obj/item/projectile/beam/lastertag/red
- name = "lasertag beam"
- icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
-
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/M = target
- if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
- M.Weaken(5)
- return 1
-
-/obj/item/projectile/beam/lastertag/omni//A laser tag bolt that stuns EVERYONE
- name = "lasertag beam"
- icon_state = "omnilaser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- damage = 0
- damage_type = BURN
- flag = "laser"
-
- on_hit(var/atom/target, var/blocked = 0)
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/M = target
- if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag)))
- M.Weaken(5)
- return 1
-
-
-/obj/item/projectile/beam/stun
- name = "stun beam"
- icon_state = "stun"
- nodamage = 1
- damage = 0
- agony = 40
- damage_type = HALLOSS
-*/
\ No newline at end of file
+ ..()
\ No newline at end of file
diff --git a/code/modules/projectiles/targeting.dm b/code/modules/projectiles/targeting.dm
index 5b4811a0486..3ef440f6f2e 100644
--- a/code/modules/projectiles/targeting.dm
+++ b/code/modules/projectiles/targeting.dm
@@ -288,7 +288,7 @@ client/verb/ToggleGunMode()
else
usr << "Target may no longer move."
target_can_run = 0
- del(usr.gun_run_icon) //no need for icon for running permission
+ qdel(usr.gun_run_icon) //no need for icon for running permission
//Updating walking permission button
if(usr.gun_move_icon)
diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm
index 7b9833e78fd..943c5022dc4 100644
--- a/code/modules/reagents/reagent_containers/food/sandwich.dm
+++ b/code/modules/reagents/reagent_containers/food/sandwich.dm
@@ -5,7 +5,7 @@
if(istype(W,/obj/item/weapon/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/csandwich/S = new(get_turf(src))
S.attackby(W,user, params)
- del(src)
+ qdel(src)
..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich
@@ -77,7 +77,7 @@
/obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy()
for(var/obj/item/O in ingredients)
- del(O)
+ qdel(O)
return ..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user)
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 6f12c03c6a8..4213eb145ce 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -1686,7 +1686,7 @@
surprise.icon_state = ook.icon_state
surprise.name = "malformed [ook.name]"
surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life."
- del(ook) //rip nullspace monkey
+ qdel(ook) //rip nullspace monkey
surprise.transform *= 0.6
surprise.add_blood(M)
var/mob/living/carbon/human/H = M
diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm
index d736b89ce4c..c4ba69dc71a 100644
--- a/code/modules/recycling/conveyor2.dm
+++ b/code/modules/recycling/conveyor2.dm
@@ -124,21 +124,7 @@
// attack with hand, move pulled object onto conveyor
/obj/machinery/conveyor/attack_hand(mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored)
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- user.stop_pulling()
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- user.stop_pulling()
- return
+ user.Move_Pulled(src)
// make the conveyor broken
diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm
index 330098a2383..87f4db7e1f0 100644
--- a/code/modules/research/designs/equipment_designs.dm
+++ b/code/modules/research/designs/equipment_designs.dm
@@ -10,7 +10,7 @@
materials = list(MAT_METAL = 1000, MAT_GLASS = 500, MAT_PLASMA = 1500, MAT_URANIUM = 200)
build_path = /obj/item/weapon/weldingtool/experimental
category = list("Equipment")
-
+
/datum/design/health_hud
name = "Health Scanner HUD"
desc = "A heads-up display that scans the humans in view and provides accurate data about their health status."
@@ -120,4 +120,24 @@
materials = list(MAT_METAL = 6000, MAT_GLASS = 2000)
build_path = /obj/item/device/detective_scanner
locked = 1 //no validhunting scientists.
+ category = list("Equipment")
+
+/datum/design/sci_goggles
+ name = "Science Goggles"
+ desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
+ id = "scigoggles"
+ req_tech = list("materials" = 3, "magnets" = 3, "engineering" = 2)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 250, MAT_GLASS = 300)
+ build_path = /obj/item/clothing/glasses/science
+ category = list("Equipment")
+
+/datum/design/nv_sci_goggles
+ name = "Night Vision Science Goggles"
+ desc = "Like Science google, but works in darkness."
+ id = "nvscigoggles"
+ req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 250, MAT_GLASS = 300, MAT_PLASMA = 250, MAT_URANIUM = 1000)
+ build_path = /obj/item/clothing/glasses/science
category = list("Equipment")
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 9072217e4f7..f0e7a0ddf69 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -54,7 +54,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/selected_category
var/list/datum/design/matching_designs = list() //for the search function
-/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID.
+/proc/CallTechName(ID) //A simple helper proc to find the name of a tech with a given ID.
var/datum/tech/check_tech
var/return_name = null
for(var/T in subtypesof(/datum/tech))
@@ -68,7 +68,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
return return_name
-/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID)
+proc/CallMaterialName(ID)
var/datum/reagent/temp_reagent
var/return_name = null
if (copytext(ID, 1, 2) == "$")
@@ -183,7 +183,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole/Topic(href, href_list)
if(..())
return 1
-
+
if(!allowed(usr) && !isobserver(usr))
return 1
@@ -1115,7 +1115,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += ""
return dat
-
+
/obj/machinery/computer/rdconsole/core
name = "Core R&D Console"
desc = "A console used to interface with R&D tools."
@@ -1126,7 +1126,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
desc = "A console used to interface with R&D tools."
id = 2
req_access = list(access_robotics)
-
+
/obj/machinery/computer/rdconsole/experiment
name = "E.X.P.E.R.I-MENTOR R&D Console"
desc = "A console used to interface with R&D tools."
@@ -1137,4 +1137,3 @@ won't update every console in existence) but it's more of a hassle to do. Also,
desc = "A console used to interface with R&D tools."
id = 4
req_access = list(access_mechanic)
-
\ No newline at end of file
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm
index 0215c67e520..817baf70e16 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm
@@ -99,7 +99,7 @@
//failure
user.visible_message("[src] suddenly crumbles away.",\
"\red [src] has disintegrated under your onslaught, any secrets it was holding are long gone.")
- del(src)
+ qdel(src)
return
if(prob(excavation_level))
@@ -115,4 +115,4 @@
else
user.visible_message("[src] suddenly crumbles away.",\
"\blue [src] has been whittled away under your careful excavation, but there was nothing of interest inside.")
- del(src)
+ qdel(src)
diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm
index e076eedd2bd..82848156023 100644
--- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm
+++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_forcefield.dm
@@ -13,7 +13,7 @@
if(created_field.len)
for(var/obj/effect/energy_field/F in created_field)
created_field.Remove(F)
- del F
+ qdel(F)
else if(holder)
var/turf/T = get_turf(holder)
while(created_field.len < 16)
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index fd17ebd5e25..01ce550c045 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -57,7 +57,7 @@
else
for(var/mob/M in viewers(world.view, user))
M.show_message("[src] burns away into nothing.",1)
- del(src)
+ qdel(src)
w.remove_fuel(4)
else
for(var/mob/M in viewers(world.view, user))
@@ -73,7 +73,7 @@
..()
if(prob(33))
src.visible_message("[src] crumbles away, leaving some dust and gravel behind.")
- del(src)
+ qdel(src)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Archaeological finds
@@ -547,7 +547,7 @@
talking_atom.holder_atom = new_item
talking_atom.init()
- del(src)
+ qdel(src)
else if(talkative)
src.talking_atom = new()
diff --git a/code/modules/research/xenoarchaeology/finds/finds_fossils.dm b/code/modules/research/xenoarchaeology/finds/finds_fossils.dm
index 8338de5a3ae..a619325d941 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_fossils.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_fossils.dm
@@ -17,7 +17,7 @@
var/turf/T = get_turf(src)
if(istype(T, /turf/simulated/mineral))
T:last_find = W
- del src
+ qdel(src)
/obj/item/weapon/fossil/bone
name = "Fossilised bone"
@@ -40,8 +40,8 @@
var/b = new src.type
o.contents.Add(a)
o.contents.Add(b)
- del W
- del src
+ qdel(W)
+ qdel(src)
/obj/skeleton
name = "Incomplete skeleton"
@@ -62,7 +62,7 @@
if(!bstate)
bnum++
src.contents.Add(new/obj/item/weapon/fossil/bone)
- del W
+ qdel(W)
if(bnum==breq)
usr = user
icon_state = "skel"
diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm
index 43c9bcef812..a4421aa3e61 100644
--- a/code/modules/research/xenoarchaeology/master_controller.dm
+++ b/code/modules/research/xenoarchaeology/master_controller.dm
@@ -108,7 +108,7 @@ datum/controller/game_controller/proc/SetupXenoarch()
if(!genome_prefixes)
genome_prefixes = alphabet_uppercase.Copy()
if(!genome_prefixes.len)
- del genome_prefixes
+ qdel(genome_prefixes)
genome_prefixes = alphabet_uppercase.Copy()
//create animal gene sequences
diff --git a/code/modules/scripting/Parser/Keywords.dm b/code/modules/scripting/Parser/Keywords.dm
index bdd33d8bda0..e39ee506857 100644
--- a/code/modules/scripting/Parser/Keywords.dm
+++ b/code/modules/scripting/Parser/Keywords.dm
@@ -46,7 +46,7 @@ var/const/Represents a special statement in the code triggered by a keyword.
nS_Keyword
New(inline=0)
if(inline)
- del src
+ del(src)
kwReturn
Parse(n_Parser/nS_Parser/parser)
diff --git a/code/modules/vehicle/train/trains/ambulance.dm b/code/modules/vehicle/train/trains/ambulance.dm
index fea50fba521..f7094f10ad8 100644
--- a/code/modules/vehicle/train/trains/ambulance.dm
+++ b/code/modules/vehicle/train/trains/ambulance.dm
@@ -33,7 +33,6 @@
/obj/vehicle/train/ambulance/engine/New()
..()
cell = new /obj/item/weapon/stock_parts/cell/high
- verbs -= /atom/movable/verb/pull
key = new()
/obj/vehicle/train/ambulance/engine/Move()
diff --git a/code/modules/vehicle/train/trains/cargo/cargo_train.dm b/code/modules/vehicle/train/trains/cargo/cargo_train.dm
index 338432fabad..5933ada33d5 100644
--- a/code/modules/vehicle/train/trains/cargo/cargo_train.dm
+++ b/code/modules/vehicle/train/trains/cargo/cargo_train.dm
@@ -41,7 +41,6 @@
/obj/vehicle/train/cargo/engine/New()
..()
cell = new /obj/item/weapon/stock_parts/cell/high
- verbs -= /atom/movable/verb/pull
key = new()
var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
overlays += I
@@ -279,10 +278,5 @@
if(!lead && !tow)
anchored = 0
- if(verbs.Find(/atom/movable/verb/pull))
- return
- else
- verbs += /atom/movable/verb/pull
else
- anchored = 1
- verbs -= /atom/movable/verb/pull
+ anchored = 1
\ No newline at end of file
diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi
index b9602a93b1d..ca86e3b6814 100644
Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ
diff --git a/icons/mob/corgi_back.dmi b/icons/mob/corgi_back.dmi
index a8871a76d49..ffc5e9428db 100644
Binary files a/icons/mob/corgi_back.dmi and b/icons/mob/corgi_back.dmi differ
diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi
index 93a789b08f7..8c48077682e 100644
Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ
diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi
index 38fc4dd06be..b6a84df335a 100644
Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ
diff --git a/icons/mob/screen1_Midnight.dmi b/icons/mob/screen1_Midnight.dmi
index 89723dc9363..808734a832e 100644
Binary files a/icons/mob/screen1_Midnight.dmi and b/icons/mob/screen1_Midnight.dmi differ
diff --git a/icons/mob/screen1_NinjaHUD.dmi b/icons/mob/screen1_NinjaHUD.dmi
index d4f554a0aa4..bbbf743533e 100644
Binary files a/icons/mob/screen1_NinjaHUD.dmi and b/icons/mob/screen1_NinjaHUD.dmi differ
diff --git a/icons/mob/screen1_Orange.dmi b/icons/mob/screen1_Orange.dmi
index bda7f98857b..15964ad65d0 100644
Binary files a/icons/mob/screen1_Orange.dmi and b/icons/mob/screen1_Orange.dmi differ
diff --git a/icons/mob/screen1_Vampire.dmi b/icons/mob/screen1_Vampire.dmi
index a5026a36fa2..6a30aa697d8 100644
Binary files a/icons/mob/screen1_Vampire.dmi and b/icons/mob/screen1_Vampire.dmi differ
diff --git a/icons/mob/screen1_White.dmi b/icons/mob/screen1_White.dmi
index b96463eee2b..b474f443445 100644
Binary files a/icons/mob/screen1_White.dmi and b/icons/mob/screen1_White.dmi differ
diff --git a/icons/mob/screen1_corgi.dmi b/icons/mob/screen1_corgi.dmi
index cfe8f62efa5..dafa9ae2b44 100644
Binary files a/icons/mob/screen1_corgi.dmi and b/icons/mob/screen1_corgi.dmi differ
diff --git a/icons/mob/screen1_old.dmi b/icons/mob/screen1_old.dmi
index 51dce681bf7..7da629f1dae 100644
Binary files a/icons/mob/screen1_old.dmi and b/icons/mob/screen1_old.dmi differ
diff --git a/icons/mob/screen1_robot.dmi b/icons/mob/screen1_robot.dmi
index cc2051ee1ce..9188e33ff5f 100644
Binary files a/icons/mob/screen1_robot.dmi and b/icons/mob/screen1_robot.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index 2df0cf5540e..c41b8e60053 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 23a5692e6fa..c0f00167daf 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -248,7 +248,6 @@
#include "code\defines\procs\hud.dm"
#include "code\defines\procs\radio.dm"
#include "code\defines\procs\records.dm"
-#include "code\defines\procs\sd_Alert.dm"
#include "code\defines\procs\statistics.dm"
#include "code\game\asteroid.dm"
#include "code\game\atoms.dm"
@@ -883,7 +882,6 @@
#include "code\game\vehicles\spacepods\parts.dm"
#include "code\game\vehicles\spacepods\pod_fabricator.dm"
#include "code\game\vehicles\spacepods\spacepod.dm"
-#include "code\game\verbs\atom_verbs.dm"
#include "code\game\verbs\ooc.dm"
#include "code\game\verbs\suicide.dm"
#include "code\game\verbs\who.dm"