diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm
index c31dcabcfde..b3ab2b62556 100644
--- a/_maps/map_files/RandomZLevels/academy.dmm
+++ b/_maps/map_files/RandomZLevels/academy.dmm
@@ -33,7 +33,7 @@
"aG" = (/obj/structure/safe/floor,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"aI" = (/obj/structure/table/reinforced,/obj/item/device/laser_pointer/upgraded,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
-"aJ" = (/obj/structure/cult/tome,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aJ" = (/obj/structure/cult/tome,/obj/item/weapon/twohanded/staff,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aK" = (/obj/structure/stool/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aL" = (/obj/item/clothing/suit/space/rig/wizard,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aM" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/briefcase,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
@@ -51,7 +51,7 @@
"aY" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"aZ" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"ba" = (/obj/structure/table/woodentable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
-"bb" = (/obj/structure/table/woodentable,/obj/item/weapon/staff,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bb" = (/obj/structure/table/woodentable,/obj/item/weapon/twohanded/staff,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"bc" = (/obj/structure/table/woodentable,/obj/item/weapon/hand_labeler,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"bd" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/invisible,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"be" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
@@ -111,7 +111,7 @@
"cg" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
"ch" = (/obj/structure/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
"ci" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
-"cj" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"cj" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"ck" = (/obj/machinery/door/airlock/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"cl" = (/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"cm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
@@ -225,7 +225,7 @@
"eq" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
"er" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"es" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/classrooms)
-"et" = (/obj/machinery/singularity/academy,/turf/space,/area/space)
+"et" = (/obj/singularity/academy,/turf/space,/area/space)
"eu" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/classrooms)
"ev" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
"ew" = (/obj/structure/mineral_door/wood,/turf/simulated/floor,/area/awaymission/academy/classrooms)
@@ -409,13 +409,13 @@
"hS" = (/obj/structure/closet,/obj/item/clothing/under/color/lightpurple,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"hT" = (/obj/structure/closet,/obj/item/weapon/lipstick/random,/obj/item/clothing/under/schoolgirl,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"hU" = (/turf/simulated/floor/wood,/area/awaymission/academy/academyaft)
-"hV" = (/obj/structure/closet,/obj/item/clothing/under/color/lightpurple,/obj/item/weapon/staff,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"hV" = (/obj/structure/closet,/obj/item/clothing/under/color/lightpurple,/obj/item/weapon/twohanded/staff,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"hW" = (/obj/structure/closet,/obj/item/weapon/storage/wallet/random,/obj/item/clothing/glasses/regular/hipster,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"hX" = (/obj/structure/closet,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/suit/wizrobe/fake,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"hY" = (/obj/structure/closet,/obj/item/clothing/under/color/purple,/obj/item/weapon/contraband/poster,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"hZ" = (/obj/structure/closet,/obj/item/weapon/storage/box/snappops,/obj/item/weapon/storage/backpack,/obj/item/weapon/paper{info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutilage."; name = "Pyromancy Evaluation"},/turf/simulated/floor,/area/awaymission/academy/academyaft)
"ia" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
-"ib" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"ib" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"ic" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/awaymission/academy/academyaft)
"id" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
"ie" = (/obj/structure/rack,/obj/item/stack/sheet/mineral/plasma{amount = 50},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 877376d69d8..3cb44516044 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -4948,7 +4948,7 @@
"bRh" = (/obj/machinery/atmospherics/portables_connector{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen{name = "Canister: \[O2] (CRYO)"},/turf/simulated/floor,/area/medical/cryo)
"bRi" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 1},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo)
"bRj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/medical/genetics_cloning)
-"bRk" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
+"bRk" = (/obj/machinery/clonepod/biomass,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bRl" = (/obj/machinery/computer/cloning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bRm" = (/obj/machinery/dna_scannernew,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bRn" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics)
@@ -5937,6 +5937,7 @@
"cki" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech)
"ckj" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech)
"ckk" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/rdconsole{pixel_x = -4},/obj/item/weapon/circuitboard/rdserver{pixel_x = 4; pixel_y = -2},/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe{pixel_x = -2; pixel_y = 3},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/circuitboard/circuit_imprinter{pixel_x = -4; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
+"ckl" = (/obj/machinery/clonepod/biomass,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"ckm" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/message_monitor{pixel_y = -5},/obj/item/weapon/circuitboard/arcade/battle,/obj/item/weapon/circuitboard/arcade/orion_trail{pixel_x = -4; pixel_y = 2},/turf/simulated/floor/plating,/area/storage/tech)
"ckn" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor/plating,/area/storage/tech)
"cko" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
@@ -7249,7 +7250,6 @@
"cMB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
"cMC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
"cME" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
-"cMG" = (/obj/machinery/clonepod{biomass = 150},/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cMH" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/toxins/xenobiology)
"cMI" = (/turf/simulated/floor/plating/airless,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/solar/port)
"cMJ" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
@@ -8142,7 +8142,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaczaczakSaabaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabbCxcCYcCYcCYcCYcHWcHXcHYceHcZVceHceHcEDcIaceHcEEbYRcaecGTcajbGIcamcIhcIicIjbGRcIlcImcIncIocIpbGRcIrcIscItcIucIvcIwcIxcIycIzcIAcGjcIBcICcIDcIEcIFcIGcIHcIIcIJcIKcILcIMbGVcDKcDLcIPcIOcIOcCDaaaaaaaabcDQcIQcFccIRcDRbIxbIxbIxbIxcDRcIVcIWcIXcIYcIZcJacJbcIYbIBaaacDPcjIcjIcjIcjIcjIcJdcqacJecyMcJfcyMcJgcyMcJhcyMcJibGHaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmaaaaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaaaaaacyYcHUczaaabcyYcHUczaaaacyYcHUczaaaaaaaaaaaabaaaaaaaaaaaaaabaabaabaaaaaaaabaabcJncJncJncJncJncJncJncJocJncJncEEcJpcJqcGTcajbGIbICbGIbJhcJvcDocJwcJxcFZcJycJzcDocJAcDucDrcJBcJCcJDcIxcJEcJFcJGcJHcJIcJJcJKcJHcJLcJMcJNcJOcDAcJPcJQcJRbJCaabcEYcJUcJTcJVcCDaaaaaaaaacDQcDRcJWcJXcDRcJYcJZcKacKbciIcFccKdcKecIYbJEcKgcKhcKibIBaabaaaaaaaaaaaaaaacjIcKkcKlcKmcKncKocKpcKqcKrcKocKpcKscjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycKzaabamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaaacyYcHUczaaabaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaabaabaabcJncKAcKAcKBcKCcKDcKDcKEcKFcKFcKHcIdcIecGTcajcGTcKIcGTcGTcGTcDocKJbJVcKLbJWbJXcKOcKPcaCcKRbKhbKhbKhcKVcKWcKXcKYcKZcLacHncCscLbcLccLdcLecLfcDAcJPcLgcLhbKMcLjcDLcLkcIOcIOcCDaabaaaaaacHxcjkcLmcLncjVcLpcLqcLpcLpcLrcLscLtcLucLubLscLwcLxcLybLtaabaabaaaaaaaaaaaacjIcLAcLBbLucvWbLEcLEbLUcvWbLVcLHbLWcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaaacLJcLJcLJcLJcLJaabamjaaaaaaaaaaaacJmaaaaaacJmaaaaaacJmcJmcJmcJmcJmcJmcJmaaaaaacJmaaaaaacJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcaDcEEbYVcLOcLPcaEcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdbUJbNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcMGcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaabcyYcHUczaaaacyYcHUczaaabcyYcHUczaaabaabaabaaaaabaaaaaaaabaabaaaaaaaaaaabaaaaaacJncKAcKAcKBcLKcLKcLKcLLcLLcaDcEEbYVcLOcLPcaEcLRcLScLTcLUcLUcLVcLWcLXcGTcGTcGTcLYcLZcMacMbcMccMdbUJbNdcMgcEEcMhcMhcMicHncCscMjcMkcMlcMmcMncDAcMocMpcMqbNgcMscCDcCDcCDcCDcCDaaaaaaaaacDQcMtcMucMvcMwcMxcMycMxcMxcMzcMAcMBcMCcLybNlcMEcKhcIYbNqaabaabaaaaaaaaaaaacjIcklcxtcxtcvWcMHcxtcxtcvWcMHcxtcxtcjIaaaaaaaaaaaaamjaaaaabaaaaabaabaabaaacJlaaaaabaaaaabaaaaabaaaamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaalwaabcyYcMIczaaaacyYcMIczaaaacyYcMIczaaabakSaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaabcJncMJcMKcLKcLKcLKcMLcMMcMMcMMcMMcMMcMMcMMcbncbpcbocbXcMScMScMScMTcMUcMVcMScMScMScMUcMWcMXcMYcMdbUKbNdcMgcNbcNccNdcNecNfcNgcNhcNicLfcNjcNkcNlcNmcNncNobGVcNpcDLcNqcNrcNrcCDaaaaaaaaacDQckecNtcNucNvcNwcNxcNycIYcNzcNAcNBcNCcNDbJEcNFcNGcNHbNqaaaaaaaaaaaaaaaaaacjIcNJbTXcxtcvWcNKbTXcxtcvWcNKbTXcxtcjIaaaaaaaaaaaaamjaaacJkcJkcJkcJkcJkaabcJlaabcJkcJkcJkcJkcJkaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaakSaaaaabaaaaaaaaaaabaabaabaaaaaaaabaabaaaakSaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaabcJncNLcLKcLKcLKcLKcLKcMMcNMcbZcNOcNPcNQcMMccacNScNTcJqcGTcGTcNUcNVbNtbNucNYbNvbNvcObcEEcOccMYcMdbULbNdccdcEEcOfcMhcOgcOhcDAcNhcNicOicDAcNkcNlcJPcJQcOjbJCcOkcEYcOlcOmcOncCDaaaaaaaaacOobNwbNwbNwbNwcOscOscOtcOubJEbJEbNxbSSbJEcOzcOzbTicOAcOzaaaaaaaaaaaaaaaaaacjIcxtcxtcxtcvWcOBcxtcxtcvWcOBcxtcxtcjIaaaaaaaaaaaaamjaabcKtcKucKucKucKucKvcKwcKxcKycKycKycKycOCaabamjaaaaaaaaaaaacJmcJmcJmcJmaaacJmcJmcJmcJmcJmcJmcJmcJmcJmaaacJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxKcxKcxKcxKcxKcxKcxKcxKcxKaaaaaaaaaaaaaaaaaaaczaczakSaczaczalwakSakSakSakSaczakSakSaczcODaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJncOEcLLcOFcOGcOHcOIcMMcOJcedceccOMcONcOOceecfMcfachFcGTcOScOTcOUcOVcOWcOXcOYcOZcPacPbcNTcJqcPccPdcMbcidcEEcPfcMhcPgcPhcDAcNhcNicLfcDAcPicNlcJPcPjcPkbKMcPlcDLcPmcNrcNrcCDaaaaaaaaacPnaaaaaaaaaaaaaaaaaacDQcPocIYcIYcPpcPqcPrcOzaacbTpbTqcPuaaaaaaaaaaaaaaaaaacjIcjIcjIcjIcjIcjIcjIcjIcjIcPvcPvcPvcjIaaaaaaaaaaaaamjaabcLJcLJcLJcLJcLJaaacJlaabcLJcLJcLJcLJcLJaaaamjaaaaaaaaaaaacJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmcJmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index a2071b28385..4a5b588a629 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -145,4 +145,5 @@
#define FOR_DVIEW(type, range, center, invis_flags) \
dview_mob.loc = center; \
dview_mob.see_invisible = invis_flags; \
- for(type in view(range, dview_mob))
\ No newline at end of file
+ for(type in view(range, dview_mob))
+#define END_FOR_DVIEW dview_mob.loc = null
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index d457ae4e3df..0574ede3c79 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -38,7 +38,6 @@
// spawn(15)
power_change() // all machines set to current power level, also updates lighting icon
-
/area/proc/poweralert(var/state, var/obj/source as obj)
if (state != poweralm)
poweralm = state
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 81be2a537b2..7239061a61d 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -57,27 +57,27 @@
/obj/machinery/dna_scannernew/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/clonescanner(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/clonescanner(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/dna_scannernew/upgraded/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/clonescanner(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/clonescanner(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
-
+
/obj/machinery/dna_scannernew/RefreshParts()
scan_level = 0
damage_coeff = 0
diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm
index 7ef2121d7c3..caaf37f084c 100644
--- a/code/game/gamemodes/newobjective.dm
+++ b/code/game/gamemodes/newobjective.dm
@@ -841,7 +841,7 @@ datum
return 2
diamond_drill
- steal_target = /obj/item/weapon/pickaxe/diamonddrill
+ steal_target = /obj/item/weapon/pickaxe/drill/diamonddrill
explanation_text = "Steal a diamond drill."
weight = 20
diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm
index c063ed0bd9b..fd648b05c7d 100644
--- a/code/game/gamemodes/steal_items.dm
+++ b/code/game/gamemodes/steal_items.dm
@@ -212,7 +212,7 @@ datum/theft_objective/ai/check_special_completion(var/obj/item/device/aicard/C)
/datum/theft_objective/special/diamond_drill
name = "diamond drill"
- typepath = /obj/item/weapon/pickaxe/diamonddrill
+ typepath = /obj/item/weapon/pickaxe/drill/diamonddrill
/datum/theft_objective/special/boh
name = "bag of holding"
diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm
index 3c9d02f0f2e..86ec3c9d9bc 100644
--- a/code/game/machinery/Freezer.dm
+++ b/code/game/machinery/Freezer.dm
@@ -13,25 +13,25 @@
..()
initialize_directions = dir
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/thermomachine(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/thermomachine(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/atmospherics/unary/cold_sink/freezer/upgraded/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/thermomachine(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/thermomachine(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/atmospherics/unary/cold_sink/freezer/RefreshParts()
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 9943e446f8c..45931d44b89 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -29,10 +29,10 @@
/obj/machinery/sleep_console/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/sleep_console(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 2)
+ component_parts += new /obj/item/weapon/circuitboard/sleep_console(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 2)
RefreshParts()
findsleeper()
@@ -231,28 +231,28 @@
/obj/machinery/sleeper/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/sleeper(src)
+ component_parts += new /obj/item/weapon/circuitboard/sleeper(null)
// Customizable bin rating, used by the labor camp to stop people filling themselves with chemicals and escaping.
- var/obj/item/weapon/stock_parts/matter_bin/B = new(src)
+ var/obj/item/weapon/stock_parts/matter_bin/B = new(null)
B.rating = initial_bin_rating
component_parts += B
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/sleeper/upgraded/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/sleeper(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/sleeper(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/sleeper/RefreshParts()
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index f3090cdfb67..a02e47faa8d 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -22,11 +22,21 @@
/obj/machinery/bodyscanner/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/bodyscanner(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 2)
+ component_parts += new /obj/item/weapon/circuitboard/bodyscanner(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 2)
+ RefreshParts()
+
+/obj/machinery/bodyscanner/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/bodyscanner(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 2)
RefreshParts()
/obj/machinery/bodyscanner/RefreshParts()
@@ -261,10 +271,10 @@
/obj/machinery/body_scanconsole/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/bodyscanner_console(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 2)
+ component_parts += new /obj/item/weapon/circuitboard/bodyscanner_console(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 2)
RefreshParts()
findscanner()
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index ea0f169dffa..c36c8ad20ca 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -16,15 +16,25 @@
var/productivity = 0
/obj/machinery/biogenerator/New()
- ..()
- create_reagents(1000)
- component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/biogenerator(null)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
- component_parts += new /obj/item/stack/cable_coil(null, 1)
- RefreshParts()
+ ..()
+ create_reagents(1000)
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/biogenerator(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ RefreshParts()
+
+/obj/machinery/biogenerator/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/biogenerator(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ RefreshParts()
/obj/machinery/biogenerator/RefreshParts()
var/E = 0
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index ff6eccaa2a6..49e9cc299fe 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -20,7 +20,7 @@
var/mess = 0 //Need to clean out it if it's full of exploded clone.
var/attempting = 0 //One clone attempt at a time thanks
var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk
- var/biomass = CLONE_BIOMASS // * 3 - N3X
+ var/biomass = 0
var/speed_coeff
var/efficiency
@@ -31,32 +31,42 @@
set_light(2)
else
set_light(0)
+
+/obj/machinery/clonepod/biomass
+ biomass = CLONE_BIOMASS
/obj/machinery/clonepod/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/clonepod(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/clonepod(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
-
+ update_icon()
+
/obj/machinery/clonepod/upgraded/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/clonepod(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/clonepod(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ biomass = CLONE_BIOMASS
RefreshParts()
+
+/obj/machinery/clonepod/Destroy()
+ if(connected)
+ connected.pods -= src
+ ..()
/obj/machinery/clonepod/RefreshParts()
speed_coeff = 0
@@ -219,7 +229,6 @@
R.dna.real_name = "clone ([rand(0,999)])"
H.real_name = R.dna.real_name
- src.icon_state = "pod_1"
//Get the clone body ready
H.adjustCloneLoss(190) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
H.adjustBrainLoss(90) // The rand(10, 30) will come out as extra brain damage
@@ -271,6 +280,8 @@
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") */
H.set_species(R.dna.species)
+
+ update_icon()
for(var/datum/language/L in R.languages)
H.add_language(L.name)
@@ -324,8 +335,6 @@
src.occupant = null
if (src.locked)
src.locked = 0
- if (!src.mess && !panel_open)
- icon_state = "pod_0"
//use_power(200)
return
@@ -347,6 +356,7 @@
if(panel_open)
default_deconstruction_crowbar(W)
return
+
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (!src.check_access(W))
user << "\red Access Denied."
@@ -359,13 +369,6 @@
else
src.locked = 0
user << "System unlocked."
- else if (istype(W, /obj/item/weapon/card/emag))
- if (isnull(src.occupant))
- return
- user << "You force an emergency ejection."
- src.locked = 0
- src.go_out()
- return
//Removing cloning pod biomass
else if (istype(W, /obj/item/weapon/reagent_containers/food/snacks/meat))
@@ -380,7 +383,7 @@
else
if(src.anchored)
src.anchored = 0
- connected.pod1 = null
+ connected.pods -= src
connected = null
else
src.anchored = 1
@@ -389,8 +392,21 @@
user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.")
else
user.visible_message("[user] unsecures [src] from the floor.", "You unsecure [src] from the floor.")
+ else if(istype(W, /obj/item/device/multitool))
+ var/obj/item/device/multitool/M = W
+ M.buffer = src
+ user << "You load connection data from [src] to [M]."
+ return
else
..()
+
+/obj/machinery/clonepod/emag_act(user as mob)
+ if (isnull(src.occupant))
+ return
+ user << "You force an emergency ejection."
+ src.locked = 0
+ src.go_out()
+ return
//Put messages in the connected computer's temp var for display.
/obj/machinery/clonepod/proc/connected_message(var/message)
@@ -399,7 +415,7 @@
if (!message)
return 0
- src.connected.temp = message
+ src.connected.temp = "[name] : [message]"
src.connected.updateUsrDialog()
return 1
@@ -420,12 +436,7 @@
if (src.mess) //Clean that mess and dump those gibs!
src.mess = 0
gibs(src.loc)
- src.icon_state = "pod_0"
-
- /*
- for(var/obj/O in src)
- O.loc = src.loc
- */
+ update_icon()
return
if (!(src.occupant))
@@ -435,31 +446,34 @@
if (src.locked)
user << "The cloning pod is locked!"
return
- /*
- for(var/obj/O in src)
- O.loc = src.loc
- */
if (src.occupant.client)
src.occupant.client.eye = src.occupant.client.mob
src.occupant.client.perspective = MOB_PERSPECTIVE
src.occupant.loc = src.loc
- src.icon_state = "pod_0"
src.eject_wait = 0 //If it's still set somehow.
domutcheck(src.occupant) //Waiting until they're out before possible notransform.
src.occupant = null
-
+ update_icon()
return
/obj/machinery/clonepod/proc/malfunction()
if(src.occupant)
src.connected_message("Critical Error!")
src.mess = 1
- src.icon_state = "pod_g"
+ update_icon()
src.occupant.ghostize()
spawn(5)
qdel(src.occupant)
return
+
+/obj/machinery/clonepod/update_icon()
+ ..()
+ icon_state = "pod_0"
+ if (occupant && !(stat & NOPOWER))
+ icon_state = "pod_1"
+ else if (mess && !panel_open)
+ icon_state = "pod_g"
/obj/machinery/clonepod/relaymove(mob/user as mob)
if (user.stat)
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index bb0cfb2d1bc..58fb54bdfde 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -6,7 +6,7 @@
circuit = "/obj/item/weapon/circuitboard/cloning"
req_access = list(access_heads) //Only used for record deletion right now.
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
- var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
+ var/list/pods = list() //Linked cloning pods.
var/temp = ""
var/scantemp = "Scanner ready."
var/menu = 1 //Which menu screen to display
@@ -15,64 +15,68 @@
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
var/loading = 0 // Nice loading text
var/autoprocess = 0
- var/data[0]
+ var/obj/machinery/clonepod/selected_pod
light_color = LIGHT_COLOR_DARKBLUE
-/obj/machinery/computer/cloning/New()
+/obj/machinery/computer/cloning/initialize()
+ ..()
+ updatemodules()
+
+/obj/machinery/computer/cloning/Destroy()
+ releasecloner()
..()
- spawn(5)
- updatemodules()
- return
- return
/obj/machinery/computer/cloning/process()
- if(!(scanner && pod1 && autoprocess))
+ if(!scanner || !pods.len || !autoprocess)
return
if(scanner.occupant && (scanner.scan_level > 2))
scan_mob(scanner.occupant)
- if(!(pod1.occupant || pod1.mess) && (pod1.efficiency > 5))
- for(var/datum/dna2/record/R in src.records)
- if(!(pod1.occupant || pod1.mess))
- if(pod1.growclone(R))
- records.Remove(R)
-
+ for (var/obj/machinery/clonepod/pod in pods)
+ if(!(pod.occupant || pod.mess) && (pod.efficiency > 5))
+ for(var/datum/dna2/record/R in src.records)
+ if(!(pod.occupant || pod.mess))
+ if(pod.growclone(R))
+ records.Remove(R)
+
/obj/machinery/computer/cloning/proc/updatemodules()
src.scanner = findscanner()
- src.pod1 = findcloner()
-
- if (!isnull(src.pod1))
- src.pod1.connected = src // Some variable the pod needs
+ releasecloner()
+ findcloner()
+ if(!selected_pod)
+ selected_pod = pods[1]
/obj/machinery/computer/cloning/proc/findscanner()
var/obj/machinery/dna_scannernew/scannerf = null
- // Loop through every direction
+ //Try to find scanner on adjacent tiles first
for(dir in list(NORTH,EAST,SOUTH,WEST))
-
- // Try to find a scanner in that direction
scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
+ if (scannerf)
+ return scannerf
- // If found, then we break, and return the scanner
- if (!isnull(scannerf))
- break
+ //Then look for a free one in the area
+ if(!scannerf)
+ for(var/obj/machinery/dna_scannernew/S in get_area(src))
+ return S
- // If no scanner was found, it will return null
- return scannerf
+ return 0
+
+/obj/machinery/computer/cloning/proc/releasecloner()
+ for(var/obj/machinery/clonepod/P in pods)
+ P.connected = null
+ P.name = initial(P.name)
+ pods.Cut()
/obj/machinery/computer/cloning/proc/findcloner()
- var/obj/machinery/clonepod/podf = null
-
- for(dir in list(NORTH,EAST,SOUTH,WEST))
-
- podf = locate(/obj/machinery/clonepod, get_step(src, dir))
-
- if (!isnull(podf))
- break
-
- return podf
+ var/num = 1
+ for(var/obj/machinery/clonepod/P in get_area(src))
+ if(!P.connected)
+ pods += P
+ P.connected = src
+ P.name = "[initial(P.name)] #[num++]"
/obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/disk/data)) //INSERT SOME DISKETTES
@@ -83,6 +87,15 @@
user << "You insert [W]."
nanomanager.update_uis(src)
return
+ else if(istype(W, /obj/item/device/multitool))
+ var/obj/item/device/multitool/M = W
+ if(M.buffer && istype(M.buffer, /obj/machinery/clonepod))
+ var/obj/machinery/clonepod/P = M.buffer
+ if(P && !(P in pods))
+ pods += P
+ P.connected = src
+ P.name = "[initial(P.name)] #[pods.len]"
+ user << "You connect [P] to [src]."
else
..()
return
@@ -102,30 +115,40 @@
ui_interact(user)
/obj/machinery/computer/cloning/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- if(..())
- return
if(stat & (NOPOWER|BROKEN))
return
-
+ var/data[0]
data["menu"] = src.menu
- data["scanner"] = src.scanner
- data["pod"] = src.pod1
+ data["scanner"] = src.scanner
+
+ var/canpodautoprocess = 0
+ if(pods.len)
+ data["numberofpods"] = src.pods.len
+
+ var/list/tempods[0]
+ for (var/obj/machinery/clonepod/pod in pods)
+ if(pod.efficiency > 5)
+ canpodautoprocess = 1
+
+ tempods.Add(list(list("pod" = "\ref[pod]", "name" = capitalize(pod.name), "biomass" = pod.biomass)))
+ data["pods"] = tempods
+
data["loading"] = loading
data["autoprocess"] = autoprocess
- if(scanner && pod1 && ((scanner.scan_level > 2) || (pod1.efficiency > 5)))
+
+ if(scanner && pods.len && ((scanner.scan_level > 2) || canpodautoprocess))
data["autoallowed"] = 1
else
data["autoallowed"] = 0
if(src.scanner)
data["occupant"] = src.scanner.occupant
data["locked"] = src.scanner.locked
- if(src.pod1)
- data["biomass"] = src.pod1.biomass
data["temp"] = temp
data["scantemp"] = scantemp
data["disk"] = src.diskette
+ data["selected_pod"] = "\ref[selected_pod]"
var/list/temprecords[0]
- for(var/datum/dna2/record/R in src.records)
+ for(var/datum/dna2/record/R in records)
var tempRealName = R.dna.real_name
temprecords.Add(list(list("record" = "\ref[R]", "realname" = tempRealName)))
data["records"] = temprecords
@@ -142,15 +165,15 @@
data["realname"] = src.active_record.dna.real_name
data["unidentity"] = src.active_record.dna.uni_identity
data["strucenzymes"] = src.active_record.dna.struc_enzymes
- if(pod1 && pod1.biomass >= CLONE_BIOMASS)
- data["enoughbiomass"] = 1
+ if(selected_pod && (selected_pod in pods) && selected_pod.biomass >= CLONE_BIOMASS)
+ data["podready"] = 1
else
- data["enoughbiomass"] = 0
+ data["podready"] = 0
// Set up the Nano UI
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
- ui = new(user, src, ui_key, "cloning_console.tmpl", "Cloning Console UI", 640, 480)
+ ui = new(user, src, ui_key, "cloning_console.tmpl", "Cloning Console UI", 640, 520)
ui.set_initial_data(data)
ui.open()
@@ -165,13 +188,11 @@
scantemp = "Scanner ready."
loading = 1
- nanomanager.update_uis(src)
spawn(20)
src.scan_mob(src.scanner.occupant)
loading = 0
- nanomanager.update_uis(src)
if(href_list["task"])
switch(href_list["task"])
@@ -188,7 +209,6 @@
src.scanner.locked = 1
else
src.scanner.locked = 0
- nanomanager.update_uis(src)
else if (href_list["view_rec"])
src.active_record = locate(href_list["view_rec"])
@@ -201,7 +221,6 @@
else
src.active_record = null
src.temp = "Error: Record missing."
- nanomanager.update_uis(src)
else if (href_list["del_rec"])
if ((!src.active_record) || (src.menu < 3))
@@ -220,30 +239,26 @@
src.menu = 2
else
src.temp = "Error: Access denied."
- nanomanager.update_uis(src)
else if (href_list["disk"]) //Load or eject.
switch(href_list["disk"])
if("load")
if ((isnull(src.diskette)) || isnull(src.diskette.buf))
src.temp = "Error: The disk's data could not be read."
- nanomanager.update_uis(src)
return
if (isnull(src.active_record))
src.temp = "Error: No active record was found."
src.menu = 1
- nanomanager.update_uis(src)
return
src.active_record = src.diskette.buf
src.temp = "Load successful."
- nanomanager.update_uis(src)
+
if("eject")
if (!isnull(src.diskette))
src.diskette.loc = src.loc
- src.diskette = null
- nanomanager.update_uis(src)
+ src.diskette = null
else if (href_list["save_disk"]) //Save to disk!
if ((isnull(src.diskette)) || (src.diskette.read_only) || (isnull(src.active_record)))
@@ -263,46 +278,55 @@
src.diskette.buf.types=DNA2_BUF_SE
src.diskette.name = "data disk - '[src.active_record.dna.real_name]'"
src.temp = "Save \[[href_list["save_disk"]]\] successful."
- nanomanager.update_uis(src)
else if (href_list["refresh"])
nanomanager.update_uis(src)
+
+ else if (href_list["selectpod"])
+ var/obj/machinery/clonepod/selected = locate(href_list["selectpod"])
+ if(istype(selected) && (selected in pods))
+ selected_pod = selected
else if (href_list["clone"])
var/datum/dna2/record/C = locate(href_list["clone"])
//Look for that player! They better be dead!
- if(C)
+ if(istype(C))
//Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
- if(!pod1)
+ if(!pods.len)
temp = "Error: No cloning pod detected."
- else if(pod1.occupant)
- temp = "Error: The cloning pod is currently occupied."
- else if(pod1.biomass < CLONE_BIOMASS)
- temp = "Error: Not enough biomass."
- else if(pod1.mess)
- temp = "Error: The cloning pod is malfunctioning."
- else if(!config.revival_cloning)
- temp = "Error: Unable to initiate cloning cycle."
- else if(pod1.growclone(C))
- temp = "Initiating cloning cycle..."
- records.Remove(C)
- qdel(C)
- menu = 1
- else
- var/mob/selected = find_dead_player("[C.ckey]")
- selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable
- var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
- if(answer != "No" && pod1.growclone(C))
+ else
+ var/obj/machinery/clonepod/pod = selected_pod
+ if (!selected_pod)
+ temp = "Error: No cloning pod selected."
+ else if(pod.occupant)
+ temp = "Error: The cloning pod is currently occupied."
+ else if(pod.biomass < CLONE_BIOMASS)
+ temp = "Error: Not enough biomass."
+ else if(pod.mess)
+ temp = "Error: The cloning pod is malfunctioning."
+ else if(!config.revival_cloning)
+ temp = "Error: Unable to initiate cloning cycle."
+ else if(pod.growclone(C))
temp = "Initiating cloning cycle..."
records.Remove(C)
qdel(C)
menu = 1
else
- temp = "Initiating cloning cycle...
Error: Post-initialisation failed. Cloning cycle aborted."
+ var/mob/selected = find_dead_player("[C.ckey]")
+ if(!selected)
+ return
+ selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable
+ var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No")
+ if(answer != "No" && pod.growclone(C))
+ temp = "Initiating cloning cycle..."
+ records.Remove(C)
+ qdel(C)
+ menu = 1
+ else
+ temp = "Initiating cloning cycle...
Error: Post-initialisation failed. Cloning cycle aborted."
else
temp = "Error: Data corruption."
- nanomanager.update_uis(src)
else if (href_list["menu"])
src.menu = text2num(href_list["menu"])
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 5d2e551f64f..126cfd70a70 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -30,25 +30,25 @@
initialize_directions = dir
initialize()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/cryo_tube(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/cryo_tube(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/atmospherics/unary/cryo_cell/upgraded/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/cryo_tube(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
+ component_parts += new /obj/item/weapon/circuitboard/cryo_tube(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
/obj/machinery/atmospherics/unary/cryo_cell/RefreshParts()
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 9ce5ccc2296..49ea6865f58 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -15,24 +15,23 @@
/obj/machinery/recharge_station/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/cyborgrecharger(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/stock_parts/cell/high(src)
+ component_parts += new /obj/item/weapon/circuitboard/cyborgrecharger(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/cell/high(null)
RefreshParts()
build_icon()
/obj/machinery/recharge_station/upgraded/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/cyborgrecharger(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor/super(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor/super(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(src)
- component_parts += new /obj/item/weapon/stock_parts/cell/hyper(src)
+ component_parts += new /obj/item/weapon/circuitboard/cyborgrecharger(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null)
RefreshParts()
- build_icon()
/obj/machinery/recharge_station/RefreshParts()
recharge_speed = 0
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index 27872a7a76e..b9516d3619d 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -284,4 +284,4 @@
// open the new ui window
ui.open()
// auto update every Master Controller tick
- ui.set_auto_update(1)
\ No newline at end of file
+ ui.set_auto_update(1)
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index b93b7e3571e..ef70953075d 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -32,7 +32,7 @@
new /obj/item/stack/sheet/metal(get_turf(src))
qdel(src)
- else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ else if(istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill))
user << "\blue You drill through the girder!"
new /obj/item/stack/sheet/metal(get_turf(src))
qdel(src)
@@ -224,7 +224,7 @@
user << "\blue You slice apart the girder!"
dismantle()
- else if(istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ else if(istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill))
user << "\blue You drill through the girder!"
dismantle()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index b89c84cbcd8..58bd290bf5e 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -385,7 +385,7 @@
return
//DRILLING
- else if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ else if (istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill))
user << "You begin to drill though the wall."
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index c46c2c6fa5a..cf094395019 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -253,7 +253,7 @@
//vv OK, we weren't performing a valid deconstruction step or igniting thermite,let's check the other possibilities vv
//DRILLING
- if (istype(W, /obj/item/weapon/pickaxe/diamonddrill))
+ if (istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill))
user << "You begin to drill though the wall."
diff --git a/code/game/vehicles/spacepods/pod_fabricator.dm b/code/game/vehicles/spacepods/pod_fabricator.dm
index b8488bafd06..9a17b501636 100644
--- a/code/game/vehicles/spacepods/pod_fabricator.dm
+++ b/code/game/vehicles/spacepods/pod_fabricator.dm
@@ -55,6 +55,7 @@
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
+
files = new /datum/research(src) //Setup the research data holder.
for(var/direction in cardinal)
exit = get_step(src,direction)
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index c7c6b2201f0..4e9f6d76b77 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -162,10 +162,10 @@
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/hydroponics(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/weapon/circuitboard/hydroponics(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
temp_chem_holder = new()
diff --git a/code/modules/lighting/light_source.dm b/code/modules/lighting/light_source.dm
index 0b6324a14a4..72618280137 100644
--- a/code/modules/lighting/light_source.dm
+++ b/code/modules/lighting/light_source.dm
@@ -177,6 +177,7 @@
T.affecting_lights += src
effect_turf += T
+ END_FOR_DVIEW
/datum/light_source/proc/remove_lum()
applied = 0
@@ -201,11 +202,10 @@
var/list/view[0]
FOR_DVIEW(var/turf/T, light_range, source_turf, INVISIBILITY_LIGHTING)
view += T //Filter out turfs.
-
+ END_FOR_DVIEW
//This is the part where we calculate new turfs (if any)
var/list/new_turfs = view - effect_turf //This will result with all the tiles that are added.
for(var/turf/T in new_turfs)
- //Big huge copy paste from apply_lum() incoming because screw unreadable defines and screw proc call overhead.
if(T.lighting_overlay)
LUM_FALLOFF(., T, source_turf)
. *= light_power
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 31c5d18a4c8..1bfe96094db 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -31,6 +31,17 @@
component_parts += new /obj/item/device/assembly/igniter(null)
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
+
+/obj/machinery/mineral/ore_redemption/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/ore_redemption(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/device/assembly/igniter(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ RefreshParts()
/obj/machinery/mineral/ore_redemption/RefreshParts()
var/ore_pickup_rate_temp = 15
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 22617da947a..b0ba10296e0 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -405,8 +405,7 @@
src.modules += new /obj/item/weapon/reagent_containers/spray/cleaner/drone(src)
src.modules += new /obj/item/weapon/soap(src)
- src.emag = new /obj/item/weapon/gun/energy/plasmacutter(src)
- src.emag.name = "Plasma Cutter"
+ src.emag = new /obj/item/weapon/pickaxe/drill/cyborg/diamond(src)
for(var/T in stacktypes)
var/obj/item/stack/sheet/W = new T(src)
diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm
deleted file mode 100644
index cddda73be6e..00000000000
--- a/code/modules/power/pacman2.dm
+++ /dev/null
@@ -1,178 +0,0 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
-
-//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power).
-/obj/machinery/power/port_gen/pacman2
- name = "Pacman II"
- desc = "P.A.C.M.A.N. type II portable generator. Uses liquid plasma as a fuel source."
- power_gen = 4500
- var/obj/item/weapon/tank/plasma/P = null
- var/board_path = "/obj/item/weapon/circuitboard/pacman2"
- var/emagged = 0
- var/heat = 0
-/*
- process()
- if(P)
- if(P.air_contents.toxins <= 0)
- P.air_contents.toxins = 0
- eject()
- else
- P.air_contents.toxins -= 0.001
- return
-*/
-
- HasFuel()
- if(P.air_contents.toxins >= 0.1)
- return 1
- return 0
-
- UseFuel()
- P.air_contents.toxins -= 0.01
- return
-
- New()
- ..()
- component_parts = list()
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/stack/cable_coil(src)
- component_parts += new /obj/item/stack/cable_coil(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
- component_parts += new board_path(src)
- RefreshParts()
-
- RefreshParts()
- var/temp_rating = 0
- var/temp_reliability = 0
- for(var/obj/item/weapon/stock_parts/SP in component_parts)
- if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
- //max_coins = SP.rating * SP.rating * 1000
- else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor))
- temp_rating += SP.rating
- for(var/obj/item/weapon/CP in component_parts)
- temp_reliability += CP.reliability
- reliability = min(round(temp_reliability / 4), 100)
- power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
-
- examine()
- ..()
- usr << "\blue The generator has [P.air_contents.toxins] units of fuel left, producing [power_gen] per cycle."
- if(crit_fail) usr << "\red The generator seems to have broken down."
-
- handleInactive()
- heat -= 2
- if (heat < 0)
- heat = 0
- else
- for(var/mob/M in viewers(1, src))
- if (M.client && M.machine == src)
- src.updateUsrDialog()
-
- proc
- overheat()
- explosion(get_turf(src), 2, 5, 2, -1)
-
- attackby(var/obj/item/O as obj, var/mob/user as mob, params)
- if(istype(O, /obj/item/weapon/tank/plasma))
- if(P)
- user << "\red The generator already has a plasma tank loaded!"
- return
- P = O
- user.drop_item()
- O.loc = src
- user << "\blue You add the plasma tank to the generator."
- else if(!active)
- if(istype(O, /obj/item/weapon/wrench))
- anchored = !anchored
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
- if(anchored)
- user << "\blue You secure the generator to the floor."
- else
- user << "\blue You unsecure the generator from the floor."
- makepowernets()
- else if(istype(O, /obj/item/weapon/screwdriver))
- open = !open
- playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- if(open)
- user << "\blue You open the access panel."
- else
- user << "\blue You close the access panel."
- else if(istype(O, /obj/item/weapon/crowbar) && !open)
- var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- for(var/obj/item/I in component_parts)
- if(I.reliability < 100)
- I.crit_fail = 1
- I.loc = src.loc
- new_frame.state = 2
- new_frame.icon_state = "box_1"
- del(src)
-
- emag_act(user as mob)
- if(!emagged)
- emagged = 1
- emp_act(1)
-
- attack_hand(mob/user as mob)
- ..()
- if (!anchored)
- return
-
- interact(user)
-
- attack_ai(mob/user as mob)
- interact(user)
-
- attack_paw(mob/user as mob)
- interact(user)
-
- proc
- interact(mob/user)
- if (get_dist(src, user) > 1 )
- if (!istype(user, /mob/living/silicon/ai))
- user.machine = null
- user << browse(null, "window=port_gen")
- return
-
- user.machine = src
-
- var/dat = text("[name]
")
- if (active)
- dat += text("Generator: On
")
- else
- dat += text("Generator: Off
")
- if(P)
- dat += text("Currently loaded plasma tank: [P.air_contents.toxins]
")
- else
- dat += text("No plasma tank currently loaded.
")
- dat += text("Power output: - [power_gen * power_output] +
")
- dat += text("Heat: [heat]
")
- dat += "
Close"
- user << browse("[dat]", "window=port_gen")
-
- Topic(href, href_list)
- if(..())
- return
-
- src.add_fingerprint(usr)
- if(href_list["action"])
- if(href_list["action"] == "enable")
- if(!active && HasFuel() && !crit_fail)
- active = 1
- icon_state = "portgen1"
- src.updateUsrDialog()
- if(href_list["action"] == "disable")
- if (active)
- active = 0
- icon_state = "portgen0"
- src.updateUsrDialog()
- if(href_list["action"] == "lower_power")
- if (power_output > 1)
- power_output--
- src.updateUsrDialog()
- if (href_list["action"] == "higher_power")
- if (power_output < 4 || emagged)
- power_output++
- src.updateUsrDialog()
- if (href_list["action"] == "close")
- usr << browse(null, "window=port_gen")
- usr.machine = null
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 6c45c4b0455..60116821a55 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -116,12 +116,23 @@
/obj/machinery/power/port_gen/pacman/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
- component_parts += new /obj/item/stack/cable_coil(src, 1)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
- component_parts += new board_path(src)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new board_path(null)
+ RefreshParts()
+
+/obj/machinery/power/port_gen/pacman/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null)
+ component_parts += new board_path(null)
RefreshParts()
/obj/machinery/power/port_gen/pacman/Destroy()
@@ -370,6 +381,17 @@
sheet_name = "Uranium Sheets"
time_per_sheet = 576 //same power output, but a 50 sheet stack will last 2 hours at max safe power
board_path = /obj/item/weapon/circuitboard/pacman/super
+
+/obj/machinery/power/port_gen/pacman/super/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null)
+ component_parts += new board_path(null)
+ RefreshParts()
/obj/machinery/power/port_gen/pacman/super/UseFuel()
//produces a tiny amount of radiation when in use
@@ -405,6 +427,17 @@
max_temperature = 800
temperature_gain = 90
board_path = /obj/item/weapon/circuitboard/pacman/mrs
+
+/obj/machinery/power/port_gen/pacman/mrs/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null)
+ component_parts += new board_path(null)
+ RefreshParts()
/obj/machinery/power/port_gen/pacman/mrs/explode()
//no special effects, but the explosion is pretty big (same as a supermatter shard).
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 04088d18539..08560c6011e 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -295,13 +295,25 @@
/obj/machinery/chem_dispenser/constructable/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/cell/super(src)
+ component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/cell/super(null)
+ RefreshParts()
+
+/obj/machinery/chem_dispenser/constructable/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/weapon/stock_parts/cell/hyper(null)
RefreshParts()
/obj/machinery/chem_dispenser/constructable/RefreshParts()
diff --git a/code/modules/reagents/newchem/chem_heater.dm b/code/modules/reagents/newchem/chem_heater.dm
index b3aba20540d..be04e4d8d0a 100644
--- a/code/modules/reagents/newchem/chem_heater.dm
+++ b/code/modules/reagents/newchem/chem_heater.dm
@@ -14,9 +14,17 @@
/obj/machinery/chem_heater/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/chem_heater(src)
- component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/weapon/circuitboard/chem_heater(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ RefreshParts()
+
+/obj/machinery/chem_heater/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/chem_heater(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/chem_heater/RefreshParts()
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 00b2af7cf5c..266e0a3b239 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -34,13 +34,24 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
/obj/machinery/r_n_d/circuit_imprinter/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
- component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
+ component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null)
RefreshParts()
- reagents.my_atom = src
+ reagents.my_atom = null
+
+/obj/machinery/r_n_d/circuit_imprinter/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
+ RefreshParts()
+ reagents.my_atom = null
/obj/machinery/r_n_d/circuit_imprinter/RefreshParts()
var/T = 0
diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm
index 61f86c16294..8fcbf4b48ce 100644
--- a/code/modules/research/designs/mining_designs.dm
+++ b/code/modules/research/designs/mining_designs.dm
@@ -9,7 +9,7 @@
build_type = PROTOLATHE
materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
reliability_base = 79
- build_path = /obj/item/weapon/pickaxe/diamonddrill
+ build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
category = list("Mining")
/datum/design/pick_diamond
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index 57f36ad9179..0ffec90b1ec 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -22,6 +22,15 @@ Note: Must be placed within 3 tiles of the R&D Console
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
RefreshParts()
+
+/obj/machinery/r_n_d/destructive_analyzer/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser/ultra(null)
+ RefreshParts()
/obj/machinery/r_n_d/destructive_analyzer/RefreshParts()
var/T = 0
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index 83fc3441ef4..37fc63ce552 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -42,13 +42,27 @@ Note: Must be placed west/left of and R&D console to function.
/obj/machinery/r_n_d/protolathe/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/protolathe(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
- component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
- component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
+ component_parts += new /obj/item/weapon/circuitboard/protolathe(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
+ RefreshParts()
+
+ reagents.my_atom = src
+
+/obj/machinery/r_n_d/protolathe/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/protolathe(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/stock_parts/manipulator/pico(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
+ component_parts += new /obj/item/weapon/reagent_containers/glass/beaker/large(null)
RefreshParts()
reagents.my_atom = src
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index c191a8a2eca..cabbf16da77 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -17,12 +17,21 @@
/obj/machinery/r_n_d/server/New()
..()
component_parts = list()
- component_parts += new /obj/item/weapon/circuitboard/rdserver(src)
- component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
- component_parts += new /obj/item/stack/cable_coil(src,1)
- component_parts += new /obj/item/stack/cable_coil(src,1)
+ component_parts += new /obj/item/weapon/circuitboard/rdserver(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module(null)
+ component_parts += new /obj/item/stack/cable_coil(null,1)
+ component_parts += new /obj/item/stack/cable_coil(null,1)
+ RefreshParts()
+ initialize(); //Agouri
+
+/obj/machinery/r_n_d/server/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/rdserver(null)
+ component_parts += new /obj/item/weapon/stock_parts/scanning_module/phasic(null)
+ component_parts += new /obj/item/stack/cable_coil(null,1)
+ component_parts += new /obj/item/stack/cable_coil(null,1)
RefreshParts()
- src.initialize(); //Agouri
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm
index 01dc7636d24..02964b375c8 100644
--- a/code/modules/telesci/telepad.dm
+++ b/code/modules/telesci/telepad.dm
@@ -20,6 +20,17 @@
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
+
+/obj/machinery/telepad/upgraded/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/telesci_pad(null)
+ component_parts += new /obj/item/bluespace_crystal/artificial(null)
+ component_parts += new /obj/item/bluespace_crystal/artificial(null)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null)
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 1)
+ RefreshParts()
/obj/machinery/telepad/RefreshParts()
var/E
diff --git a/nano/templates/cloning_console.tmpl b/nano/templates/cloning_console.tmpl
index 668f6a44917..7f82878aaa1 100644
--- a/nano/templates/cloning_console.tmpl
+++ b/nano/templates/cloning_console.tmpl
@@ -41,30 +41,42 @@ Used In File(s): \code\game\machinery\computer\cloning.dm