diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index f713d4e31d8..c2a31e4d761 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -871,7 +871,7 @@ "aqM" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/hand_labeler,/turf/simulated/floor/plasteel{tag = "icon-vault (SOUTHEAST)"; icon_state = "vault"; dir = 6},/area/security/warden) "aqN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/warden) "aqO" = (/obj/structure/filingcabinet/security{pixel_x = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/security/warden) -"aqP" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/loyalty,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/warden) +"aqP" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/lockbox/mindshield,/obj/item/weapon/reagent_containers/glass/bottle/morphine,/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/warden) "aqQ" = (/obj/structure/rack,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/security/warden) "aqR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/security/warden) "aqS" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/pod_3) diff --git a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm index 86d30d99fa3..62e480cd89e 100644 --- a/_maps/map_files/RandomZLevels/blackmarketpackers.dmm +++ b/_maps/map_files/RandomZLevels/blackmarketpackers.dmm @@ -7,20 +7,20 @@ "ag" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/BMPship/Fore) "ah" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"},/area/awaymission/BMPship/Fore) "ai" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/awaymission/BMPship/Fore) -"aj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) -"ak" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) +"aj" = (/mob/living/simple_animal/hostile/carp,/turf/space,/area/space) +"ak" = (/obj/machinery/porta_turret{lethal = 1; name = "ship defense turret"},/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "al" = (/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) -"am" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/awaymission/BMPship/Fore) -"an" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) -"ao" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/BMPship/Fore) -"ap" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) -"aq" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) +"am" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) +"an" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/BMPship/Aft) +"ao" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"ap" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) +"aq" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "ar" = (/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) "as" = (/obj/structure/lattice,/turf/space,/area/space) -"at" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) -"au" = (/obj/machinery/light/small,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) -"av" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"},/area/awaymission/BMPship/Fore) -"aw" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/awaymission/BMPship/Fore) +"at" = (/obj/machinery/light/small,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) +"au" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; equipment = 0; lighting = 0; locked = 0; operating = 0; pixel_y = 24; req_access = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship/Fore) +"av" = (/obj/structure/table,/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) +"aw" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; environ = 0; equipment = 3; locked = 0; operating = 0; req_access = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "ax" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission/BMPship/Aft) "ay" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"},/area/awaymission/BMPship/Aft) "az" = (/turf/simulated/shuttle/wall{tag = "icon-swall13"; icon_state = "swall13"},/area/awaymission/BMPship/Aft) @@ -122,8 +122,8 @@ "cr" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "cs" = (/obj/machinery/light/small,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "ct" = (/obj/structure/kitchenspike,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) -"cu" = (/obj/structure/closet/crate,/obj/item/stack/spacecash/c1000,/obj/item/stack/spacecash/c500,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) -"cv" = (/obj/structure/closet/crate,/obj/item/device/analyzer,/obj/item/stack/spacecash/c10,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) +"cu" = (/obj/structure/closet/crate,/obj/item/device/analyzer,/obj/item/stack/spacecash/c10,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) +"cv" = (/obj/structure/closet/crate,/obj/item/stack/spacecash/c1000,/obj/item/stack/spacecash/c500,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "cw" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "cx" = (/obj/machinery/door_control{id = "packerCargo"; pixel_y = -24},/obj/machinery/light/small,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) "cy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/awaymission/BMPship/Aft) @@ -131,7 +131,7 @@ "cA" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Fore) "cB" = (/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/BMPship/Fore) "cC" = (/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship/Fore) -"cD" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; locked = 0; pixel_y = 24; req_access = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship/Fore) +"cD" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/computer/monitor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) "cE" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/awaymission/BMPship/Midship) "cF" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/item/weapon/screwdriver,/obj/item/weapon/paper{info = "The next person who takes one of my screwdrivers gets stabbed with one. They are MINE. - Love, Madsen"; name = "scribbled note"},/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "cG" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) @@ -188,7 +188,7 @@ "dF" = (/obj/effect/landmark{name = "awaystart"},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/BMPship/Aft) "dG" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/BMPship/Aft) "dH" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) -"dI" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; environ = 0; equipment = 3; locked = 0; req_access = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"dI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/BMPship/Aft) "dJ" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) "dK" = (/obj/structure/table,/obj/item/weapon/paper{info = "I'm no scientist, but judging from the design and components, it seems to be some kind of gateway. This thing is gonna be worth a lot of cash to the right man. The boys are excited, as they have every right to be, and I've let them crack into that case of beer we got. I normally wouldn't allow such a thing, but this is a time for celebration! It's not like a couple drinks will hurt anything."; name = "Captain's log entry"},/turf/simulated/floor/plasteel{tag = "icon-carpet6-0 (EAST)"; icon_state = "carpet6-0"; dir = 4},/area/awaymission/BMPship/Fore) "dL" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-carpet14-2 (EAST)"; icon_state = "carpet14-2"; dir = 4},/area/awaymission/BMPship/Fore) @@ -204,14 +204,14 @@ "dV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "dW" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "dX" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) -"dY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/BMPship/Aft) +"dY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "dZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "ea" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "eb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) -"ec" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"ec" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "ed" = (/obj/item/device/multitool,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "ee" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel/airless{tag = "icon-engine"; icon_state = "engine"},/area/awaymission/BMPship/Aft) -"ef" = (/obj/structure/closet/crate,/obj/item/stack/spacecash/c10,/turf/simulated/floor/plasteel,/area/awaymission/BMPship/Aft) +"ef" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; locked = 0; operating = 0; req_access = ""},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "eg" = (/turf/simulated/floor/plasteel{tag = "icon-carpet15-15 (EAST)"; icon_state = "carpet15-15"; dir = 4},/area/awaymission/BMPship/Fore) "eh" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/plasteel{tag = "icon-carpet5-0 (EAST)"; icon_state = "carpet5-0"; dir = 4},/area/awaymission/BMPship/Fore) "ei" = (/obj/structure/stool,/turf/simulated/floor/plasteel{tag = "icon-carpet13-1 (EAST)"; icon_state = "carpet13-1"; dir = 4},/area/awaymission/BMPship/Fore) @@ -229,7 +229,7 @@ "eu" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) "ev" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel,/area/awaymission/BMPship/Aft) "ew" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) -"ex" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"ex" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"; outputting = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "ey" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "ez" = (/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "eA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) @@ -240,7 +240,7 @@ "eF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) "eG" = (/obj/machinery/shieldwallgen,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship/Midship) "eH" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) -"eI" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc/noalarm{dir = 1; locked = 0; req_access = ""},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/awaymission/BMPship/Midship) +"eI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "eJ" = (/turf/simulated/floor/plasteel{tag = "icon-loadingareadirty2 (EAST)"; icon_state = "loadingareadirty2"; dir = 4},/area/awaymission/BMPship/Midship) "eK" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Midship) "eL" = (/obj/machinery/conveyor{dir = 4; id = "meatConvey1"},/obj/structure/plasticflaps,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Midship) @@ -253,9 +253,9 @@ "eS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "eT" = (/obj/structure/rack,/obj/item/weapon/storage/box/lights,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) "eU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/awaymission/BMPship/Aft) -"eV" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"eV" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"; outputting = 0},/obj/structure/cable,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "eW" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) -"eX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"eX" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "eY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) "eZ" = (/obj/structure/table,/turf/simulated/floor/plasteel{tag = "icon-carpet7-3 (EAST)"; icon_state = "carpet7-3"; dir = 4},/area/awaymission/BMPship/Fore) "fa" = (/obj/structure/stool/bed/chair/office{dir = 8},/turf/simulated/floor/plasteel{tag = "icon-carpet11-12 (EAST)"; icon_state = "carpet11-12"; dir = 4},/area/awaymission/BMPship/Fore) @@ -276,7 +276,7 @@ "fp" = (/obj/effect/gibspawner/human,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "fq" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "fr" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility/full,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) -"fs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"fs" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) "ft" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/BMPship/Aft) "fu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet15-7 (EAST)"; icon_state = "carpet15-7"; dir = 4},/area/awaymission/BMPship/Fore) "fv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet15-13 (EAST)"; icon_state = "carpet15-13"; dir = 4},/area/awaymission/BMPship/Fore) @@ -290,7 +290,7 @@ "fD" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "fE" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "fF" = (/obj/structure/rack,/turf/simulated/floor/plasteel{dir = 8; icon_state = "warning"},/area/awaymission/BMPship/Aft) -"fG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"fG" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "fH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) "fI" = (/turf/simulated/floor/plasteel{tag = "icon-carpetside (SOUTHWEST)"; icon_state = "carpetside"; dir = 10},/area/awaymission/BMPship/Fore) "fJ" = (/turf/simulated/floor/plasteel{tag = "icon-carpetside (SOUTHEAST)"; icon_state = "carpetside"; dir = 6},/area/awaymission/BMPship/Fore) @@ -305,8 +305,8 @@ "fS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "fT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "fU" = (/obj/effect/gibspawner/generic,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) -"fV" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/obj/structure/cable,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) -"fW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"fV" = (/obj/machinery/porta_turret{check_synth = 1; lethal = 1; name = "ship defense turret"},/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) +"fW" = (/obj/structure/closet,/obj/item/clothing/head/bio_hood,/obj/item/clothing/suit/bio_suit,/obj/item/clothing/gloves/color/black,/turf/simulated/floor/plating,/area/awaymission) "fX" = (/obj/effect/decal/cleanable/cobweb,/obj/machinery/power/port_gen/pacman/super,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "fY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{tag = "icon-carpet15-15 (EAST)"; icon_state = "carpet15-15"; dir = 4},/area/awaymission/BMPship/Fore) "fZ" = (/obj/structure/closet,/turf/simulated/floor/plasteel{tag = "icon-carpet15-15 (EAST)"; icon_state = "carpet15-15"; dir = 4},/area/awaymission/BMPship/Fore) @@ -332,7 +332,7 @@ "gt" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "gu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) "gv" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) -"gw" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/awaymission/BMPship/Aft) +"gw" = (/obj/structure/reagent_dispensers/beerkeg,/turf/simulated/floor/plating,/area/awaymission) "gx" = (/obj/item/stack/sheet/mineral/uranium{amount = 50},/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "gy" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/space) "gz" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg1"; icon_state = "platingdmg1"},/area/awaymission/BMPship/Fore) @@ -360,7 +360,7 @@ "gV" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "gW" = (/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) "gX" = (/obj/structure/reagent_dispensers,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/awaymission/BMPship/Aft) -"gY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/shuttle/plating,/area/awaymission/BMPship/Aft) +"gY" = (/obj/machinery/porta_turret{check_synth = 1; lethal = 1; name = "ship defense turret"},/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) "gZ" = (/turf/simulated/shuttle/wall{tag = "icon-swallc2"; icon_state = "swallc2"},/area/awaymission/BMPship/Aft) "ha" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2; tag = "icon-swall_f10"},/area/awaymission/BMPship/Fore) "hb" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plating/airless{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/awaymission/BMPship/Fore) @@ -440,18 +440,39 @@ "ix" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/BMPship/Aft) "iy" = (/obj/item/weapon/caution,/turf/simulated/floor/plating/airless,/area/awaymission) "iz" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating/airless,/area/awaymission) +"iA" = (/obj/structure/closet/crate,/obj/item/stack/spacecash/c10,/turf/simulated/floor/plasteel,/area/awaymission/BMPship/Aft) "iB" = (/obj/structure/sink{dir = 2},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/awaymission/BMPship/Aft) "iC" = (/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Aft) "iD" = (/obj/item/clothing/gloves/color/yellow,/turf/space,/area/awaymission) "iE" = (/turf/simulated/shuttle/wall{tag = "icon-swall4"; icon_state = "swall4"},/area/awaymission) "iF" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"},/area/awaymission) -"iG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) -"iH" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) -"iI" = (/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/awaymission/BMPship/Fore) -"iJ" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_f9"; icon_state = "swall_f9"; dir = 2},/area/awaymission/BMPship/Fore) -"iK" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Fore) -"iL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Fore) +"iG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) +"iH" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) +"iI" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"iJ" = (/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/awaymission/BMPship/Aft) +"iK" = (/turf/simulated/floor/plating,/area/awaymission) +"iL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/grenade/chem_grenade/drugs,/turf/simulated/floor/plating,/area/awaymission) "iM" = (/turf/simulated/mineral/random/high_chance_clown,/area/awaymission) +"iN" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating,/area/awaymission) +"iO" = (/obj/item/ammo_casing{pixel_y = 3},/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/awaymission) +"iP" = (/obj/effect/decal/cleanable/blood/drip,/obj/item/clothing/mask/gas/syndicate,/turf/simulated/floor/plating,/area/awaymission) +"iQ" = (/obj/machinery/door/airlock/external{name = "Crackden Airlock"},/turf/simulated/floor/plating,/area/awaymission) +"iR" = (/obj/machinery/door/airlock/external{name = "Plain Airlock"},/turf/simulated/floor/plating,/area/awaymission) +"iS" = (/mob/living/simple_animal/hostile/carp,/turf/simulated/floor/plating/airless/asteroid,/area/awaymission) +"iT" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{tag = "icon-swall_f6"; icon_state = "swall_f6"; dir = 2},/area/awaymission/BMPship/Aft) +"iU" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/floor/plating,/area/awaymission) +"iV" = (/obj/item/ammo_casing{pixel_y = 3},/turf/simulated/floor/plating,/area/awaymission) +"iW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship/Aft) +"iX" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/drugs/meth,/obj/item/weapon/reagent_containers/glass/beaker/drugs/meth,/obj/item/weapon/reagent_containers/glass/beaker/drugs/meth,/turf/simulated/floor/plating,/area/awaymission) +"iY" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission) +"iZ" = (/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor/plating,/area/awaymission) +"ja" = (/obj/structure/table,/obj/machinery/kitchen_machine/microwave,/turf/simulated/floor/plating,/area/awaymission) +"jb" = (/obj/machinery/chem_dispenser,/turf/simulated/floor/plating,/area/awaymission) +"jc" = (/obj/machinery/chem_master,/turf/simulated/floor/plating,/area/awaymission) +"jd" = (/obj/machinery/floodlight{in_use = 1},/turf/simulated/floor/plating,/area/awaymission) +"je" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/awaymission) +"jf" = (/turf/space,/area/crew_quarters/bar) +"jg" = (/turf/space,/area/exploration/methlab) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -501,54 +522,54 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagagahagawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajakalamanaoawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapalalaqararaoawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaaaaaatakauamarararavawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaaCaxaxayaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamakezdhaoancoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaaaajaaaaaaapezezeybdbdancoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaaaaaaaaaaaaaaaaaaaaaaaaqakatdhbdbdbdcWcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaEaxaxaxaxaxaxaxaxaxayaxaxaxazaAaBaCazazaxaDcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasaaasaFaGaHaIaJaKaLaMaNaOaPaQaRaSaTaUaVaVaVaVaVaVaWcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagagahagagagagagagagaiaaaaaaaaaaaaasaXaYaHaHaZaHaHaHbaaHaHbbbcbdbdbebdbdbfbgbhbdbibjaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacababacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkblbmbnbobpbqbpbqbpbrbsaaaaaaaaaaasbtaYaHbuaHaHaHaGaHbvaNaNbwbxbybdbzbdbdbAbBbCbDbdbjaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbFbGbnbHararararararbIaaaaaaasaEaFaHbuaYaHbuaHaHaHaZaHaHaHbJbcbKbdbdbdbdbLbMbNbdbdbOaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbQbFbnarbRbRbSbRbRbTbUaaaaaaaEbVbtbuaHbWbXaHaHaHbYaHbWbYaHaPbccacbcccccdccccccccbyceaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfcgchcicjckclclclclclcmclclclcmcnaxaxaxaxaAcpcpcpaCaxaxaxaxbVcqcrcsctcrcrcvcucwcxcyczaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCcDcCcEcFcGcHcIcJcKcIcLcGcMcNcOcPcQcRcMcMcMcMcScTcUcScVcWaxaxaxaxaxaxaxaxayaAcXaCcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfcgchcicjckclclclclclcmclclclcmcnaxaxaxaxaAcpcpcpaCaxaxaxaxbVcqcrcsctcrcrcucvcwcxcyczaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCaucCcEcFcGcHcIcJcKcIcLcGcMcNcOcPcQcRcMcMcMcMcScTcUavcVcWaxaxaxaxaxaxaxaxayaAcXaCcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcYcZcYdacCcEcMdbcHdcdcdcdccLcMcMdddedededfcMcMcMcMdgdgcMdgcMdhdididjdkdldmdldnaPdodpdqdrazaxaycoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCdsdtdsdudvcEcMcMcHdcdwdcdccLcMcMdxdydzdAdBcMcMcMcMcMcMcMcMcMaPdjdCdjbJdDdEdFdGaPdHdpdododIdJcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCdKdLdMdNdOcEcMcMdPdQdQbZdQdScMcMdTcMdUdVdVdVdVdVdVdVdVdVdWcMdhdjdXdjdraxaxaxaxbVdHdYdZeaebecbbedeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciegegegeheiejekelddemeneoeoeoeoeoeodWcMddcMepcMeqerererererererepcMaPdjesdjdjdjdjdjetaPeuevbdewbdexeyezeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAeBeCegcYcZcYcZeDeEeoeFererererereGeHcMeIcMepeJeKeLeKeKeKeKeMeNeOePbbdjeseQeReReSdjdjaPeTeUbdeVeWeXbJezeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegfbdtdsdtfcdTcMcMerfdfefdfffgepfhepcMepcMfierererererererepfjfkflfmfnfofpfqdjdjaPfreUbdewbdfscWayaxftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegcYfufvfwfxddcMcMerfdfdfgfffgfyeofzeofAcMcMcMcMcMfBcMcMcMepcMfCdjesfDfofofEdjdjaPfFevfoewbdfGcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfJegdsfKdsdtcCfLcMcMerfMfdfgfNfgepcMfOcMepcMcMfPcMcMcMcMcMcMfQdVfRfSfTfDfUfofEdjdjaPfFevfofVeWfWbbfXeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUegegegegfYegfZgadTemcMerfdfggbffgcepcMdTcMepcMeqerererererererepgdgeflfmfngffoggdjetaPeuevfobdbddJeyezeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaghahagaggigjagagaggkcMcMerfgfgfgglfgepgmddcMepgngogpgqgqgqgqeMeNeOgrbJdjesgsgtgtgudjdjaPdHeUbdgvbdgwbJgxeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCdsdtdsdudvcEcMcMcHdcdwdcdccLcMcMdxdydzdAdBcMcMcMcMcMcMcMcMcMaPdjdCdjbJdDdEdFdGaPdHdpdodoawdJcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcBcCcCdKdLdMdNdOcEcMcMdPdQdQbZdQdScMcMdTcMdUdVdVdVdVdVdVdVdVdVdWcMdhdjdXdjdraxaxaxaxbVcDdIdZeaebdYbbedeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciegegegeheiejekelddemeneoeoeoeoeoeodWcMddcMepcMeqerererererererepcMaPdjesdjdjdjdjdjetaPeuevbdecbdbKeyezeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAeBeCegcYcZcYcZeDeEeoeFererererereGeHcMefcMepeJeKeLeKeKeKeKeMeNeOePbbdjeseQeReReSdjdjaPeTeUbdexeWeIbJezeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegfbdtdsdtfcdTcMcMerfdfefdfffgepfhepcMepcMfierererererererepfjfkflfmfnfofpfqdjdjaPfreUbdewbdeccWayaxftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeZfaegcYfufvfwfxddcMcMerfdfdfgfffgfyeofzeofAcMcMcMcMcMfBcMcMcMepcMfCdjesfDfofofEdjdjaPfFevfoewbdewcWazaxcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafHfIfJegdsfKdsdtcCfLcMcMerfMfdfgfNfgepcMfOcMepcMcMfPcMcMcMcMcMcMfQdVfRfSfTfDfUfofEdjdjaPfFevfoeVeWeXbbfXeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUegegegegfYegfZgadTemcMerfdfggbffgcepcMdTcMepcMeqerererererererepgdgeflfmfngffoggdjetaPeuevfobdbdbdeyezeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaghahagaggigjagagaggkcMcMerfgfgfgglfgepgmddcMepgngogpgqgqgqgqeMeNeOgrbJdjesgsgtgtgudjdjaPdHeUbdgvbdfsbJgxeedRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygzgAgBgCgDgEgFcEcMcMererererereGgGcMdxcMepcMgHerererererererepcMaPdjgIgJgJgJgKdjgLaPdHevdqdogMgNcWayaxftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasgOgPgAgQgRgScEcMcMcMcMcMcMcMcMgTcMdTcMgUeoeoeoeoeoeodVdVdVeFcMdhgVdjdjdjdjesgWgXaPdHgYfogZayaxazftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaasaaaaaaaahahbhcgBgScEcMhdcMcMcMcMhecMhfhecNcMhdcMcMcMhdcMcMcMcMhdcMcMcWaxaAhgaCaAhhaCaxazaAhiaCcnftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaasgOgPgAgQgRgScEcMcMcMcMcMcMcMcMgTcMdTcMgUeoeoeoeoeoeodVdVdVeFcMdhgVdjdjdjfGesgWgXaPdHecfogZayaxazftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaajasaaaaaaaahahbhcgBgScEcMhdcMcMcMcMhecMhfhecNcMhdcMcMcMhdcMcMcMcMhdcMcMcWaxaAhgaCaAhhaCaxazaAhiaCcnftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjacaaasaahkasaahlagaghmhnhoclclclclclclclhphqhrhsclclclclclclclclclclclclclbVdqdqdqdqhtdphuhvhwhtevhxaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjacaaaaaaaaaahyakhzcihAhBhChDgzhEgBhFhjhjhjhjhGacachHhIachJhHachKhLhMhNhOaPhPdqbddqdqhQhRhRhRhRhShTaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhUaaaaaaaaaahValalhWhXgOhXhChYhXhChjhjhjhjhjhjhFachZiahHibicididhHhHhHhHbbhudqdqiedqifdqiedqdqdqigaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjacihaaaaaaaaaaiiakalbUgBgBhCgzhCgBhChFhjhjhjhFhjhjhjacijacididididhHhHikiliminininininiodqdqdqaCaxaxbVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaipacafagagiqagirhjhChFhjhjhjhjhjhjhjhjhjhjhjhIhZididibidhHishHhHbJdqdqitiudqiedqiedqiviwixaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhFachZhHhHhKiyiyiyizaPefefdqbddqdqdqdqdqbJiBiCftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjacaaaaajaaaahyfVhzcihAhBhChDgzhEgBhFhjhjhjhjhGacachHhIachJhHachKhLhMhNhOaPhPdqbddqdqhQhRhRhRhRhShTaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhUajaaaaaaaahValalhWhXgOhXhChYhXhChjhjhjhjhjhjhFachZiahHibicididhHhHhHhHbbhudqdqiedqifdqiedqdqdqigaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjacihaaaaaaaaaaiifValbUgBgBhCgzhCgBhChFhjhjhjhFhjhjhjacijacididididhHhHikiliminininininiodqdqdqaCaxaxbVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaajipacafagagiqagirhjhChFhjhjhjhjhjhjhjhjhjhjhjhIhZididibidhHishHhHbJdqdqitiudqiedqiedqiviwixaPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajaaacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhFachZhHhHhKiyiyiyizaPiAiAdqbddqdqdqdqdqbJiBiCftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiDacacachjhjhjhjhjhjhjhjhjhjhjhFhjhjhjhjhjhjhjhjhFiEiFiFiFiFiFiFiFazaxaxaxayaAhgaCayayazaxftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacacaaaaaaaaaaiGakhzciiHariIaviJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacacaaaaaaaaaaapalalaqarariKiJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacacaaaaaaaaaaiLakalbUaniKiJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachjhjacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacacaaaaaaaaaaafagagiqagiJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjfWhjgwhjhjhjhjhjhjhjacacaaaaaaiGgYiHbbiIbdiJcWftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjiLiKiKiNiPiOiKiQiKiKiRaciSaaaaaaapezezeybdbdiTftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjiUiKiKiViKiKiKiKhjhjhjhjacacaaaaaaiWgYezbJaoiTftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachjhjacachjhjhjhjhjhjhjhjhjhjhjhjhjhjiXiKiYiKiKiKiKiZiKhjacacacaaajaaaaaCaxaxazaxftaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjjaiKiKjbjciKjdhjhjacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjjejdhjhjiKhjhjacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacacachjhjiMhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacacachjhjhjhjhjhjiMhjhjhjhjhjhjhjhjhjhjhjacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacacachjhjhjiMhjhjiMhjhjhjhjhjhjhjhjhjacacacachjhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacachjhjhjhjhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjacacacacacachjhjhjhjhjhjhjhjhjhjhjhjacacacachjhjhjhjhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacachjhjhjhjhjhjhjhjacacacacaaaaaahjhjhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacacachjhjhjhjhjhjiMhjhjhjhjhjhjhjhjhjhjhjacacacacaaaaaaaajfaaaaaajgjgaajgjgjgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjhjacacachjhjhjiMhjhjiMhjhjhjhjhjhjhjhjhjacacacachjhjaaaaaaaaaaaajgjgjgjgjgjgjgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjhjhjacacacachjhjhjhjhjhjhjhjhjhjhjhjhjhjhjacachjhjhjhjhjaaaaaaaaaajgjgjgjgaajgjgjgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahjhjacacacacacachjhjhjhjhjhjhjhjhjhjhjhjacacacachjhjhjhjhjaaaaaaaaaajgjgjgjgaajgjgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacachjhjhjhjhjhjhjhjacacacacaaaaaahjhjhjaaaaaaaaaaaajgjgjgaaaajgjgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaajgjgjgaaaajgjgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index 392cb1df725..ead97277ac7 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -770,9 +770,9 @@ "oP" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{tag = "icon-redbluefull (WEST)"; icon_state = "redbluefull"; dir = 8},/area/awaymission/centcomAway/thunderdome) "oQ" = (/mob/living/simple_animal/hostile/russian/ranged{loot = list(/obj/effect/landmark/mobcorpse/russian/ranged)},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome) "oR" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome) -"oS" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) +"oS" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) "oT" = (/obj/machinery/light{dir = 1; in_use = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) -"oU" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) +"oU" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/hatchet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/centcomAway/thunderdome) "oV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/centcomAway/thunderdome) "oW" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) "oX" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "white"},/area/awaymission/centcomAway/thunderdome) diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index c92b7a15630..fe0d5aaed3f 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -777,7 +777,7 @@ "aoW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/flasher/portable,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "aoX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/armoury) "aoY" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/box/teargas{pixel_x = -3; pixel_y = -3},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) -"aoZ" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) +"aoZ" = (/obj/structure/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/lockbox/mindshield,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "apa" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury) "apb" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/security/armoury) "apc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/security,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/seceqstorage) @@ -6010,7 +6010,7 @@ "clD" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "clE" = (/obj/machinery/vending/medical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration) "clF" = (/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) -"clG" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) +"clG" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/mindshield,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "clH" = (/obj/structure/table,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration) "clI" = (/obj/item/weapon/ore/silver,/obj/item/weapon/ore/silver,/obj/structure/closet/crate,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/quartermaster/miningdock) "clJ" = (/obj/machinery/camera{c_tag = "Mining Dock External"; dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/quartermaster/miningdock) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index 9a0255b509d..a5692e0ca1e 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -253,6 +253,7 @@ "eS" = (/turf/unsimulated/floor{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/centcom/control) "eT" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/specops) "eU" = (/obj/structure/table/woodentable,/obj/item/stack/spacecash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"eV" = (/obj/structure/rack,/obj/item/weapon/implanter/adrenalin{pixel_x = 12; pixel_y = -12},/obj/item/weapon/implanter/emp{pixel_x = 9; pixel_y = -9},/obj/item/weapon/implanter/explosive{pixel_x = 6; pixel_y = -6},/obj/item/weapon/implanter/explosive_macro{pixel_x = 3; pixel_y = -3},/obj/item/weapon/implanter/freedom,/obj/item/weapon/implanter/krav_maga{pixel_x = -9; pixel_y = 9},/obj/item/weapon/implanter/mindshield{pixel_x = -6; pixel_y = 6},/obj/item/weapon/implanter/storage{pixel_x = -3; pixel_y = 3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "eX" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/holofloor{tag = "icon-snow"; icon_state = "snow"},/area/holodeck/source_snowfield) "eY" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor{tag = "icon-grimy"; icon_state = "grimy"; dir = 2},/area/holodeck/source_meetinghall) "eZ" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_basketball) @@ -485,7 +486,6 @@ "jE" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/twohanded/staff/broom,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) "jF" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/twohanded/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) "jG" = (/obj/structure/rack,/obj/item/weapon/storage/backpack/holding{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/backpack/satchel,/obj/item/weapon/storage/backpack/holding{pixel_x = -6; pixel_y = 6},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) -"jH" = (/obj/structure/rack,/obj/item/weapon/implanter/adrenalin{pixel_x = 12; pixel_y = -12},/obj/item/weapon/implanter/emp{pixel_x = 9; pixel_y = -9},/obj/item/weapon/implanter/explosive{pixel_x = 6; pixel_y = -6},/obj/item/weapon/implanter/explosive_macro{pixel_x = 3; pixel_y = -3},/obj/item/weapon/implanter/freedom,/obj/item/weapon/implanter/krav_maga{pixel_x = -9; pixel_y = 9},/obj/item/weapon/implanter/loyalty{pixel_x = -6; pixel_y = 6},/obj/item/weapon/implanter/storage{pixel_x = -3; pixel_y = 3},/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/admin) "jI" = (/turf/space,/area/adminconstruction) "jJ" = (/obj/effect/decal/warning_stripes/north,/turf/simulated/floor/plating/airless,/area/syndicate_mothership) "jK" = (/obj/effect/decal/warning_stripes/north,/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/syndicate_mothership) @@ -1621,7 +1621,7 @@ aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbW aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDNDZDKDKDKDKDKEdDADTDKDUDKDVDWDXDYDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEfEgDKEaEbEcDKEiDADKDKDKDKDKDKDKEeDIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNiQDAiRDKDKDKDKDKjfDAEjDKEkDKElDWDXDYEfaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN -aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAjGEhDKDKDKEhjHDADKDKDKDKDKDKDKEmDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN +aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDAjGEhDKDKDKEheVDADKDKDKDKDKDKDKEmDADvaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDuaNDADwDwDMEoDMDwDwDwDwDwDMEpDMDwDwDwEnaNDtDwEqErErEsDwDuaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNDADwDwEtDKDKDKDKDKDKDKDKDKDKDKDKEuDAEnaNDvDwEvEwExEyEwEzDwjIaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN aNaNaNaNaNaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNEBDKECDKDKDKDKDKDKDKDKDKDKDKDKDKDKDAaNaNaNEDEEEFEwEwEwEGEDaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 80086cd75f9..1d7f436770d 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -53,15 +53,11 @@ Pipelines + Other Objects -> Pipe network stored = new(src, make_from = src) /obj/machinery/atmospherics/Destroy() - if(stored) - qdel(stored) - stored = null + QDEL_NULL(stored) for(var/mob/living/L in src) //ventcrawling is serious business L.remove_ventcrawl() L.forceMove(get_turf(src)) - if(pipe_image) - qdel(pipe_image) //we have to del it, or it might keep a ref somewhere else - pipe_image = null + QDEL_NULL(pipe_image) //we have to del it, or it might keep a ref somewhere else return ..() // Icons/overlays/underlays diff --git a/code/ATMOSPHERICS/pipes/pipe.dm b/code/ATMOSPHERICS/pipes/pipe.dm index f319e563835..05c5d18df99 100644 --- a/code/ATMOSPHERICS/pipes/pipe.dm +++ b/code/ATMOSPHERICS/pipes/pipe.dm @@ -21,8 +21,7 @@ /obj/machinery/atmospherics/pipe/Destroy() releaseAirToTurf() - qdel(air_temporary) - air_temporary = null + QDEL_NULL(air_temporary) var/turf/T = loc for(var/obj/machinery/meter/meter in T) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 7004e6c55fb..28c1a7e6860 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -70,8 +70,7 @@ /turf/simulated/Destroy() visibilityChanged() - if(active_hotspot) - qdel(active_hotspot) + QDEL_NULL(active_hotspot) return ..() /turf/simulated/assume_air(datum/gas_mixture/giver) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 6771d8062fc..4126fe1725f 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -7,7 +7,7 @@ #define STATUS_HUD "2" // a simple line rounding the mob's number health #define ID_HUD "3" // the job asigned to your ID #define WANTED_HUD "4" // wanted, released, parroled, security status -#define IMPLOYAL_HUD "5" // loyality implant +#define IMPMINDSHIELD_HUD "5" // mindshield implant #define IMPCHEM_HUD "6" // chemical implant #define IMPTRACK_HUD "7" // tracking implant #define DIAG_STAT_HUD "8" // Silicon/Mech Status diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm index 5a96b6e954f..97cea621dae 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mob.dm @@ -124,6 +124,9 @@ #define islarva(A) (istype((A), /mob/living/carbon/alien/larva)) #define isslime(A) (istype((A), /mob/living/carbon/slime)) +//Human sub-species +#define isabductor(A) (is_species(A, "Abductor")) + #define isanimal(A) (istype((A), /mob/living/simple_animal)) #define iscorgi(A) (istype((A), /mob/living/simple_animal/pet/corgi)) #define ismouse(A) (istype((A), /mob/living/simple_animal/mouse)) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 2c989753bf9..0abf2ac1af3 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -363,6 +363,13 @@ proc/add_logs(mob/user, mob/target, what_done, var/object=null, var/addition=nul if(progress) qdel(progbar) +/proc/is_species(A, species_name) + . = FALSE + if(ishuman(A)) + var/mob/living/carbon/human/H = A + if(H.get_species() == species_name) + . = TRUE + /proc/admin_mob_info(mob/M, mob/user = usr) if(!ismob(M)) to_chat(user, "This can only be used on instances of type /mob") diff --git a/code/__HELPERS/qdel.dm b/code/__HELPERS/qdel.dm new file mode 100644 index 00000000000..e8a11f27a66 --- /dev/null +++ b/code/__HELPERS/qdel.dm @@ -0,0 +1,2 @@ +#define QDEL_IN(item, time) addtimer(GLOBAL_PROC, "qdel", time, FALSE, item) +#define QDEL_NULL(item) if(item) { qdel(item); item = null } \ No newline at end of file diff --git a/code/_globalvars/station.dm b/code/_globalvars/station.dm index f08afe5efb9..6d2578e5b88 100644 --- a/code/_globalvars/station.dm +++ b/code/_globalvars/station.dm @@ -1,7 +1,7 @@ var/global/datum/datacore/data_core = null var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) -var/CHARGELEVEL = 0.0005 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) +var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) var/list/powernets = list() var/list/deferred_powernet_rebuilds = list() diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 29e7c676ac4..08fe2347cb4 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -54,8 +54,7 @@ qdel(hide_actions_toggle) hide_actions_toggle = null - qdel(module_store_icon) - module_store_icon = null + QDEL_NULL(module_store_icon) if(static_inventory.len) for(var/thing in static_inventory) diff --git a/code/controllers/Processes/shuttles.dm b/code/controllers/Processes/shuttles.dm index b6b078323e9..c027a63b902 100644 --- a/code/controllers/Processes/shuttles.dm +++ b/code/controllers/Processes/shuttles.dm @@ -160,6 +160,8 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 /datum/controller/process/shuttle/proc/canRecall() if(emergency.mode != SHUTTLE_CALL) return + if(!emergency.canRecall) + return if(ticker.mode.name == "meteor") return if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) diff --git a/code/datums/action.dm b/code/datums/action.dm index 62a2bd9a39d..0bec4e37d35 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -29,8 +29,7 @@ Remove(owner) if(target) target = null - qdel(button) - button = null + QDEL_NULL(button) return ..() /datum/action/proc/Grant(mob/M) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 57124aae742..886661d4fdb 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -157,7 +157,7 @@ var/mob/living/carbon/human/H = current if(ishuman(current)) /** Impanted**/ - if(isloyal(H)) + if(ismindshielded(H)) text = "Mindshield Implant:Remove|Implanted
" else text = "Mindshield Implant:No Implant|Implant him!
" @@ -167,7 +167,7 @@ if(ticker.mode.config_tag=="revolution") text += uppertext(text) text = "[text]: " - if(isloyal(H)) + if(ismindshielded(H)) text += "NO|headrev|rev" else if(src in ticker.mode.head_revolutionaries) text += "no|HEADREV|rev" @@ -203,7 +203,7 @@ if(ticker.mode.config_tag=="cult") text = uppertext(text) text = "[text]: " - if(isloyal(H)) + if(ismindshielded(H)) text += "NO|cultist" else if(src in ticker.mode.cult) text += "no|CULTIST" @@ -657,7 +657,7 @@ switch(href_list["implant"]) if("remove") - for(var/obj/item/weapon/implant/loyalty/I in H.contents) + for(var/obj/item/weapon/implant/mindshield/I in H.contents) if(I && I.implanted) I.removed(H) qdel(I) @@ -665,7 +665,7 @@ log_admin("[key_name(usr)] has deactivated [key_name(current)]'s mindshield implant") message_admins("[key_name_admin(usr)] has deactivated [key_name_admin(current)]'s mindshield implant") if("add") - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(H) L.imp_in = H L.implanted = 1 H.sec_hud_set_implants() diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 8dea043eea5..9bc700ebabe 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -218,7 +218,7 @@ if(istype(I)) apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Officer"), "Nanotrasen Navy Officer") - var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H) + var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H) L.imp_in = H L.implanted = 1 H.sec_hud_set_implants() @@ -250,7 +250,7 @@ /obj/item/weapon/reagent_containers/hypospray/combat/nanites = 1, /obj/item/weapon/storage/box/zipties = 1, /obj/item/clothing/shoes/magboots/advance = 1, - /obj/item/weapon/implanter/loyalty = 1, + /obj/item/weapon/implanter/mindshield = 1, ) /datum/outfit/admin/nt_special_ops_officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -329,7 +329,7 @@ if(istype(I)) apply_to_card(I, H, get_centcom_access("Nanotrasen Navy Captain"), "Nanotrasen Navy Captain") - var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H) + var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H) L.imp_in = H L.implanted = 1 H.sec_hud_set_implants() @@ -755,7 +755,7 @@ if(istype(I)) apply_to_card(I, H, get_centcom_access("Emergency Response Team Member"), "Emergency Response Team Member") - var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/loyalty(H) + var/obj/item/weapon/implant/L = new /obj/item/weapon/implant/mindshield(H) L.imp_in = H L.implanted = 1 H.sec_hud_set_implants() diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 652f54af440..d32d5bac058 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -100,7 +100,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/action_icon = 'icons/mob/actions.dmi' var/action_icon_state = "spell_default" var/action_background_icon_state = "bg_spell" - + var/sound = null //The sound the spell makes when it is cast /obj/effect/proc_holder/spell/proc/cast_check(skipcharge = 0, mob/living/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell @@ -184,8 +184,8 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin user.visible_message(invocation, invocation_emote_self) //same style as in mob/living/emote.dm /obj/effect/proc_holder/spell/proc/playMagSound() - playsound(get_turf(usr), sound,50,1) - + playsound(get_turf(usr), sound,50,1) + /obj/effect/proc_holder/spell/New() ..() action = new(src) @@ -194,8 +194,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin charge_counter = charge_max /obj/effect/proc_holder/spell/Destroy() - qdel(action) - action = null + QDEL_NULL(action) return ..() /obj/effect/proc_holder/spell/Click() @@ -223,10 +222,10 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin spawn(0) if(charge_type == "recharge" && recharge) start_recharge() - + if(sound) - playMagSound() - + playMagSound() + if(prob(critfailchance)) critfail(targets) else diff --git a/code/datums/spells/charge.dm b/code/datums/spells/charge.dm index 1551dbc3b68..7f9a02bc01a 100644 --- a/code/datums/spells/charge.dm +++ b/code/datums/spells/charge.dm @@ -26,9 +26,9 @@ if(M.mind) for(var/obj/effect/proc_holder/spell/S in M.mind.spell_list) S.charge_counter = S.charge_max - to_chat(M, "you feel raw magic flowing through you, it feels good!") + to_chat(M, "You feel raw magical energy flowing through you, it feels good!") else - to_chat(M, "you feel very strange for a moment, but then it passes.") + to_chat(M, "You feel very strange for a moment, but then it passes.") burnt_out = 1 charged_item = M break @@ -62,11 +62,12 @@ break else if(istype(item, /obj/item/weapon/stock_parts/cell/)) var/obj/item/weapon/stock_parts/cell/C = item - if(prob(80)) - C.maxcharge -= 200 - if(C.maxcharge <= 1) //Div by 0 protection - C.maxcharge = 1 - burnt_out = 1 + if(!C.self_recharge) + if(prob(80)) + C.maxcharge -= 200 + if(C.maxcharge <= 1) //Div by 0 protection + C.maxcharge = 1 + burnt_out = 1 C.charge = C.maxcharge charged_item = C break @@ -75,17 +76,18 @@ for(I in item.contents) if(istype(I, /obj/item/weapon/stock_parts/cell/)) var/obj/item/weapon/stock_parts/cell/C = I - if(prob(80)) - C.maxcharge -= 200 - if(C.maxcharge <= 1) //Div by 0 protection - C.maxcharge = 1 - burnt_out = 1 + if(!C.self_recharge) + if(prob(80)) + C.maxcharge -= 200 + if(C.maxcharge <= 1) //Div by 0 protection + C.maxcharge = 1 + burnt_out = 1 C.charge = C.maxcharge item.update_icon() charged_item = item break if(!charged_item) - to_chat(L, "you feel magical power surging to your hands, but the feeling rapidly fades...") + to_chat(L, "You feel magical power surging to your hands, but the feeling rapidly fades...") else if(burnt_out) to_chat(L, "[charged_item] doesn't seem to be reacting to the spell...") else diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index e4eda250cf9..4e624696a10 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -376,9 +376,9 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /////// Implants & etc -/datum/supply_packs/security/armory/loyalty +/datum/supply_packs/security/armory/mindshield name = "Mindshield Implants Crate" - contains = list (/obj/item/weapon/storage/lockbox/loyalty) + contains = list (/obj/item/weapon/storage/lockbox/mindshield) cost = 40 containername = "mindshield implant crate" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 3f0b51bf1e0..1cf08abebd0 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -352,6 +352,7 @@ var/list/uplink_items = list() /datum/uplink_item/jobspecific/poison_pen name = "Poison Pen" desc = "Cutting edge of deadly writing implements technology, this gadget will infuse any piece of paper with delayed contact poison." + reference = "PP" item = /obj/item/weapon/pen/poison cost = 2 excludefrom = list(/datum/game_mode/nuclear) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a7d464fb9db..b5d25c7f5a1 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -76,12 +76,10 @@ qdel(AA) alternate_appearances = null - if(reagents) - qdel(reagents) - reagents = null + QDEL_NULL(reagents) invisibility = 101 return ..() - + //Hook for running code when a dir change occurs /atom/proc/setDir(newdir) dir = newdir diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 240c53b0025..2a6aa2b3a39 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -41,7 +41,7 @@ hud_icons = list(ID_HUD) /datum/atom_hud/data/human/security/advanced - hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD, WANTED_HUD) + hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPMINDSHIELD_HUD, IMPCHEM_HUD, WANTED_HUD) /datum/atom_hud/data/diagnostic hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD) @@ -172,7 +172,7 @@ /mob/living/carbon/human/proc/sec_hud_set_implants() var/image/holder - for(var/i in list(IMPTRACK_HUD, IMPLOYAL_HUD, IMPCHEM_HUD)) + for(var/i in list(IMPTRACK_HUD, IMPMINDSHIELD_HUD, IMPCHEM_HUD)) holder = hud_list[i] holder.icon_state = null for(var/obj/item/weapon/implant/I in src) @@ -180,8 +180,8 @@ if(istype(I,/obj/item/weapon/implant/tracking)) holder = hud_list[IMPTRACK_HUD] holder.icon_state = "hud_imp_tracking" - else if(istype(I,/obj/item/weapon/implant/loyalty)) - holder = hud_list[IMPLOYAL_HUD] + else if(istype(I,/obj/item/weapon/implant/mindshield)) + holder = hud_list[IMPMINDSHIELD_HUD] holder.icon_state = "hud_imp_loyal" else if(istype(I,/obj/item/weapon/implant/chem)) holder = hud_list[IMPCHEM_HUD] diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index e1f4309598e..6a7fa32c5c3 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -91,7 +91,7 @@ if(player.current) // Remove mindshield-implanted mobs from the list if(ishuman(player.current)) var/mob/living/carbon/human/H = player.current - for(var/obj/item/weapon/implant/loyalty/I in H.contents) + for(var/obj/item/weapon/implant/mindshield/I in H.contents) if(I && I.implanted) possible_traitors -= player diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index bce324ade0c..ff7c74a6fbb 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -19,7 +19,7 @@ var/global/list/all_cults = list() return 0 if(ishuman(mind.current)) var/mob/living/carbon/human/H = mind.current - if(isloyal(H)) + if(ismindshielded(H)) return 0 if(issilicon(mind.current)) return 0 //can't convert machines, that's ratvar's thing diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index e5c11ac387d..6ab24e1d8b4 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -173,8 +173,8 @@ /obj/item/clothing/suit/hooded/cultrobes/berserker name = "flagellant's robes" desc = "Blood-soaked robes infused with dark magic; allows the user to move at inhuman speeds, but at the cost of increased damage." - icon_state = "hardsuit-beserker" - item_state = "hardsuit-beserker" + icon_state = "hardsuit-berserker" + item_state = "hardsuit-berserker" flags_inv = HIDEJUMPSUIT allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS diff --git a/code/game/gamemodes/cult/cult_objectives.dm b/code/game/gamemodes/cult/cult_objectives.dm index 2fe00023c20..4b30bbd37b0 100644 --- a/code/game/gamemodes/cult/cult_objectives.dm +++ b/code/game/gamemodes/cult/cult_objectives.dm @@ -145,6 +145,19 @@ message_admins("Last Cult Objective: [last_objective]") log_admin("Last Cult Objective: [last_objective]") +/datum/game_mode/cult/proc/get_possible_sac_targets() + var/list/possible_sac_targets = list() + for(var/mob/living/carbon/human/player in player_list) + if(player.mind && !is_convertable_to_cult(player.mind) && (player.stat != DEAD)) + possible_sac_targets += player.mind + if(!possible_sac_targets.len) + //There are no living Unconvertables on the station. Looking for a Sacrifice Target among the ordinary crewmembers + for(var/mob/living/carbon/human/player in player_list) + if(is_secure_level(player.z)) //We can't sacrifice people that are on the centcom z-level + continue + if(player.mind && !(player.mind in cult) && (player.stat != DEAD))//make DAMN sure they are not dead + possible_sac_targets += player.mind + return possible_sac_targets /datum/game_mode/cult/proc/pick_objective() var/list/possible_objectives = list() @@ -153,19 +166,7 @@ possible_objectives |= "bloodspill" if(!sacrificed.len) - var/list/possible_targets = list() - for(var/mob/living/carbon/human/player in player_list) - if(player.mind && !is_convertable_to_cult(player.mind) && (player.stat != DEAD)) - possible_targets += player.mind - - if(!possible_targets.len) - //There are no living Unconvertables on the station. Looking for a Sacrifice Target among the ordinary crewmembers - for(var/mob/living/carbon/human/player in player_list) - if(is_secure_level(player.z)) //We can't sacrifice people that are on the centcom z-level - continue - if(player.mind && !(player.mind in cult) && (player.stat != DEAD))//make DAMN sure they are not dead - possible_targets += player.mind - + var/list/possible_targets = get_possible_sac_targets() if(possible_targets.len > 0) sacrifice_target = pick(possible_targets) possible_objectives |= "sacrifice" diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 8d7d8883fdb..e0be012f328 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -102,7 +102,7 @@ If any are found, the user can choose which rune to send to. Upon activation, the rune teleports everything above it to the selected rune.

" text += "Rite of Enlightenment
This rune is critical to the success of the cult. It will allow you to convert normal crew members into cultists. \ - To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is loyalty-implanted or a certain assignment, they will \ + To do this, simply place the crew member upon the rune and invoke it. This rune requires two invokers to use. If the target to be converted is mindshielded or a certain assignment, they will \ be unable to be converted. People [ticker.mode.cultdat.entity_title3] wishes sacrificed will also be ineligible for conversion, and anyone with a shielding presence like the null rod will not be converted.
\ Successful conversions will produce a tome for the new cultist.

" diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 15fdfc6f61c..14fe620cc3c 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -323,7 +323,7 @@ var/list/teleport_runes = list() //Rite of Enlightenment: Converts a normal crewmember to the cult. Faster for every cultist nearby. /obj/effect/rune/convert cultist_name = "Rite of Enlightenment" - cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on loyalty-implanted crew." + cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on mindshielded crew." invocation = "Mah'weyh pleggh at e'ntrath!" icon_state = "3" req_cultists = 2 @@ -336,7 +336,7 @@ var/list/teleport_runes = list() var/turf/T = get_turf(src) for(var/mob/living/M in T.contents) - if(!iscultist(M) && !isloyal(M)) + if(!iscultist(M) && !ismindshielded(M)) convertees.Add(M) if(!convertees.len) fail_invoke() @@ -937,6 +937,7 @@ var/list/teleport_runes = list() icon_state = "6" construct_invoke = 0 color = rgb(200, 0, 0) + var/list/summoned_guys = list() /obj/effect/rune/manifest/New(loc) ..() @@ -968,7 +969,7 @@ var/list/teleport_runes = list() if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !jobban_isbanned(O, ROLE_SYNDICATE)) ghosts_on_rune |= O var/mob/dead/observer/ghost_to_spawn = pick(ghosts_on_rune) - var/mob/living/carbon/human/dummy/new_human = new(get_turf(src)) + var/mob/living/carbon/human/new_human = new(get_turf(src)) new_human.real_name = ghost_to_spawn.real_name new_human.alpha = 150 //Makes them translucent new_human.color = "grey" //heh..cult greytide...litterly... @@ -983,6 +984,7 @@ var/list/teleport_runes = list() N.mouse_opacity = 0 new_human.key = ghost_to_spawn.key ticker.mode.add_cultist(new_human.mind, 0) + summoned_guys |= new_human to_chat(new_human, "You are a servant of [ticker.mode.cultdat.entity_title3]. You have been made semi-corporeal by the cult of [ticker.mode.cultdat.entity_name], and you are to serve them at all costs.") while(user in get_turf(src)) @@ -997,4 +999,13 @@ var/list/teleport_runes = list() "Your link to the world fades. Your form breaks apart.") for(var/obj/I in new_human) new_human.unEquip(I) + summoned_guys -= new_human new_human.dust() + +/obj/effect/rune/manifest/Destroy() + for(var/mob/living/carbon/human/guy in summoned_guys) + for(var/obj/I in guy) + guy.unEquip(I) + guy.dust() + summoned_guys.Cut() + return ..() diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 13a9e4ec814..0d04c3ee615 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -252,7 +252,7 @@ V.flags |= NODROP agent.equip_to_slot_or_del(V, slot_wear_suit) agent.equip_to_slot_or_del(new /obj/item/weapon/abductor_baton(agent), slot_in_backpack) - agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/decloner/alien(agent), slot_in_backpack) + agent.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/alien(agent), slot_in_backpack) agent.equip_to_slot_or_del(new /obj/item/device/abductor/silencer(agent), slot_in_backpack) agent.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/abductor(agent), slot_head) agent.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/military/abductor/full(agent), slot_belt) @@ -376,9 +376,23 @@ explanation_text = "Steal all" /datum/objective/abductee/steal/New() - var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap")) + var/target = pick(list("pets","lights","monkeys","fruits","shoes","bars of soap", "weapons", "computers", "organs")) explanation_text+=" [target]." +/datum/objective/abductee/paint + explanation_text = "The station is hideous. You must color it all" + +/datum/objective/abductee/paint/New() + var/color = pick(list("red", "blue", "green", "yellow", "orange", "purple", "black", "in rainbows", "in blood")) + explanation_text+= " [color]!" + +/datum/objective/abductee/speech + explanation_text = "Your brain is broken... you can only communicate in" + +/datum/objective/abductee/speech/New() + var/style = pick(list("pantomime", "rhyme", "haiku", "extended metaphors", "riddles", "extremely literal terms", "sound effects", "military jargon")) + explanation_text+= " [style]." + /datum/objective/abductee/capture explanation_text = "Capture" @@ -418,16 +432,16 @@ explanation_text = "Start a collection of corpses. Don't kill people to get these corpses." /datum/objective/abductee/floors - explanation_text = "Replace all the floor tiles with carpeting, wooden boards, or grass." + explanation_text = "Replace all the floor tiles with wood, carpeting, grass or bling." /datum/objective/abductee/POWERUNLIMITED explanation_text = "Flood the station's powernet with as much electricity as you can." /datum/objective/abductee/pristine - explanation_text = "Ensure the station is in absolutely pristine condition." + explanation_text = "The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition." -/datum/objective/abductee/window - explanation_text = "Replace all normal windows with reinforced windows." +/datum/objective/abductee/nowalls + explanation_text = "The crew must get to know one another better. Break down the walls inside the station!" /datum/objective/abductee/nations explanation_text = "Ensure your department prospers over all else." @@ -435,17 +449,11 @@ /datum/objective/abductee/abductception explanation_text = "You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine." -/datum/objective/abductee/ghosts - explanation_text = "Conduct a seance with the spirits of the afterlife." - /datum/objective/abductee/summon - explanation_text = "Conduct a ritual to summon an elder god." + explanation_text = "The elder gods hunger. Gather a cult and conduct a ritual to summon one." /datum/objective/abductee/machine - explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power." - -/datum/objective/abductee/prevent - explanation_text = "You have been enlightened. This knowledge must not escape. Ensure nobody else can become enlightened." + explanation_text = "You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last." /datum/objective/abductee/calling explanation_text = "Call forth a spirit from the other side." @@ -453,7 +461,7 @@ /datum/objective/abductee/calling/New() var/mob/dead/D = pick(dead_mob_list) if(D) - explanation_text = "You know that [D] has perished. Call them from the spirit realm." + explanation_text = "You know that [D] has perished. Hold a seance to call them from the spirit realm." /datum/objective/abductee/social_experiment explanation_text = "This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth." @@ -465,7 +473,7 @@ explanation_text = "Nanotrasen is abusing the animals! Save as many as you can!" /datum/objective/abductee/defect - explanation_text = "Defect from your employer." + explanation_text = "Fuck the system! Defect from the station and start an independent colony in space, Mining Outpost or the derelict. Recruit crewmates if you can." /datum/objective/abductee/promote explanation_text = "Climb the corporate ladder all the way to the top!" @@ -478,3 +486,33 @@ /datum/objective/abductee/pragnant explanation_text = "You are pregnant and soon due. Find a safe place to deliver your baby." + +/datum/objective/abductee/engine + explanation_text = "Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds." + +/datum/objective/abductee/music + explanation_text = "You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument!" + +/datum/objective/abductee/clown + explanation_text = "The clown is not funny. You can do better! Steal his audience and make the crew laugh!" + +/datum/objective/abductee/party + explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" + +/datum/objective/abductee/pets + explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" + +/datum/objective/abductee/conspiracy + explanation_text = "The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people!" + +/datum/objective/abductee/stalker + explanation_text = "The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it." + +/datum/objective/abductee/narrator + explanation_text = "You're the narrator of this tale. Follow around the protagonists to tell their story." + +/datum/objective/abductee/lurve + explanation_text = "You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you!" + +/datum/objective/abductee/sixthsense + explanation_text = "You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo." \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 8f026650b7c..2a72c4a9b9b 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -11,7 +11,7 @@ icon_state = "vest_stealth" item_state = "armor" blood_overlay_type = "armor" - origin_tech = "materials=5;biotech=4;powerstorage=5;abductor=3" + origin_tech = "magnets=7;biotech=4;powerstorage=4;abductor=4" armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15) actions_types = list(/datum/action/item_action/hands_free/activate) var/mode = VEST_STEALTH @@ -34,7 +34,6 @@ mode = VEST_STEALTH armor = stealth_armor icon_state = "vest_stealth" - if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.update_inv_wear_suit() @@ -64,7 +63,6 @@ M.overlays = disguise.overlays M.update_inv_r_hand() M.update_inv_l_hand() - return /obj/item/clothing/suit/armor/abductor/vest/proc/DeactivateStealth() if(!stealth_active) @@ -77,7 +75,6 @@ M.name_override = null M.overlays.Cut() M.regenerate_icons() - return /obj/item/clothing/suit/armor/abductor/vest/hit_reaction() DeactivateStealth() @@ -115,19 +112,11 @@ if(combat_cooldown==initial(combat_cooldown)) processing_objects.Remove(src) -/obj/item/device/abductor/proc/IsAbductor(user) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.get_species() != "Abductor") - return 0 - return 1 - return 0 - /obj/item/device/abductor/proc/AbductorCheck(user) - if(IsAbductor(user)) - return 1 + if(isabductor(user)) + return TRUE to_chat(user, "You can't figure how this works!") - return 0 + return FALSE /obj/item/device/abductor/proc/ScientistCheck(user) var/mob/living/carbon/human/H = user @@ -140,7 +129,7 @@ icon = 'icons/obj/abductor.dmi' icon_state = "gizmo_scan" item_state = "gizmo" - origin_tech = "materials=5;magnets=5;bluespace=6;abductor=4" + origin_tech = "engineering=7;magnets=4;bluespace=4;abductor=3" var/mode = GIZMO_SCAN var/mob/living/marked = null var/obj/machinery/abductor/console/console @@ -187,7 +176,7 @@ mark(target, user) /obj/item/device/abductor/gizmo/proc/scan(atom/target, mob/living/user) - if(istype(target,/mob/living/carbon/human)) + if(ishuman(target)) if(console!=null) console.AddSnapshot(target) to_chat(user, "You scan [target] and add them to the database.") @@ -196,8 +185,8 @@ if(marked == target) to_chat(user, "This specimen is already marked!") return - if(istype(target,/mob/living/carbon/human)) - if(IsAbductor(target)) + if(ishuman(target)) + if(isabductor(target)) marked = target to_chat(user, "You mark [target] for future retrieval.") else @@ -221,7 +210,7 @@ icon = 'icons/obj/abductor.dmi' icon_state = "silencer" item_state = "silencer" - origin_tech = "materials=5;magnets=5;abductor=3" + origin_tech = "materials=4;programming=7;abductor=3" /obj/item/device/abductor/silencer/attack(mob/living/M, mob/user) if(!AbductorCheck(user)) @@ -258,61 +247,15 @@ if(!istype(I,/obj/item/device/radio/headset)) r.broadcasting = 0 //goddamned headset hacks - -/obj/item/weapon/implant/abductor - name = "recall implant" - desc = "Returns you to the mothership." - icon = 'icons/obj/abductor.dmi' - icon_state = "implant" - activated = 1 - origin_tech = "materials=2;biotech=3;magnets=4;bluespace=5;abductor=5" - var/obj/machinery/abductor/pad/home - var/cooldown = 30 - -/obj/item/weapon/implant/abductor/activate() - if(cooldown == initial(cooldown)) - home.Retrieve(imp_in,1) - cooldown = 0 - processing_objects.Add(src) - else - to_chat(imp_in, "You must wait [30 - cooldown] seconds to use [src] again!") - return - -/obj/item/weapon/implant/abductor/process() - if(cooldown < initial(cooldown)) - cooldown++ - if(cooldown == initial(cooldown)) - processing_objects.Remove(src) - -/obj/item/weapon/implant/abductor/implant(var/mob/source, var/mob/user) - if(..()) - var/obj/machinery/abductor/console/console - if(ishuman(source)) - var/mob/living/carbon/human/H = source - if(H.get_species() == "Abductor") - console = get_team_console(H.mind.abductor.team) - home = console.pad - - if(!home) - console = get_team_console(pick(1, 2, 3, 4)) - home = console.pad - return 1 - -/obj/item/weapon/implant/abductor/proc/get_team_console(var/team) - var/obj/machinery/abductor/console/console - for(var/obj/machinery/abductor/console/c in abductor_equipment) - if(c.team == team) - console = c - break - return console - -/obj/item/weapon/gun/energy/decloner/alien +/obj/item/weapon/gun/energy/alien name = "alien pistol" desc = "A complicated gun that fires bursts of high-intensity radiation." + ammo_type = list(/obj/item/ammo_casing/energy/declone) + restricted_species = list("Abductor") icon_state = "alienpistol" item_state = "alienpistol" - origin_tech = "combat=5;materials=4;powerstorage=3;abductor=3" - restricted_species = list("Abductor") + origin_tech = "combat=4;magnets=7;powerstorage=3;abductor=3" + trigger_guard = TRIGGER_GUARD_ALLOW_ALL /obj/item/weapon/paper/abductor name = "Dissection Guide" @@ -321,25 +264,29 @@
1.Acquire fresh specimen.
- 2.Put the specimen on operating table
- 3.Apply scalpel to the chest, preparing for dissection
- 4.Apply scalpel to specimen torso
- 5.Clamp bleeders on the specimen's torso
- 6.Retract skin from specimen's torso
- 7.Saw through the specimen's torso
- 8.Retract skin from specimen's torso again
- 9.Search through the specimen's torso with your hands to remove their heart
- 10.Insert replacement gland (Retrieve one from gland storage)
- 11.Cauterize the patient's torso
- 12.Consider dressing the specimen back to not disturb the habitat
- 13.Put the specimen in the experiment machinery
- 14.Choose one of the machine options and follow displayed instructions
+ 2.Put the specimen on operating table.
+ 3.Apply scalpel to the chest, preparing for experimental dissection.
+ 4.Apply scalpel to specimen's torso.
+ 5.Clamp bleeders on specimen's torso with a hemostat.
+ 6.Retract skin of specimen's torso with a retractor.
+ 7.Saw through the specimen's torso with a saw.
+ 8.Apply retractor again to specimen's torso.
+ 9.Search through the specimen's torso with your hands to remove any superfluous organs.
+ 10.Insert replacement gland (Retrieve one from gland storage).
+ 11.Cauterize the patient's torso with a cautery.
+ 12.Consider dressing the specimen back to not disturb the habitat.
+ 13.Put the specimen in the experiment machinery.
+ 14.Choose one of the machine options. The target will be analyzed and teleported to the selected drop-off point.
+ 15.You will receive one supply credit, and the subject will be counted towards your quota.

-Congratulations! You are now trained for xenobiology research!"} +Congratulations! You are now trained for invasive xenobiology research!"} /obj/item/weapon/paper/abductor/update_icon() return +/obj/item/weapon/paper/abductor/AltClick() + return + #define BATON_STUN 0 #define BATON_SLEEP 1 #define BATON_CUFF 2 @@ -354,9 +301,9 @@ Congratulations! You are now trained for xenobiology research!"} icon_state = "wonderprodStun" item_state = "wonderprod" slot_flags = SLOT_BELT - origin_tech = "materials=6;combat=5;biotech=7;abductor=4" + origin_tech = "materials=4;combat=4;biotech=7;abductor=4" force = 7 - w_class = 3 + w_class = WEIGHT_CLASS_NORMAL actions_types = list(/datum/action/item_action/toggle_mode) /obj/item/weapon/abductor_baton/proc/toggle(mob/living/user=usr) @@ -393,16 +340,8 @@ Congratulations! You are now trained for xenobiology research!"} icon_state = "wonderprodProbe" item_state = "wonderprodProbe" -/obj/item/weapon/abductor_baton/proc/IsAbductor(mob/living/user) - if(!ishuman(user)) - return 0 - var/mob/living/carbon/human/H = user - if(H.get_species() != "Abductor") - return 0 - return 1 - /obj/item/weapon/abductor_baton/attack(mob/target, mob/living/user) - if(!IsAbductor(user)) + if(!isabductor(user)) return if(isrobot(target)) @@ -434,7 +373,7 @@ Congratulations! You are now trained for xenobiology research!"} /obj/item/weapon/abductor_baton/attack_self(mob/living/user) toggle(user) - if(istype(user,/mob/living/carbon/human)) + if(ishuman(user)) var/mob/living/carbon/human/H = user H.update_inv_l_hand() H.update_inv_r_hand() @@ -456,10 +395,9 @@ Congratulations! You are now trained for xenobiology research!"} H.forcesay(hit_appends) add_logs(user, L, "stunned") - return /obj/item/weapon/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user) - if(L.stunned) + if(L.stunned || L.sleeping) L.visible_message("[user] has induced sleep in [L] with [src]!", \ "You suddenly feel very drowsy!") playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) @@ -470,7 +408,6 @@ Congratulations! You are now trained for xenobiology research!"} to_chat(user, "Sleep inducement works fully only on stunned specimens! ") L.visible_message("[user] tried to induce sleep in [L] with [src]!", \ "You suddenly feel drowsy!") - return /obj/item/weapon/abductor_baton/proc/CuffAttack(mob/living/L,mob/living/user) if(!iscarbon(L)) @@ -488,7 +425,6 @@ Congratulations! You are now trained for xenobiology research!"} add_logs(user, C, "handcuffed") else to_chat(user, "You fail to handcuff [C].") - return /obj/item/weapon/abductor_baton/proc/ProbeAttack(mob/living/L,mob/living/user) L.visible_message("[user] probes [L] with [src]!", \ @@ -502,7 +438,7 @@ Congratulations! You are now trained for xenobiology research!"} species = "[H.species.name]" if(L.mind && L.mind.changeling) species = "Changeling lifeform" - var/obj/item/organ/internal/gland/temp = locate() in H.internal_organs + var/obj/item/organ/internal/heart/gland/temp = locate() in H.internal_organs if(temp) helptext = "Experimental gland detected!" else @@ -517,7 +453,7 @@ Congratulations! You are now trained for xenobiology research!"} icon_state = "cuff_white" // Needs sprite breakouttime = 450 trashtype = /obj/item/weapon/restraints/handcuffs/energy/used - origin_tech = "materials=2;magnets=5;abductor=2" + origin_tech = "materials=4;magnets=5;abductor=2" /obj/item/weapon/restraints/handcuffs/energy/used desc = "energy discharge" @@ -545,36 +481,42 @@ Congratulations! You are now trained for xenobiology research!"} /obj/item/weapon/scalpel/alien name = "alien scalpel" + desc = "It's a gleaming sharp knife made out of silvery-green metal." icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/weapon/hemostat/alien name = "alien hemostat" + desc = "You've never seen this before." icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/weapon/retractor/alien name = "alien retractor" + desc = "You're not sure if you want the veil pulled back." icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/weapon/circular_saw/alien name = "alien saw" + desc = "Do the aliens also lose this, and need to find an alien hatchet?" icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/weapon/surgicaldrill/alien name = "alien drill" + desc = "Maybe alien surgeons have finally found a use for the drill." icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 /obj/item/weapon/cautery/alien name = "alien cautery" + desc = "Why would bloodless aliens have a tool to stop bleeding? Unless..." icon = 'icons/obj/abductor.dmi' origin_tech = "materials=2;biotech=2;abductor=2" toolspeed = 0.25 @@ -585,17 +527,12 @@ Congratulations! You are now trained for xenobiology research!"} icon_state = "alienhelmet" item_state = "alienhelmet" blockTracking = 1 - origin_tech = "materials=6;magnets=5;abductor=3" + origin_tech = "materials=7;magnets=4;abductor=3" flags = BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE // Operating Table / Beds / Lockers -/obj/machinery/optable/abductor - icon = 'icons/obj/abductor.dmi' - icon_state = "bed" - no_icon_updates = 1 //no icon updates for this; it's static. - /obj/structure/stool/bed/abductor name = "resting contraption" desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?" @@ -628,6 +565,16 @@ Congratulations! You are now trained for xenobiology research!"} new /obj/structure/table/abductor(src.loc) qdel(src) return + if(istype(I, /obj/item/stack/sheet/mineral/silver)) + var/obj/item/stack/sheet/P = I + if(P.get_amount() < 1) + to_chat(user, "You need one sheet of silver to do this!") + return + to_chat(user, "You start adding [P] to [src]...") + if(do_after(user, 50, target = src)) + P.use(1) + new /obj/machinery/optable/abductor(loc) + qdel(src) /obj/structure/table/abductor name = "alien table" @@ -637,10 +584,15 @@ Congratulations! You are now trained for xenobiology research!"} canSmoothWith = null parts = /obj/item/stack/sheet/mineral/abductor +/obj/machinery/optable/abductor + icon = 'icons/obj/abductor.dmi' + icon_state = "bed" + no_icon_updates = 1 //no icon updates for this; it's static. + /obj/structure/closet/abductor name = "alien locker" desc = "Contains secrets of the universe." icon_state = "abductor" icon_closed = "abductor" icon_opened = "abductoropen" - material_drop = /obj/item/stack/sheet/mineral/abductor + material_drop = /obj/item/stack/sheet/mineral/abductor \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm index 6021140b79f..18d073d6077 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm @@ -15,9 +15,9 @@ return 0 var/mob/living/carbon/human/H = user // You must either: Be of the abductor species, or contain an abductor implant - if(!(H.get_species() == "Abductor" || (locate(/obj/item/weapon/implant/abductor) in H))) - return 0 - return 1 + if((H.get_species() == "Abductor" || (locate(/obj/item/weapon/implant/abductor) in H))) + return 1 + return 0 /datum/surgery_step/internal/extract_organ @@ -47,11 +47,11 @@ return 1 else to_chat(user, "You don't find anything in [target]'s [target_zone]!") - return 0 + return 1 /datum/surgery_step/internal/gland_insert name = "insert gland" - allowed_tools = list(/obj/item/organ/internal/gland = 100) + allowed_tools = list(/obj/item/organ/internal/heart/gland = 100) time = 32 /datum/surgery_step/internal/gland_insert/begin_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -61,6 +61,6 @@ /datum/surgery_step/internal/gland_insert/end_step(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message("[user] inserts [tool] into [target].", "You insert [tool] into [target].") user.drop_item() - var/obj/item/organ/internal/gland/gland = tool + var/obj/item/organ/internal/heart/gland/gland = tool gland.insert(target, 2) return 1 diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index d3e60b2fb98..1c481e7c333 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -1,12 +1,11 @@ -/obj/item/organ/internal/gland +/obj/item/organ/internal/heart/gland name = "fleshy mass" desc = "A nausea-inducing hunk of twisting flesh and metal." icon = 'icons/obj/abductor.dmi' - parent_organ = "chest" - slot = "gland" icon_state = "gland" status = ORGAN_ROBOT - origin_tech = "materials=4;biotech=5;abductor=3" + origin_tech = "materials=4;biotech=7;abductor=3" + beating = TRUE var/cooldown_low = 300 var/cooldown_high = 300 var/next_activation = 0 @@ -16,30 +15,33 @@ tough = 1 //not easily broken by combat damage sterile = 1 //not very germy -/obj/item/organ/internal/gland/proc/ownerCheck() +/obj/item/organ/internal/heart/gland/proc/ownerCheck() if(ishuman(owner)) return 1 if(!human_only && iscarbon(owner)) return 1 return 0 -/obj/item/organ/internal/gland/proc/Start() +/obj/item/organ/internal/heart/gland/proc/Start() active = 1 next_activation = world.time + rand(cooldown_low,cooldown_high) -/obj/item/organ/internal/gland/remove(var/mob/living/carbon/M, special = 0) +/obj/item/organ/internal/heart/gland/remove(var/mob/living/carbon/M, special = 0) active = 0 if(initial(uses) == 1) uses = initial(uses) - ..() + . = ..() -/obj/item/organ/internal/gland/insert(var/mob/living/carbon/M, special = 0) +/obj/item/organ/internal/heart/gland/insert(var/mob/living/carbon/M, special = 0) ..() if(special != 2 && uses) // Special 2 means abductor surgery Start() -/obj/item/organ/internal/gland/on_life() +/obj/item/organ/internal/heart/gland/on_life() + if(!beating) + // alien glands are immune to stopping. + beating = TRUE if(!active) return if(!ownerCheck()) @@ -52,30 +54,28 @@ if(!uses) active = 0 -/obj/item/organ/internal/gland/proc/activate() +/obj/item/organ/internal/heart/gland/proc/activate() return -/obj/item/organ/internal/gland/heals - origin_tech = "materials=4;biotech=6;abductor=3" +/obj/item/organ/internal/heart/gland/heals cooldown_low = 200 cooldown_high = 400 uses = -1 icon_state = "health" -/obj/item/organ/internal/gland/heals/activate() +/obj/item/organ/internal/heart/gland/heals/activate() to_chat(owner, "You feel curiously revitalized.") owner.adjustBruteLoss(-20) owner.adjustOxyLoss(-20) owner.adjustFireLoss(-20) -/obj/item/organ/internal/gland/slime - origin_tech = "materials=4;biotech=6;abductor=3" +/obj/item/organ/internal/heart/gland/slime cooldown_low = 600 cooldown_high = 1200 uses = -1 icon_state = "slime" -/obj/item/organ/internal/gland/slime/activate() +/obj/item/organ/internal/heart/gland/slime/activate() to_chat(owner, "You feel nauseous!") owner.vomit(20) @@ -83,14 +83,14 @@ Slime.Friends = list(owner) Slime.Leader = owner -/obj/item/organ/internal/gland/mindshock - origin_tech = "materials=4;biotech=5;magnets=3;abductor=3" +/obj/item/organ/internal/heart/gland/mindshock + origin_tech = "materials=4;biotech=4;magnets=6;abductor=3" cooldown_low = 300 cooldown_high = 300 uses = -1 icon_state = "mindshock" -/obj/item/organ/internal/gland/mindshock/activate() +/obj/item/organ/internal/heart/gland/mindshock/activate() to_chat(owner, "You get a headache.") var/turf/T = get_turf(owner) @@ -100,40 +100,37 @@ to_chat(H, "You hear a buzz in your head.") H.AdjustConfused(20) -/obj/item/organ/internal/gland/pop - origin_tech = "materials=4;biotech=6;abductor=3" +/obj/item/organ/internal/heart/gland/pop cooldown_low = 900 cooldown_high = 1800 - uses = 6 + uses = -1 human_only = 1 icon_state = "species" -/obj/item/organ/internal/gland/pop/activate() +/obj/item/organ/internal/heart/gland/pop/activate() to_chat(owner, "You feel unlike yourself.") var/species = pick("Unathi","Skrell","Diona","Tajaran","Vulpkanin","Kidan","Grey","Diona") owner.set_species(species) -/obj/item/organ/internal/gland/ventcrawling +/obj/item/organ/internal/heart/gland/ventcrawling origin_tech = "materials=4;biotech=5;bluespace=3;abductor=3" cooldown_low = 1800 cooldown_high = 2400 uses = 1 icon_state = "vent" -/obj/item/organ/internal/gland/ventcrawling/activate() +/obj/item/organ/internal/heart/gland/ventcrawling/activate() to_chat(owner, "You feel very stretchy.") owner.ventcrawler = 2 - return -/obj/item/organ/internal/gland/viral - origin_tech = "materials=4;biotech=6;abductor=3" +/obj/item/organ/internal/heart/gland/viral cooldown_low = 1800 cooldown_high = 2400 uses = 1 icon_state = "viral" -/obj/item/organ/internal/gland/viral/activate() +/obj/item/organ/internal/heart/gland/viral/activate() to_chat(owner, "You feel sick.") var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/magnitis) var/datum/disease/D = new virus_type() @@ -144,51 +141,49 @@ owner.med_hud_set_status() -/obj/item/organ/internal/gland/emp //TODO : Replace with something more interesting - origin_tech = "materials=4;biotech=5;magnets=3;abductor=3" +/obj/item/organ/internal/heart/gland/emp //TODO : Replace with something more interesting + origin_tech = "materials=4;biotech=4;magnets=6;abductor=3" cooldown_low = 900 cooldown_high = 1600 uses = 10 icon_state = "emp" -/obj/item/organ/internal/gland/emp/activate() +/obj/item/organ/internal/heart/gland/emp/activate() to_chat(owner, "You feel a spike of pain in your head.") empulse(get_turf(owner), 2, 5, 1) -/obj/item/organ/internal/gland/spiderman - origin_tech = "materials=4;biotech=6;abductor=3" +/obj/item/organ/internal/heart/gland/spiderman cooldown_low = 450 cooldown_high = 900 uses = 10 icon_state = "spider" -/obj/item/organ/internal/gland/spiderman/activate() +/obj/item/organ/internal/heart/gland/spiderman/activate() to_chat(owner, "You feel something crawling in your skin.") owner.faction |= "spiders" new /obj/structure/spider/spiderling(owner.loc) -/obj/item/organ/internal/gland/egg - origin_tech = "materials=4;biotech=6;abductor=3" +/obj/item/organ/internal/heart/gland/egg cooldown_low = 300 cooldown_high = 400 uses = -1 icon_state = "egg" -/obj/item/organ/internal/gland/egg/activate() +/obj/item/organ/internal/heart/gland/egg/activate() to_chat(owner, "You lay an egg!") var/obj/item/weapon/reagent_containers/food/snacks/egg/egg = new(owner.loc) egg.reagents.add_reagent("sacid",20) egg.desc += " It smells bad." -/obj/item/organ/internal/gland/bloody - origin_tech = "materials=4;biotech=6;abductor=3" +/obj/item/organ/internal/heart/gland/bloody cooldown_low = 200 cooldown_high = 400 uses = -1 -/obj/item/organ/internal/gland/bloody/activate() - owner.adjustBruteLoss(15) - +/obj/item/organ/internal/heart/gland/bloody/activate() + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.drip(200) owner.visible_message("[owner]'s skin erupts with blood!",\ "Blood pours from your skin!") @@ -202,22 +197,22 @@ H.w_uniform.add_blood(owner) H.update_inv_w_uniform(0) -/obj/item/organ/internal/gland/bodysnatch - origin_tech = "materials=4;biotech=7;abductor=3" +/obj/item/organ/internal/heart/gland/bodysnatch cooldown_low = 600 cooldown_high = 600 human_only = 1 uses = 1 -/obj/item/organ/internal/gland/bodysnatch/activate() +/obj/item/organ/internal/heart/gland/bodysnatch/activate() to_chat(owner, "You feel something moving around inside you...") //spawn cocoon with clone greytide snpc inside if(ishuman(owner)) var/obj/effect/cocoon/abductor/C = new (get_turf(owner)) C.Copy(owner) C.Start() - owner.gib() - return + owner.adjustBruteLoss(40) + var/turf/T = get_turf(owner) + T.add_blood_floor(src) /obj/effect/cocoon/abductor name = "slimy cocoon" @@ -232,11 +227,18 @@ var/mob/living/carbon/human/interactive/greytide/clone = new(src) var/datum/dna/owner_dna = H.dna clone.rename_character(clone.name, owner_dna.real_name) - clone.body_accessory = H.body_accessory clone.dna = owner_dna.Clone() clone.set_species(H.species.name) + clone.body_accessory = H.body_accessory domutcheck(clone) + for(var/obj/item/I in clone) + if(istype(I, /obj/item/weapon/implant)) + continue + if(istype(I, /obj/item/organ)) + continue + qdel(I) + //There's no define for this / get all items ? var/list/slots = list(slot_back,slot_w_uniform,slot_wear_suit,\ slot_wear_mask,slot_head,slot_shoes,slot_gloves,slot_l_ear,slot_r_ear,\ @@ -245,7 +247,7 @@ for(var/slot in slots) var/obj/item/I = H.get_item_by_slot(slot) if(I) - clone.equip_to_slot_if_possible(I,slot) + clone.equip_to_slot_or_del(new I.type(clone), slot) /obj/effect/cocoon/abductor/proc/Start() hatch_time = world.time + 600 @@ -259,22 +261,25 @@ M.forceMove(get_turf(src)) qdel(src) -/obj/item/organ/internal/gland/plasma - cooldown_low = 2400 - cooldown_high = 3000 - origin_tech = "materials=4;biotech=5;plasmatech=3;abductor=3" - uses = 1 -/obj/item/organ/internal/gland/plasma/activate() - to_chat(owner, "You feel bloated.") - sleep(150) - if(!owner) return - to_chat(owner, "A massive stomachache overcomes you.") - sleep(50) - if(!owner) return - owner.visible_message("[owner] explodes in a cloud of plasma!") - var/turf/simulated/T = get_turf(owner) - if(istype(T)) - T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,300) - owner.gib() - return +/obj/item/organ/internal/heart/gland/plasma + cooldown_low = 1200 + cooldown_high = 1800 + origin_tech = "materials=4;biotech=4;plasmatech=6;abductor=3" + uses = -1 + +/obj/item/organ/internal/heart/gland/plasma/activate() + spawn(0) + to_chat(owner, "You feel bloated.") + sleep(150) + if(!owner) + return + to_chat(owner, "A massive stomachache overcomes you.") + sleep(50) + if(!owner) + return + owner.visible_message("[owner] vomits a cloud of plasma!") + var/turf/simulated/T = get_turf(owner) + if(istype(T)) + T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C,50) + owner.vomit() diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index 24b02aea489..219ae4b6e54 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -49,15 +49,12 @@ set_droppoint_action.target = console set_droppoint_action.Grant(user) -/obj/machinery/computer/camera_advanced/abductor/proc/IsAbductor(mob/living/carbon/human/H) - return H.get_species() == "Abductor" - /obj/machinery/computer/camera_advanced/abductor/proc/IsScientist(mob/living/carbon/human/H) if(H.mind && H.mind.abductor) return H.mind.abductor.scientist /obj/machinery/computer/camera_advanced/abductor/attack_hand(mob/user) - if(!iscarbon(user) || !IsAbductor(user)) + if(!isabductor(user)) return return ..() diff --git a/code/game/gamemodes/miniantags/abduction/machinery/console.dm b/code/game/gamemodes/miniantags/abduction/machinery/console.dm index 3922b80a9e5..3a93f8abc75 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/console.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/console.dm @@ -11,21 +11,6 @@ abductor_equipment.Remove(src) return ..() -/obj/machinery/abductor/proc/IsAbductor(mob/living/carbon/human/H) - return H.get_species() == "Abductor" - -/obj/machinery/abductor/proc/IsAgent(mob/living/carbon/human/H) - if(H.get_species() == "Abductor") - if(H.mind && H.mind.abductor) - return H.mind.abductor.agent - return 0 - -/obj/machinery/abductor/proc/IsScientist(mob/living/carbon/human/H) - if(H.get_species() == "Abductor") - if(H.mind && H.mind.abductor) - return H.mind.abductor.scientist - return 0 - //Console /obj/machinery/abductor/console @@ -33,8 +18,8 @@ desc = "Ship command center." icon = 'icons/obj/abductor.dmi' icon_state = "console" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/obj/item/device/abductor/gizmo/gizmo var/obj/item/clothing/suit/armor/abductor/vest/vest var/obj/machinery/abductor/experiment/experiment @@ -49,7 +34,7 @@ /obj/machinery/abductor/console/attack_hand(mob/user) if(..()) return - if(!IsAbductor(user)) + if(!isabductor(user)) to_chat(user, "You start mashing alien buttons at random!") if(do_after(user, 100, target = src)) TeleporterSend() @@ -60,10 +45,13 @@ if(experiment != null) var/points = experiment.points + var/credits = experiment.credits dat += "Collected Samples : [points]
" + dat += "Gear Credits: [credits]
" dat += "Transfer data in exchange for supplies:
" dat += "Advanced Baton
" dat += "Agent Helmet
" + dat += "Agent Vest
" dat += "Radio Silencer
" dat += "Science Tool
" else @@ -92,13 +80,13 @@ dat+="
" dat += "Select Agent Vest Disguise
" + dat += "[vest.flags & NODROP ? "Unlock" : "Lock"] Vest
" else dat += "NO AGENT VEST DETECTED" var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() - return /obj/machinery/abductor/console/Topic(href, href_list) if(..()) @@ -111,6 +99,8 @@ TeleporterRetrieve() else if(href_list["flip_vest"]) FlipVest() + else if(href_list["toggle_vest"]) + toggle_vest() else if(href_list["select_disguise"]) SelectDisguise() else if(href_list["dispense"]) @@ -123,37 +113,28 @@ Dispense(/obj/item/device/abductor/silencer) if("tool") Dispense(/obj/item/device/abductor/gizmo) - src.updateUsrDialog() + if("vest") + Dispense(/obj/item/clothing/suit/armor/abductor/vest) + updateUsrDialog() /obj/machinery/abductor/console/proc/TeleporterRetrieve() if(gizmo!=null && pad!=null && gizmo.marked) pad.Retrieve(gizmo.marked) - return /obj/machinery/abductor/console/proc/TeleporterSend() if(pad!=null) pad.Send() - return /obj/machinery/abductor/console/proc/FlipVest() if(vest!=null) vest.flip_mode() - return -/obj/machinery/abductor/console/proc/SelectDisguise(remote=0) - var/list/entries = list() - var/tempname - var/datum/icon_snapshot/temp - for(var/i = 1; i <= disguises.len; i++) - temp = disguises[i] - tempname = temp.name - entries["[tempname]"] = disguises[i] - var/entry_name = input( "Choose Disguise", "Disguise") in entries - var/datum/icon_snapshot/chosen = entries[entry_name] +/obj/machinery/abductor/console/proc/SelectDisguise(remote = 0) + var/entry_name = input( "Choose Disguise", "Disguise") as null|anything in disguises + var/datum/icon_snapshot/chosen = disguises[entry_name] if(chosen && (remote || in_range(usr,src))) vest.SetDisguise(chosen) - return /obj/machinery/abductor/console/proc/SetDroppoint(turf/location,user) if(!istype(location)) @@ -188,13 +169,11 @@ entry.icon = target.icon entry.icon_state = target.icon_state entry.overlays = target.get_overlays_copy(list(L_HAND_LAYER,R_HAND_LAYER)) - for(var/i=1,i<=disguises.len,i++) - var/datum/icon_snapshot/temp = disguises[i] - if(temp.name == entry.name) - disguises[i] = entry - return - disguises.Add(entry) - return + //Update old disguise instead of adding new one + if(disguises[entry.name]) + disguises[entry.name] = entry + return + disguises[entry.name] = entry /obj/machinery/abductor/console/attackby(obj/O, mob/user, params) if(istype(O, /obj/item/device/abductor/gizmo)) @@ -205,13 +184,16 @@ else if(istype(O, /obj/item/clothing/suit/armor/abductor/vest)) var/obj/item/clothing/suit/armor/abductor/vest/V = O to_chat(user, "You link the vest to the console.") + if(istype(vest)) + if(vest.flags & NODROP) + toggle_vest() vest = V else ..() /obj/machinery/abductor/console/proc/Dispense(item,cost=1) - if(experiment && experiment.points >= cost) - experiment.points-=cost + if(experiment && experiment.credits >= cost) + experiment.credits -=cost atom_say("Incoming supply!") if(pad) flick("alien-pad", pad) @@ -220,4 +202,9 @@ new item(src.loc) else atom_say("Insufficent data!") - return + +/obj/machinery/abductor/console/proc/toggle_vest() + vest.flags ^= NODROP + var/mob/M = vest.loc + if(istype(M)) + to_chat(M, "[src] is now [vest.flags & NODROP ? "locked" : "unlocked"].") \ No newline at end of file diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index 4ead0232a2f..2b6103632f5 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -14,7 +14,8 @@ return rgb(rand(0,255),rand(0,255),rand(0,255)) /obj/machinery/abductor/gland_dispenser/New() - gland_types = subtypesof(/obj/item/organ/internal/gland) + ..() + gland_types = subtypesof(/obj/item/organ/internal/heart/gland) gland_types = shuffle(gland_types) gland_colors = new/list(gland_types.len) amounts = new/list(gland_types.len) @@ -25,7 +26,7 @@ /obj/machinery/abductor/gland_dispenser/attack_hand(mob/user) if(..()) return - if(!IsAbductor(user)) + if(!isabductor(user)) return user.set_machine(src) var/box_css = {" @@ -59,13 +60,15 @@ return /obj/machinery/abductor/gland_dispenser/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/organ/internal/gland)) + if(istype(W, /obj/item/organ/internal/heart/gland)) if(!user.drop_item()) return W.forceMove(src) for(var/i=1,i<=gland_colors.len,i++) if(gland_types[i] == W.type) amounts[i]++ + else + ..() /obj/machinery/abductor/gland_dispenser/Topic(href, href_list) if(..()) @@ -74,7 +77,7 @@ if(href_list["dispense"]) Dispense(text2num(href_list["dispense"])) - src.updateUsrDialog() + updateUsrDialog() /obj/machinery/abductor/gland_dispenser/proc/Dispense(count) if(amounts[count]>0) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 755bd21e2e5..44b2a431c7b 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -6,6 +6,7 @@ anchored = 1 density = 1 var/points = 0 + var/credits = 0 var/list/history = list() var/list/abductee_minds = list() var/flash = " - || - " @@ -19,10 +20,10 @@ /obj/machinery/abductor/experiment/MouseDrop_T(mob/living/carbon/human/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target)) return - if(IsAbductor(target)) + if(isabductor(target)) return if(occupant) - to_chat(user, "\The [src] is already occupied.") + to_chat(user, "[src] is already occupied.") return //occupied if(target.buckled) return @@ -118,7 +119,7 @@ if(H.stat == DEAD) atom_say("Specimen deceased - please provide fresh sample.") return "Specimen deceased." - var/obj/item/organ/internal/gland/GlandTest = locate() in H.internal_organs + var/obj/item/organ/internal/heart/gland/GlandTest = locate() in H.internal_organs if(!GlandTest) atom_say("Experimental dissection not detected!") return "No glands detected!" @@ -147,7 +148,7 @@ obj_count++ ticker.mode.update_abductor_icons_added(H.mind) - for(var/obj/item/organ/internal/gland/G in H.internal_organs) + for(var/obj/item/organ/internal/heart/gland/G in H.internal_organs) G.Start() point_reward++ if(point_reward > 0) @@ -155,6 +156,7 @@ SendBack(H) playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) points += point_reward + credits += point_reward return "Experiment successful! [point_reward] new data-points collected." else playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) @@ -183,7 +185,7 @@ var/obj/item/weapon/grab/grabbed = G if(!ishuman(grabbed.affecting)) return - if(IsAbductor(grabbed.affecting)) + if(isabductor(grabbed.affecting)) return if(occupant) to_chat(user, "The [src] is already occupied!") diff --git a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm index 285b097d06a..f0ceac0d6ce 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/pad.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/pad.dm @@ -17,6 +17,8 @@ target.forceMove(teleport_target) spawn(0) anim(target.loc,target,'icons/mob/mob.dmi',,"uncloak",,target.dir) + to_chat(target, "The instability of the warp leaves you disoriented!") + target.Stun(3) /obj/machinery/abductor/pad/proc/Retrieve(mob/living/target) flick("alien-pad", src) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index a3ac5a9da6f..c6ea23c4bbc 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -322,7 +322,7 @@ D.pixel_y = target.pixel_y if(do_mob(src, target, 100)) if(!src.Adjacent(target)) - to_chat(src, "Error:Dismantleing aborted.") + to_chat(src, "Error:Dismantling aborted.") else to_chat(src, "Dismantling complete.") var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(target.loc) @@ -437,7 +437,7 @@ /mob/living/simple_animal/hostile/swarmer/proc/CreateTrap() set name = "Create trap" set category = "Swarmer" - set desc = "Creates a simple trap that will non-lethally electrocute anything that steps on it. Costs 5 resources" + set desc = "Creates a simple trap that will non-lethally electrocute anything that steps on it. Costs 5 resources." if(locate(/obj/structure/swarmer/trap) in loc) to_chat(src, "There is already a trap here. Aborting.") return diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index c3bf543a043..bd4774b50eb 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -35,8 +35,7 @@ var/bomb_set poi_list |= src /obj/machinery/nuclearbomb/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) poi_list.Remove(src) return ..() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 6dabdcf49d6..e34174f2beb 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -384,8 +384,17 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) \ return steal_target /datum/objective/steal/check_completion() - if(!steal_target) return 1 // Free Objective - return steal_target.check_completion(owner) + if(!steal_target) + return 1 // Free Objective + + var/list/all_items = owner.current.GetAllContents() + + for(var/obj/I in all_items) + if(istype(I, steal_target.typepath)) + return steal_target.check_special_completion(I) + if(I.type in steal_target.altitems) + return steal_target.check_special_completion(I) + /datum/objective/steal/exchange martyr_compatible = 0 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 08fbf0d4cc7..556b7f50e5b 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -234,7 +234,7 @@ if(rev_mind.assigned_role in command_positions) return 0 var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted - if(isloyal(H)) + if(ismindshielded(H)) return 0 if((rev_mind in revolutionaries) || (rev_mind in head_revolutionaries)) return 0 diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index fd63864442d..8abe51675cb 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -307,14 +307,14 @@ to_chat(target, "A terrible red light floods your mind. You collapse as conscious thought is wiped away.") target.Weaken(12) sleep(20) - if(isloyal(target)) + if(ismindshielded(target)) to_chat(user, "They have a mindshield implant. You begin to deactivate it - this will take some time.") user.visible_message("[user] pauses, then dips their head in concentration!") to_chat(target, "Your mindshield implant becomes hot as it comes under attack!") sleep(100) //10 seconds - not spawn() so the enthralling takes longer to_chat(user, "The nanobots composing the mindshield implant have been rendered inert. Now to continue.") user.visible_message("[user] relaxes again.") - for(var/obj/item/weapon/implant/loyalty/L in target) + for(var/obj/item/weapon/implant/mindshield/L in target) if(L && L.implanted) qdel(L) to_chat(target, "Your mental protection implant unexpectedly falters, dims, dies.") @@ -718,8 +718,9 @@ var/more_minutes = 9000 var/timer = shuttle_master.emergency.timeLeft() timer += more_minutes - event_announcement.Announce("Major system failure aboard the emergency shuttle. This will extend its arrival time by approximately 15 minutes..", "System Failure", 'sound/misc/notice1.ogg') + event_announcement.Announce("Major system failure aboard the emergency shuttle. This will extend its arrival time by approximately 15 minutes and the shuttle is unable to be recalled.", "System Failure", 'sound/misc/notice1.ogg') shuttle_master.emergency.setTimer(timer) + shuttle_master.emergency.canRecall = FALSE user.mind.spell_list.Remove(src) //Can only be used once! qdel(src) diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index fd3ad379fe0..92573fcc17e 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -6,10 +6,11 @@ #define THEFT_FLAG_UNIQUE 2 /datum/theft_objective - var/name="" + var/name = "" var/typepath=/atom - var/list/protected_jobs=list() - var/flags=0 + var/list/protected_jobs = list() + var/list/altitems = list() + var/flags = 0 /datum/theft_objective/proc/check_completion(var/datum/mind/owner) if(!owner.current) @@ -70,6 +71,16 @@ datum/theft_objective/ai/check_special_completion(var/obj/item/device/aicard/C) name = "the station blueprints" typepath = /obj/item/areaeditor/blueprints protected_jobs = list("Chief Engineer") + altitems = list(/obj/item/weapon/photo) + +/datum/objective_item/steal/blueprints/check_special_completion(obj/item/I) + if(istype(I, /obj/item/areaeditor/blueprints)) + return 1 + if(istype(I, /obj/item/weapon/photo)) + var/obj/item/weapon/photo/P = I + if(P.blueprints) + return 1 + return 0 /datum/theft_objective/voidsuit name = "a nasa voidsuit" diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 6ec90dc777c..9d1796523f9 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -294,7 +294,7 @@ /obj/effect/proc_holder/spell/vampire/targetted/enthrall/proc/can_enthrall(mob/living/user, mob/living/carbon/C) var/enthrall_safe = 0 - for(var/obj/item/weapon/implant/loyalty/L in C) + for(var/obj/item/weapon/implant/mindshield/L in C) if(L && L.implanted) enthrall_safe = 1 break diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 16c9b2f5857..7fcd9c198b4 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -51,7 +51,7 @@ to_chat(user, "There is no power left in the shard.") return - if(!ishuman(M) || istype(M, /mob/living/carbon/human/dummy)) //If target is not a human or a dummy + if(!ishuman(M)) //If target is not a human return ..() if(M.has_brain_worms()) //Borer stuff - RR diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index 9d3d5a7ab7a..64298b70fbe 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -34,7 +34,7 @@ /obj/item/weapon/implanter/death_alarm = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/satchel @@ -77,6 +77,6 @@ /obj/item/weapon/implanter/death_alarm = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/satchel \ No newline at end of file diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 62b248c4875..a7ed2b6b7a8 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -40,7 +40,7 @@ /obj/item/weapon/melee/classic_baton/telescopic = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/security satchel = /obj/item/weapon/storage/backpack/satchel_sec @@ -83,7 +83,7 @@ /obj/item/weapon/restraints/handcuffs = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/security satchel = /obj/item/weapon/storage/backpack/satchel_sec @@ -130,7 +130,7 @@ /obj/item/weapon/melee/classic_baton/telescopic = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) /datum/outfit/job/detective/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) . = ..() @@ -183,7 +183,7 @@ /obj/item/weapon/restraints/handcuffs = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/security satchel = /obj/item/weapon/storage/backpack/satchel_sec @@ -218,7 +218,7 @@ l_hand = /obj/item/weapon/storage/firstaid/adv pda = /obj/item/device/pda/medical - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/medic satchel = /obj/item/weapon/storage/backpack/satchel_med @@ -257,7 +257,7 @@ /obj/item/weapon/restraints/handcuffs = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/security satchel = /obj/item/weapon/storage/backpack/satchel_sec diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index af91e7788bd..e1b6bfda98e 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -41,7 +41,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) /obj/item/weapon/melee/classic_baton/telescopic = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/captain satchel = /obj/item/weapon/storage/backpack/satchel_cap @@ -145,7 +145,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) /obj/item/weapon/melee/classic_baton/ntcane = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) @@ -188,7 +188,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) /obj/item/weapon/gun/energy/gun/blueshield = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) backpack = /obj/item/weapon/storage/backpack/security @@ -232,7 +232,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) /obj/item/weapon/melee/classic_baton/telescopic = 1 ) - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) @@ -269,4 +269,4 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) l_hand = /obj/item/weapon/storage/briefcase pda = /obj/item/device/pda/lawyer - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index a8b3b4f218e..161a1718d63 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -22,9 +22,7 @@ hide(T.intact) /obj/machinery/bluespace_beacon/Destroy() - if(Beacon) - qdel(Beacon) - Beacon = null + QDEL_NULL(Beacon) return ..() // update the invisibility and icon diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 485bbd58b0e..4178c9248c0 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -40,9 +40,7 @@ src.colorlist += D /obj/machinery/pdapainter/Destroy() - if(storedpda) - qdel(storedpda) - storedpda = null + QDEL_NULL(storedpda) return ..() /obj/machinery/pdapainter/attackby(var/obj/item/O as obj, var/mob/user as mob, params) @@ -85,7 +83,7 @@ set name = "Eject PDA" set category = "Object" set src in oview(1) - + if(usr.incapacitated()) return diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 151dc377f5d..576cc65868b 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -220,7 +220,7 @@ active_power_usage = 500 var/printing = null var/printing_text = null - var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking) + var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/mindshield, /obj/item/weapon/implant/tracking) /obj/machinery/body_scanconsole/power_change() if(stat & BROKEN) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index c139edc19b2..e4cb0028408 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -212,8 +212,7 @@ if(radio_controller) radio_controller.remove_object(src, frequency) air_alarm_repository.update_cache(src) - qdel(wires) - wires = null + QDEL_NULL(wires) return ..() /obj/machinery/alarm/proc/first_run() diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 51c6451b7c3..44ac6caf479 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -36,10 +36,8 @@ /obj/machinery/portable_atmospherics/Destroy() disconnect() - qdel(air_contents) - air_contents = null - qdel(holding) - holding = null + QDEL_NULL(air_contents) + QDEL_NULL(holding) return ..() /obj/machinery/portable_atmospherics/update_icon() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 24bc3e0a2b6..346949414fa 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -67,10 +67,8 @@ RefreshParts() /obj/machinery/autolathe/Destroy() - qdel(wires) - wires = null - qdel(materials) - materials = null + QDEL_NULL(wires) + QDEL_NULL(materials) return ..() /obj/machinery/autolathe/interact(mob/user) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index f98c84c61ac..ca312efc6a7 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -51,18 +51,19 @@ /obj/machinery/camera/Destroy() toggle_cam(null, 0) //kick anyone viewing out - if(assembly) - qdel(assembly) - assembly = null + QDEL_NULL(assembly) if(istype(bug)) bug.bugged_cameras -= src.c_tag if(bug.current == src) bug.current = null bug = null - qdel(wires) - wires = null + QDEL_NULL(wires) cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that cameranet.cameras -= src + var/area/ai_monitored/A = get_area(src) + if(istype(A)) + A.motioncamera = null + area_motion = null return ..() /obj/machinery/camera/emp_act(severity) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 99e9273b682..11fcede1fe9 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -20,6 +20,12 @@ 4 = Screwdriver panel closed and is fully built (you cannot attach upgrades) */ +/obj/item/weapon/camera_assembly/Destroy() + for(var/thing in upgrades) + qdel(thing) + upgrades.Cut() + return ..() + /obj/item/weapon/camera_assembly/attackby(obj/item/W, mob/living/user, params) switch(state) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 9795b161072..69cfd4a6e89 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -16,7 +16,7 @@ if(charging && !(stat & (BROKEN|NOPOWER)) ) - var/newlevel = round(charging.percent() * 4.0 / 99) + var/newlevel = round(charging.percent() * 4 / 100) // to_chat(world, "nl: [newlevel]") if(chargelevel != newlevel) @@ -91,7 +91,7 @@ if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored) return - use_power(2000) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly! - charging.give(1750) //inefficiency. + use_power(200) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly! + charging.give(175) //inefficiency. updateicon() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 96579b00cf1..390496842ab 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -82,12 +82,8 @@ /obj/machinery/clonepod/Destroy() if(connected) connected.pods -= src - if(Radio) - qdel(Radio) - Radio = null - if(countdown) - qdel(countdown) - countdown = null + QDEL_NULL(Radio) + QDEL_NULL(countdown) return ..() /obj/machinery/clonepod/RefreshParts() @@ -104,13 +100,17 @@ /obj/item/weapon/disk/data name = "Cloning Data Disk" icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk. - var/datum/dna2/record/buf=null + var/datum/dna2/record/buf = null var/read_only = 0 //Well,it's still a floppy disk /obj/item/weapon/disk/data/proc/Initialize() buf = new buf.dna=new +/obj/item/weapon/disk/data/Destroy() + QDEL_NULL(buf) + return ..() + /obj/item/weapon/disk/data/demo name = "data disk - 'God Emperor of Mankind'" read_only = 1 diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 492baed22e3..7fc95ebfa53 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -10,12 +10,9 @@ var/obj/item/device/mmi/brain = null /obj/structure/AIcore/Destroy() - qdel(laws) - qdel(circuit) - qdel(brain) - laws = null - circuit = null - brain = null + QDEL_NULL(laws) + QDEL_NULL(circuit) + QDEL_NULL(brain) return ..() /obj/structure/AIcore/attackby(obj/item/P as obj, mob/user as mob, params) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index e91286fe422..2195ee25522 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -28,8 +28,7 @@ /obj/machinery/computer/camera_advanced/Destroy() if(current_user) current_user.unset_machine() - if(eyeobj) - qdel(eyeobj) + QDEL_NULL(eyeobj) return ..() /obj/machinery/computer/camera_advanced/on_unset_machine(mob/M) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 8286454dc94..e343135b246 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -19,12 +19,6 @@ overlay_layer = layer ..() -/obj/machinery/computer/Destroy() - if(circuit) - qdel(circuit) - circuit = null - return ..() - /obj/machinery/computer/initialize() ..() power_change() diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 6d1643fd988..d074091838a 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -15,8 +15,7 @@ ..() /obj/machinery/computer/crew/Destroy() - qdel(crew_monitor) - crew_monitor = null + QDEL_NULL(crew_monitor) return ..() /obj/machinery/computer/crew/attack_ai(mob/user) diff --git a/code/game/machinery/computer/power.dm b/code/game/machinery/computer/power.dm index ca3c1f84410..1c62c24c854 100644 --- a/code/game/machinery/computer/power.dm +++ b/code/game/machinery/computer/power.dm @@ -16,7 +16,7 @@ power_monitors += src power_monitors = sortAtom(power_monitors) power_monitor = new(src) - + /obj/machinery/computer/monitor/initialize() ..() powermonitor_repository.update_cache() @@ -25,8 +25,7 @@ /obj/machinery/computer/monitor/Destroy() power_monitors -= src powermonitor_repository.update_cache() - qdel(power_monitor) - power_monitor = null + QDEL_NULL(power_monitor) return ..() /obj/machinery/computer/monitor/power_change() diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index c40e7968145..9c2dde8d3b7 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -24,8 +24,7 @@ /obj/machinery/computer/station_alert/Destroy() alarm_monitor.unregister(src) - qdel(alarm_monitor) - alarm_monitor = null + QDEL_NULL(alarm_monitor) return ..() /obj/machinery/computer/station_alert/attack_ai(mob/user) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 48793165d00..789d4f81b1c 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -178,7 +178,7 @@ var/time_till_despawn = 9000 // This is reduced by 90% if a player manually enters cryo var/willing_time_divisor = 10 var/time_entered = 0 // Used to keep track of the safe period. - var/obj/item/device/radio/intercom/announce // + var/obj/item/device/radio/intercom/announce var/obj/machinery/computer/cryopod/control_computer var/last_no_computer_message = 0 @@ -192,12 +192,18 @@ /obj/item/device/paicard, /obj/item/weapon/gun, /obj/item/weapon/pinpointer, - /obj/item/clothing/suit, /obj/item/clothing/shoes/magboots, /obj/item/areaeditor/blueprints, /obj/item/clothing/head/helmet/space, + /obj/item/clothing/suit/space, + /obj/item/clothing/suit/armor, + /obj/item/weapon/defibrillator/compact, + /obj/item/weapon/reagent_containers/hypospray/CMO, + /obj/item/clothing/accessory/medal/gold/captain, + /obj/item/clothing/gloves/color/black/krav_maga/sec, /obj/item/weapon/storage/internal, - /obj/item/device/spacepod_key + /obj/item/device/spacepod_key, + /obj/item/weapon/nullrod ) // These items will NOT be preserved var/list/do_not_preserve_items = list ( @@ -324,6 +330,18 @@ else W.loc = loc + // Skip past any cult sacrifice objective using this person + if(GAMEMODE_IS_CULT && is_sacrifice_target(occupant.mind)) + var/datum/game_mode/cult/cult_mode = ticker.mode + var/list/p_s_t = cult_mode.get_possible_sac_targets() + if(p_s_t.len) + cult_mode.sacrifice_target = pick(p_s_t) + for(var/datum/mind/H in ticker.mode.cult) + if(H.current) + to_chat(H.current, "[ticker.mode.cultdat.entity_name] murmurs, [occupant] is beyond your reach. Sacrifice [cult_mode.sacrifice_target.current] instead...") + else + cult_mode.bypass_phase() + //Update any existing objectives involving this mob. for(var/datum/objective/O in all_objectives) // We don't want revs to get objectives that aren't for heads of staff. Letting diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index a2a7907b744..c6dacede143 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -348,8 +348,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) if(main_power_timer) deltimer(main_power_timer) main_power_timer = null diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index ecdd959f717..7ec9630a54c 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -63,6 +63,10 @@ stat |= BROKEN update_icon() +/obj/machinery/door_timer/Destroy() + QDEL_NULL(Radio) + targets.Cut() + return ..() //Main door timer loop, if it's timing and time is >0 reduce time by 1. // if it's less than 0, open door, reset timer @@ -186,7 +190,7 @@ if(..()) return interact(user) - + /obj/machinery/door_timer/interact(mob/user) // Used for the 'time left' display var/second = round(timeleft() % 60) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index d29b9d78c87..2cd5f0a7a34 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -25,9 +25,7 @@ density = 0 if(health == 0) playsound(src, "shatter", 70, 1) - if(electronics) - qdel(electronics) - electronics = null + QDEL_NULL(electronics) return ..() diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index ac3d1b7037c..f872fbcef2d 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -20,9 +20,7 @@ ..() /obj/machinery/floodlight/Destroy() - if(cell) - qdel(cell) - cell = null + QDEL_NULL(cell) return ..() /obj/machinery/floodlight/proc/updateicon() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 636b36cc416..26785e248b1 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -15,9 +15,7 @@ /obj/machinery/iv_drip/Destroy() attached = null - if(beaker) - qdel(beaker) - beaker = null + QDEL_NULL(beaker) return ..() /obj/machinery/iv_drip/update_icon() diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index cf9f97ee6bb..6040f72ab6b 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -113,9 +113,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/Destroy() allCasters -= src viewing_channel = null - if(photo) - qdel(photo) - photo = null + QDEL_NULL(photo) return ..() /obj/machinery/newscaster/update_icon() diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 461df0e39f7..03f5cc1f8c8 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -20,7 +20,7 @@ var/health = 80 //the turret's health var/locked = 1 //if the turret's behaviour control access is locked var/controllock = 0 //if the turret responds to control panels - + var/installation = /obj/item/weapon/gun/energy/gun/turret //the type of weapon installed var/gun_charge = 0 //the charge of the gun inserted var/projectile = null //holder for bullettype @@ -56,7 +56,7 @@ var/screen = 0 // Screen 0: main control, screen 1: access levels var/one_access = 0 // Determines if access control is set to req_one_access or req_access - + var/syndicate = 0 //is the turret a syndicate turret? var/faction = "" var/emp_vulnerable = 1 // Can be empd @@ -94,8 +94,7 @@ setup() /obj/machinery/porta_turret/Destroy() - qdel(spark_system) - spark_system = null + QDEL_NULL(spark_system) return ..() /obj/machinery/porta_turret/centcom/New() @@ -549,8 +548,8 @@ var/list/turret_icons /obj/machinery/porta_turret/proc/in_faction(mob/living/target) if(!(faction in target.faction)) return 0 - return 1 - + return 1 + /obj/machinery/porta_turret/proc/assess_and_assign(var/mob/living/L, var/list/targets, var/list/secondarytargets) switch(assess_living(L)) if(TURRET_PRIORITY_TARGET) @@ -582,7 +581,7 @@ var/list/turret_icons if(emagged) // If emagged not even the dead get a rest return L.stat ? TURRET_SECONDARY_TARGET : TURRET_PRIORITY_TARGET - + if(in_faction(L)) return TURRET_NOT_TARGET @@ -967,46 +966,46 @@ var/list/turret_icons /atom/movable/porta_turret_cover icon = 'icons/obj/turrets.dmi' - + // Syndicate turrets /obj/machinery/porta_turret/syndicate projectile = /obj/item/projectile/bullet eprojectile = /obj/item/projectile/bullet shot_sound = 'sound/weapons/Gunshot.ogg' eshot_sound = 'sound/weapons/Gunshot.ogg' - + icon_state = "syndieturret0" var/icon_state_initial = "syndieturret0" var/icon_state_active = "syndieturret1" var/icon_state_destroyed = "syndieturret2" - + syndicate = 1 installation = null always_up = 1 use_power = 0 has_cover = 0 raised = 1 - scan_range = 9 - + scan_range = 9 + faction = "syndicate" emp_vulnerable = 0 - + lethal = 1 check_arrest = 0 check_records = 0 check_weapons = 0 check_access = 0 - check_anomalies = 1 + check_anomalies = 1 check_synth = 1 ailock = 1 - + /obj/machinery/porta_turret/syndicate/New() ..() if(req_one_access && req_one_access.len) req_one_access.Cut() req_access = list(access_syndicate) one_access = 0 - + /obj/machinery/porta_turret/syndicate/update_icon() if(stat & BROKEN) icon_state = icon_state_destroyed @@ -1025,7 +1024,7 @@ var/list/turret_icons health = 40 projectile = /obj/item/projectile/bullet/weakbullet3 eprojectile = /obj/item/projectile/bullet/weakbullet3 - + /obj/machinery/porta_turret/syndicate/interior name = "machine gun turret (.45)" desc = "Syndicate interior defense turret chambered for .45 rounds. Designed to down intruders without damaging the hull." diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 1762840b52f..94513623cfb 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -1,70 +1,78 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - /obj/machinery/recharger name = "recharger" icon = 'icons/obj/stationobjs.dmi' icon_state = "recharger0" + desc = "A charging dock for energy based weaponry." anchored = 1 use_power = 1 - idle_power_usage = 40 - active_power_usage = 2500 + idle_power_usage = 4 + active_power_usage = 250 var/obj/item/charging = null + var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/modular_computer, /obj/item/weapon/rcs) + var/icon_state_off = "rechargeroff" var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" -/obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob, params) - if(istype(user,/mob/living/silicon)) - return - - if(!user.canUnEquip(G, 0)) - to_chat(user, "[G] is stuck to your hand, you can't put it in [src]!") - return - - if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop) || istype(G, /obj/item/weapon/rcs)) +/obj/machinery/recharger/attackby(obj/item/weapon/G, mob/user, params) + if(iswrench(G)) if(charging) - return - - // Checks to make sure he's not in space doing it, and that the area got proper power. - var/area/a = get_area(src) - if(!isarea(a)) - to_chat(user, "The [name] blinks red as you try to insert the item!") - return - if(a.power_equip == 0 && a.requires_power) - to_chat(user, "The [name] blinks red as you try to insert the item!") - return - - if(istype(G, /obj/item/weapon/gun/energy)) - var/obj/item/weapon/gun/energy/E = G - if(!E.can_charge) - to_chat(user, "Your gun has no external power connector.") - return - - if(istype(G, /obj/item/device/laptop)) - var/obj/item/device/laptop/L = G - if(!L.stored_computer.battery) - to_chat(user, "There's no battery in it!") - return - - user.drop_item() - G.loc = src - charging = G - use_power = 2 - update_icon() - else if(istype(G, /obj/item/weapon/wrench)) - if(charging) - to_chat(user, "Remove the weapon first!") + to_chat(user, "Remove the charging item first!") return anchored = !anchored - to_chat(user, "You [anchored ? "attached" : "detached"] the recharger.") + power_change() + to_chat(user, "You [anchored ? "attached" : "detached"] [src].") playsound(loc, G.usesound, 75, 1) + return + + var/allowed = is_type_in_list(G, allowed_devices) + + if(allowed) + if(anchored) + if(charging) + return 1 + + //Checks to make sure he's not in space doing it, and that the area got proper power. + var/area/a = get_area(src) + if(!isarea(a) || a.power_equip == 0) + to_chat(user, "[src] blinks red as you try to insert [G].") + return 1 + + if(istype(G, /obj/item/weapon/gun/energy)) + var/obj/item/weapon/gun/energy/E = G + if(!E.can_charge) + to_chat(user, "Your gun has no external power connector.") + return 1 + + if(!user.drop_item()) + return 1 + G.forceMove(src) + charging = G + use_power = 2 + update_icon() + else + to_chat(user, "[src] isn't connected to anything!") + return 1 + else + ..() + +/obj/machinery/recharger/attack_hand(mob/user) + if(issilicon(user)) + return -/obj/machinery/recharger/attack_hand(mob/user as mob) add_fingerprint(user) - if(charging) charging.update_icon() - charging.loc = loc + charging.forceMove(loc) + user.put_in_hands(charging) + charging = null + use_power = 1 + update_icon() + +/obj/machinery/recharger/attack_tk(mob/user) + if(charging) + charging.update_icon() + charging.forceMove(loc) charging = null use_power = 1 update_icon() @@ -73,43 +81,42 @@ if(stat & (NOPOWER|BROKEN) || !anchored) return + var/using_power = 0 if(charging) if(istype(charging, /obj/item/weapon/gun/energy)) var/obj/item/weapon/gun/energy/E = charging if(E.power_supply.charge < E.power_supply.maxcharge) - E.power_supply.give(1000) - icon_state = icon_state_charging - use_power(2500) - else - icon_state = icon_state_charged - return + E.power_supply.give(E.power_supply.chargerate) + use_power(250) + using_power = 1 + + if(istype(charging, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = charging - if(B.bcell && B.bcell.charge < B.bcell.maxcharge) - B.bcell.charge += 1750 - icon_state = icon_state_charging - use_power(2000) - else - icon_state = icon_state_charged - return - if(istype(charging, /obj/item/device/laptop)) - var/obj/item/device/laptop/L = charging - if(L.stored_computer.battery.charge < L.stored_computer.battery.maxcharge) - L.stored_computer.battery.give(1000) - icon_state = icon_state_charging - use_power(2500) - else - icon_state = icon_state_charged + if(B.bcell) + if(B.bcell.give(B.bcell.chargerate)) + use_power(200) + using_power = 1 + + if(istype(charging, /obj/item/device/modular_computer)) + var/obj/item/device/modular_computer/C = charging + var/obj/item/weapon/computer_hardware/battery/battery_module = C.all_components[MC_CELL] + if(battery_module) + var/obj/item/weapon/computer_hardware/battery/B = battery_module + if(B.battery) + if(B.battery.charge < B.battery.maxcharge) + B.battery.give(B.battery.chargerate) + use_power(200) + using_power = 1 + if(istype(charging, /obj/item/weapon/rcs)) var/obj/item/weapon/rcs/R = charging - if(R.rcell && R.rcell.charge < R.rcell.maxcharge) - R.rcell.charge += 1750 - icon_state = icon_state_charging - use_power(2000) - else - icon_state = icon_state_charged - return + if(R.rcell) + if(R.rcell.give(R.rcell.chargerate)) + use_power(200) + using_power = 1 + update_icon(using_power) /obj/machinery/recharger/emp_act(severity) if(stat & (NOPOWER|BROKEN) || !anchored) @@ -127,17 +134,23 @@ B.bcell.charge = 0 ..(severity) -/obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. +/obj/machinery/recharger/update_icon(using_power = 0) //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier. + if(stat & (NOPOWER|BROKEN) || !anchored) + icon_state = icon_state_off + return if(charging) - icon_state = icon_state_charging - else - icon_state = icon_state_idle + if(using_power) + icon_state = icon_state_charging + else + icon_state = icon_state_charged + return + icon_state = icon_state_idle // Atlantis: No need for that copy-pasta code, just use var to store icon_states instead. obj/machinery/recharger/wallcharger name = "wall recharger" - icon = 'icons/obj/stationobjs.dmi' icon_state = "wrecharger0" + icon_state_off = "wrechargeroff" icon_state_idle = "wrecharger0" icon_state_charging = "wrecharger1" icon_state_charged = "wrecharger2" diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 085fc9a9aa1..f0a635c73a8 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -159,10 +159,7 @@ R.adjustFireLoss(-(repairs)) R.updatehealth() if(R.cell) - if(R.cell.charge >= R.cell.maxcharge) - R.cell.charge = R.cell.maxcharge - else - R.cell.charge = min(R.cell.charge + recharge_speed, R.cell.maxcharge) + R.cell.charge = min(R.cell.charge + recharge_speed, R.cell.maxcharge) else if(istype(occupant, /mob/living/carbon/human)) var/mob/living/carbon/human/H = occupant if(H.get_int_organ(/obj/item/organ/internal/cell) && H.nutrition < 450) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 4a9d8c439ae..698c1c5fe91 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -29,8 +29,7 @@ var/const/SAFETY_COOLDOWN = 100 update_icon() /obj/machinery/recycler/Destroy() - qdel(materials) - materials = null + QDEL_NULL(materials) return ..() /obj/machinery/recycler/RefreshParts() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 577c24f5dc4..600dc3704fa 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -20,9 +20,7 @@ return /obj/machinery/space_heater/Destroy() - if(cell) - qdel(cell) - cell = null + QDEL_NULL(cell) return ..() /obj/machinery/space_heater/update_icon() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 2f0dc7b2666..8fb2d173b6f 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -41,8 +41,7 @@ ..() /obj/machinery/syndicatebomb/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) return ..() /obj/machinery/syndicatebomb/examine(mob/user) @@ -102,7 +101,7 @@ to_chat(user, "[payload] is already loaded into [src], you'll have to remove it first.") else ..() - + /obj/machinery/syndicatebomb/attack_ghost(mob/user) interact(user) @@ -122,7 +121,7 @@ return else if(anchored) to_chat(user, "The bomb is bolted to the floor!") - + /obj/machinery/syndicatebomb/proc/can_interact(mob/user) if(user.can_advanced_admin_interact()) return TRUE diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d9996b6fb9c..e694ac98817 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -146,11 +146,8 @@ product_records.Add(product) /obj/machinery/vending/Destroy() - qdel(wires) // qdel - wires = null - if(coin) - qdel(coin) // qdel - coin = null + QDEL_NULL(wires) + QDEL_NULL(coin) return ..() /obj/machinery/vending/ex_act(severity) @@ -1162,13 +1159,6 @@ /obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5) //everything after the power cell had no amounts, I improvised. -Sayu - -/obj/machinery/vending/eva - name = "\improper Hardsuit Kits" - desc = "Conversion kits for your alien hardsuit needs." - products = list(/obj/item/device/modkit = 6,/obj/item/device/modkit/tajaran = 6,/obj/item/device/modkit/unathi = 6,/obj/item/device/modkit/skrell = 6,/obj/item/device/modkit/vox = 6) - - /obj/machinery/vending/sustenance name = "\improper Sustenance Vendor" desc = "A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement." diff --git a/code/game/mecha/combat/recitence.dm b/code/game/mecha/combat/reticence.dm similarity index 83% rename from code/game/mecha/combat/recitence.dm rename to code/game/mecha/combat/reticence.dm index 759d86a95c4..19eb34fb448 100644 --- a/code/game/mecha/combat/recitence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -1,6 +1,6 @@ -/obj/mecha/combat/recitence +/obj/mecha/combat/reticence desc = "A silent, fast, and nigh-invisible miming exosuit. Popular among mimes and mime assassins." - name = "\improper Recitence" + name = "\improper Reticence" icon_state = "mime" initial_icon = "mime" step_in = 2 @@ -9,7 +9,7 @@ deflect_chance = 30 damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) max_temperature = 15000 - wreckage = /obj/effect/decal/mecha_wreckage/recitence + wreckage = /obj/effect/decal/mecha_wreckage/reticence operation_req_access = list(access_mime) add_req_access = 0 internal_damage_threshold = 60 @@ -18,7 +18,7 @@ stepsound = null turnsound = null -/obj/mecha/combat/recitence/loaded/New() +/obj/mecha/combat/reticence/loaded/New() ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced ME.attach(src) diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 9e2a754bd4c..3f60c56a952 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -185,7 +185,7 @@ icon_state = "repair_droid" origin_tech = "magnets=3;programming=3" equip_cooldown = 20 - energy_drain = 100 + energy_drain = 50 range = 0 var/health_boost = 1 var/icon/droid_overlay diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 3493f03dd69..7a0e388b39e 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -285,14 +285,14 @@ /obj/item/mecha_parts/mecha_equipment/mimercd name = "mounted MRCD" - desc = "An exosuit-mounted Mime Rapid Construction Device. (Can be attached to: Recitence)" + desc = "An exosuit-mounted Mime Rapid Construction Device. (Can be attached to: Reticence)" icon_state = "mecha_rcd" origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4" equip_cooldown = 10 energy_drain = 250 range = MELEE|RANGED -/obj/item/mecha_parts/mecha_equipment/mimercd/can_attach(obj/mecha/combat/recitence/M) +/obj/item/mecha_parts/mecha_equipment/mimercd/can_attach(obj/mecha/combat/reticence/M) if(..()) if(istype(M)) return 1 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 0466aa698c6..a4c7b7d2f5d 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -78,7 +78,7 @@ equip_cooldown = 10 name = "CH-LC \"Solaris\" Laser Cannon" icon_state = "mecha_laser" - energy_drain = 40 + energy_drain = 60 projectile = /obj/item/projectile/beam/laser/heavylaser fire_sound = 'sound/weapons/lasercannonfire.ogg' @@ -183,7 +183,7 @@ spawn(20) if(thingy) walk(thingy,0) - for(var/obj/mecha/combat/recitence/R in oview(6, chassis)) + for(var/obj/mecha/combat/reticence/R in oview(6, chassis)) R.occupant_message("\The [R] has protected you from [chassis]'s HONK at the cost of some power.") R.use_power(R.get_charge() / 4) @@ -244,7 +244,7 @@ projectiles = 20 projectile_energy_cost = 50 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced/can_attach(obj/mecha/combat/recitence/M as obj) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced/can_attach(obj/mecha/combat/reticence/M as obj) if(..()) if(istype(M)) return 1 @@ -448,7 +448,7 @@ desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demloishing solid obstacles." icon_state = "mecha_plasmacutter" item_state = "plasmacutter" - energy_drain = 60 + energy_drain = 30 origin_tech = "materials=3;combat=2;powerstorage=3;plasmatech=3" projectile = /obj/item/projectile/plasma/adv/mech fire_sound = 'sound/weapons/laser.ogg' diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index a3ed3ee1534..cd20b68f10d 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -39,7 +39,7 @@ "Gygax", "Durand", "H.O.N.K", - "Recitence", + "Reticence", "Phazon", "Exosuit Equipment", "Cyborg Upgrade Modules", diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 83e3112364e..1ad2bc83d96 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -629,8 +629,7 @@ else qdel(cabin_air) cabin_air = null - qdel(spark_system) - spark_system = null + QDEL_NULL(spark_system) mechas_list -= src //global mech list return ..() @@ -663,7 +662,7 @@ /obj/mecha/emp_act(severity) if(get_charge()) - use_power((cell.charge / 2) / severity) + use_power((cell.charge/3)/(severity*2)) take_damage(50 / severity, "energy") log_message("EMP detected", 1) check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL, MECHA_INT_CONTROL_LOST, MECHA_INT_SHORT_CIRCUIT), 1) diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 76fa87f6988..b570f17ccfe 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -863,48 +863,48 @@ feedback_inc("mecha_honker_created",1) return -/datum/construction/mecha/recitence_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/recitence_torso),//1 - list("key"=/obj/item/mecha_parts/part/recitence_left_arm),//2 - list("key"=/obj/item/mecha_parts/part/recitence_right_arm),//3 - list("key"=/obj/item/mecha_parts/part/recitence_left_leg),//4 - list("key"=/obj/item/mecha_parts/part/recitence_right_leg),//5 - list("key"=/obj/item/mecha_parts/part/recitence_head) +/datum/construction/mecha/reticence_chassis + steps = list(list("key"=/obj/item/mecha_parts/part/reticence_torso),//1 + list("key"=/obj/item/mecha_parts/part/reticence_left_arm),//2 + list("key"=/obj/item/mecha_parts/part/reticence_right_arm),//3 + list("key"=/obj/item/mecha_parts/part/reticence_left_leg),//4 + list("key"=/obj/item/mecha_parts/part/reticence_right_leg),//5 + list("key"=/obj/item/mecha_parts/part/reticence_head) ) -/datum/construction/mecha/recitence_chassis/action(atom/used_atom,mob/user as mob) +/datum/construction/mecha/reticence_chassis/action(atom/used_atom,mob/user as mob) return check_all_steps(used_atom,user) -/datum/construction/mecha/recitence_chassis/custom_action(step, atom/used_atom, mob/user) +/datum/construction/mecha/reticence_chassis/custom_action(step, atom/used_atom, mob/user) user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") holder.overlays += used_atom.icon_state + "+o" qdel(used_atom) return 1 -/datum/construction/mecha/recitence_chassis/spawn_result() +/datum/construction/mecha/reticence_chassis/spawn_result() var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/mecha/recitence(const_holder) + const_holder.construct = new /datum/construction/mecha/reticence(const_holder) const_holder.density = 1 qdel(src) return -/datum/construction/mecha/recitence - result = "/obj/mecha/combat/recitence" +/datum/construction/mecha/reticence + result = "/obj/mecha/combat/reticence" steps = list(list("key"=/obj/effect/dummy/mecha_emote_step),//1 list("key"=/obj/item/clothing/suit/suspenders),//2 list("key"=/obj/effect/dummy/mecha_emote_step),//3 list("key"=/obj/item/clothing/mask/gas/mime),//4 list("key"=/obj/effect/dummy/mecha_emote_step),//5 list("key"=/obj/item/clothing/head/beret),//6 - list("key"=/obj/item/weapon/circuitboard/mecha/recitence/targeting),//7 - list("key"=/obj/item/weapon/circuitboard/mecha/recitence/peripherals),//8 - list("key"=/obj/item/weapon/circuitboard/mecha/recitence/main),//9 + list("key"=/obj/item/weapon/circuitboard/mecha/reticence/targeting),//7 + list("key"=/obj/item/weapon/circuitboard/mecha/reticence/peripherals),//8 + list("key"=/obj/item/weapon/circuitboard/mecha/reticence/main),//9 ) -/datum/construction/mecha/recitence/action(atom/used_atom,mob/user) +/datum/construction/mecha/reticence/action(atom/used_atom,mob/user) return check_step(used_atom,user) -/datum/construction/mecha/recitence/custom_action(step, atom/used_atom, mob/user) +/datum/construction/mecha/reticence/custom_action(step, atom/used_atom, mob/user) if(!..()) return 0 @@ -935,9 +935,9 @@ qdel(used_atom) return 1 -/datum/construction/mecha/recitence/spawn_result() +/datum/construction/mecha/reticence/spawn_result() ..() - feedback_inc("mecha_recitence_created",1) + feedback_inc("mecha_reticence_created",1) return /datum/construction/mecha/durand_chassis diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 60c352c20bd..11fed270bab 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -223,14 +223,14 @@ icon_state = "honker_r_leg" -////////// Recitence +////////// Reticence -/obj/item/mecha_parts/chassis/recitence - name = "Recitence Chassis" +/obj/item/mecha_parts/chassis/reticence + name = "Reticence Chassis" -/obj/item/mecha_parts/chassis/recitence/New() +/obj/item/mecha_parts/chassis/reticence/New() ..() - construct = new /datum/construction/mecha/recitence_chassis(src) + construct = new /datum/construction/mecha/reticence_chassis(src) /obj/effect/dummy/mecha_emote_step var/emote @@ -238,37 +238,37 @@ /obj/effect/dummy/mecha_emote_step/New(e) emote = e -/obj/item/mecha_parts/chassis/recitence/hear_message(mob/living/M, msg) - if(!istype(M) || !istype(construct, /datum/construction/mecha/recitence)) +/obj/item/mecha_parts/chassis/reticence/hear_message(mob/living/M, msg) + if(!istype(M) || !istype(construct, /datum/construction/mecha/reticence)) return // is the current step the dummy emote object? var/list/steps = construct.steps if(steps[steps.len]["key"] == /obj/effect/dummy/mecha_emote_step) construct.action(new /obj/effect/dummy/mecha_emote_step(msg), M) -/obj/item/mecha_parts/part/recitence_torso - name = "Recitence Torso" - icon_state = "recitence_harness" +/obj/item/mecha_parts/part/reticence_torso + name = "Reticence Torso" + icon_state = "reticence_harness" -/obj/item/mecha_parts/part/recitence_head - name = "Recitence Head" - icon_state = "recitence_head" +/obj/item/mecha_parts/part/reticence_head + name = "Reticence Head" + icon_state = "reticence_head" -/obj/item/mecha_parts/part/recitence_left_arm - name = "Recitence Left Arm" - icon_state = "recitence_l_arm" +/obj/item/mecha_parts/part/reticence_left_arm + name = "Reticence Left Arm" + icon_state = "reticence_l_arm" -/obj/item/mecha_parts/part/recitence_right_arm - name = "Recitence Right Arm" - icon_state = "recitence_r_arm" +/obj/item/mecha_parts/part/reticence_right_arm + name = "Reticence Right Arm" + icon_state = "reticence_r_arm" -/obj/item/mecha_parts/part/recitence_left_leg - name = "Recitence Left Leg" - icon_state = "recitence_l_leg" +/obj/item/mecha_parts/part/reticence_left_leg + name = "Reticence Left Leg" + icon_state = "reticence_l_leg" -/obj/item/mecha_parts/part/recitence_right_leg - name = "Recitence Right Leg" - icon_state = "recitence_r_leg" +/obj/item/mecha_parts/part/reticence_right_leg + name = "Reticence Right Leg" + icon_state = "reticence_r_leg" ////////// Phazon @@ -455,19 +455,19 @@ name = "Circuit board (H.O.N.K Central Control module)" icon_state = "mainboard" -/obj/item/weapon/circuitboard/mecha/recitence +/obj/item/weapon/circuitboard/mecha/reticence origin_tech = "programming=4" -/obj/item/weapon/circuitboard/mecha/recitence/peripherals - name = "circuit board (Reticience Peripherals Control module)" +/obj/item/weapon/circuitboard/mecha/reticence/peripherals + name = "circuit board (Reticence Peripherals Control module)" icon_state = "mcontroller" -/obj/item/weapon/circuitboard/mecha/recitence/targeting - name = "circuit board (Reticience Weapon Control and Targeting module)" +/obj/item/weapon/circuitboard/mecha/reticence/targeting + name = "circuit board (Reticence Weapon Control and Targeting module)" icon_state = "mcontroller" -/obj/item/weapon/circuitboard/mecha/recitence/main - name = "circuit board (Reticience Central Control module)" +/obj/item/weapon/circuitboard/mecha/reticence/main + name = "circuit board (Reticence Central Control module)" icon_state = "mainboard" /obj/item/weapon/circuitboard/mecha/odysseus diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index c115119cc97..af6f2f20b3f 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -118,8 +118,8 @@ name = "Seraph wreckage" icon_state = "seraph-broken" -/obj/effect/decal/mecha_wreckage/recitence - name = "\improper Recitence wreckage" +/obj/effect/decal/mecha_wreckage/reticence + name = "\improper Reticence wreckage" icon_state = "mime-broken" /obj/effect/decal/mecha_wreckage/ripley diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 434fec620b8..89baf450720 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -19,8 +19,9 @@ var/new_frequency = sanitize_frequency(rand(PUBLIC_LOW_FREQ, PUBLIC_HIGH_FREQ)) aSignal.set_frequency(new_frequency) poi_list |= src - + /obj/effect/anomaly/Destroy() + QDEL_NULL(aSignal) poi_list.Remove(src) return ..() diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 48a85e7e704..cfde9ab55a4 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,9 +1,8 @@ /obj/effect/decal/cleanable var/list/random_icon_states = list() - var/targeted_by = null // Used so cleanbots can't claim a mess. var/noscoop = 0 //if it has this, don't let it be scooped up var/noclear = 0 //if it has this, don't delete it when its' scooped up - + /obj/effect/decal/cleanable/proc/can_bloodcrawl_in() return FALSE diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 4df0c51ed4d..b7967ee02cb 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -36,9 +36,7 @@ to_chat(user, "This is a [generation]\th generation [name]!") /obj/structure/glowshroom/Destroy() - if(myseed) - qdel(myseed) - myseed = null + QDEL_NULL(myseed) return ..() /obj/structure/glowshroom/New(loc, obj/item/seeds/newseed, mutate_stats) diff --git a/code/game/objects/effects/spawners/random_barrier.dm b/code/game/objects/effects/spawners/random_barrier.dm index ff165fff38a..3fd81bcf9b0 100644 --- a/code/game/objects/effects/spawners/random_barrier.dm +++ b/code/game/objects/effects/spawners/random_barrier.dm @@ -28,15 +28,13 @@ name = "probably a wall" result = list( /turf/simulated/wall = 9, - /obj/structure/falsewall = 1 - ) + /obj/structure/falsewall = 1) /obj/effect/spawner/random_barrier/floor_probably name = "probably a floor" result = list( /turf/simulated/floor/plasteel = 3, - /turf/simulated/wall = 1 - ) + /turf/simulated/wall = 1) /obj/effect/spawner/random_barrier/obstruction name = "obstruction" @@ -44,12 +42,24 @@ /turf/simulated/wall = 1, /obj/structure/falsewall = 1, /obj/structure/barricade/wooden = 1, - /obj/machinery/door/airlock/welded = 1 - ) + /obj/machinery/door/airlock/welded = 1) -/obj/effect/spawner/random_barrier/possibly_welded_airlock +/obj/effect/spawner/random_barrier/possibly_welded_airlock // these have no access restrictions, so for internal maintenance only name = "possibly welded airlock" result = list( /obj/machinery/door/airlock = 3, - /obj/machinery/door/airlock/welded = 1 - ) + /obj/machinery/door/airlock/welded = 1) + +/obj/effect/spawner/random_spawners/grille_often + name = "grille often" + result = list( + /obj/structure/grille = 8, + /obj/structure/grille/broken = 4, + /turf/simulated/floor/plating = 2) + +/obj/effect/spawner/random_spawners/grille_maybe + name = "grille maybe" + result = list( + /obj/structure/grille = 2, + /obj/structure/grille/broken = 2, + /turf/simulated/floor/plating = 5) diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm new file mode 100644 index 00000000000..621c8799cc2 --- /dev/null +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -0,0 +1,110 @@ +/obj/effect/spawner/random_spawners + name = "random spawners" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + color = "#00FF00" + var/list/result = list( + /turf/simulated/floor/plasteel = 1, + /turf/simulated/floor/plating = 1, + /obj/effect/decal/cleanable/blood/splatter = 1, + /obj/effect/decal/cleanable/blood/oil = 1, + /obj/effect/decal/cleanable/fungus = 1) + +// This needs to come before the initialization wave because +// the thing it creates might need to be initialized too +/obj/effect/spawner/random_spawners/New() + . = ..() + var/turf/T = get_turf(src) + if(!T) + log_runtime(EXCEPTION("Spawner placed in nullspace!"), src) + return + var/thing_to_place = pickweight(result) + if(ispath(thing_to_place, /turf)) + T.ChangeTurf(thing_to_place) + else + new thing_to_place(T) + qdel(src) + +/obj/effect/spawner/random_spawners/blood_maybe + name = "blood maybe" + result = list( + /turf/simulated/floor/plating = 20, + /obj/effect/decal/cleanable/blood/splatter = 1) + +/obj/effect/spawner/random_spawners/blood_often + name = "blood often" + result = list( + /turf/simulated/floor/plating = 5, + /obj/effect/decal/cleanable/blood/splatter = 1) + +/obj/effect/spawner/random_spawners/oil_maybe + name = "oil maybe" + result = list( + /turf/simulated/floor/plating = 20, + /obj/effect/decal/cleanable/blood/oil = 1) + +/obj/effect/spawner/random_spawners/oil_maybe + name = "oil often" + result = list( + /turf/simulated/floor/plating = 5, + /obj/effect/decal/cleanable/blood/oil = 1) + +/obj/effect/spawner/random_spawners/wall_rusted_probably + name = "rusted wall probably" + result = list( + /turf/simulated/wall = 2, + /turf/simulated/wall/rust = 7) + +/obj/effect/spawner/random_spawners/wall_rusted_maybe + name = "rusted wall maybe" + result = list( + /turf/simulated/wall = 7, + /turf/simulated/wall/rust = 1) + +/obj/effect/spawner/random_spawners/cobweb_left_frequent + name = "cobweb left frequent" + result = list( + /turf/simulated/floor/plating = 1, + /obj/effect/decal/cleanable/cobweb = 1) + +/obj/effect/spawner/random_spawners/cobweb_right_frequent + name = "cobweb right frequent" + result = list( + /turf/simulated/floor/plating = 1, + /obj/effect/decal/cleanable/cobweb2 = 1) + +/obj/effect/spawner/random_spawners/cobweb_left_rare + name = "cobweb left rare" + result = list( + /turf/simulated/floor/plating = 10, + /obj/effect/decal/cleanable/cobweb = 1) + +/obj/effect/spawner/random_spawners/cobweb_right_rare + name = "cobweb right rare" + result = list( + /turf/simulated/floor/plating = 10, + /obj/effect/decal/cleanable/cobweb2 = 1) + +/obj/effect/spawner/random_spawners/dirt_frequent + name = "dirt frequent" + result = list( + /turf/simulated/floor/plating = 1, + /obj/effect/decal/cleanable/dirt = 1) + +/obj/effect/spawner/random_spawners/dirt_rare + name = "dirt rare" + result = list( + /turf/simulated/floor/plating = 10, + /obj/effect/decal/cleanable/dirt = 1) + +/obj/effect/spawner/random_spawners/fungus_maybe + name = "rusted wall maybe" + result = list( + /turf/simulated/wall = 7, + /obj/effect/decal/cleanable/fungus = 1) + +/obj/effect/spawner/random_spawners/fungus_probably + name = "rusted wall maybe" + result = list( + /turf/simulated/wall = 1, + /obj/effect/decal/cleanable/fungus = 7) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 8ed8d045de4..0a9f49cd2d0 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -6,6 +6,11 @@ anchored = 1 density = 0 var/health = 15 + var/master_commander = null + +/obj/structure/spider/Destroy() + master_commander = null + return ..() //similar to weeds, but only barfed out by nurses manually /obj/structure/spider/ex_act(severity) @@ -78,7 +83,6 @@ var/amount_grown = 0 var/player_spiders = 0 var/faction = list() - var/master_commander = null /obj/structure/spider/eggcluster/New() pixel_x = rand(3,-3) @@ -110,7 +114,6 @@ var/travelling_in_vent = 0 var/player_spiders = 0 var/faction = list() - var/master_commander = null var/selecting_player = 0 /obj/structure/spider/spiderling/New() @@ -118,6 +121,10 @@ pixel_y = rand(6,-6) processing_objects.Add(src) +/obj/structure/spider/spiderling/Destroy() + entry_vent = null + return ..() + /obj/structure/spider/spiderling/Bump(atom/user) if(istype(user, /obj/structure/table)) src.loc = user.loc diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index 4c2c5420d1a..95cf94a3a1e 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -19,9 +19,7 @@ ID.access = get_region_accesses(region_access) /obj/item/weapon/door_remote/Destroy() - if(ID) - qdel(ID) - ID = null + QDEL_NULL(ID) return ..() /obj/item/weapon/door_remote/attack_self(mob/user) diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm index 991d04fbd63..3125c24837a 100644 --- a/code/game/objects/items/dehy_carp.dm +++ b/code/game/objects/items/dehy_carp.dm @@ -8,6 +8,11 @@ var/mob/owner = null // Carp doesn't attack owner, set when using in hand var/owned = 1 // Boolean, no owner to begin with + +/obj/item/toy/carpplushie/dehy_carp/Destroy() + owner = null + return ..() + // Attack self /obj/item/toy/carpplushie/dehy_carp/attack_self(mob/user as mob) src.add_fingerprint(user) // Anyone can add their fingerprints to it with this diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index 53ccc233b68..7ebf13e538b 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -66,12 +66,8 @@ if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V)) chemtraces += V -/obj/item/weapon/autopsy_scanner/verb/print_data() - set name = "Print Data" - set category = "Object" - set src in oview(1) - - if(usr.incapacitated()) +/obj/item/weapon/autopsy_scanner/attack_self(mob/user) + if(!wdata.len && !chemtraces.len) return var/scan_data = "" @@ -142,18 +138,17 @@ for(var/chemID in chemtraces) scan_data += chemID scan_data += "
" - - usr.visible_message("[src] rattles and prints out a sheet of paper.") + user.visible_message("[src] rattles and prints out a sheet of paper.") playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1) sleep(10) - var/obj/item/weapon/paper/P = new(usr.loc) + var/obj/item/weapon/paper/P = new(user.loc) P.name = "Autopsy Data ([target_name])" P.info = "[scan_data]" P.overlays += "paper_words" - usr.put_in_hands(P) + user.put_in_hands(P) /obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M, mob/living/carbon/user) if(!istype(M)) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 52a9a343e6b..fefb20e90e4 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -152,7 +152,7 @@ if(M.stat == CONSCIOUS) M.mind_initialize() //give them a mind datum if they don't have one. var/resisted - if(!isloyal(M)) + if(!ismindshielded(M)) if(user.mind in ticker.mode.head_revolutionaries) if(ticker.mode.add_revolutionary(M.mind)) times_used -- //Flashes less likely to burn out for headrevs when used for conversion diff --git a/code/game/objects/items/devices/guitar.dm b/code/game/objects/items/devices/guitar.dm index bb11c5f0a2a..6c0e4645cc9 100644 --- a/code/game/objects/items/devices/guitar.dm +++ b/code/game/objects/items/devices/guitar.dm @@ -17,8 +17,7 @@ song.instrumentExt = "ogg" /obj/item/device/guitar/Destroy() - qdel(song) - song = null + QDEL_NULL(song) return ..() /obj/item/device/guitar/attack_self(mob/user as mob) diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index deb677b23dd..b172ea052f0 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -35,9 +35,7 @@ pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser") /obj/item/device/laser_pointer/Destroy() - if(diode) - qdel(diode) - diode = null + QDEL_NULL(diode) return ..() /obj/item/device/laser_pointer/upgraded/New() diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm deleted file mode 100644 index a4e0fba0c6c..00000000000 --- a/code/game/objects/items/devices/modkit.dm +++ /dev/null @@ -1,87 +0,0 @@ -#define MODKIT_HELMET 1 -#define MODKIT_SUIT 2 -#define MODKIT_FULL 3 - -/obj/item/device/modkit - name = "hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user." - icon_state = "modkit" - var/parts = MODKIT_FULL - var/target_species = "Human" - - var/list/permitted_types = list( - /obj/item/clothing/head/helmet/space/hardsuit, - /obj/item/clothing/suit/space/hardsuit - ) - -/obj/item/device/modkit/afterattack(obj/item/O, mob/user as mob, proximity) - if(!proximity) - return - - if(!target_species) - return //it shouldn't be null, okay? - - if(!parts) - to_chat(user, "This kit has no parts for this modification left.") - user.unEquip(src) - qdel(src) - return - - var/allowed = 0 - for(var/permitted_type in permitted_types) - if(istype(O, permitted_type)) - allowed = 1 - - var/obj/item/clothing/I = O - if(!istype(I) || !allowed) - to_chat(user, "[src] is unable to modify that.") - return - - var/excluding = ("exclude" in I.species_restricted) - var/in_list = (target_species in I.species_restricted) - if(excluding ^ in_list) - to_chat(user, "[I] is already modified.") - return - - if(!isturf(O.loc)) - to_chat(user, "[O] must be safely placed on the ground for modification.") - return - - playsound(user.loc, O.usesound, 100, 1) - - user.visible_message("[user] opens \the [src] and modifies \the [O].","You open \the [src] and modify \the [O].") - - I.refit_for_species(target_species) - - if(istype(I, /obj/item/clothing/head/helmet)) - parts &= ~MODKIT_HELMET - if(istype(I, /obj/item/clothing/suit)) - parts &= ~MODKIT_SUIT - - if(!parts) - user.unEquip(src) - qdel(src) - -/obj/item/device/modkit/examine(mob/user) - ..(user) - to_chat(user, "It looks as though it modifies hardsuits to fit [target_species] users.") - -/obj/item/device/modkit/tajaran - name = "Tajaran hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran." - target_species = "Tajaran" - -/obj/item/device/modkit/unathi - name = "Unathi hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Unathi." - target_species = "Unathi" - -/obj/item/device/modkit/skrell - name = "Skrell hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Skrell." - target_species = "Skrell" - -/obj/item/device/modkit/vox - name = "Vox hardsuit modification kit" - desc = "A kit containing all the needed tools and parts to modify a hardsuit for another species. This one looks like it's meant for Vox." - target_species = "Vox" \ No newline at end of file diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index e734f22b97f..4483a920355 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -32,6 +32,9 @@ // Syndicate device disguised as a multitool; it will turn red when an AI camera is nearby. +/obj/item/device/multitool/Destroy() + buffer = null + return ..() /obj/item/device/multitool/ai_detect var/track_cooldown = 0 @@ -56,7 +59,7 @@ multitool_detect() icon_state = "[initial(icon_state)][detect_state]" track_cooldown = world.time + track_delay - + /obj/item/device/multitool/ai_detect/proc/multitool_detect() var/turf/our_turf = get_turf(src) for(var/mob/living/silicon/ai/AI in ai_list) @@ -76,7 +79,7 @@ if(get_dist(our_turf, detect_turf) < rangewarning) detect_state = PROXIMITY_NEAR break - + /obj/item/device/multitool/ai_detect/admin desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item? track_delay = 5 diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index a29ff438f51..763666f36c7 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -12,7 +12,7 @@ var/looking_for_personality = 0 var/mob/living/silicon/pai/pai var/list/faction = list("neutral") // The factions the pAI will inherit from the card - + /obj/item/device/paicard/syndicate name = "syndicate personal AI device" faction = list("syndicate") @@ -33,9 +33,7 @@ pai.ghostize() qdel(pai) pai = null - if(radio) - qdel(radio) - radio = null + QDEL_NULL(radio) return ..() /obj/item/device/paicard/attack_self(mob/user) diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 25e975fa920..65093361197 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -13,7 +13,7 @@ materials = list(MAT_METAL=750) origin_tech = "powerstorage=3;syndicate=5" var/drain_rate = 1600000 // amount of power to drain per tick - var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts. + var/apc_drain_rate = 50 // Max. amount drained from single APC. In Watts. var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts. var/power_drained = 0 // Amount of power drained. var/max_power = 1e10 // Detonation point. @@ -27,6 +27,8 @@ /obj/item/device/powersink/Destroy() processing_objects.Remove(src) processing_power_items.Remove(src) + PN = null + attached = null return ..() /obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) @@ -110,10 +112,10 @@ if(istype(T.master, /obj/machinery/power/apc)) var/obj/machinery/power/apc/A = T.master if(A.operating && A.cell) - var/cur_charge = A.cell.charge / CELLRATE - var/drain_val = min(apc_drain_rate, cur_charge) - A.cell.use(drain_val * CELLRATE) - drained += drain_val + A.cell.charge = max(0, A.cell.charge - apc_drain_rate) + drained += apc_drain_rate + if(A.charging == 2) // If the cell was full + A.charging = 1 // It's no longer full power_drained += drained return 1 diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 30e02824cd1..9fd1e40b4f7 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -32,12 +32,8 @@ recalculateChannels(1) /obj/item/device/radio/headset/Destroy() - if(keyslot1) - qdel(keyslot1) - if(keyslot2) - qdel(keyslot2) - keyslot1 = null - keyslot2 = null + QDEL_NULL(keyslot1) + QDEL_NULL(keyslot2) return ..() /obj/item/device/radio/headset/list_channels(var/mob/user) @@ -63,7 +59,7 @@ return RADIO_CONNECTION_FAIL return ..() - + /obj/item/device/radio/headset/is_listening() if(ishuman(loc)) var/mob/living/carbon/human/H = loc @@ -71,7 +67,7 @@ return ..() else if(isanimal(loc) || isAI(loc)) return ..() - + return FALSE /obj/item/device/radio/headset/alt diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index efad9162785..b48f21a60cd 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -30,7 +30,6 @@ var/global/list/default_medbay_channels = list( var/frequency = PUB_FREQ //common chat var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies var/canhear_range = 3 // the range which mobs can hear this radio from - var/obj/item/device/radio/patch_link = null var/datum/wires/radio/wires = null var/b_stat = 0 var/broadcasting = 0 @@ -54,14 +53,14 @@ var/global/list/default_medbay_channels = list( var/list/internal_channels -/obj/item/device/radio var/datum/radio_frequency/radio_connection var/list/datum/radio_frequency/secure_radio_connections = new - proc/set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) + +/obj/item/device/radio/proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT) /obj/item/device/radio/New() @@ -74,14 +73,13 @@ var/global/list/default_medbay_channels = list( global_radios |= src /obj/item/device/radio/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) if(radio_controller) radio_controller.remove_object(src, frequency) for(var/ch_name in channels) radio_controller.remove_object(src, radiochannels[ch_name]) - patch_link = null global_radios -= src + follow_target = null return ..() @@ -271,7 +269,7 @@ var/global/list/default_medbay_channels = list( /mob/living/automatedannouncer/Destroy() if(lifetime_timer) deltimer(lifetime_timer) - ..() + return ..() /mob/living/automatedannouncer/proc/autocleanup() log_runtime(EXCEPTION("An announcer somehow managed to outlive the radio! Deleting!"), src, list("Message: '[message]'")) diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index e1dd31b79be..79fc2f92457 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -12,8 +12,7 @@ crew_monitor = new(src) /obj/item/device/sensor_device/Destroy() - qdel(crew_monitor) - crew_monitor = null + QDEL_NULL(crew_monitor) return ..() /obj/item/device/sensor_device/attack_self(mob/user as mob) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 43aff1cb05d..6ec1a36504b 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -21,9 +21,7 @@ update_icon() /obj/item/device/taperecorder/Destroy() - if(mytape) - qdel(mytape) - mytape = null + QDEL_NULL(mytape) return ..() /obj/item/device/taperecorder/examine(mob/user) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index ba62169b886..877cb1a5fc9 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -13,15 +13,9 @@ origin_tech = "materials=1;engineering=1" /obj/item/device/transfer_valve/Destroy() - if(tank_one) - qdel(tank_one) - tank_one = null - if(tank_two) - qdel(tank_two) - tank_two = null - if(attached_device) - qdel(attached_device) - attached_device = null + QDEL_NULL(tank_one) + QDEL_NULL(tank_two) + QDEL_NULL(attached_device) attacher = null return ..() diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm index 3ad1e98d6a6..3ef6b2bef85 100644 --- a/code/game/objects/items/devices/violin.dm +++ b/code/game/objects/items/devices/violin.dm @@ -18,8 +18,7 @@ song.instrumentExt = "ogg" /obj/item/device/violin/Destroy() - qdel(song) - song = null + QDEL_NULL(song) return ..() /obj/item/device/violin/initialize() diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index 855c97d9b12..a7a45de8cb8 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -12,9 +12,7 @@ var/datum/gas_mixture/air_contents = null /obj/item/latexballon/Destroy() - if(air_contents) - qdel(air_contents) - air_contents = null + QDEL_NULL(air_contents) return ..() /obj/item/latexballon/proc/blow(obj/item/weapon/tank/tank, mob/user) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index f475bb83c98..5598a42cc8f 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -59,8 +59,7 @@ RCD return /obj/item/weapon/rcd/Destroy() - qdel(spark_system) - spark_system = null + QDEL_NULL(spark_system) rcd_list -= src return ..() diff --git a/code/game/objects/items/weapons/RCL.dm b/code/game/objects/items/weapons/RCL.dm index 524fd38eb80..8e0357ecd13 100644 --- a/code/game/objects/items/weapons/RCL.dm +++ b/code/game/objects/items/weapons/RCL.dm @@ -62,9 +62,7 @@ to_chat(user, "It contains [loaded.amount]/[max_amount] cables.") /obj/item/weapon/twohanded/rcl/Destroy() - if(loaded) - qdel(loaded) - loaded = null + QDEL_NULL(loaded) last = null active = 0 return ..() diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index f0c4f1e60d6..2b46e8de101 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -46,8 +46,7 @@ LIGHTERS ARE IN LIGHTERS.DM reagents.set_reacting(FALSE) // so it doesn't react until you light it /obj/item/clothing/mask/cigarette/Destroy() - if(reagents) - qdel(reagents) + QDEL_NULL(reagents) processing_objects -= src return ..() @@ -94,6 +93,17 @@ LIGHTERS ARE IN LIGHTERS.DM else if(istype(W, /obj/item/device/assembly/igniter)) light("[user] fiddles with [W], and manages to light their [name].") + else if(istype(W, /obj/item/weapon/gun/magic/wand/fireball)) + var/obj/item/weapon/gun/magic/wand/fireball/F = W + if(F.charges) + if(prob(50) || user.mind.assigned_role == "Wizard") + light("Holy shit, did [user] just manage to light their [name] with [W], with only moderate eyebrow singing?") + else + to_chat(user, "Unsure which end of the wand is which, [user] fails to light [name] with [W].") + explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) + F.charges-- + + //can't think of any other way to update the overlays :< user.update_inv_wear_mask() user.update_inv_l_hand() diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 4151cdc0d05..329ea2f9ce3 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -172,12 +172,8 @@ if(on) var/M = get(paddles, /mob) remove_paddles(M) - if(paddles) - qdel(paddles) - paddles = null - if(bcell) - qdel(bcell) - bcell = null + QDEL_NULL(paddles) + QDEL_NULL(bcell) return ..() /obj/item/weapon/defibrillator/proc/deductcharge(var/chrgdeductamt) diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index f82e845d61d..b4d0e0b5eaa 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -5,7 +5,7 @@ icon_state = "dnainjector" item_state = "dnainjector" var/block = 0 - var/datum/dna2/record/buf=null + var/datum/dna2/record/buf = null throw_speed = 3 throw_range = 5 w_class = 1 @@ -26,6 +26,10 @@ buf.dna.ResetSE() SetValue(value) +/obj/item/weapon/dnainjector/Destroy() + QDEL_NULL(buf) + return ..() + /obj/item/weapon/dnainjector/proc/GetRealBlock(var/selblock) if(selblock==0) return block diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index bd6a18b73c1..13a9186058e 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -18,10 +18,9 @@ ..() /obj/item/weapon/grenade/plastic/Destroy() - qdel(nadeassembly) - nadeassembly = null + QDEL_NULL(nadeassembly) target = null - ..() + return ..() /obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params) if(!nadeassembly && istype(I, /obj/item/device/assembly_holder)) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 71dafff99ff..70fbde22224 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -25,15 +25,10 @@ /obj/item/weapon/flamethrower/Destroy() - if(weldtool) - qdel(weldtool) - weldtool = null - if(igniter) - qdel(igniter) - igniter = null - if(ptank) - qdel(ptank) - ptank = null + QDEL_NULL(weldtool) + QDEL_NULL(igniter) + QDEL_NULL(ptank) + previousturf = null return ..() diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index 04470cf7854..196b0d269a0 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -13,6 +13,10 @@ var/improvised = 0 var/garrote_time +/obj/item/weapon/twohanded/garrote/Destroy() + strangling = null + return ..() + /obj/item/weapon/twohanded/garrote/update_icon() if(strangling) // If we're strangling someone we want our icon to stay wielded icon_state = "garrot_unwrap" diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 6ca1d53e5db..cf649bae421 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -26,6 +26,12 @@ payload_name += " " // formatting, ignore me update_icon() +/obj/item/weapon/grenade/chem_grenade/Destroy() + QDEL_NULL(nadeassembly) + for(var/thing in beakers) + qdel(thing) + beakers.Cut() + return ..() /obj/item/weapon/grenade/chem_grenade/examine(mob/user) ..(user) diff --git a/code/game/objects/items/weapons/holosign.dm b/code/game/objects/items/weapons/holosign.dm index dac93f9cb04..1a5542b5ef5 100644 --- a/code/game/objects/items/weapons/holosign.dm +++ b/code/game/objects/items/weapons/holosign.dm @@ -13,6 +13,12 @@ var/list/signs = list() var/max_signs = 20 +/obj/item/weapon/holosign_creator/Destroy() + for(var/sign in signs) + qdel(sign) + signs.Cut() + return ..() + /obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag) if(flag) var/turf/T = get_turf(target) diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 68d75f1e7bb..cda1145d90c 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -592,7 +592,7 @@ to_chat(missionary, "Your faith is strong, but their mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more...") faith -= 25 //same faith cost as losing sight of them mid-conversion, but did you just find someone who can lead you to a fellow traitor? return - if(isloyal(target)) + if(ismindshielded(target)) if(prob(20)) //loyalty implants typically overpower this, but you CAN get lucky and convert still (20% chance of success) faith -= 125 //yes, this puts it negative. it's gonna take longer to recharge if you manage to convert a one of these people to balance the new power you gained through them to_chat(missionary, "Through sheer willpower, you overcome their closed mind and rally [target] to your cause! You may need a bit longer than usual before your faith is fully recharged, and they won't remain loyal to you for long ...") diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm new file mode 100644 index 00000000000..4985576e66c --- /dev/null +++ b/code/game/objects/items/weapons/implants/implant_abductor.dm @@ -0,0 +1,46 @@ +/obj/item/weapon/implant/abductor + name = "recall implant" + desc = "Returns you to the mothership." + icon = 'icons/obj/abductor.dmi' + icon_state = "implant" + activated = 1 + origin_tech = "materials=2;biotech=7;magnets=4;bluespace=4;abductor=5" + var/obj/machinery/abductor/pad/home + var/cooldown = 30 + var/total_cooldown = 30 + +/obj/item/weapon/implant/abductor/activate() + if(cooldown == total_cooldown) + home.Retrieve(imp_in,1) + cooldown = 0 + processing_objects.Add(src) + else + to_chat(imp_in, "You must wait [(total_cooldown - cooldown)*2] seconds to use [src] again!") + +/obj/item/weapon/implant/abductor/process() + if(cooldown < total_cooldown) + cooldown++ + if(cooldown == total_cooldown) + processing_objects.Remove(src) + +/obj/item/weapon/implant/abductor/implant(mob/source, mob/user) + if(..()) + var/obj/machinery/abductor/console/console + if(ishuman(source)) + var/mob/living/carbon/human/H = source + if(H.get_species() == "Abductor") + console = get_team_console(H.mind.abductor.team) + home = console.pad + + if(!home) + console = get_team_console(pick(1, 2, 3, 4)) + home = console.pad + return 1 + +/obj/item/weapon/implant/abductor/proc/get_team_console(var/team) + var/obj/machinery/abductor/console/console + for(var/obj/machinery/abductor/console/c in abductor_equipment) + if(c.team == team) + console = c + break + return console \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implant_mindshield.dm b/code/game/objects/items/weapons/implants/implant_mindshield.dm index a6efb21661f..a76b373e6b7 100644 --- a/code/game/objects/items/weapons/implants/implant_mindshield.dm +++ b/code/game/objects/items/weapons/implants/implant_mindshield.dm @@ -1,10 +1,10 @@ -/obj/item/weapon/implant/loyalty +/obj/item/weapon/implant/mindshield name = "mindshield implant" desc = "Stops people messing with your mind." origin_tech = "materials=2;biotech=4;programming=4" activated = 0 -/obj/item/weapon/implant/loyalty/get_data() +/obj/item/weapon/implant/mindshield/get_data() var/dat = {"Implant Specifications:
Name: Nanotrasen Employee Management Implant
Life: Ten years.
@@ -17,7 +17,7 @@ return dat -/obj/item/weapon/implant/loyalty/implant(mob/target) +/obj/item/weapon/implant/mindshield/implant(mob/target) if(..()) if(target.mind in ticker.mode.head_revolutionaries || is_shadow_or_thrall(target)) target.visible_message("[target] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!") @@ -33,7 +33,7 @@ return 1 return 0 -/obj/item/weapon/implant/loyalty/removed(mob/target, var/silent = 0) +/obj/item/weapon/implant/mindshield/removed(mob/target, var/silent = 0) if(..()) if(target.stat != DEAD && !silent) to_chat(target, "You feel a sense of liberation as Nanotrasen's grip on your mind fades away.") @@ -41,19 +41,19 @@ return 0 -/obj/item/weapon/implanter/loyalty +/obj/item/weapon/implanter/mindshield name = "implanter (mindshield)" -/obj/item/weapon/implanter/loyalty/New() - imp = new /obj/item/weapon/implant/loyalty(src) +/obj/item/weapon/implanter/mindshield/New() + imp = new /obj/item/weapon/implant/mindshield(src) ..() update_icon() -/obj/item/weapon/implantcase/loyalty +/obj/item/weapon/implantcase/mindshield name = "implant case - 'mindshield'" desc = "A glass case containing a mindshield implant." -/obj/item/weapon/implantcase/loyalty/New() - imp = new /obj/item/weapon/implant/loyalty(src) +/obj/item/weapon/implantcase/mindshield/New() + imp = new /obj/item/weapon/implant/mindshield(src) ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/implants/implant_traitor.dm b/code/game/objects/items/weapons/implants/implant_traitor.dm index bb80d50845d..47b993b6007 100644 --- a/code/game/objects/items/weapons/implants/implant_traitor.dm +++ b/code/game/objects/items/weapons/implants/implant_traitor.dm @@ -38,7 +38,7 @@ removed(M) qdel(src) return -1 - if(isloyal(H)) + if(ismindshielded(H)) H.visible_message("[H] seems to resist the implant!", "You feel a strange sensation in your head that quickly dissipates.") removed(M) qdel(src) diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 141f9b14f89..53183e21d63 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -11,7 +11,7 @@ var/ready = 1 var/malfunction = 0 - var/list/obj/item/weapon/implant/loyalty/implant_list = list() + var/list/obj/item/weapon/implant/mindshield/implant_list = list() var/max_implants = 5 var/injection_cooldown = 600 var/replenish_cooldown = 6000 @@ -122,9 +122,9 @@ if(!istype(M, /mob/living/carbon)) return if(!implant_list.len) return - for(var/obj/item/weapon/implant/loyalty/imp in implant_list) + for(var/obj/item/weapon/implant/mindshield/imp in implant_list) if(!imp) continue - if(istype(imp, /obj/item/weapon/implant/loyalty)) + if(istype(imp, /obj/item/weapon/implant/mindshield)) M.visible_message("[M] has been implanted by the [src.name].") if(imp.implant(M)) @@ -135,7 +135,7 @@ /obj/machinery/implantchair/add_implants() for(var/i=0, iIt's out of charge!") return ..() diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 2e197926291..4495f637e56 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -18,6 +18,7 @@ var/mopspeed = 30 /obj/item/weapon/mop/New() + ..() create_reagents(mopcap) janitorial_equipment += src diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 78a974240de..c54a31fad05 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -17,9 +17,7 @@ var/pressureSetting = 1 //How powerful the cannon is - higher pressure = more gas but more powerful throws /obj/item/weapon/pneumatic_cannon/Destroy() - if(tank) - qdel(tank) - tank = null + QDEL_NULL(tank) for(var/obj/item/I in loadedItems) qdel(I) loadedItems.Cut() diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 005ef313a4f..de5d788a9f3 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -5,18 +5,17 @@ icon_state = "cell" item_state = "cell" origin_tech = "powerstorage=1" - force = 5.0 - throwforce = 5.0 - throw_speed = 3 + force = 5 + throwforce = 5 + throw_speed = 2 throw_range = 5 - w_class = 2 + w_class = WEIGHT_CLASS_SMALL var/charge = 0 // note %age conveted to actual charge in New - var/maxcharge = 10000 - rating = 1 + var/maxcharge = 1000 materials = list(MAT_METAL=700, MAT_GLASS=50) var/rigged = 0 // true if rigged to explode + var/chargerate = 100 //how much power is given every tick in a recharger var/minor_fault = 0 //If not 100% reliable, it will build up faults. - var/chargerate = 1000 //how much power is given every tick in a recharger var/self_recharge = 0 //does it self recharge, over time, or not? var/grown_battery = FALSE // If it's a grown that acts as a battery, add a wire overlay to it. @@ -62,10 +61,9 @@ /obj/item/weapon/stock_parts/cell/crap name = "\improper Nanotrasen brand rechargable AA battery" desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT - origin_tech = null - maxcharge = 5000 - rating = 2 + maxcharge = 500 materials = list(MAT_GLASS=40) + rating = 2 /obj/item/weapon/stock_parts/cell/crap/empty/New() ..() @@ -74,9 +72,9 @@ /obj/item/weapon/stock_parts/cell/secborg name = "\improper Security borg rechargable D battery" origin_tech = null - maxcharge = 6000 //6000 max charge / 1000 charge per shot = six shots - rating = 2.5 + maxcharge = 600 //600 max charge / 100 charge per shot = six shots materials = list(MAT_GLASS=40) + rating = 2.5 /obj/item/weapon/stock_parts/cell/secborg/empty/New() ..() @@ -86,11 +84,18 @@ name = "high-capacity power cell" origin_tech = "powerstorage=2" icon_state = "hcell" - maxcharge = 15000 - rating = 3 + maxcharge = 10000 materials = list(MAT_GLASS=60) + rating = 3 chargerate = 1500 +/obj/item/weapon/stock_parts/cell/high/plus + name = "high-capacity power cell+" + desc = "Where did these come from?" + icon_state = "h+cell" + maxcharge = 15000 + chargerate = 2250 + /obj/item/weapon/stock_parts/cell/high/empty/New() ..() charge = 0 @@ -100,7 +105,7 @@ origin_tech = "powerstorage=5" icon_state = "scell" maxcharge = 20000 - materials = list(MAT_GLASS=70) + materials = list(MAT_GLASS=300) rating = 4 chargerate = 2000 @@ -113,8 +118,8 @@ origin_tech = "powerstorage=6" icon_state = "hpcell" maxcharge = 30000 + materials = list(MAT_GLASS=400) rating = 5 - materials = list(MAT_GLASS=80) chargerate = 3000 /obj/item/weapon/stock_parts/cell/hyper/empty/New() @@ -126,7 +131,7 @@ origin_tech = "powerstorage=7" icon_state = "bscell" maxcharge = 40000 - materials = list(MAT_GLASS=80) + materials = list(MAT_GLASS=600) rating = 6 chargerate = 4000 @@ -139,8 +144,8 @@ icon_state = "icell" origin_tech = null maxcharge = 30000 + materials = list(MAT_GLASS=1000) rating = 6 - materials = list(MAT_GLASS=80) chargerate = 30000 /obj/item/weapon/stock_parts/cell/infinite/use() @@ -153,7 +158,7 @@ icon_state = "potato" origin_tech = "powerstorage=1;biotech=1" charge = 100 - maxcharge = 3000 + maxcharge = 300 materials = list() rating = 1 minor_fault = 1 @@ -170,17 +175,17 @@ /obj/item/weapon/stock_parts/cell/pulse //200 pulse shots name = "pulse rifle power cell" - maxcharge = 400000 + maxcharge = 40000 rating = 3 chargerate = 1500 -/obj/item/weapon/stock_parts/cell/pulse/carbine +/obj/item/weapon/stock_parts/cell/pulse/carbine //25 pulse shots name = "pulse carbine power cell" - maxcharge = 40000 + maxcharge = 5000 -/obj/item/weapon/stock_parts/cell/pulse/pistol +/obj/item/weapon/stock_parts/cell/pulse/pistol //10 pulse shots name = "pulse pistol power cell" - maxcharge = 16000 + maxcharge = 2000 /obj/item/weapon/stock_parts/cell/ninja name = "spider-clan power cell" @@ -192,7 +197,7 @@ /obj/item/weapon/stock_parts/cell/emproof name = "\improper EMP-proof cell" desc = "An EMP-proof cell." - maxcharge = 5000 + maxcharge = 500 rating = 2 /obj/item/weapon/stock_parts/cell/emproof/empty/New() diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index 99bf305df42..9ee2c46728e 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -17,9 +17,7 @@ /obj/item/weapon/melee/powerfist/Destroy() - if(tank) - qdel(tank) - tank = null + QDEL_NULL(tank) return ..() /obj/item/weapon/melee/powerfist/examine(mob/user) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index c20cec521c6..a3f2a21a5fa 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -186,7 +186,7 @@ /obj/item/weapon/storage/fancy/cigarettes/Destroy() - qdel(reagents) + QDEL_NULL(reagents) return ..() diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 448395df3e4..b622e469124 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -80,16 +80,16 @@ max_combined_w_class = 4 //The sum of the w_classes of all the items in this storage item. storage_slots = 1 -/obj/item/weapon/storage/lockbox/loyalty +/obj/item/weapon/storage/lockbox/mindshield name = "Lockbox (Mindshield Implants)" req_access = list(access_security) -/obj/item/weapon/storage/lockbox/loyalty/New() +/obj/item/weapon/storage/lockbox/mindshield/New() ..() - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implantcase/loyalty(src) - new /obj/item/weapon/implanter/loyalty(src) + new /obj/item/weapon/implantcase/mindshield(src) + new /obj/item/weapon/implantcase/mindshield(src) + new /obj/item/weapon/implantcase/mindshield(src) + new /obj/item/weapon/implanter/mindshield(src) /obj/item/weapon/storage/lockbox/clusterbang name = "lockbox (clusterbang)" diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index e7f2fb29938..e5fb0646169 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -454,8 +454,8 @@ for(var/obj/O in contents) O.mouse_opacity = initial(O.mouse_opacity) - qdel(boxes) - qdel(closer) + QDEL_NULL(boxes) + QDEL_NULL(closer) return ..() /obj/item/weapon/storage/emp_act(severity) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index f2bd9cafedf..1de82690573 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -2,6 +2,7 @@ name = "stunbaton" desc = "A stun baton for incapacitating people with." icon_state = "stunbaton" + var/base_icon = "stunbaton" item_state = "baton" slot_flags = SLOT_BELT force = 10 @@ -12,7 +13,7 @@ var/stunforce = 7 var/status = 0 var/obj/item/weapon/stock_parts/cell/high/bcell = null - var/hitcost = 1500 + var/hitcost = 1000 /obj/item/weapon/melee/baton/suicide_act(mob/user) user.visible_message("[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.") @@ -24,9 +25,7 @@ return /obj/item/weapon/melee/baton/Destroy() - if(bcell) - qdel(bcell) - bcell = null + QDEL_NULL(bcell) return ..() /obj/item/weapon/melee/baton/loaded/New() //this one starts with a cell pre-installed. @@ -48,11 +47,11 @@ /obj/item/weapon/melee/baton/update_icon() if(status) - icon_state = "[initial(name)]_active" + icon_state = "[base_icon]_active" else if(!bcell) - icon_state = "[initial(name)]_nocell" + icon_state = "[base_icon]_nocell" else - icon_state = "[initial(name)]" + icon_state = "[base_icon]" /obj/item/weapon/melee/baton/examine(mob/user) ..(user) @@ -184,28 +183,28 @@ return 1 ..() - -//secborg stun baton module -/obj/item/weapon/melee/baton/loaded/robot - hitcost = 1000 - //Makeshift stun baton. Replacement for stun gloves. /obj/item/weapon/melee/baton/cattleprod name = "stunprod" desc = "An improvised stun baton." icon_state = "stunprod_nocell" + base_icon = "stunprod" item_state = "prod" w_class = 3 force = 3 throwforce = 5 stunforce = 5 - hitcost = 3750 + hitcost = 2000 slot_flags = SLOT_BACK - var/obj/item/device/assembly/igniter/sparkler = 0 + var/obj/item/device/assembly/igniter/sparkler = null /obj/item/weapon/melee/baton/cattleprod/New() ..() - sparkler = new (src) + sparkler = new(src) + +/obj/item/weapon/melee/baton/cattleprod/Destroy() + QDEL_NULL(sparkler) + return ..() /obj/item/weapon/melee/baton/cattleprod/baton_stun() if(sparkler.activate()) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index c9c9497cb71..1bd8d8b761c 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -19,8 +19,7 @@ ion_trail.set_up(src) /obj/item/weapon/tank/jetpack/Destroy() - qdel(ion_trail) - ion_trail = null + QDEL_NULL(ion_trail) return ..() /obj/item/weapon/tank/jetpack/ui_action_click(mob/user, actiontype) @@ -82,7 +81,7 @@ var/datum/gas_mixture/removed = air_contents.remove(num) if(removed.total_moles() < 0.005) - turn_off() + turn_off() return 0 var/turf/T = get_turf(user) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index e3e03e22506..bd62357ba76 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -33,9 +33,7 @@ return /obj/item/weapon/tank/Destroy() - if(air_contents) - qdel(air_contents) - air_contents = null + QDEL_NULL(air_contents) processing_objects.Remove(src) diff --git a/code/game/objects/items/weapons/teleprod.dm b/code/game/objects/items/weapons/teleprod.dm index 0bc1b23f6d6..dfaa52ba396 100644 --- a/code/game/objects/items/weapons/teleprod.dm +++ b/code/game/objects/items/weapons/teleprod.dm @@ -2,6 +2,7 @@ name = "teleprod" desc = "A prod with a bluespace crystal on the end. The crystal doesn't look too fun to touch." icon_state = "teleprod_nocell" + base_icon = "teleprod" item_state = "teleprod" origin_tech = "combat=2;bluespace=4;materials=3" @@ -15,4 +16,4 @@ deductcharge(hitcost) do_teleport(user, get_turf(user), 50)//honk honk else if(iscarbon(M) && !M.anchored) - do_teleport(M, get_turf(M), 15) \ No newline at end of file + do_teleport(M, get_turf(M), 15) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 045f58d577d..9636e1407b6 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -19,6 +19,9 @@ burntime = 15 var/obj/item/weapon/canvas/painting = null +/obj/structure/easel/Destroy() + QDEL_NULL(painting) + return ..() //Adding canvases /obj/structure/easel/attackby(var/obj/item/I, var/mob/user, params) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 8d854c384e8..1d7b32fe950 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -112,7 +112,7 @@ new /obj/item/clothing/head/HoS(src) new /obj/item/clothing/head/HoS/beret(src) new /obj/item/clothing/glasses/hud/security/sunglasses(src) - new /obj/item/weapon/storage/lockbox/loyalty(src) + new /obj/item/weapon/storage/lockbox/mindshield(src) new /obj/item/weapon/storage/box/flashbangs(src) new /obj/item/clothing/mask/gas/sechailer/hos(src) new /obj/item/weapon/shield/riot/tele(src) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 2ced72cbcfe..9ecf82a54fb 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -22,6 +22,11 @@ var/global/list/captain_display_cases = list() var/obj/item/device/assembly/prox_sensor/sensor = null var/state = DISPLAYCASE_FRAME_CIRCUIT +/obj/structure/displaycase_frame/Destroy() + QDEL_NULL(circuit) + QDEL_NULL(sensor) + return ..() + /obj/structure/displaycase_frame/attackby(obj/item/weapon/W as obj, mob/user as mob, params) var/pstate = state var/turf/T = get_turf(src) @@ -116,8 +121,7 @@ var/global/list/captain_display_cases = list() /obj/structure/displaycase/Destroy() dump() - qdel(circuit) - circuit = null + QDEL_NULL(circuit) return ..() /obj/structure/displaycase/captains_laser/Destroy() diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 78bd8193415..ec68cd16e3e 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -17,6 +17,10 @@ /obj/structure/door_assembly/New() update_state() +/obj/structure/door_assembly/Destroy() + QDEL_NULL(electronics) + return ..() + /obj/structure/door_assembly/door_assembly_com base_icon_state = "com" base_name = "Command Airlock" diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index 594139f8d70..56cb984de8a 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -14,6 +14,17 @@ var/obj/item/weapon/storage/toolbox/emergency/myredtoolbox = null var/obj/item/taperoll/engineering/myengitape = null +/obj/structure/engineeringcart/Destroy() + QDEL_NULL(myglass) + QDEL_NULL(mymetal) + QDEL_NULL(myplasteel) + QDEL_NULL(myflashlight) + QDEL_NULL(mybluetoolbox) + QDEL_NULL(myyellowtoolbox) + QDEL_NULL(myredtoolbox) + QDEL_NULL(myengitape) + return ..() + /obj/structure/engineeringcart/proc/put_in_cart(obj/item/I, mob/user) user.drop_item() I.loc = src diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index e5a89aa1fad..a68c387eadb 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -8,6 +8,9 @@ var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher var/opened = 0 +/obj/structure/extinguisher_cabinet/Destroy() + QDEL_NULL(has_extinguisher) + return ..() /obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user, params) if(isrobot(user) || isalien(user)) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 614af2d4ff4..f4ee54ad893 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -19,12 +19,16 @@ /obj/structure/janitorialcart/New() + ..() create_reagents(100) janitorial_equipment += src - /obj/structure/janitorialcart/Destroy() janitorial_equipment -= src + QDEL_NULL(mybag) + QDEL_NULL(mymop) + QDEL_NULL(myspray) + QDEL_NULL(myreplacer) return ..() /obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index 133a3d15b39..53805b45886 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -76,7 +76,7 @@ return attack_hand(user) /obj/structure/ladder/dive_point/buoy - name = "diving point bouy" + name = "diving point buoy" desc = "A buoy marking the location of an underwater dive area." icon = 'icons/misc/beach.dmi' icon_state = "buoy" diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 848a953324a..003daa76645 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -50,7 +50,6 @@ return /obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob, params) - if(istype(C, /obj/item/stack/tile/plasteel) || istype(C, /obj/item/stack/rods)) var/turf/T = get_turf(src) T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead @@ -58,11 +57,10 @@ if(istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = C if(WT.remove_fuel(0, user)) - to_chat(user, "Slicing lattice joints ...") - new /obj/item/stack/rods(src.loc) - qdel(src) + to_chat(user, "Slicing lattice joints...") + new /obj/item/stack/rods(src.loc) + qdel(src) - return /obj/structure/lattice/proc/updateOverlays() //if(!(istype(src.loc, /turf/space))) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index a93bb1c5ed9..3a1ee8490db 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -8,6 +8,7 @@ var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite /obj/structure/mopbucket/New() + ..() create_reagents(100) janitorial_equipment += src diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 7b250e5d292..39a7ac21301 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -160,9 +160,7 @@ return /obj/structure/morgue/Destroy() - if(connected) - qdel(connected) - connected = null + QDEL_NULL(connected) return ..() /obj/structure/morgue/container_resist(var/mob/living/L) @@ -405,9 +403,7 @@ return /obj/structure/crematorium/Destroy() - if(connected) - qdel(connected) - connected = null + QDEL_NULL(connected) return ..() /obj/structure/crematorium/container_resist(var/mob/living/L) @@ -471,7 +467,7 @@ connected.connected = null connected = null return ..() - + // Crematorium switch /obj/machinery/crema_switch desc = "Burn baby burn!" @@ -484,7 +480,7 @@ var/area/area = null var/otherarea = null var/id = 1 - + /obj/machinery/crema_switch/attack_ghost(mob/user) if(user.can_advanced_admin_interact()) return attack_hand(user) diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index b2a4dfd3299..db917ca5588 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -281,8 +281,7 @@ icon_state = "piano" /obj/structure/piano/Destroy() - qdel(song) - song = null + QDEL_NULL(song) return ..() /obj/structure/piano/initialize() diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 504b2abfa80..a51f58e5ec6 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -8,45 +8,48 @@ flags = CONDUCT var/obj/item/target/pinned_target // the current pinned target - Move() - ..() - // Move the pinned target along with the stake - if(pinned_target in view(3, src)) - pinned_target.loc = loc +/obj/structure/target_stake/Destroy() + QDEL_NULL(pinned_target) + return ..() - else // Sanity check: if the pinned target can't be found in immediate view - pinned_target = null - density = 1 +/obj/structure/target_stake/Move() + ..() + // Move the pinned target along with the stake + if(pinned_target in view(3, src)) + pinned_target.loc = loc - attackby(obj/item/W as obj, mob/user as mob, params) - // Putting objects on the stake. Most importantly, targets - if(pinned_target) - return // get rid of that pinned target first! + else // Sanity check: if the pinned target can't be found in immediate view + pinned_target = null + density = 1 - if(istype(W, /obj/item/target)) - density = 0 - W.density = 1 - user.drop_item(src) - W.loc = loc - W.layer = 3.1 - pinned_target = W - to_chat(user, "You slide the target into the stake.") - return +/obj/structure/target_stake/attackby(obj/item/W, mob/user, params) + // Putting objects on the stake. Most importantly, targets + if(pinned_target) + return // get rid of that pinned target first! - attack_hand(mob/user as mob) - // taking pinned targets off! - if(pinned_target) - density = 1 - pinned_target.density = 0 - pinned_target.layer = OBJ_LAYER + if(istype(W, /obj/item/target)) + density = 0 + W.density = 1 + user.drop_item(src) + W.loc = loc + W.layer = 3.1 + pinned_target = W + to_chat(user, "You slide the target into the stake.") - pinned_target.loc = user.loc - if(ishuman(user)) - if(!user.get_active_hand()) - user.put_in_hands(pinned_target) - to_chat(user, "You take the target out of the stake.") - else - pinned_target.loc = get_turf(user) +/obj/structure/target_stake/attack_hand(mob/user) + // taking pinned targets off! + if(pinned_target) + density = 1 + pinned_target.density = 0 + pinned_target.layer = OBJ_LAYER + + pinned_target.loc = user.loc + if(ishuman(user)) + if(!user.get_active_hand()) + user.put_in_hands(pinned_target) to_chat(user, "You take the target out of the stake.") + else + pinned_target.loc = get_turf(user) + to_chat(user, "You take the target out of the stake.") - pinned_target = null \ No newline at end of file + pinned_target = null \ No newline at end of file diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 26d97a52671..fa59fdc3cd1 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -14,9 +14,13 @@ /obj/structure/toilet/New() + ..() open = round(rand(0, 1)) update_icon() +/obj/structure/toilet/Destroy() + swirlie = null + return ..() /obj/structure/toilet/attack_hand(mob/living/user) if(swirlie) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index ceba6687143..0c273e7f1fa 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -34,6 +34,7 @@ obj/structure/windoor_assembly/New(dir=NORTH) obj/structure/windoor_assembly/Destroy() density = 0 + QDEL_NULL(electronics) air_update_turf(1) return ..() diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 40a09c01de1..5b0cec99de1 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -313,7 +313,7 @@ var/ert_request_answered = 0 id = /obj/item/weapon/card/id/ert l_ear = /obj/item/device/radio/headset/ert/alt - implants = list(/obj/item/weapon/implant/loyalty) + implants = list(/obj/item/weapon/implant/mindshield) /datum/outfit/job/centcom/response_team/pre_equip() . = ..() @@ -367,7 +367,7 @@ var/ert_request_answered = 0 /obj/item/clothing/head/helmet/ert/command = 1, /obj/item/clothing/mask/gas/sechailer = 1, /obj/item/weapon/restraints/handcuffs = 1, - /obj/item/weapon/storage/lockbox/loyalty = 1 + /obj/item/weapon/storage/lockbox/mindshield = 1 ) /datum/outfit/job/centcom/response_team/commander/red @@ -383,7 +383,7 @@ var/ert_request_answered = 0 /obj/item/clothing/head/helmet/space/hardsuit/ert/commander = 1, /obj/item/clothing/mask/gas/sechailer/swat = 1, /obj/item/weapon/restraints/handcuffs = 1, - /obj/item/weapon/storage/lockbox/loyalty = 1 + /obj/item/weapon/storage/lockbox/mindshield = 1 ) /datum/outfit/job/centcom/response_team/commander/gamma @@ -399,7 +399,7 @@ var/ert_request_answered = 0 /obj/item/clothing/head/helmet/space/hardsuit/ert/commander = 1, /obj/item/clothing/mask/gas/sechailer/swat = 1, /obj/item/weapon/restraints/handcuffs = 1, - /obj/item/weapon/storage/lockbox/loyalty = 1, + /obj/item/weapon/storage/lockbox/mindshield = 1, /obj/item/weapon/gun/energy/pulse/pistol = 1 ) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index e0a2aa87008..0476df52ceb 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -41,9 +41,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," builtin_tile = new floor_tile /turf/simulated/floor/Destroy() - if(builtin_tile) - qdel(builtin_tile) - builtin_tile = null + QDEL_NULL(builtin_tile) return ..() diff --git a/code/game/turfs/unsimulated/beach.dm b/code/game/turfs/unsimulated/beach.dm index 970467c2ced..262727e97ee 100644 --- a/code/game/turfs/unsimulated/beach.dm +++ b/code/game/turfs/unsimulated/beach.dm @@ -59,8 +59,7 @@ water_overlay = new(src) /turf/unsimulated/beach/water/drop/Destroy() - qdel(water_overlay) - water_overlay = null + QDEL_NULL(water_overlay) return ..() /obj/effect/effect/beach_drop_overlay diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 130b792b1d0..0d479dcd2dd 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -157,7 +157,7 @@ var/list/admin_verbs_debug = list( /client/proc/enable_debug_verbs, /client/proc/toggledebuglogs, /client/proc/qdel_toggle, - /client/proc/gc_dump_hdl, + /client/proc/cmd_display_del_log, /client/proc/debugNatureMapGenerator, /client/proc/check_bomb_impacts, /client/proc/test_movable_UI, diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index b5c02c368a7..d90c8a50a84 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -157,7 +157,7 @@ var/global/sent_strike_team = 0 equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse(src), slot_r_hand) - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(src)//Here you go Deuryn + var/obj/item/weapon/implant/mindshield/L = new/obj/item/weapon/implant/mindshield(src) L.imp_in = src L.implanted = 1 sec_hud_set_implants() diff --git a/code/modules/arcade/mob_hunt/battle_computer.dm b/code/modules/arcade/mob_hunt/battle_computer.dm index 97055664cdb..dc0b47cd4b0 100644 --- a/code/modules/arcade/mob_hunt/battle_computer.dm +++ b/code/modules/arcade/mob_hunt/battle_computer.dm @@ -51,8 +51,7 @@ mob_hunt_server.red_terminal = null if(mob_hunt_server.blue_terminal == src) mob_hunt_server.blue_terminal = null - if(avatar) - qdel(avatar) + QDEL_NULL(avatar) return ..() /obj/machinery/computer/mob_battle_terminal/attackby(obj/item/O, mob/user) diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index e6505e385ad..b1c76236853 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -12,8 +12,7 @@ sparks.attach(src) /obj/item/device/assembly/igniter/Destroy() - qdel(sparks) - sparks = null + QDEL_NULL(sparks) return ..() diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 7f9181ca937..60f3014d357 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -255,9 +255,7 @@ /obj/effect/beam/i_beam/Destroy() if(master.first == src) master.first = null - if(next) - qdel(next) - next = null + QDEL_NULL(next) if(previous) previous.next = null master.last = previous diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 3aa24a2d014..6ffe6f42d12 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -10,10 +10,8 @@ flags = CONDUCT /obj/item/assembly/shock_kit/Destroy() - qdel(part1) - part1 = null - qdel(part2) - part2 = null + QDEL_NULL(part1) + QDEL_NULL(part2) return ..() /obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params) diff --git a/code/modules/awaymissions/mission_code/beach.dm b/code/modules/awaymissions/mission_code/beach.dm index fd54ffaa7ee..7ae37e759c1 100644 --- a/code/modules/awaymissions/mission_code/beach.dm +++ b/code/modules/awaymissions/mission_code/beach.dm @@ -18,6 +18,7 @@ if(water_timer) deltimer(water_timer) water_timer = null + return ..() /obj/effect/waterfall/proc/drip() var/obj/effect/effect/water/W = new(loc) diff --git a/code/modules/awaymissions/mission_code/spacehotel.dm b/code/modules/awaymissions/mission_code/spacehotel.dm index 357b0ca519e..0cd06c5d6a7 100644 --- a/code/modules/awaymissions/mission_code/spacehotel.dm +++ b/code/modules/awaymissions/mission_code/spacehotel.dm @@ -116,8 +116,7 @@ if(roomtimer) deltimer(roomtimer) roomtimer = null - qdel(card) - card = null + QDEL_NULL(card) return ..() /obj/machinery/door/unpowered/hotel_door/examine(mob/user) @@ -220,9 +219,7 @@ vacant_rooms.Cut() guests.Cut() - if(radio) - qdel(radio) - radio = null + QDEL_NULL(radio) return ..() diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index d340fc6a651..50b09d72788 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -70,6 +70,7 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away log_startup_progress(" No away missions found.") return + /proc/createALLZlevels() if(awaydestinations.len) //crude, but it saves another var! return diff --git a/code/modules/awaymissions/zvis.dm b/code/modules/awaymissions/zvis.dm index 735dd307ddb..73bbff2198f 100644 --- a/code/modules/awaymissions/zvis.dm +++ b/code/modules/awaymissions/zvis.dm @@ -111,8 +111,7 @@ init(R) /turf/unsimulated/floor/upperlevel/Destroy() - qdel(sensor) - sensor = null + QDEL_NULL(sensor) return ..() /turf/unsimulated/floor/upperlevel/proc/init(var/obj/effect/levelref/R) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index aefb7188f5c..ee5022a1793 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -63,16 +63,14 @@ desc = "Horrendous and awful. It smells like cancer. The fact it has wires attached to it is incidental." var/obj/item/weapon/stock_parts/cell/cell = null var/stun_strength = 5 - var/stun_cost = 3750 + var/stun_cost = 2000 /obj/item/clothing/gloves/color/yellow/stun/New() ..() update_icon() /obj/item/clothing/gloves/color/yellow/stun/Destroy() - if(cell) - qdel(cell) - cell = null + QDEL_NULL(cell) return ..() /obj/item/clothing/gloves/color/yellow/stun/Touch(atom/A, proximity) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index bf40cf7127e..33bb0bcd269 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -165,10 +165,8 @@ M.unEquip(piece) qdel(piece) processing_objects -= src - qdel(wires) - wires = null - qdel(spark_system) - spark_system = null + QDEL_NULL(wires) + QDEL_NULL(spark_system) return ..() /obj/item/weapon/rig/proc/suit_is_deployed() diff --git a/code/modules/clothing/suits/hood.dm b/code/modules/clothing/suits/hood.dm index 0683394ce9f..7e2307c96b4 100644 --- a/code/modules/clothing/suits/hood.dm +++ b/code/modules/clothing/suits/hood.dm @@ -10,7 +10,7 @@ ..() /obj/item/clothing/suit/hooded/Destroy() - qdel(hood) + QDEL_NULL(hood) return ..() /obj/item/clothing/suit/hooded/proc/MakeHood() diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 82a468d2a63..70fa8a30227 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -9,8 +9,7 @@ pockets.max_combined_w_class = 4 /obj/item/clothing/suit/storage/Destroy() - qdel(pockets) - pockets = null + QDEL_NULL(pockets) return ..() /obj/item/clothing/suit/storage/attack_hand(mob/user as mob) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 380a11f0d43..2e79b68a11a 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -386,9 +386,7 @@ var/obj/item/weapon/card/id/access_id /obj/item/clothing/accessory/petcollar/Destroy() - if(access_id) - qdel(access_id) - access_id = null + QDEL_NULL(access_id) processing_objects -= src return ..() diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 10376b48ba8..33100a474a0 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -761,7 +761,7 @@ ..() /obj/item/clothing/under/contortionist/dropped(mob/living/carbon/human/user) - if(!user.get_int_organ(/obj/item/organ/internal/gland/ventcrawling)) + if(!user.get_int_organ(/obj/item/organ/internal/heart/gland/ventcrawling)) user.ventcrawler = 0 ..() diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index c58d932bf29..6cc353d0b17 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -235,6 +235,33 @@ to_chat(target, "You comb your tail with the [src].") used = 1 +/obj/item/device/fluff/desolate_baton_kit //DesolateG: Michael steampunk_witch + name = "stun baton converstion kit" + desc = "Some sci-fi looking parts for a stun baton." + icon = 'icons/obj/custom_items.dmi' + icon_state = "scifikit" + w_class = 2 + +/obj/item/device/fluff/desolate_baton_kit/afterattack(atom/target, mob/user, proximity) + if(!proximity || !ishuman(user) || user.incapacitated()) + return + + if(istype(target, /obj/item/weapon/melee/baton) && !istype(target, /obj/item/weapon/melee/baton/cattleprod)) + to_chat(user, "You modify the appearance of [target].") + //because batons use the initial() proc, we can't just swap the icon state, sadly + var/obj/item/weapon/melee/baton/the_baton = target + the_baton.base_icon = "desolate_baton" + the_baton.item_state = "desolate_baton" + the_baton.icon = 'icons/obj/custom_items.dmi' + the_baton.lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + the_baton.righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' + the_baton.update_icon() + user.update_icons() + qdel(src) + return + + to_chat(user, "You can't modify [target]!") + /obj/item/device/fluff/cardgage_helmet_kit //captain cardgage: Richard Ulery name = "welding helmet modkit" desc = "Some spraypaint and a stencil, perfect for painting flames onto a welding helmet!" @@ -244,14 +271,14 @@ throwforce = 0 /obj/item/device/fluff/cardgage_helmet_kit/afterattack(atom/target, mob/user, proximity) - if(!proximity || !ishuman(user) || user.lying) + if(!proximity || !ishuman(user) || user.incapacitated()) return if(istype(target, /obj/item/clothing/head/welding)) to_chat(user, "You modify the appearance of [target].") var/obj/item/clothing/head/welding/flamedecal/P = new(get_turf(target)) - transfer_fingerprints_to(P) + target.transfer_fingerprints_to(P) qdel(target) qdel(src) return @@ -269,7 +296,7 @@ throwforce = 0 /obj/item/device/fluff/shadey_plasman_modkit/afterattack(atom/target, mob/user, proximity) - if(!proximity || !ishuman(user) || user.lying) + if(!proximity || !ishuman(user) || user.incapacitated()) return var/mob/living/carbon/human/H = user @@ -744,4 +771,3 @@ new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src) new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass(src) new /obj/item/weapon/reagent_containers/food/drinks/bottle/fluff/moonshine(src) - diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 8245f24b291..67f4a93d339 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -29,6 +29,7 @@ vendingMachines.Remove(originMachine) originMachine.shut_up = 0 originMachine.shoot_inventory = 1 + log_debug("Original brand intelligence machine: [originMachine] [ADMIN_VV(originMachine)] [ADMIN_JMP(originMachine)]") /datum/event/brand_intelligence/tick() if(!originMachine || !isnull(originMachine.gcDestroyed) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index d6148b429e0..3a079e99da4 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1218,28 +1218,19 @@ var/monkey_type = "Monkey" list_reagents = list("nutriment" = 2) -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity) - if(!proximity) - return - if(istype(O, /obj/structure/sink)) - to_chat(user, "You place [src] under a stream of water...") - user.drop_item() - forceMove(get_turf(O)) - return Expand() - ..() - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature) if(volume >= 5) return Expand() /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wash(mob/user, atom/source) - if(do_after(user, 40, target = source)) - return 1 + user.drop_item() + forceMove(get_turf(source)) + return 1 /obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() if(isnull(gcDestroyed)) visible_message("[src] expands!") - new/mob/living/carbon/human(get_turf(src),monkey_type) + new/mob/living/carbon/human(get_turf(src), monkey_type) qdel(src) /obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 936b9e30827..6b8d9cebd26 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -50,8 +50,7 @@ wires = new/datum/wires/smartfridge(src) /obj/machinery/smartfridge/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) for(var/atom/movable/A in contents) A.forceMove(loc) return ..() diff --git a/code/modules/garbage_collection/garbage_collector.dm b/code/modules/garbage_collection/garbage_collector.dm index e2204788016..f0ca2d64474 100644 --- a/code/modules/garbage_collection/garbage_collector.dm +++ b/code/modules/garbage_collection/garbage_collector.dm @@ -7,8 +7,12 @@ #define GC_FORCE_DEL_PER_TICK 30 //#define GC_DEBUG -// A list of types that were queued in the GC, and had to be soft deleted; used in testing -var/list/gc_hard_del_types = list() +var/list/didntgc = list() // list of all types that have failed to GC associated with the number of times that's happened. + // the types are stored as strings +var/list/sleptDestroy = list() //Same as above but these are paths that slept during their Destroy call + +var/list/noqdelhint = list() // list of all types that do not return a QDEL_HINT + var/global/datum/controller/process/garbage_collector/garbageCollector // The time a datum was destroyed by the GC, or null if it hasn't been @@ -82,7 +86,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector #undef GC_COLLECTIONS_PER_TICK /datum/controller/process/garbage_collector/proc/hardDel(var/datum/D) - gc_hard_del_types |= D.type + didntgc["[D.type]"]++ D.hard_deleted = 1 if(!D.gcDestroyed) spawn(-1) @@ -126,6 +130,7 @@ var/global/datum/controller/process/garbage_collector/garbageCollector return if(!isnull(D.gcDestroyed) && D.gcDestroyed != world.time) gcwarning("Sleep detected in Destroy() call of [D.type]") + sleptDestroy["[D.type]"]++ D.gcDestroyed = world.time switch(hint) @@ -155,7 +160,9 @@ var/global/datum/controller/process/garbage_collector/garbageCollector #endif garbageCollector.addTrash(D) else -// to_chat(world, "WARNING GC DID NOT GET A RETURN VALUE FOR [D], [D.type]!") + if(!noqdelhint["[D.type]"]) + noqdelhint["[D.type]"] = "[D.type]" + gcwarning("WARNING: [D.type] is not returning a qdel hint. It is being placed in the queue. Further instances of this type will also be queued.") garbageCollector.addTrash(D) diff --git a/code/modules/garbage_collection/gc_testing.dm b/code/modules/garbage_collection/gc_testing.dm index 25378d19e9c..934a93adc21 100644 --- a/code/modules/garbage_collection/gc_testing.dm +++ b/code/modules/garbage_collection/gc_testing.dm @@ -13,21 +13,27 @@ log_admin("[key_name(usr)] turned qdel [garbageCollector.del_everything ? "off" : "on"].") message_admins("[key_name_admin(usr)] turned qdel [garbageCollector.del_everything ? "off" : "on"].", 1) -/client/proc/gc_dump_hdl() - set name = "(GC) Hard Del List" - set desc = "List types that are hard del()'d by the GC." +/client/proc/cmd_display_del_log() set category = "Debug" + set name = "(GC) Display del() Log" + set desc = "Displays a list of things that have failed to GC this round" if(!check_rights(R_DEBUG)) return - if(!gc_hard_del_types || !gc_hard_del_types.len) - to_chat(usr, "No hard del()'d types found.") - return + var/dat = "List of things that failed to GC this round

" + for(var/path in didntgc) + dat += "[path] - [didntgc[path]] times
" - to_chat(usr, "Types hard del()'d by the GC:") - for(var/A in gc_hard_del_types) - to_chat(usr, "[A]") + dat += "List of paths that did not return a qdel hint in Destroy()

" + for(var/path in noqdelhint) + dat += "[path]
" + + dat += "List of paths that slept in Destroy()

" + for(var/path in sleptDestroy) + dat += "[path]
" + + usr << browse(dat, "window=dellog") #ifdef TESTING /client/var/running_find_references diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index ce393c16e15..deac3c6660d 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -31,9 +31,8 @@ RefreshParts() /obj/machinery/biogenerator/Destroy() - if(beaker) - qdel(beaker) - beaker = null + QDEL_NULL(beaker) + QDEL_NULL(files) return ..() /obj/machinery/biogenerator/ex_act(severity) @@ -208,7 +207,7 @@ /obj/machinery/biogenerator/attack_hand(mob/user) interact(user) - + /obj/machinery/biogenerator/attack_ghost(mob/user) interact(user) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 95e195caaf7..ebe74316ed4 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -24,13 +24,22 @@ /obj/machinery/plantgenes/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/plantgenes(src) - component_parts += new /obj/item/weapon/stock_parts/console_screen(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/circuitboard/plantgenes(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(null) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) RefreshParts() +/obj/machinery/plantgenes/Destroy() + core_genes.Cut() + reagent_genes.Cut() + trait_genes.Cut() + target = null + QDEL_NULL(seed) + QDEL_NULL(disk) + return ..() + /obj/machinery/plantgenes/RefreshParts() rating = 0 for(var/I in component_parts) @@ -90,7 +99,7 @@ if(..()) return interact(user) - + /obj/machinery/plantgenes/attack_ghost(mob/user) interact(user) @@ -282,9 +291,9 @@ repaint_seed() if("extract") if(disk && !disk.read_only) - disk.gene = G - if(istype(G, /datum/plant_gene/core/potency)) - var/datum/plant_gene/core/gene = G + disk.gene = G.Copy() + if(istype(disk.gene, /datum/plant_gene/core/potency)) + var/datum/plant_gene/core/gene = disk.gene gene.value = min(gene.value, max_extract_pot) disk.update_name() qdel(seed) @@ -370,6 +379,10 @@ pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) +/obj/item/weapon/disk/plantgene/Destroy() + QDEL_NULL(gene) + return ..() + /obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params) ..() if(istype(W, /obj/item/weapon/pen)) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 2322bbad5ca..130fc2730ac 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -39,7 +39,9 @@ transform *= TransformUsingVariable(seed.potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency! add_juice() - +/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy() + QDEL_NULL(seed) + return ..() /obj/item/weapon/reagent_containers/food/snacks/grown/proc/add_juice() if(reagents) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 64d2eff90b7..c94706f00e5 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -31,6 +31,9 @@ transform *= TransformUsingVariable(seed.potency, 100, 0.5) add_juice() +/obj/item/weapon/grown/Destroy() + QDEL_NULL(seed) + return ..() /obj/item/weapon/grown/attackby(obj/item/O, mob/user, params) ..() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 46f6f317434..7e7aa825411 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -75,9 +75,7 @@ plant_hud_set_water() /obj/machinery/hydroponics/Destroy() - if(myseed) - qdel(myseed) - myseed = null + QDEL_NULL(myseed) return ..() /obj/machinery/hydroponics/constructable/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index d35621e4c59..9aa93f9f92b 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -68,6 +68,12 @@ for(var/reag_id in reagents_add) genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id]) +/obj/item/seeds/Destroy() + for(var/thing in genes) + qdel(thing) + genes.Cut() + return ..() + /obj/item/seeds/proc/Copy() var/obj/item/seeds/S = new type(null, 1) // Copy all the stats diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm index be808a2c7b9..bdbe222990a 100644 --- a/code/modules/karma/karma.dm +++ b/code/modules/karma/karma.dm @@ -79,7 +79,7 @@ var/list/karma_spenders = list() to_chat(src, "You can't spend karma on someone connected from the same IP.") return 0 return 1 - + /mob/verb/spend_karma_list() set name = "Award Karma" @@ -118,8 +118,6 @@ var/list/karma_spenders = list() if(!M) to_chat(usr, "Please right click a mob to award karma directly, or use the 'Award Karma' verb to select a player from the player listing.") return - if(!can_give_karma_to_mob(M)) - return if(alert("Give [M.name] good karma?", "Karma", "Yes", "No") != "Yes") return if(!can_give_karma_to_mob(M)) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index ed8b400337a..dec8712eb74 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -33,7 +33,7 @@ if(bag) bag.loc = user bag.attackby(W, user, params) - + /obj/item/device/shared_storage/attack_self(mob/living/carbon/user) if(!iscarbon(user)) return @@ -116,7 +116,7 @@ H.adjustBruteLoss(20) H.emote("scream") ..()*/ - + //Boat /obj/vehicle/lavaboat @@ -183,7 +183,7 @@ generic_pixel_y = 2 generic_pixel_x = 1 vehicle_move_delay = 1 - + // Wisp Lantern /obj/item/device/wisp_lantern name = "spooky lantern" @@ -238,16 +238,16 @@ layer = ABOVE_ALL_MOB_LAYER light_power = 1 light_range = 7 - + //Red/Blue Cubes - + /obj/item/device/warp_cube name = "blue cube" desc = "A mysterious blue cube." icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "blue_cube" var/obj/item/device/warp_cube/linked - + /obj/item/device/warp_cube/Destroy() if(linked) linked.linked = null @@ -260,14 +260,14 @@ return var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() - smoke.set_up(1, 0, user.loc) + smoke.set_up(1, 0, user.loc) smoke.start() user.forceMove(get_turf(linked)) feedback_add_details("warp_cube","[src.type]") var/datum/effect/system/harmless_smoke_spread/smoke2 = new /datum/effect/system/harmless_smoke_spread() - smoke2.set_up(1, 0, user.loc) + smoke2.set_up(1, 0, user.loc) smoke2.start() /obj/item/device/warp_cube/red @@ -281,7 +281,7 @@ var/obj/item/device/warp_cube/blue = new(src.loc) linked = blue blue.linked = src - + //Meat Hook /obj/item/weapon/gun/magic/hook @@ -329,9 +329,9 @@ L.forceMove(get_turf(firer)) /obj/item/projectile/hook/Destroy() - qdel(chain) + QDEL_NULL(chain) return ..() - + //Immortality Talisman /obj/item/device/immortality_talisman diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 395f6842a1f..2935ed25d04 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -226,6 +226,7 @@ /obj/item/device/mobcapsule/Destroy() if(captured) + captured.ghostize() qdel(captured) captured = null return ..() diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index 2b671317b64..cc50f46b9e5 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -62,7 +62,7 @@ points = 1 refined_type = /obj/item/stack/sheet/glass materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - + /obj/item/weapon/ore/glass/basalt name = "volcanic ash" icon_state = "volcanic_sand" @@ -163,8 +163,7 @@ var/datum/wires/explosive/gibtonite/wires /obj/item/weapon/twohanded/required/gibtonite/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) return ..() /obj/item/weapon/twohanded/required/gibtonite/attackby(obj/item/I, mob/user, params) @@ -192,7 +191,7 @@ quality = 1 return ..() - + /obj/item/weapon/twohanded/required/gibtonite/attack_ghost(mob/user) if(wires) wires.Interact(user) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index ca520ba9289..b5fa736dfc3 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -220,7 +220,7 @@ threatcount += 4 //Mindshield implants imply trustworthyness - if(isloyal(src)) + if(ismindshielded(src)) threatcount -= 1 return threatcount diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index f495e5b7f75..15c52d2693c 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -167,12 +167,8 @@ if(isrobot(loc)) var/mob/living/silicon/robot/borg = loc borg.mmi = null - if(brainmob) - qdel(brainmob) - brainmob = null - if(held_brain) - qdel(held_brain) - held_brain = null + QDEL_NULL(brainmob) + QDEL_NULL(held_brain) return ..() /obj/item/device/mmi/syndie diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 4c24562ecc1..56a98142f80 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -123,7 +123,5 @@ icon_state = "scroll" /obj/item/organ/internal/brain/Destroy() //copypasted from MMIs. - if(brainmob) - qdel(brainmob) - brainmob = null + QDEL_NULL(brainmob) return ..() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index a5fc0a1c4de..b0a7dfd57a0 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -53,6 +53,19 @@ if(!found_slime_bodypart) //Everyone else fails, skip the emote attempt return + + if("clack", "clacks") + if(species.name == "Kidan") //Only Kidan can clack and rightfully so. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' + else //Everyone else fails, skip the emote attempt + return + + if("click", "clicks") + if(species.name == "Kidan") //Only Kidan can click and rightfully so. + on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm' + else //Everyone else fails, skip the emote attempt + return + if("scream", "screams") on_CD = handle_emote_CD(50) //longer cooldown if("fart", "farts", "flip", "flips", "snap", "snaps") @@ -163,6 +176,40 @@ playsound(loc, 'sound/effects/slime_squish.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound. m_type = 2 + if("clack", "clacks") + var/M = null + if(param) + for(var/mob/A in view(null, null)) + if(param == A.name) + M = A + break + if(!M) + param = null + + if(param) + message = "[src] clacks their mandibles at [param]." + else + message = "[src] clacks their mandibles." + playsound(loc, 'sound/effects/Kidanclack.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound. + m_type = 2 + + if("click", "clicks") + var/M = null + if(param) + for(var/mob/A in view(null, null)) + if(param == A.name) + M = A + break + if(!M) + param = null + + if(param) + message = "[src] clicks their mandibles at [param]." + else + message = "[src] clicks their mandibles." + playsound(loc, 'sound/effects/Kidanclack2.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound. + m_type = 2 + if("yes") var/M = null if(param) @@ -225,12 +272,12 @@ if(!restrained()) message = "[src] is strumming the air and headbanging like a safari chimp." m_type = 1 - + if("dance") if(!restrained()) message = "[src] dances around happily." m_type = 1 - + if("jump") if(!restrained()) message = "[src] jumps!" @@ -836,11 +883,11 @@ // playsound(loc, 'sound/effects/fart.ogg', 50, 1, -3) //Admins still vote no to fun if(locate(/obj/item/weapon/storage/bible) in get_turf(src)) to_chat(viewers(src), "[src] farts on the Bible!") - var/image/cross = image('icons/obj/storage.dmi',"bible") - var/adminbfmessage = "\blue [bicon(cross)] Bible Fart: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src)]) (CA) (SMITE):" - for(var/client/X in admins) - if(check_rights(R_EVENT,0,X.mob)) - to_chat(X, adminbfmessage) + var/image/cross = image('icons/obj/storage.dmi',"bible") + var/adminbfmessage = "\blue [bicon(cross)] Bible Fart: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src)]) (CA) (SMITE):" + for(var/client/X in admins) + if(check_rights(R_EVENT,0,X.mob)) + to_chat(X, adminbfmessage) else if(TOXIC_FARTS in mutations) message = "[src] unleashes a [pick("horrible","terrible","foul","disgusting","awful")] fart." else if(SUPER_FART in mutations) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 57ea7121074..10b21d8b946 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1892,7 +1892,7 @@ //Mindshield implants imply slight trustworthiness - if(isloyal(src)) + if(ismindshielded(src)) threatcount -= 1 //Agent cards lower threatlevel. diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 63378d1a776..15f9b6d112e 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,7 +1,7 @@ var/global/default_martial_art = new/datum/martial_art /mob/living/carbon/human - hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD) + hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD) //Marking colour and style var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000. diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 624b4a9ca84..c7018183da3 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1181,7 +1181,8 @@ else AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3) adjustOxyLoss(5) - adjustBruteLoss(1) + Paralyse(4) + adjustBruteLoss(2) diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index 4690529524f..8e9c61992aa 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -18,7 +18,7 @@ "eyes" = /obj/item/organ/internal/eyes/abductor //3 darksight. ) - flags = HAS_LIPS | NO_BLOOD | NO_BREATHE + flags = HAS_LIPS | NO_BLOOD | NO_BREATHE | NOGUNS oxy_mod = 0 @@ -27,11 +27,14 @@ dietflags = DIET_OMNI reagent_tag = PROCESS_ORG blood_color = "#FF5AFF" + female_scream_sound = 'sound/goonstation/voice/male_scream.ogg' + female_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg') + female_sneeze_sound = 'sound/effects/mob_effects/sneeze.ogg' //Abductors always scream like guys -/datum/species/abductor/can_understand(var/mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member +/datum/species/abductor/can_understand(mob/other) //Abductors can understand everyone, but they can only speak over their mindlink to another team-member return 1 -/datum/species/abductor/handle_post_spawn(var/mob/living/carbon/human/H) +/datum/species/abductor/handle_post_spawn(mob/living/carbon/human/H) H.gender = NEUTER if(H.mind) H.mind.abductor = new /datum/abductor diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index 04cbbe653ba..10e39022315 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -486,7 +486,7 @@ brute_mod = 0.8 flags = IS_WHITELISTED - clothing_flags = HAS_SOCKS + clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS bodyflags = FEET_CLAWS | HAS_HEAD_ACCESSORY eyes = "kidan_eyes_s" dietflags = DIET_HERB @@ -512,6 +512,8 @@ "is attempting to bite their antenna off!", "is jamming their claws into their eye sockets!", "is twisting their own neck!", + "is cracking their exoskeleton!", + "is stabbing themselves with their mandibles!", "is holding their breath!") /datum/species/slime diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index fac41aa66f7..7a8ab4c0701 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -189,7 +189,7 @@ to_chat(target, "You feel yourself agreeing with [user], and a surge of loyalty begins building.") target.Weaken(12) sleep(20) - if(isloyal(target)) + if(ismindshielded(target)) to_chat(user, "They are enslaved by Nanotrasen. You feel their interest in your cause wane and disappear.") user.visible_message("[user] stops talking for a moment, then moves back away from [target].") to_chat(target, "Your mindshield implant activates, protecting you from conversion.") diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 239f0e6330a..06021939ac9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -246,7 +246,7 @@ var/list/ai_verbs_default = list( ai_list -= src shuttle_caller_list -= src shuttle_master.autoEvac() - qdel(eyeobj) // No AI, no Eye + QDEL_NULL(eyeobj) // No AI, no Eye malfhack = null return ..() @@ -299,22 +299,59 @@ var/list/ai_verbs_default = list( for(var/i = 1 to Entry.len) Entry[i] = trim(Entry[i]) - if(Entry.len < 2) + if(Entry.len < 2 || Entry[1] != "ai") //ignore incorrectly formatted entries or entries that aren't marked for AI continue - if(Entry.len < 3 && Entry[1] == ckey && Entry[2] == real_name) - custom_sprite = 1 //They're in the list? Custom sprite time - icon = 'icons/mob/custom-synthetic.dmi' + if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required + custom_sprite = 1 + var/display_choices = list( + "Monochrome", + "Blue", + "Clown", + "Inverted", + "Text", + "Smiley", + "Angry", + "Dorf", + "Matrix", + "Bliss", + "Firewall", + "Green", + "Red", + "Static", + "Triumvirate", + "Triumvirate Static", + "Red October", + "Sparkles", + "ANIMA", + "President", + "NT", + "NT2", + "Rainbow", + "Angel", + "Heartline", + "Hades", + "Helios", + "Syndicat Meow", + "Too Deep", + "Goon", + "Murica", + "Fuzzy", + "Glitchman", + "House", + "Database" + ) + if(custom_sprite) + display_choices += "Custom" //if(icon_state == initial(icon_state)) var/icontype = "" - if(custom_sprite == 1) - icontype = ("Custom")//automagically selects custom sprite if one is available - else - icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President", "NT", "NT2", "Rainbow", "Angel", "Heartline", "Hades", "Helios", "Syndicat Meow", "Too Deep", "Goon", "Murica", "Fuzzy", "Glitchman", "House", "Database") + icontype = input("Select an icon!", "AI", null, null) in display_choices + icon = 'icons/mob/AI.dmi' //reset this in case we were on a custom sprite and want to change to a standard one switch(icontype) if("Custom") + icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' //set this here so we can use the custom_sprite icon_state = "[ckey]-ai" if("Clown") icon_state = "ai-clown" @@ -859,10 +896,10 @@ var/list/ai_verbs_default = list( for(var/i = 1 to Entry.len) Entry[i] = trim(Entry[i]) - if(Entry.len < 3) + if(Entry.len < 2 || Entry[1] != "hologram") continue - if (Entry[1] == ckey && Entry[2] == real_name && Entry[3] == "Hologram") //Custom holograms + if (Entry[2] == ckey) //Custom holograms custom_hologram = 1 // option is given in hologram menu var/input @@ -971,10 +1008,10 @@ var/list/ai_verbs_default = list( if("ancient machine") holo_icon = getHologramIcon(icon('icons/mob/ancient_machine.dmi', "ancient_machine")) if("custom") - if("[ckey]-ai-holo" in icon_states('icons/mob/custom-synthetic.dmi')) - holo_icon = getHologramIcon(icon('icons/mob/custom-synthetic.dmi', "[ckey]-ai-holo")) - else if("[ckey]-ai-holo" in icon_states('icons/mob/custom-synthetic64.dmi')) - holo_icon = getHologramIcon(icon('icons/mob/custom-synthetic64.dmi', "[ckey]-ai-holo")) + if("[ckey]-ai-holo" in icon_states('icons/mob/custom_synthetic/custom-synthetic.dmi')) + holo_icon = getHologramIcon(icon('icons/mob/custom_synthetic/custom-synthetic.dmi', "[ckey]-ai-holo")) + else if("[ckey]-ai-holo" in icon_states('icons/mob/custom_synthetic/custom-synthetic64.dmi')) + holo_icon = getHologramIcon(icon('icons/mob/custom_synthetic/custom-synthetic64.dmi', "[ckey]-ai-holo")) else holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1")) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index d3ecd92da08..5218d399007 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -81,6 +81,7 @@ var/translator_on = 0 // keeps track of the translator module var/current_pda_messaging = null + var/custom_sprite = 0 /mob/living/silicon/pai/New(var/obj/item/device/paicard) loc = paicard @@ -394,17 +395,47 @@ set category = "pAI Commands" set name = "Choose Chassis" + var/list/my_choices = list() var/choice var/finalized = "No" + + //check for custom_sprite + if(!custom_sprite) + var/file = file2text("config/custom_sprites.txt") + var/lines = splittext(file, "\n") + + for(var/line in lines) + // split & clean up + var/list/Entry = splittext(line, ":") + for(var/i = 1 to Entry.len) + Entry[i] = trim(Entry[i]) + + if(Entry.len < 2 || Entry[1] != "pai") //ignore incorrectly formatted entries or entries that aren't marked for pAI + continue + + if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required + custom_sprite = 1 + my_choices["Custom"] = "[ckey]-pai" + + my_choices = possible_chassis.Copy() + if(custom_sprite) + my_choices["Custom"] = "[ckey]-pai" + + if(loc == card) //don't let them continue in card form, since they won't be able to actually see their new mobile form sprite. + to_chat(src, "You must be in your mobile form to reconfigure your chassis.") + return + while(finalized == "No" && client) - - choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in possible_chassis + choice = input(usr,"What would you like to use for your mobile chassis icon? This decision can only be made once.") as null|anything in my_choices if(!choice) return - - icon_state = possible_chassis[choice] + if(choice == "Custom") + icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' + else + icon = 'icons/mob/pai.dmi' + icon_state = my_choices[choice] finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes") - chassis = possible_chassis[choice] + chassis = my_choices[choice] verbs -= /mob/living/silicon/pai/proc/choose_chassis /mob/living/silicon/pai/proc/choose_verbs() @@ -562,15 +593,23 @@ // Handle being picked up. -/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber) +/mob/living/silicon/pai/get_scooped(mob/living/carbon/grabber) var/obj/item/weapon/holder/H = ..() if(!istype(H)) return if(resting) icon_state = "[chassis]" resting = 0 - H.icon_state = "pai-[icon_state]" - H.item_state = "pai-[icon_state]" + if(custom_sprite) + H.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' + H.icon_override = 'icons/mob/custom_synthetic/custom_head.dmi' + H.lefthand_file = 'icons/mob/custom_synthetic/custom_lefthand.dmi' + H.righthand_file = 'icons/mob/custom_synthetic/custom_righthand.dmi' + H.icon_state = "[icon_state]" + H.item_state = "[icon_state]_hand" + else + H.icon_state = "pai-[icon_state]" + H.item_state = "pai-[icon_state]" grabber.put_in_active_hand(H)//for some reason unless i call this it dosen't work grabber.update_inv_l_hand() grabber.update_inv_r_hand() diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index a16bfa4b005..4c52f2f415d 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -281,7 +281,7 @@ if(!player) return - src.ckey = player.ckey + ckey = player.ckey if(player.mob && player.mob.mind) player.mob.mind.transfer_to(src) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm index 2196b421f87..f9c711b4b17 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm @@ -47,4 +47,55 @@ if(M.a_intent == I_HELP) get_scooped(M) - ..() \ No newline at end of file + ..() + +/mob/living/silicon/robot/drone/verb/customize() + set name = "Customize Chassis" + set desc = "Reconfigure your chassis into a customized version." + set category = "Drone" + + if(!custom_sprite) //Check to see if custom sprite time, checking the appopriate file to change a var + var/file = file2text("config/custom_sprites.txt") + var/lines = splittext(file, "\n") + + for(var/line in lines) + // split & clean up + var/list/Entry = splittext(line, ":") + for(var/i = 1 to Entry.len) + Entry[i] = trim(Entry[i]) + + if(Entry.len < 2 || Entry[1] != "drone") + continue + + if (Entry[2] == ckey) //Custom holograms + custom_sprite = 1 // option is given in hologram menu + + if(!custom_sprite) + to_chat(src, "Error 404: Custom chassis not found. Revoking customization option.") + else + icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' + icon_state = "[ckey]-drone" + to_chat(src, "You reconfigure your chassis and improve the station through your new aesthetics.") + verbs -= /mob/living/silicon/robot/drone/verb/customize + +/mob/living/silicon/robot/drone/get_scooped(mob/living/carbon/grabber) + var/obj/item/weapon/holder/H = ..() + if(!istype(H)) + return + if(resting) + resting = 0 + if(custom_sprite) + H.icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' + H.icon_override = 'icons/mob/custom_synthetic/custom_head.dmi' + H.lefthand_file = 'icons/mob/custom_synthetic/custom_lefthand.dmi' + H.righthand_file = 'icons/mob/custom_synthetic/custom_righthand.dmi' + H.icon_state = "[icon_state]" + H.item_state = "[icon_state]_hand" + else + H.icon_state = "drone" + H.item_state = "drone" + grabber.put_in_active_hand(H)//for some reason unless i call this it dosen't work + grabber.update_inv_l_hand() + grabber.update_inv_r_hand() + + return H \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0c44545e72f..2b0ded32896 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -180,16 +180,15 @@ var/list/robot_verbs_default = list( for(var/line in lines) // split & clean up - var/list/Entry = splittext(line, ";") + var/list/Entry = splittext(line, ":") for(var/i = 1 to Entry.len) Entry[i] = trim(Entry[i]) - if(Entry.len < 2) - continue; + if(Entry.len < 2 || Entry[1] != "cyborg") //ignore incorrectly formatted entries or entries that aren't marked for cyborg + continue - if(Entry[1] == src.ckey && Entry[2] == src.real_name) //They're in the list? Custom sprite time, var and icon change required + if(Entry[2] == ckey) //They're in the list? Custom sprite time, var and icon change required custom_sprite = 1 - icon = 'icons/mob/custom-synthetic.dmi' return 1 @@ -252,12 +251,10 @@ var/list/robot_verbs_default = list( mmi = null if(connected_ai) connected_ai.connected_robots -= src - qdel(wires) - wires = null - qdel(module) - module = null - camera = null - cell = null + QDEL_NULL(wires) + QDEL_NULL(module) + QDEL_NULL(camera) + QDEL_NULL(cell) return ..() /mob/living/silicon/robot/proc/pick_module() @@ -1252,15 +1249,14 @@ var/list/robot_verbs_default = list( triesleft-- var/icontype - - if(custom_sprite == 1) - icontype = "Custom" - triesleft = 0 - else - lockcharge = 1 //Locks borg until it select an icon to avoid secborgs running around with a standard sprite - icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chances." : "This is your last try."]", "Robot", null, null) in module_sprites + lockcharge = 1 //Locks borg until it select an icon to avoid secborgs running around with a standard sprite + icontype = input("Select an icon! [triesleft ? "You have [triesleft] more chances." : "This is your last try."]", "Robot", null, null) in module_sprites if(icontype) + if(icontype == "Custom") + icon = 'icons/mob/custom_synthetic/custom-synthetic.dmi' + else + icon = 'icons/mob/robots.dmi' icon_state = module_sprites[icontype] if(icontype == "Bro") module.module_type = "Brobot" diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 55c3a8fba0f..9365da25f8d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -35,8 +35,7 @@ for(var/module in modules) qdel(module) modules.Cut() - qdel(emag) - emag = null + QDEL_NULL(emag) return ..() /obj/item/weapon/robot_module/proc/fix_modules() @@ -222,7 +221,7 @@ /obj/item/weapon/robot_module/security/New() ..() modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src) - modules += new /obj/item/weapon/melee/baton/loaded/robot(src) + modules += new /obj/item/weapon/melee/baton/loaded(src) modules += new /obj/item/weapon/gun/energy/disabler/cyborg(src) modules += new /obj/item/taperoll/police(src) modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 23466c3e7b4..063fc07badf 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -169,14 +169,11 @@ /mob/living/simple_animal/bot/Destroy() if(paicard) ejectpai() - qdel(Radio) - Radio = null - qdel(access_card) - access_card = null + QDEL_NULL(Radio) + QDEL_NULL(access_card) if(radio_controller && bot_filter) radio_controller.remove_object(bot_core, control_freq) - qdel(bot_core) - bot_core = null + QDEL_NULL(bot_core) return ..() /mob/living/simple_animal/bot/death(gibbed) @@ -263,7 +260,7 @@ interact(H) else return ..() - + /mob/living/simple_animal/bot/attack_ghost(mob/M) interact(M) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 871c8694725..e95d2409921 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -65,12 +65,8 @@ /mob/living/simple_animal/bot/mulebot/Destroy() unload(0) - if(wires) - qdel(wires) - wires = null - if(cell) - qdel(cell) - cell = null + QDEL_NULL(wires) + QDEL_NULL(cell) return ..() /mob/living/simple_animal/bot/mulebot/proc/set_suffix(suffix) diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 76577327b61..904762d6c27 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -295,8 +295,7 @@ queen = new(src) /obj/item/queen_bee/Destroy() - qdel(queen) - queen = null + QDEL_NULL(queen) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index dfb9948a1e3..228f4df9ad6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -108,7 +108,7 @@ Difficulty: Hard ..() /mob/living/simple_animal/hostile/megafauna/hierophant/Destroy() - qdel(spawned_rune) + QDEL_NULL(spawned_rune) . = ..() /mob/living/simple_animal/hostile/megafauna/hierophant/devour(mob/living/L) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index bd916532519..a8102b94b94 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -43,7 +43,7 @@ mouse_opacity = 2 // Easier to click on in melee, they're giant targets anyway /mob/living/simple_animal/hostile/megafauna/Destroy() - qdel(internal_gps) + QDEL_NULL(internal_gps) . = ..() /mob/living/simple_animal/hostile/megafauna/death(gibbed) @@ -77,7 +77,7 @@ OpenFire() else devour(L) - + /mob/living/simple_animal/hostile/megafauna/onShuttleMove() var/turf/oldloc = loc . = ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index aec9d2d0c95..7c951cebbc9 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -96,6 +96,7 @@ if(collar) collar.forceMove(loc) collar = null + master_commander = null simple_animal_list -= src return ..() @@ -303,7 +304,7 @@ /mob/living/simple_animal/proc/attacked_by(obj/item/I, mob/living/user) // Handled in _onclick/click.dm return - + /mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj) if(!Proj) return @@ -662,15 +663,15 @@ . = ..() /mob/living/simple_animal/can_equip(obj/item/I, slot, disable_warning = 0) - // . = ..() // Do not call parent. We do not want animals using their hand slots. - switch(slot) - if(slot_collar) - if(collar) - return 0 - if(!can_collar) - return 0 - if(!istype(I, /obj/item/clothing/accessory/petcollar)) - return 0 + // . = ..() // Do not call parent. We do not want animals using their hand slots. + switch(slot) + if(slot_collar) + if(collar) + return 0 + if(!can_collar) + return 0 + if(!istype(I, /obj/item/clothing/accessory/petcollar)) + return 0 return 1 /mob/living/simple_animal/equip_to_slot(obj/item/W, slot) @@ -692,13 +693,13 @@ name = collar.tagname real_name = collar.tagname regenerate_icons() - -/mob/living/simple_animal/unEquip(obj/item/I, force) - . = ..() - if(!. || !I) - return - - if(I == collar) + +/mob/living/simple_animal/unEquip(obj/item/I, force) + . = ..() + if(!. || !I) + return + + if(I == collar) collar = null regenerate_icons() diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 4a58410aea2..e52854621bd 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -444,8 +444,7 @@ if(assailant.client) assailant.client.screen -= hud assailant = null - qdel(hud) - hud = null + QDEL_NULL(hud) return ..() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 6926e08af52..69bba669de0 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -41,8 +41,8 @@ else if(eyes) //If they're not, check to see if their eyes got one of them there colour matrices. Will be null if eyes are robotic/the mob isn't colourblind and they have no default colour matrix. return eyes.get_colourmatrix() -/proc/isloyal(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them - for(var/obj/item/weapon/implant/loyalty/L in A) +/proc/ismindshielded(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them + for(var/obj/item/weapon/implant/mindshield/L in A) if(L && L.implanted) return 1 return 0 diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 3451d3bf5e7..ea80c4def16 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -559,10 +559,67 @@ /datum/sprite_accessory/hair/unathi species_allowed = list("Unathi") glasses_over = 1 + icon = 'icons/mob/body_accessory.dmi' -/datum/sprite_accessory/hair/unathi/una_horns - name = "Unathi Horns" - icon_state = "soghun_horns" +/datum/sprite_accessory/hair/unathi/una_side_frills + icon = 'icons/mob/human_face.dmi' + name = "Unathi Side Frills" + icon_state = "unathi_sidefrills" + secondary_theme = "webbing" + +/datum/sprite_accessory/hair/unathi/una_frills_dorsal + icon = 'icons/mob/human_face.dmi' + name = "Dorsal Frills" + icon_state = "unathi_dorsalfrills" + secondary_theme = "webbing" + +/datum/sprite_accessory/hair/unathi/simple + name = "Simple Horns" + icon_state = "horns_simple" + +/datum/sprite_accessory/hair/unathi/short + name = "Short Horns" + icon_state = "horns_short" + +/datum/sprite_accessory/hairy/unathi/curled + name = "Curled Horns" + icon_state = "horns_curled" + +/datum/sprite_accessory/hair/unathi/ram + name = "Ram Horns" + icon_state = "horns_ram" + +/datum/sprite_accessory/hair/unathi/double + name = "Double Horns" + icon_state = "horns_drac" + +/datum/sprite_accessory/hair/unathi/lower + name = "Lower Horns" + icon_state = "horns_lower" + +/datum/sprite_accessory/hair/unathi/big + name = "Big" + icon_state = "horns_big" + +/datum/sprite_accessory/hair/unathi/ram2 + name = "Ram alt." + icon_state = "horns_ram2" + +/datum/sprite_accessory/hair/unathi/small + name = "Small" + icon_state = "horns_small" + +/datum/sprite_accessory/hair/unathi/chin + name = "Chin" + icon_state = "horns_chin" + +/datum/sprite_accessory/hair/unathi/adorns + name = "Adorns" + icon_state = "horns_adorns" + +/datum/sprite_accessory/hair/unathi/spikes + name = "Spikes" + icon_state = "horns_spikes" /datum/sprite_accessory/hair/skrell species_allowed = list("Skrell") @@ -747,6 +804,20 @@ icon_state = "braided" secondary_theme = "beads" +/datum/sprite_accessory/hair/vulpkanin/vulp_hair_punkbraided + name = "Punk Braided" + icon_state = "punkbraided" + secondary_theme = "flare" + +/datum/sprite_accessory/hair/vulpkanin/vulp_hair_short2 + name = "Short Alt." + icon_state = "short2" + glasses_over = 1 + +/datum/sprite_accessory/hair/vulpkanin/vulp_hair_rough + name = "Rough-Cropped Mane" + icon_state = "rough" + /datum/sprite_accessory/hair/vox species_allowed = list("Vox") glasses_over = 1 @@ -984,6 +1055,10 @@ name = "Tajara Goatee" icon_state = "facial_goatee" +/datum/sprite_accessory/facial_hair/tajara/taj_goatee_faded + name = "Tajara Faded Goatee" + icon_state = "facial_goatee_faded" + /datum/sprite_accessory/facial_hair/tajara/taj_smallstache name = "Tajara Smallstache" icon_state = "facial_smallstache" @@ -1048,6 +1123,15 @@ name = "Swift" icon_state = "vulp_facial_swift" +/datum/sprite_accessory/facial_hair/vulpkanin/vulp_elder + name = "Elder" + icon_state = "vulp_facial_elder" + secondary_theme = "chin" + +/datum/sprite_accessory/facial_hair/vulpkanin/vulp_slash + name = "Slash" + icon_state = "vulp_facial_slash" + /datum/sprite_accessory/facial_hair/unathi species_allowed = list("Unathi") gender = NEUTER @@ -1055,39 +1139,74 @@ /datum/sprite_accessory/facial_hair/unathi/una_spines_long name = "Long Spines" - icon_state = "soghun_longspines" + icon_state = "unathi_longspines" /datum/sprite_accessory/facial_hair/unathi/una_spines_short name = "Short Spines" - icon_state = "soghun_shortspines" + icon_state = "unathi_shortspines" + +/datum/sprite_accessory/facial_hair/unathi/una_frills_aquaspine + name = "Spiny Aquatic Frills" + icon_state = "unathi_dracfrills" /datum/sprite_accessory/facial_hair/unathi/una_frills_aquatic name = "Aquatic Frills" - icon_state = "soghun_aquaticfrills" + icon_state = "unathi_aquaticfrills" /datum/sprite_accessory/facial_hair/unathi/una_frills_long name = "Long Frills" - icon_state = "soghun_longfrills" + icon_state = "unathi_longfrills" /datum/sprite_accessory/facial_hair/unathi/una_frills_short name = "Short Frills" - icon_state = "soghun_shortfrills" + icon_state = "unathi_shortfrills" + +/datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_aquaspine + name = "Spiny Aquatic Webbed Frills" + icon_state = "unathi_dracfrills" + secondary_theme = "webbing" /datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_aquatic name = "Aquatic Webbed Frills" - icon_state = "soghun_aquaticfrills" + icon_state = "unathi_aquaticfrills" secondary_theme = "webbing" /datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_long name = "Long Webbed Frills" - icon_state = "soghun_longfrills" + icon_state = "unathi_longfrills" secondary_theme = "webbing" /datum/sprite_accessory/facial_hair/unathi/una_frills_webbed_short name = "Short Webbed Frills" - icon_state = "soghun_shortfrills" + icon_state = "unathi_shortfrills" secondary_theme = "webbing" +/datum/sprite_accessory/facial_hair/unathi/una_side_frills + name = "Side Frills" + icon_state = "unathi_sidefrills" + secondary_theme = "webbing" + +/datum/sprite_accessory/facial_hair/unathi/una_frills_dorsal + over_hair = null + name = "Dorsal Frills" + icon_state = "unathi_dorsalfrills" + secondary_theme = "webbing" + +/datum/sprite_accessory/facial_hair/unathi/una_chin_horns + name = "Chin Horns" + icon = 'icons/mob/body_accessory.dmi' + icon_state = "horns_chin" + +/datum/sprite_accessory/facial_hair/unathi/una_horn_adorns + name = "Horn Adorns" + icon = 'icons/mob/body_accessory.dmi' + icon_state = "horns_adorns" + +/datum/sprite_accessory/facial_hair/unathi/una_spikes + name = "Spikes" + icon = 'icons/mob/body_accessory.dmi' + icon_state = "horns_spikes" + //skin styles - WIP //going to have to re-integrate this with surgery //let the icon_state hold an icon preview for now @@ -1649,6 +1768,38 @@ name = "Ram" icon_state = "horns_ram" +/datum/sprite_accessory/head_accessory/unathi/double + name = "Double" + icon_state = "horns_drac" + +/datum/sprite_accessory/head_accessory/unathi/lower + name = "Lower" + icon_state = "horns_lower" + +/datum/sprite_accessory/head_accessory/unathi/big + name = "Big" + icon_state = "horns_big" + +/datum/sprite_accessory/head_accessory/unathi/ram2 + name = "Ram alt." + icon_state = "horns_ram2" + +/datum/sprite_accessory/head_accessory/unathi/small + name = "Small" + icon_state = "horns_small" + +/datum/sprite_accessory/head_accessory/unathi/chin + name = "Chin" + icon_state = "horns_chin" + +/datum/sprite_accessory/head_accessory/unathi/adorns + name = "Adorns" + icon_state = "horns_adorns" + +/datum/sprite_accessory/head_accessory/unathi/spikes + name = "Spikes" + icon_state = "horns_spikes" + /datum/sprite_accessory/head_accessory/tajara species_allowed = list("Tajaran") @@ -1729,6 +1880,20 @@ name = "Vulpkanin Nose" icon_state = "markings_face_nose_vulp" +/datum/sprite_accessory/head_accessory/vulpkanin/vulp_nose2 + name = "Vulpkanin Nose Alt." + icon_state = "markings_face_nose2_vulp" + +/datum/sprite_accessory/head_accessory/vulpkanin/vulp_elder + icon = 'icons/mob/human_face.dmi' + name = "Elder" + icon_state = "vulp_facial_elder" + +/datum/sprite_accessory/head_accessory/vulpkanin/vulp_slash + icon = 'icons/mob/human_face.dmi' + name = "Slash" + icon_state = "vulp_facial_slash" + /datum/sprite_accessory/head_accessory/ipc species_allowed = list("Machine") over_hair = 1 @@ -1749,11 +1914,31 @@ name = "Head Light" icon_state = "light" +/datum/sprite_accessory/head_accessory/ipc/ipc_side_lights + name = "Side Lights" + icon_state = "sidelights" + +/datum/sprite_accessory/head_accessory/ipc/ipc_side_cyber_head + name = "Cyber Pipes" + icon_state = "cyberhead" + +/datum/sprite_accessory/head_accessory/ipc/ipc_side_antlers + name = "Antlers" + icon_state = "antlers" + +/datum/sprite_accessory/head_accessory/ipc/ipc_side_drone_eyes + name = "Drone Eyes" + icon_state = "droneeyes" + +/datum/sprite_accessory/head_accessory/ipc/ipc_crowned + name = "Crowned" + icon_state = "crowned" + /datum/sprite_accessory/head_accessory/kidan icon = 'icons/mob/human_face.dmi' species_allowed = list("Kidan") over_hair = 1 - do_colouration = 0 + do_colouration = 1 /datum/sprite_accessory/head_accessory/kidan/perked_antennae name = "Perked-up Antennae" @@ -1956,6 +2141,10 @@ name = "Vulpkanin Nose" icon_state = "markings_face_nose_vulp" +/datum/sprite_accessory/body_markings/head/vulpkanin/nose2_default_vulp + name = "Vulpkanin Nose Alt." + icon_state = "markings_face_nose2_vulp" + /datum/sprite_accessory/body_markings/head/vulpkanin/muzzle_vulp //Companion marking for Vulpkanin Belly Alt.. name = "Vulpkanin Muzzle" icon_state = "markings_face_full_vulp" diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index a28184fed7a..9e07fc19ddb 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -41,9 +41,7 @@ var/list/global_modular_computers = list() global_modular_computers.Add(src) /obj/machinery/modular_computer/Destroy() - if(cpu) - qdel(cpu) - cpu = null + QDEL_NULL(cpu) return ..() /obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user) diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 15ae12a2859..40860cb58e0 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -23,7 +23,7 @@ var/global/file_uid = 0 if(holder.holder && holder.holder.active_program == src) holder.holder.kill_program(forced = TRUE) holder = null - ..() + return ..() // Returns independent copy of this file. /datum/computer_file/proc/clone(rename = 0) diff --git a/code/modules/modular_computers/file_system/programs/engineering/alarm.dm b/code/modules/modular_computers/file_system/programs/engineering/alarm.dm index db5966314da..254559c2580 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/alarm.dm @@ -16,11 +16,10 @@ AH.register(src, /datum/computer_file/program/alarm_monitor/proc/update_icon) /datum/computer_file/program/alarm_monitor/Destroy() - ..() for(var/datum/alarm_handler/AH in alarm_handlers) AH.unregister(src) - qdel(alarm_handlers) - alarm_handlers = null + QDEL_NULL(alarm_handlers) + return ..() /datum/computer_file/program/alarm_monitor/proc/update_icon() for(var/datum/alarm_handler/AH in alarm_handlers) diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm index 5fd3ca1fc6b..4de202ba8b5 100644 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ b/code/modules/modular_computers/hardware/ai_slot.dm @@ -11,9 +11,7 @@ var/locked = FALSE /obj/item/weapon/computer_hardware/ai_slot/Destroy() - if(stored_card) - qdel(stored_card) - stored_card = null + QDEL_NULL(stored_card) return ..() diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index 5ef74b74f4b..06ecff641c3 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -14,9 +14,7 @@ ..() /obj/item/weapon/computer_hardware/battery/Destroy() - if(battery) - qdel(battery) - battery = null + QDEL_NULL(battery) return ..() /obj/item/weapon/computer_hardware/battery/on_remove(obj/item/device/modular_computer/M, mob/living/user = null) diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index 6d323bb7fca..ff02b69bace 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -11,12 +11,8 @@ var/obj/item/weapon/card/id/stored_card2 = null /obj/item/weapon/computer_hardware/card_slot/Destroy() - if(stored_card) - qdel(stored_card) - stored_card = null - if(stored_card2) - qdel(stored_card2) - stored_card2 = null + QDEL_NULL(stored_card) + QDEL_NULL(stored_card2) return ..() /obj/item/weapon/computer_hardware/card_slot/GetAccess() diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index 701c4e7080b..0865536bc36 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -74,6 +74,5 @@ spark_system.attach(src) /obj/item/weapon/katana/energy/Destroy() - qdel(spark_system) - spark_system = null + QDEL_NULL(spark_system) return ..() \ No newline at end of file diff --git a/code/modules/paperwork/frames.dm b/code/modules/paperwork/frames.dm index 6a2e7d2d8b9..1e16049f4b8 100644 --- a/code/modules/paperwork/frames.dm +++ b/code/modules/paperwork/frames.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/bureaucracy.dmi' usesound = 'sound/items/Deconstruct.ogg' - + var/icon_base var/obj/displayed @@ -198,9 +198,7 @@ verbs |= /obj/structure/sign/picture_frame/proc/tilt /obj/structure/sign/picture_frame/Destroy() - if(frame) - qdel(frame) - frame = null + QDEL_NULL(frame) return ..() /obj/structure/sign/picture_frame/update_icon() diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 11faf20a703..a9e232560fc 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -30,6 +30,7 @@ w_class = 2 burn_state = FLAMMABLE burntime = 5 + var/blueprints = 0 // Does this have the blueprints? var/icon/img //Big photo image var/scribble //Scribble on the back. var/icon/tiny @@ -151,6 +152,7 @@ var/pictures_max = 10 var/pictures_left = 10 var/on = 1 + var/blueprints = 0 var/icon_on = "camera" var/icon_off = "camera_off" var/size = 3 @@ -253,6 +255,8 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s var/atom/A = sorted[i] if(A) var/icon/img = getFlatIcon(A)//build_composite_icon(A) + if(istype(A, /obj/item/areaeditor/blueprints)) + blueprints = 1 // If what we got back is actually a picture, draw it. if(istype(img, /icon)) @@ -351,7 +355,7 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s y_c-- x_c = x_c - size - var/datum/picture/P = createpicture(target, user, turfs, mobs, flag) + var/datum/picture/P = createpicture(target, user, turfs, mobs, flag, blueprints) printpicture(user, P) /obj/item/device/camera/proc/createpicture(atom/target, mob/user, list/turfs, mobs, flag) @@ -388,6 +392,10 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s Photo.loc = user.loc if(!user.get_inactive_hand()) user.put_in_inactive_hand(Photo) + + if(blueprints) + Photo.blueprints = 1 + blueprints = 0 Photo.construct(P) /obj/item/weapon/photo/proc/construct(var/datum/picture/P) @@ -409,6 +417,7 @@ var/list/SpookyGhosts = list("ghost","shade","shade2","ghost-narsie","horror","s p.name = name p.desc = desc p.scribble = scribble + p.blueprints = blueprints return p diff --git a/code/modules/pda/PDA.dm b/code/modules/pda/PDA.dm index d8b959e6225..966a418e5ad 100755 --- a/code/modules/pda/PDA.dm +++ b/code/modules/pda/PDA.dm @@ -440,7 +440,7 @@ var/global/list/obj/item/device/pda/PDAs = list() scanmode.scan_atom(A, user) /obj/item/device/pda/proc/explode() //This needs tuning. - if(!detonate) + if(!detonate) return var/turf/T = get_turf(src.loc) @@ -467,9 +467,7 @@ var/global/list/obj/item/device/pda/PDAs = list() for(var/A in programs) qdel(A) programs.Cut() - if(cartridge) - qdel(cartridge) - cartridge = null + QDEL_NULL(cartridge) return ..() // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index 30d26607113..0fa2c10c88e 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -24,9 +24,7 @@ ..() /obj/item/weapon/cartridge/Destroy() - if(radio) - qdel(radio) - radio = null + QDEL_NULL(radio) for(var/A in programs) qdel(A) programs.Cut() diff --git a/code/modules/pda/chatroom.dm b/code/modules/pda/chatroom.dm index af03356f01f..de6f434a7dd 100644 --- a/code/modules/pda/chatroom.dm +++ b/code/modules/pda/chatroom.dm @@ -78,6 +78,7 @@ var/list/chatrooms = list(new /datum/chatroom("General Discussion")) ch.users -= src if(src in ch.invites) ch.invites -= src + return ..() /datum/data/pda/app/chatroom/start() . = ..() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 0c22b76cd2e..03a84d161e5 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -90,7 +90,6 @@ var/update_overlay = -1 var/global/status_overlays = 0 var/updating_icon = 0 - var/standard_max_charge var/datum/wires/apc/wires = null //var/debug = 0 var/global/list/status_overlays_lock @@ -142,9 +141,6 @@ apcs += src apcs = sortAtom(apcs) wires = new(src) - var/tmp/obj/item/weapon/stock_parts/cell/tmp_cell = new - standard_max_charge = tmp_cell.maxcharge - qdel(tmp_cell) // offset 24 pixels in direction of dir // this allows the APC to be embedded in a wall, yet still inside an area @@ -178,11 +174,8 @@ area.power_change() if(occupier) malfvacate(1) - qdel(wires) - wires = null - if(cell) - qdel(cell) // qdel - cell = null + QDEL_NULL(wires) + QDEL_NULL(cell) if(terminal) disconnect_terminal() area.apc -= src @@ -201,7 +194,7 @@ if(cell_type) src.cell = new/obj/item/weapon/stock_parts/cell(src) cell.maxcharge = cell_type // cell_type is maximum charge (old default was 1000 or 2500 (values one and two respectively) - cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value) + cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value) var/area/A = get_area(src) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 164b9cb26db..942ed2ac98a 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -5,24 +5,25 @@ return 100.0*charge/maxcharge // use power from a cell -/obj/item/weapon/stock_parts/cell/proc/use(var/amount) +/obj/item/weapon/stock_parts/cell/proc/use(amount) if(rigged && amount > 0) explode() return 0 - - if(charge < amount) return 0 + if(charge < amount) + return 0 charge = (charge - amount) return 1 // recharge the cell -/obj/item/weapon/stock_parts/cell/proc/give(var/amount) +/obj/item/weapon/stock_parts/cell/proc/give(amount) if(rigged && amount > 0) explode() return 0 - - if(maxcharge < amount) return 0 + if(maxcharge < amount) + return 0 var/power_used = min(maxcharge-charge,amount) - if(crit_fail) return 0 + if(crit_fail) + return 0 if(!prob(reliability)) minor_fault++ if(prob(minor_fault)) @@ -31,7 +32,6 @@ charge += power_used return power_used - /obj/item/weapon/stock_parts/cell/examine(mob/user) if(..(user, 1)) if(maxcharge <= 2500) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 5b015fcf58d..08b848657b0 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -52,8 +52,7 @@ var/const/GRAV_NEEDS_WRENCH = 3 /obj/machinery/gravity_generator/part/Destroy() set_broken() - if(main_part) - qdel(main_part) + QDEL_NULL(main_part) return ..() // diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 4593ed69072..d0bdc9c6490 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -30,8 +30,7 @@ /obj/machinery/particle_accelerator/control_box/Destroy() if(active) toggle_power() - qdel(wires) - wires = null + QDEL_NULL(wires) return ..() /obj/machinery/particle_accelerator/control_box/attack_ghost(user as mob) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index c1a202fa134..344971d42a2 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -72,9 +72,7 @@ /obj/machinery/power/supermatter_shard/Destroy() investigate_log("has been destroyed.", "supermatter") - if(radio) - qdel(radio) - radio = null + QDEL_NULL(radio) poi_list.Remove(src) return ..() diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index d0b4488d557..cdb0e063184 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -3,7 +3,7 @@ desc = "The part of the gun that makes the laser go pew" caliber = "energy" projectile_type = /obj/item/projectile/energy - var/e_cost = 1000 //The amount of energy a cell needs to expend to create this shot. + var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot. var/select_name = "energy" fire_sound = 'sound/weapons/Laser.ogg' @@ -13,10 +13,11 @@ /obj/item/ammo_casing/energy/lasergun projectile_type = /obj/item/projectile/beam/laser - e_cost = 830 + e_cost = 83 select_name = "kill" /obj/item/ammo_casing/energy/laser/hos //allows balancing of HoS and blueshit guns seperately from other energy weapons + e_cost = 100 /obj/item/ammo_casing/energy/laser/practice projectile_type = /obj/item/projectile/beam/practice @@ -35,13 +36,13 @@ /obj/item/ammo_casing/energy/laser/pulse projectile_type = /obj/item/projectile/beam/pulse - e_cost = 2000 + e_cost = 200 select_name = "DESTROY" fire_sound = 'sound/weapons/pulse.ogg' /obj/item/ammo_casing/energy/laser/scatter/pulse projectile_type = /obj/item/projectile/beam/pulse - e_cost = 2000 + e_cost = 200 select_name = "ANNIHILATE" fire_sound = 'sound/weapons/pulse.ogg' @@ -55,26 +56,27 @@ /obj/item/ammo_casing/energy/xray projectile_type = /obj/item/projectile/beam/xray - e_cost = 500 + e_cost = 50 fire_sound = 'sound/weapons/laser3.ogg' /obj/item/ammo_casing/energy/immolator projectile_type = /obj/item/projectile/beam/immolator fire_sound = 'sound/weapons/laser3.ogg' - e_cost = 1250 + e_cost = 125 /obj/item/ammo_casing/energy/electrode projectile_type = /obj/item/projectile/energy/electrode select_name = "stun" fire_sound = 'sound/weapons/taser.ogg' - e_cost = 2000 + e_cost = 200 delay = 15 /obj/item/ammo_casing/energy/electrode/gun fire_sound = 'sound/weapons/gunshot.ogg' - e_cost = 1000 + e_cost = 100 /obj/item/ammo_casing/energy/electrode/hos //allows balancing of HoS and blueshit guns seperately from other energy weapons + e_cost = 200 /obj/item/ammo_casing/energy/ion projectile_type = /obj/item/projectile/ion @@ -121,7 +123,7 @@ /obj/item/ammo_casing/energy/disabler projectile_type = /obj/item/projectile/beam/disabler select_name = "disable" - e_cost = 500 + e_cost = 50 fire_sound = 'sound/weapons/taser2.ogg' /obj/item/ammo_casing/energy/plasma @@ -129,12 +131,12 @@ select_name = "plasma burst" fire_sound = 'sound/weapons/plasma_cutter.ogg' delay = 15 - e_cost = 250 + e_cost = 25 /obj/item/ammo_casing/energy/plasma/adv projectile_type = /obj/item/projectile/plasma/adv delay = 10 - e_cost = 100 + e_cost = 10 /obj/item/ammo_casing/energy/wormhole projectile_type = /obj/item/projectile/beam/wormhole @@ -153,7 +155,7 @@ /obj/item/ammo_casing/energy/bolt projectile_type = /obj/item/projectile/energy/bolt select_name = "bolt" - e_cost = 5000 + e_cost = 500 fire_sound = 'sound/weapons/Genhit.ogg' /obj/item/ammo_casing/energy/bolt/large @@ -163,7 +165,7 @@ /obj/item/ammo_casing/energy/dart projectile_type = /obj/item/projectile/energy/dart fire_sound = 'sound/weapons/Genhit.ogg' - e_cost = 5000 + e_cost = 500 select_name = "toxic dart" /obj/item/ammo_casing/energy/instakill @@ -187,7 +189,7 @@ /obj/item/ammo_casing/energy/shock_revolver fire_sound = 'sound/magic/lightningbolt.ogg' - e_cost = 2000 + e_cost = 200 select_name = "lightning beam" projectile_type = /obj/item/projectile/energy/shock_revolver @@ -210,7 +212,7 @@ /obj/item/ammo_casing/energy/teleport projectile_type = /obj/item/projectile/energy/teleport fire_sound = 'sound/weapons/wave.ogg' - e_cost = 1250 + e_cost = 250 select_name = "teleport beam" var/teleport_target diff --git a/code/modules/projectiles/ammunition/special.dm b/code/modules/projectiles/ammunition/special.dm index d5c7df48200..1af728100f8 100644 --- a/code/modules/projectiles/ammunition/special.dm +++ b/code/modules/projectiles/ammunition/special.dm @@ -26,7 +26,7 @@ /obj/item/ammo_casing/magic/chaos projectile_type = /obj/item/projectile/magic - + /obj/item/ammo_casing/magic/spellblade projectile_type = /obj/item/projectile/magic/spellblade @@ -49,4 +49,4 @@ projectile_type = /obj/item/projectile/bullet/midbullet3 select_name = "spraydown" fire_sound = 'sound/weapons/gunshot_smg.ogg' - e_cost = 200 + e_cost = 20 diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 4e5bbce386c..7b848dca5c7 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -34,7 +34,7 @@ if(selfcharge) processing_objects.Add(src) update_icon() - + /obj/item/weapon/gun/energy/proc/update_ammo_types() var/obj/item/ammo_casing/energy/shot for(var/i = 1, i <= ammo_type.len, i++) @@ -61,9 +61,9 @@ var/obj/item/ammo_casing/energy/E = ammo_type[select] if(use_external_power) var/obj/item/weapon/stock_parts/cell/external = get_external_power_supply() - if(!external || !external.use((E.e_cost)/10)) //Take power from the borg... + if(!external || !external.use(E.e_cost)) //Take power from the borg... return //Note, uses /10 because of shitty mods to the cell system - power_supply.give(1000) //... to recharge the shot + power_supply.give(100) //... to recharge the shot update_icon() /obj/item/weapon/gun/energy/attack_self(mob/living/user as mob) @@ -176,7 +176,7 @@ var/mob/living/silicon/robot/R = loc if(R && R.cell) var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot - if(R.cell.use(shot.e_cost/10)) //Take power from the borg... //Divided by 10 because cells and charge costs are fucked. + if(R.cell.use(shot.e_cost)) //Take power from the borg... power_supply.give(shot.e_cost) //... to recharge the shot /obj/item/weapon/gun/energy/proc/get_external_power_supply() diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index fb811c19d78..bdc4126a25c 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -94,7 +94,7 @@ empty() /obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() - power_supply.use(5000) + power_supply.use(500) update_icon() /obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload() @@ -120,7 +120,7 @@ return /obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload() - power_supply.give(5000) + power_supply.give(500) if(!suppressed) playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) else if(isliving(loc)) @@ -144,7 +144,7 @@ /obj/item/ammo_casing/energy/kinetic projectile_type = /obj/item/projectile/kinetic select_name = "kinetic" - e_cost = 5000 + e_cost = 500 fire_sound = 'sound/weapons/Kenetic_accel.ogg' // fine spelling there chap /obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") @@ -181,7 +181,7 @@ /obj/item/projectile/kinetic/pod range = 4 - + /obj/item/projectile/kinetic/pod/regular damage = 50 pressure_decrease = 0.5 diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index ef184bd8d5b..727ebdd7082 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -39,8 +39,8 @@ /obj/item/weapon/gun/energy/gun/mini/New() gun_light = new /obj/item/device/flashlight/seclite(src) ..() - power_supply.maxcharge = 6000 - power_supply.charge = 6000 + power_supply.maxcharge = 600 + power_supply.charge = 600 /obj/item/weapon/gun/energy/gun/mini/update_icon() ..() diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 3131e49c4f2..3595b9c7ea8 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -157,11 +157,11 @@ if(istype(A, /obj/item/stack/sheet/mineral/plasma)) var/obj/item/stack/sheet/S = A S.use(1) - power_supply.give(10000) + power_supply.give(1000) to_chat(user, "You insert [A] in [src], recharging it.") else if(istype(A, /obj/item/weapon/ore/plasma)) qdel(A) - power_supply.give(5000) + power_supply.give(500) to_chat(user, "You insert [A] in [src], recharging it.") else ..() @@ -308,12 +308,10 @@ desc = "A gun that changes the body temperature of its targets." var/temperature = 300 var/target_temperature = 300 - var/e_cost = 1000 origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/temp) selfcharge = 1 - cell_type = /obj/item/weapon/stock_parts/cell var/powercost = "" var/powercostcolor = "" @@ -369,19 +367,19 @@ T.temp = temperature switch(temperature) if(0 to 100) - T.e_cost = 3000 + T.e_cost = 300 powercost = "High" if(100 to 250) - T.e_cost = 2000 + T.e_cost = 200 powercost = "Medium" if(251 to 300) - T.e_cost = 1000 + T.e_cost = 100 powercost = "Low" if(301 to 400) - T.e_cost = 2000 + T.e_cost = 200 powercost = "Medium" if(401 to 1000) - T.e_cost = 3000 + T.e_cost = 300 powercost = "High" switch(powercost) if("High") @@ -471,16 +469,16 @@ /obj/item/weapon/gun/energy/temperature/proc/update_charge() var/charge = power_supply.charge switch(charge) - if(9000 to INFINITY) overlays += "900" - if(8000 to 9000) overlays += "800" - if(7000 to 8000) overlays += "700" - if(6000 to 7000) overlays += "600" - if(5000 to 6000) overlays += "500" - if(4000 to 5000) overlays += "400" - if(3000 to 4000) overlays += "300" - if(2000 to 3000) overlays += "200" - if(1000 to 2002) overlays += "100" - if(-INFINITY to 1000) overlays += "0" + if(900 to INFINITY) overlays += "900" + if(800 to 900) overlays += "800" + if(700 to 800) overlays += "700" + if(600 to 700) overlays += "600" + if(500 to 600) overlays += "500" + if(400 to 500) overlays += "400" + if(300 to 400) overlays += "300" + if(200 to 300) overlays += "200" + if(100 to 202) overlays += "100" + if(-INFINITY to 100) overlays += "0" /obj/item/weapon/gun/energy/mimicgun name = "mimic gun" diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 9728a9442e1..ea92cb06449 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -5,23 +5,12 @@ item_state = null //so the human update icon uses the icon_state instead. ammo_type = list(/obj/item/ammo_casing/energy/electrode) ammo_x_offset = 3 - cell_type = /obj/item/weapon/stock_parts/cell/crap /obj/item/weapon/gun/energy/taser/mounted name = "mounted taser gun" selfcharge = 1 use_external_power = 1 -/obj/item/weapon/gun/energy/taser/cyborg - name = "taser gun" - desc = "A small, low capacity gun used for non-lethal takedowns." - icon_state = "taser" - cell_type = /obj/item/weapon/stock_parts/cell/secborg - -/obj/item/weapon/gun/energy/disabler/cyborg/newshot() - ..() - robocharge() - /obj/item/weapon/gun/energy/shock_revolver name = "tesla revolver" desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." diff --git a/code/modules/projectiles/guns/energy/telegun.dm b/code/modules/projectiles/guns/energy/telegun.dm index 7b94698f0e9..2e66b00643f 100644 --- a/code/modules/projectiles/guns/energy/telegun.dm +++ b/code/modules/projectiles/guns/energy/telegun.dm @@ -6,7 +6,6 @@ icon_state = "telegun" item_state = "ionrifle" origin_tech = "combat=6;materials=7;powerstorage=5;bluespace=5;syndicate=4" - cell_type = /obj/item/weapon/stock_parts/cell/crap ammo_type = list(/obj/item/ammo_casing/energy/teleport) shaded_charge = 1 var/teleport_target = null diff --git a/code/modules/projectiles/guns/throw.dm b/code/modules/projectiles/guns/throw.dm index d1bcda59067..7b1fa350fc7 100644 --- a/code/modules/projectiles/guns/throw.dm +++ b/code/modules/projectiles/guns/throw.dm @@ -36,8 +36,7 @@ notify_ammo_count(user) /obj/item/weapon/gun/throw/Destroy() - qdel(to_launch) - to_launch = null + QDEL_NULL(to_launch) for(var/atom/A in loaded_projectiles) qdel(A) loaded_projectiles = null diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 0e8fee1926c..2714b8d1b16 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -93,9 +93,7 @@ return /obj/machinery/reagentgrinder/Destroy() - if(beaker) - qdel(beaker) - beaker = null + QDEL_NULL(beaker) return ..() /obj/machinery/reagentgrinder/ex_act(severity) diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 286af5d4863..70d2a9f76c0 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -48,8 +48,7 @@ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O - if(!cube.wrapped) - cube.Expand() + cube.Expand() // Dehydrated carp if(istype(O, /obj/item/toy/carpplushie/dehy_carp)) var/obj/item/toy/carpplushie/dehy_carp/dehy = O diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index f050f6708e7..11abc89a343 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -78,9 +78,7 @@ var/accepts_rig = 1 /obj/structure/reagent_dispensers/fueltank/Destroy() - if(rig) - qdel(rig) - rig = null + QDEL_NULL(rig) return ..() /obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/P) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index c242759ed3c..961edb70450 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -500,7 +500,7 @@ var/hasmob = 0 //If it contains a mob Destroy() - qdel(gas) + QDEL_NULL(gas) active = 0 return ..() @@ -1146,11 +1146,11 @@ update() return - + /obj/structure/disposalpipe/trunk/Destroy() if(istype(linked, /obj/structure/disposaloutlet)) var/obj/structure/disposaloutlet/O = linked - O.expel() + O.expel(animation = 0) else if(istype(linked, /obj/machinery/disposal)) var/obj/machinery/disposal/D = linked if(D.trunk == src) @@ -1207,7 +1207,7 @@ playsound(loc, W.usesound, 100, 1) to_chat(user, "Slicing the disposal pipe.") if(do_after(user, 30 * W.toolspeed, target = src)) - if(!W.isOn()) + if(!W.isOn()) return welded() else @@ -1290,12 +1290,13 @@ // expel the contents of the holder object, then delete it // called when the holder exits the outlet - proc/expel(var/obj/structure/disposalholder/H) + proc/expel(var/obj/structure/disposalholder/H, animation = 1) - flick("outlet-open", src) - playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) - sleep(20) //wait until correct animation frame - playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) + if(animation) + flick("outlet-open", src) + playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0) + sleep(20) //wait until correct animation frame + playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0) if(H) for(var/atom/movable/AM in H) @@ -1308,7 +1309,6 @@ H.vent_gas(src.loc) qdel(H) - return attackby(var/obj/item/I, var/mob/user, params) if(!I || !user) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 104036d5c0a..a8d3902e6f3 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -429,7 +429,5 @@ desc += " The package is not sealed." /obj/item/shippingPackage/Destroy() - if(wrapped) - qdel(wrapped) - wrapped = null + QDEL_NULL(wrapped) return ..() \ No newline at end of file diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 280fea0b66c..29370cbc04b 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -608,6 +608,14 @@ build_path = /obj/item/weapon/rcd category = list("hacked", "Construction") +/datum/design/rcl + name = "Rapid Cable Layer" + id = "rcl" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000) + build_path = /obj/item/weapon/twohanded/rcl + category = list("hacked", "Construction") + /datum/design/electropack name = "Electropack" id = "electropack" diff --git a/code/modules/research/designs/equipment_designs.dm b/code/modules/research/designs/equipment_designs.dm index e63211dc35b..9792f007c55 100644 --- a/code/modules/research/designs/equipment_designs.dm +++ b/code/modules/research/designs/equipment_designs.dm @@ -190,7 +190,7 @@ materials = list("$metal" = 200, "$glass" = 200, "$uranium" = 1000, "$plasma" = 200) build_path = /obj/item/clothing/glasses/hud/hydroponic/night category = list("Equipment") - + /datum/design/handdrill name = "Hand Drill" desc = "A small electric hand drill with an interchangable screwdriver and bolt bit" @@ -210,7 +210,7 @@ build_type = PROTOLATHE materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_DIAMOND = 1000) category = list("Equipment") - + /datum/design/alienwrench name = "Alien Wrench" desc = "An advanced wrench obtained through Abductor technology." diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index 15e2fb66056..4b00be0b932 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -167,32 +167,32 @@ build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting category = list("Exosuit Modules") -/datum/design/recitence_main - name = "Exosuit Module (\"Recitence\" Central Control module)" - desc = "Allows for the construction of a \"Recitence\" Central Control module." - id = "recitence_main" +/datum/design/reticence_main + name = "Exosuit Module (\"Reticence\" Central Control module)" + desc = "Allows for the construction of a \"Reticence\" Central Control module." + id = "reticence_main" req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/recitence/main + build_path = /obj/item/weapon/circuitboard/mecha/reticence/main category = list("Exosuit Modules") -/datum/design/recitence_peri - name = "Exosuit Module (\"Recitence\" Peripherals Control module)" - desc = "Allows for the construction of a \"Recitence\" Peripheral Control module." - id = "recitence_peri" +/datum/design/reticence_peri + name = "Exosuit Module (\"Reticence\" Peripherals Control module)" + desc = "Allows for the construction of a \"Reticence\" Peripheral Control module." + id = "reticence_peri" req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/recitence/peripherals + build_path = /obj/item/weapon/circuitboard/mecha/reticence/peripherals category = list("Exosuit Modules") -/datum/design/recitence_targ - name = "Exosuit Module (\"Recitence\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"Recitence\" Weapons & Targeting Control module." - id = "recitence_targ" +/datum/design/reticence_targ + name = "Exosuit Module (\"Reticence\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"Reticence\" Weapons & Targeting Control module." + id = "reticence_targ" req_tech = list("programming" = 3) build_type = IMPRINTER materials = list(MAT_GLASS = 1000, "sacid" = 20) - build_path = /obj/item/weapon/circuitboard/mecha/recitence/targeting + build_path = /obj/item/weapon/circuitboard/mecha/reticence/targeting category = list("Exosuit Modules") \ No newline at end of file diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 779a0809577..876a4352fe9 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -459,69 +459,69 @@ construction_time = 200 category = list("H.O.N.K") -//Recitence -/datum/design/recitence_chassis - name = "Exosuit Chassis (\"Recitence\")" - id = "recitence_chassis" +//Reticence +/datum/design/reticence_chassis + name = "Exosuit Chassis (\"Reticence\")" + id = "reticence_chassis" build_type = MECHFAB - build_path = /obj/item/mecha_parts/chassis/recitence + build_path = /obj/item/mecha_parts/chassis/reticence materials = list(MAT_METAL=20000) construction_time = 100 - category = list("Recitence") + category = list("Reticence") -/datum/design/recitence_torso - name = "Exosuit Torso (\"Recitence\")" - id = "recitence_torso" +/datum/design/reticence_torso + name = "Exosuit Torso (\"Reticence\")" + id = "reticence_torso" build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/recitence_torso + build_path = /obj/item/mecha_parts/part/reticence_torso materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_TRANQUILLITE=10000) construction_time = 300 - category = list("Recitence") + category = list("Reticence") -/datum/design/recitence_head - name = "Exosuit Head (\"Recitence\")" - id = "recitence_head" +/datum/design/reticence_head + name = "Exosuit Head (\"Reticence\")" + id = "reticence_head" build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/recitence_head + build_path = /obj/item/mecha_parts/part/reticence_head materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_TRANQUILLITE=5000) construction_time = 200 - category = list("Recitence") + category = list("Reticence") -/datum/design/recitence_left_arm - name = "Exosuit Left Arm (\"Recitence\")" - id = "recitence_left_arm" +/datum/design/reticence_left_arm + name = "Exosuit Left Arm (\"Reticence\")" + id = "reticence_left_arm" build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/recitence_left_arm + build_path = /obj/item/mecha_parts/part/reticence_left_arm materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000) construction_time = 200 - category = list("Recitence") + category = list("Reticence") -/datum/design/recitence_right_arm - name = "Exosuit Right Arm (\"Recitence\")" - id = "recitence_right_arm" +/datum/design/reticence_right_arm + name = "Exosuit Right Arm (\"Reticence\")" + id = "reticence_right_arm" build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/recitence_right_arm + build_path = /obj/item/mecha_parts/part/reticence_right_arm materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000) construction_time = 200 - category = list("Recitence") + category = list("Reticence") -/datum/design/recitence_left_leg - name = "Exosuit Left Leg (\"Recitence\")" - id = "recitence_left_leg" +/datum/design/reticence_left_leg + name = "Exosuit Left Leg (\"Reticence\")" + id = "reticence_left_leg" build_type = MECHFAB - build_path =/obj/item/mecha_parts/part/recitence_left_leg + build_path =/obj/item/mecha_parts/part/reticence_left_leg materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000) construction_time = 200 - category = list("Recitence") + category = list("Reticence") -/datum/design/recitence_right_leg - name = "Exosuit Right Leg (\"Recitence\")" - id = "recitence_right_leg" +/datum/design/reticence_right_leg + name = "Exosuit Right Leg (\"Reticence\")" + id = "reticence_right_leg" build_type = MECHFAB - build_path = /obj/item/mecha_parts/part/recitence_right_leg + build_path = /obj/item/mecha_parts/part/reticence_right_leg materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000) construction_time = 200 - category = list("Recitence") + category = list("Reticence") //Phazon /datum/design/phazon_chassis diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 2084e2a93c4..20093e7771b 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -62,8 +62,7 @@ Note: Must be placed west/left of and R&D console to function. reagents.my_atom = src /obj/machinery/r_n_d/protolathe/Destroy() - qdel(materials) - materials = null + QDEL_NULL(materials) return ..() /obj/machinery/r_n_d/protolathe/RefreshParts() diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 9e0e26a0252..40f20ea4dde 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -77,11 +77,11 @@ else if(istype(O, /obj/item/weapon/storage/bag)) var/obj/item/weapon/storage/P = O var/loaded = 0 - for(var/obj/G in P.contents) - if(istype(G, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)) - loaded = 1 - monkeys++ - qdel(G) + for(var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/MC in P.contents) + loaded = 1 + monkeys++ + P.remove_from_storage(MC) + qdel(MC) if(loaded) to_chat(user, "You fill [src] with the monkey cubes stored in [O]. [src] now has [monkeys] monkey cubes stored.") return diff --git a/code/modules/spacepods/construction.dm b/code/modules/spacepods/construction.dm index 0426b940d0b..a997a23f585 100644 --- a/code/modules/spacepods/construction.dm +++ b/code/modules/spacepods/construction.dm @@ -19,6 +19,10 @@ dir = EAST +/obj/structure/spacepod_frame/Destroy() + QDEL_NULL(construct) + return ..() + /obj/structure/spacepod_frame/attackby(obj/item/W as obj, mob/user as mob, params) if(!construct || !construct.action(W, user)) ..() diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index 0f7373c2d19..0881c821431 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -124,22 +124,14 @@ /obj/spacepod/Destroy() if(equipment_system.cargo_system) equipment_system.cargo_system.removed(null) - qdel(equipment_system) - equipment_system = null - qdel(cargo_hold) - cargo_hold = 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 + QDEL_NULL(equipment_system) + QDEL_NULL(cargo_hold) + QDEL_NULL(battery) + QDEL_NULL(cabin_air) + QDEL_NULL(internal_tank) + QDEL_NULL(pr_int_temp_processor) + QDEL_NULL(pr_give_air) + QDEL_NULL(ion_trail) occupant_sanity_check() if(pilot) pilot.forceMove(get_turf(src)) @@ -275,7 +267,7 @@ cargo_hold.emp_act(severity) if(battery && battery.charge > 0) - battery.use((battery.charge / 2) / severity) + battery.use((battery.charge/3)/(severity*2)) deal_damage(80 / severity) if(empcounter < (40 / severity)) empcounter = 40 / severity diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index b3bb3f61e07..44d7a7f1315 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -150,8 +150,7 @@ var/obj/item/device/mmi/stored_mmi /obj/item/organ/internal/brain/mmi_holder/Destroy() - if(stored_mmi) - qdel(stored_mmi) + QDEL_NULL(stored_mmi) return ..() /obj/item/organ/internal/brain/mmi_holder/insert(var/mob/living/target,special = 0) diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index ed330821f06..f8a177e413d 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -128,7 +128,7 @@ var/rand_y = 0 var/emagged = 0 var/teleporting = 0 - var/chargecost = 1500 + var/chargecost = 1000 /obj/item/weapon/rcs/New() ..() @@ -140,9 +140,7 @@ to_chat(user, "There are [round(rcell.charge/chargecost)] charge\s left.") /obj/item/weapon/rcs/Destroy() - if(rcell) - qdel(rcell) - rcell = null + QDEL_NULL(rcell) return ..() /obj/item/weapon/rcs/attack_self(mob/user) diff --git a/config/example/custom_sprites.txt b/config/example/custom_sprites.txt index db3930a4ae2..471764270d4 100644 --- a/config/example/custom_sprites.txt +++ b/config/example/custom_sprites.txt @@ -1 +1,5 @@ -ckey-state \ No newline at end of file +Each entry should be composed of 2 parts, divided by a colon (:) with no spaces, in order to work. Failure to do so will result in that entry being disregarded by the code. +- The first part should be either "cyborg", "ai", "hologram", "pai", or "drone". This tells the code what type of custom sprite this entry is for. The "ai" option is for AI core displays, while "hologram" is for AI hologram projections. +- The second part should be the ckey of the player this entry is for. This tells the code who it works for and also is used to retrieve the proper sprite for them to use. + +example:example \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 47986c6290d..2c6921bdff1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,108 @@ -->
+

11 April 2017

+

FalseIncarnate updated:

+ + +

09 April 2017

+

Fox McCloud updated:

+ +

Purpose2 updated:

+ + +

06 April 2017

+

Fox McCloud updated:

+ +

davipatury updated:

+ + +

05 April 2017

+

KasparoVy updated:

+ +

Purpose2 updated:

+ +

Twinmold93 updated:

+ + +

04 April 2017

+

FalseIncarnate updated:

+ + +

03 April 2017

+

Kyep updated:

+ + +

02 April 2017

+

KasparoVy updated:

+ +

Kyep updated:

+ +

31 March 2017

Krausus updated: